我们都看过有关项目失败的统计信息,也可能亲自遭遇过失败。大多数软件项目都逃脱不了失败的命运。思考一下,我们会发现导致项目失败的方式有(显然这个列表并不详尽!):
工作方式上的:
如果我们把这个问题抽象到一个高层次的视图,可以发现理解问题并形成解决方案是有困难的。
不过这个视图过于简化。从问题得出解决方案,我们不应该把这个过程看成是信息的单向流动,也绝不能把它看成是一次性、瀑布式的过程。这种做法我们先前都见过,它的进展并不顺利。
那来更新一下视图,我们发现问题和解决方案之间互有信息流,而且需要迭代。
现在的认知已经清楚一些了,不过它仍然很简单。让我们更进一层。我们都需要认识到,开发是一项团队活动。我们会有多个利益相关者,负责设计、开发、部署和运营的人也不少。
这样我们对这种情形有了更为真实的认识。不过值得思考的空间还是很大。虽然我们力求有一个本地协作的团队,但事实上我们的工作是分布式、网络化的。
总结一下这个过程,会发现项目的成功受限于我们的如下能力:
1. 理解
- a. 我们了解问题领域么?
- b. 我们是否通晓解决方案领域?
- c. 我们知不知道两个领域之间该怎样转换?
2. 沟通
- a. 利益相关者能不能把需求传递给确定解决方案的那些人?
- b. 确定解决方案的人在彼此沟通时能不能把解决方案的细节描述清楚?
- c. 确定解决方案的人能把挑战和替代方案准确地告诉利益相关者么?
此外,还要认识到一个棘手的问题,就是我们需要处理地理和时间的问题(比如工作地点和时区)。
解决这些问题的方法有很多,它们也能增加项目成功的胜算。但我们应该从哪里开始呢?从敏捷的一些基本理念(宣言、原则和部分常识)入手是个不错的主意。
与其把钱砸在一堆工具上(我敢肯定这种投入非常可观!),并试图采用命令方式和全方位的流程,还不如让我们用不同的方法。让我们更重视人、沟通、互动,来应对变化、交付软件。怎么才能用这种方法给人们提供最好的支持呢?
一种常被忽视、低估或误解的关键技术是建模的使用——尤其是我们开始采用敏捷方法之后。在反对重量级的流程和以工具为中心的开发过程时,建模也受到了牵连。让我们花几分钟时间来澄清一下……
我们先统一一下对建模的定义。简单说来,建模是对现实的简化。就是这样,不过如此。它并不意味着要用特定的符号、工具和流程。我们只是想研究复杂的东西,让其中的一些部分易于理解。正如他们所说,有时候你是见木不见林。不必要的细节反而会让情况更加难以理解。最好还是隐藏那些不必要的细节,只专注于具体情况的重要方面。
如果对建模的定义达成一致了,那我们就深入一步,考虑下敏捷建模吧。利用敏捷建模,我们可以用一种敏捷的方法去借助模型进行理解和沟通。很抱歉在这里进行了循环定义,但这很容易让我们提出问题:“使用模型的时候,我们怎么采用敏捷方法?”
和一般的敏捷开发一样,我们用一套价值观、原则和实践来进行指导,以便尽可能地敏捷。敏捷建模方法的重点有:
- 敏捷建模遵循敏捷宣言和原则。正因为如此,敏捷建模可以是一种实践,你可以把它添加到你的敏捷工具箱里。
- 模型能用来沟通和理解。
- 我们力争用简单的工具创建简单的模型。拥抱简单。
- 我们知道需求是变化的,因此我们在创建模型的时候要拥抱变化。
- 我们的重点是交付软件,而不是交付模型。模型能带来价值的时候,我们就使用它们。如果模型没有价值、不能加速软件的交付,那我们就不创建它们。
- 我们只保留需要的模型。如果模型完成了它的使命,我们就可以把它扔掉。这能让我们轻装上阵,而不会陷入繁忙的工作。
- 我们使用多种模型。我们使用模型时会考虑不同的角度和抽象层次,还有不同的读者。对于我们创建出来的所有模型,我们都知道它的读者是谁、要达成什么目标。要是我们还没理解目标,我们就不会创建模型。
- 根据具体情况、读者和目标的不同,我们会结合着用非正式和正式的模型。比如说,一个模型可以由多个简单形状组成,用来说明系统的隐喻,也可以用UML的类图。
总结
我们创建软件解决方案时,建模有助于我们进行沟通和理解。因为在交付软件解决方案的时候,沟通和理解是最关键的两个环节,所以不应该忽略建模这一有价值的工具。
消除对建模的误解吧,把它融汇到你的敏捷工作当中。敏捷建模遵循敏捷价值观和原则,应该成为敏捷工具箱里的实践之一。敏捷建模成为工具箱的一员后,会提高项目成功的胜算!
在这个系列的第二部分,让我们一起更深入地研究一下敏捷建模的价值观、原则和实践吧。
资源
AgileModeling.com:Scott Ambler创建、维护的敏捷建模主页,里面的资源又好又详细。
敏捷建模的要点: 这个工作坊主要提供敏捷建模的基本技能。
规范敏捷交付(Disciplined Agile Delivery):提供敏捷交付规范方法的社区网站。
关于作者
Lee Ackerman是The Emphasys Group的产品副总裁和CTO。Lee多年来主要调查、评估新理念,设计、开发解决方案,其他人做这些事情的时候他也会伸出援手。他目前的工作重点是帮助一些组织,让他们借助自动化、重用和敏捷最佳实践去提升交付软件的能力。
[1]
《IT项目:超支400%,却只实现了25%的收益》:这篇新闻研究了IT项目风险和一些失败相关的惊人数据。
查看英文原文:Agile Modeling: Enhancing Communication and Understanding
分享到:
相关推荐
):技术上的:解决方案不能满足项目需求(可伸缩性、性能、可靠性、成本等)由于一些技术难题,我们不停推迟最后期限(或者靠增加成本保证期限),直到项目发起人对项目失去信心并撤资工作方式上的:团队不理解提供...
敏捷建模(AM)通过其独特的价值观、原则和实践,提供了一种灵活高效的建模方式。它不仅能够提高软件项目的质量与速度,还能增强团队之间的沟通与协作能力。尽管AM不是解决所有问题的灵丹妙药,但对于那些愿意接受其...
通过借鉴RUP和结合实际工作经验,敏捷建模流程主要包括以下几个关键阶段: 1. **需求模型**:定义项目的业务需求,通过用例图识别系统角色和用例,确保系统满足最终用户的需求。 - **用例模型**:用例及其用例图...
- 结对编程和测试驱动开发等实践鼓励频繁沟通,增强团队之间的协作。 #### 极限编程(XP) 极限编程是一种具体的敏捷开发方法论,强调通过一系列核心实践来实现高质量的软件开发。 - **核心实践**: - **完整团队*...
在IT行业中,建模是一种非常重要的软件开发方法,它帮助我们理解和设计复杂的系统。当我们谈论“PHP的类建模工具,支持UML等等”,我们实际上是在讨论一种专门用于PHP编程语言的工具,它允许开发者使用统一建模语言...
1. **沟通**:敏捷开发重视团队成员间的有效沟通,以及与项目利益相关者(Project Stakeholder)的交流,以确保理解和满足需求。 2. **简单**:倡导简洁的设计和模型,避免过度复杂化,以提高效率和可维护性。 3. ...
建模在UP中占有重要地位,包括业务建模、用例建模、静态结构建模和动态行为建模等,这些模型帮助团队理解和设计系统的需求、结构和行为。 在建模方面,XP和UP有各自的侧重点。XP倾向于轻量级建模,注重实际工作中的...
- **增强沟通**:加强团队内外部的沟通。 #### 第2章:敏捷需求管理 - **用户故事**:简洁明了地表达功能需求,便于团队理解。 - **产品Backlog管理**: - **概念**:一个按优先级排序的需求列表。 - **维护**...
这些图表不仅帮助开发人员理解彼此的设计思路,也方便了非技术人员(如项目经理或客户)对项目的理解和参与。 #### 二、降低复杂度 随着软件系统的日益庞大与复杂,如何有效地管理和控制复杂性成为了软件开发面临...
用户故事作为敏捷开发的核心组成部分,极大地促进了团队间的沟通和协作。通过有效地应用用户故事,软件开发团队可以更好地满足客户需求,提高产品的质量和竞争力。然而,需要注意的是,成功实施用户故事还需要团队...
它通过图形化的表示方式来描绘软件系统的设计,帮助开发者、分析师和项目管理者更好地理解和沟通复杂的系统结构和行为。UML自1997年发布以来,已经成为软件开发中的标准建模方法,尤其在面向对象设计和分析中发挥着...
建模的目的是为了更好地理解系统的需求、设计、行为和结构等方面,以便于后续的开发工作更加高效。 **软件系统建模的分类** 1. **动态建模**:描述系统随时间变化的行为,如状态图、活动图等。 2. **逻辑建模**:...
- 团队合作与沟通:良好的沟通机制和高效的协作工具能显著提升团队效率和项目质量。 - **面向对象与敏捷方法**: - 面向对象方法:以对象为中心,增强代码的重用性和可维护性。 - 敏捷方法与极限编程:采用迭代...
1. **提高沟通效率**:UML图形化的表示方式使得项目团队成员能够快速理解和共享设计思路。 2. **降低出错概率**:通过建模,可以提前发现潜在的设计问题,减少后期修改的成本。 3. **支持迭代开发**:UML适合敏捷...
1. **提高沟通效率**:UML提供了一套通用的图形符号,使得不同背景的团队成员能更快地理解和交流设计思想。 2. **减少错误**:通过可视化设计,可以在早期发现潜在的问题,避免在后期开发中修改导致的高昂成本。 3...
4. **协同工作**:UML模型可以在团队成员之间共享和讨论,促进沟通和理解,减少误解和错误。 **UML的应用场景** 1. **系统分析**:UML用例图和活动图可以帮助分析人员理解用户需求,识别系统的功能和行为。 2. **...
- 参加培训课程或研讨会,增强理论知识和实践经验。 - 通过案例研究,将理论知识应用于实际问题。 9. **考试技巧**: - 理解题意:清晰把握问题的主旨,避免答非所问。 - 时间分配:合理安排答题时间,优先处理...
除了XP之外,敏捷方法还包括Scrum、水晶方法、特征驱动开发(FDD)、敏捷建模(AM)、自适应软件开发(ASD)和动态系统开发模型(DSDM)等。每种方法都有其特点和适用场景,但都围绕着敏捷的核心原则展开。 ### ...