导航:首页 > 研究方法 > 识别和描述什么是敏捷开发方法

识别和描述什么是敏捷开发方法

发布时间:2022-09-13 22:37:02

㈠ 软件开发是什么,发展如何

1. 边做边改模型(Build-and-Fix Model)

好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。

在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户和测试等等满意为止。

这是一种类似作坊的开发方式,边做边改模型的优点毫无疑问就是前期出成效快。

对编写逻辑不需要太严谨的小程序来说还可以对付得过去,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:

1) 缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;

2) 忽略需求环节,给软件开发带来很大的风险;

3) 没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。

 

2. 瀑布模型(Waterfall Model)

瀑布模型是一种比较老旧的软件开发模型,1970年温斯顿·罗伊斯提出了着名的“瀑布模型”,直到80年代都还是一直被广泛采用的模型。

瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。

瀑布模型优点是严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。

瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:

1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;

2) 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

3) 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

4) 各个软件生命周期衔接花费时间较长,团队人员交流成本大。

5) 瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。

 

3. 迭代模型(stagewise model)(也被称作迭代增量式开发或迭代进化式开发)

,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。

在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。

教学中,对迭代和版本的区别,可理解如下: 迭代一般指某版本的生产过程,包括从需求分析到测试完成; 版本一般指某阶段软件开发的结果,一个可交付使用的产品。

与传统的瀑布模型相比较,迭代过程具有以下优点:

1)降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。

2)降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。

3)加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。

4)由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。因此复用性更高

 

4. 快速原型模型(Rapid Prototype Model)

快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。

显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显着的效果。

快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。

快速原型模型有点整合“边做边改”与“瀑布模型”优点的意味。

 

5、增量模型(Incremental Model)

与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。

增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:

1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。

2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。

在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。

例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。

 

6. 螺旋模型(Spiral Model)

1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。

螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:

1) 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;

2) 风险分析:分析评估所选方案,考虑如何识别和消除风险;

3) 实施工程:实施软件开发和验证;

4) 客户评估:评价开发工作,提出修正建议,制定下一步计划。

螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。但是,螺旋模型也有一定的限制条件,具体如下:

1) 螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。

2) 如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。

3) 软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险

一个阶段首先是确定该阶段的目标,完成这些目标的选择方案及其约束条件,然后从风险角度分析方案的开发策略,努力排除各种潜在的风险,有时需要通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则启动下一个开发步骤。最后,评价该阶段的结果,并设计下一个阶段。

 

7. 敏捷软件开发 (Agile development)

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果,关注业务优先级,检查与调整。

敏捷软件开发要注意项目规模,规模增长,团队交流成本就上去了,因此敏捷软件开发暂时适合不是特别大的团队开发,比较适合一个组的团队使用。

 

8. 演化模型(evolutionary model)

主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。第一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。

在开发模式上采取分批循环开发的办法,每循环开发一部分的功能,它们成为这个产品的原型的新增功能。于是,设计就不断地演化出新的系统。 实际上,这个模型可看作是重复执行的多个“瀑布模型”。

“演化模型”要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。有经验指出,每个开发循环以六周到八周为适当的长度。

 

9. 喷泉模型(fountain model, (面向对象的生存期模型, 面向对象(Object Oriented,OO)模型))

喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。

 

10. 智能模型(四代技术(4GL))

智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支持。4GL不同于三代语言,其主要特征是用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序;它是一种声明式、交互式和非过程性编程语言。4GL还具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。目前市场上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事务信息系统的中、小型应用程序的开发。

 

11. 混合模型(hybrid model)

过程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。

 

点赞
2

评论
3

分享

收藏
12

手机看

关注
一键三连
原来思维导图有那么多种用法?
09-28
MindMaster思维导图可以用于制定学习笔记、会议纪要、头脑风暴、知识管理、项目规划、高效演示、分析决策等。
什么是软件开发模式
dengyaozhong8958的博客
73
什么是软件开发模式呢?我想,于我们学生而言,更加要注重的是我们的个人能力和团队协作的方面;在这两个方面,我们必须注意,在一个Team中,首先自己需要有足够的能力和技术去完成团队分配下来的任务,其次就是一个团队在做项目的同时,需要注意与他人的配合。以上即我所认知的软件开发模式(学生时期)。 转载于:https://www.cnblogs.com/Ricardo-M-Lu/p/653276...

周小小的慧:默默的问一句,微信小程序开发的微乐斗地主真的有外挂和辅助存在吗?我一个同事在小程序上输到崩溃,去网站买外挂加微信又被骗子骗钱骗到怀疑人生5月前回复

Vanda1812回复:???23天前回复

周小小的慧:默默的问一句,微信小程序开发的微乐斗地主真的有外挂和辅助存在吗?我一个同事在小程序上输到崩溃,去网站买外挂加微信又被骗子骗钱骗到怀疑人生。替他感到无知和生无可恋5月前回复

项目开发流程及开发模式
王晨光的博客
5252
项目开发阶段 整体阶段:需求分析、设计、编码、测试、维护。 需求阶段:通常定义系统的需求,明白系统的目标。 设计阶段:通常确定系统使用什么数据库,系统模块的划分,各个模块的功能。 编码阶段:用编程语言对设计阶段的实现。 测试阶段:分黑盒测试,白盒测试。测试系统的功能是否实现,是否准确。 维护阶段:是根据用户新的需要重新修改系统,使系统更加稳定,更符合用户的要求。 需求阶段:其工作是否到位是整个系...
软件开发模式之敏捷开发(scrum)
android_Mr_夏
5万+
简介 这几年关于敏捷开发在互联网企业中越来越广泛被使用到,运用的比较多的当属scrum敏捷开发和xp敏捷开发,人人都在谈论敏捷开发。那什么才是敏捷开发呢? 目录 什么是敏捷开发? 传统的开发模式和敏捷开发模式的对比? 敏捷开发scrum的实施。 什么是敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。 在敏捷开发中,软件项目在构建初期被...
什么是软件开发模式_qq_22343633的博客-CSDN博客
9-5
软件开发模式这个词在学校的时候就接触,出名的瀑布模式、螺旋模式都清楚是怎么回事,但是却在网络上找不到其定义。今天我斗胆给个基础定义,抛砖引玉。软件开发模式,...
什么是软件开发模式 - weixin_34358365的博客 - CSDN博客
7-7
什么是软件开发模式呢?我想,于我们学生而言,更加要注重的是我们的个人能力和团队协作的方面;在这两个方面,我们必须注意,在一个Team中,首先自己需要有足够的能力和...
软件开发流程与模式
oscar999的专栏
1万+
软件开发角色与流程软件生命周期: 制定计划,需求分析,设计,编码实现,测试,运行维护模型与演进主要模型介绍1. 边做边改模型(Build-and-Fix Model)其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。在这个模型中,开发人员拿到项目立即根据需求编写
软件常用开发模式介绍
03-29
软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。具体介绍软件中常用的开发模
软件开发模式图文详解-讲义文档类资源
9-29
软件开发模式 1391. 边做边改模型(Build-and-Fix Model) 好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。
软件的几种开发模式_m15712884682的博客-CSDN博客
9-28
瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于: ...
国家标准软件开发文档模板
12-02
国家标准软件开发文档模板,包括:操作手册(GB8567——88)、测试分析报告(GB8567——88)、测试计划(GB8567——88)、概要设计说明书(GB8567——88)、开发进度月报(GB85
软件开发计划书(是 一个完整的项目开发文档)
01-09
软件开发计划书 ..............1.任务申请.doc ..............2.可行性与计划阶段--可行性研究报告.doc ..............2.可行性与计划阶段--项目开
开发软件的三种模式,你了解多少?看看哪种适合你_qq_384..._CSDN博客
9-18
问:怎么区分软件的定制开发、平台开发、SAAS三种不同开发模式?答:这是三种不同的开发模式,各有优点,和各有缺点,成本也大不相同,没有绝对优劣,关键是看那种模式...
软件开发模式_qq_43614606的博客-CSDN博客
9-25
软件开发模式对比(瀑布、迭代、螺旋、敏捷)瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型, 瀑布式开发是一种老旧的计算机软件开发方法。通过概念、启动、...
2020数学建模A题
09-11
2020数学建模国赛A题及其数据 2020数学建模国赛A题及其数据2020数学建模国赛A题及其数据 2020数学建模国赛A题及其数据 2020数学建模国赛A题及其数据 2020数学建模国赛A题及其数据
灵敏度分析使用MATLAB编写完成
05-29
灵敏度分析matlab代码编写,运筹学中的灵敏度分析的求解均可用此方法
app四种开发模式的优缺点
jia12216的专栏
6921
app的四种开发模式: 1.原生App开发(Native App, 本地应用程序); 2.网页应用程序(Web App,移动web)。 3.采用Hybrid混合框架开发(Hybrid App,混合应用程序); 4.采用ReactNative和WEEX等混合框架开发(混合App);

㈡ 敏捷开发的名词详解

AM是一种态度,而不是一个说明性的过程。AM是敏捷建模者们坚持的价值观、敏捷建模者们相信的原则、敏捷建模者们应用的实践组成的集合。AM描述了一种建模的风格。当它应用于敏捷的环境中时,能够提高开发的质量和速度,同时能够避免过度简化和不切实际的期望。AM可不是开发的“食谱”,如果你寻觅的是一些细节的指导,如建立UML顺序图或是画出用户界面流图,你可以看看在建模Artifacts中列出的许多建模书籍,我特别推荐我的书The Object Primer 2/e(尽管这有失公允)。
AM是对已有方法的补充,而不是一个完整的方法论。AM的主要焦点是在建模上,其次是文档。也就是说,AM技术在你的团队采用敏捷方法(例如eXtreme Programming,Dynamic Systems Development Method (DSDM),Crystal Clear)的基础上能够提高建模的效果。AM同样也可以用于那些传统过程(例如Unified Process),尽管这种过程较低的敏捷性会使得AM不会那么成功。
AM是一种有效的共同工作的方法,能够满足Project Stakeholder的需要。敏捷开发者们和Project Stakeholder进行团队协作,他们轮流在系统开发中扮演着直接、主动的角色。在“敏捷”的字典中没有“我”这个单词。
AM是有效的,而且也已开始有效。当你学习到更多的AM知识时,有件事对你来说可能不好接受,AM近乎无情的注重有效性。AM告诉你:要使你的 Project Stakeholder的投资最大化;当有清晰的目的以及需要解了受众的需要时要建立模型或文档;运用合适的工件来记录手头的情形;不论何时都尽可能创建简单的模型。
AM不是灵丹妙药。敏捷建模是改进众多专家软件开发成果的有效技术,充其量也就是这样了。它并不是什么了不得的灵丹妙药,能够解决你开发中的所有问题。如果你努力的工作;如果你专注其上;如果打心眼儿里接受它的价值观、它的原则、它的实践;你就可以改进你做为一个开发人员的效果。
AM是面向一般的开发人员的,但并不是要排斥有能力的人。AM的价值观、原则和实践都简单易懂,其中的很多内容,可能你都已经采用或期待多年了。应用AM技术并不是要你去练水上飘,但你需要有一些基本的软件开发技能。AM最难的就是它逼着你去学习更广泛的建模技术,这是个长期的、持续性的活动。学习建模在一开始可能很难,但你可以试着一次学习一样技术来完成你的学习。
AM并不是要反对文档。文档的创建和维护都会增大项目涉众的投资。敏捷文档尽可能的简单,尽可能的小,目的只集中在和开发的系统有直接关系的事情上,充分了解受众的需要。
AM也不是要反对CASE工具。敏捷建模者使用那些能够帮助开发人员提高效果,提升价值的工具。而且,他们还尽力使用那些能够胜任工作的最简单的工具。
何时是敏捷的?
要想了解AM,你需要了解模型和敏捷模型之间的区别。模型是一个抽象的概念,它描述了一个的问题的一个或多个方面,或是处理这个问题可能的解决方案。传统意义上,模型被认为是图表加上相应的文档。然而那不够直观的artifact,也可以被视为模型,例如CRC卡片集,单条或多条业务规则的文字描述,或是业务流程的一段结构化英文描述。一个敏捷模型就是一个刚刚足够好的模型。但是你怎么知道什么时候模型才是刚刚足够好呢?当敏捷模型显现出如下的特性时,它就是刚刚足够好的:
敏捷模型实现了它们的目的。有时你为沟通而建模,或许你需要把你工作的范围告诉高级经理;有时你为理解而建模,或许你需要确定一个设计策略,实现一组Java类。一个敏捷模型是否足够好,要看它是不是满足了创建它时的初衷。
敏捷模型是可理解的。敏捷模型要能为其预期听众所理解。使用用户能够理解的业务语言来描述需求模型,反之,技术架构模型则需要使用开发人员熟悉的技术术语。你所使用的建模符号会影响易懂性--如果你的用户不了解UML用例图中的符号的含义,那用例图对用户就没有任何价值。这样的话,要么使用另一种方法,要么教授用户学习建模技术。风格问题同样也会影响易懂性,例如避免交叉线。杂乱的图表比清晰的图表难懂。模型的细节程度(见下文),也会影响易懂性,因为相较一个不那么详细的模型来说,一个过于详细的模型要难于理解。简单(见下文)同样是影响易懂性的一个因素。
敏捷开发
敏捷模型是足够正确的。模型通常都不需要100%正确,只要足够正确就行了。举个例子,如果一张街道地图漏画了一条街道,或是它标示某条街道是通行的,但你发现它已经关闭维修了,那你会不会扔掉你的地图开始在城里飙车犯罪呢?不太可能。你会考虑更新你的地图,你可能会拿出笔来自己做修改或是去当地的商店买一张最新版的地图(你原来的那张过期了)。也许你还是会接受那张虽不完美仍可使用的地图,因为它对你来说已经足够好了。你还是可以用这张地图四处转转,因为它还是个正确的模型,标记出了大部分街道的位置。你在发现这张地图不正确的时候,你没有立刻扔掉它,原因是你根本不在乎它是否完美。类似的,当你在需求模型、数据模型中发现错误的时候,你也会选择更新或是接受--虽不完美但已经足够好了。有些项目成员能够容忍这种不正确而有些则不能:这取决于项目的特性,每个团队成员的特性,组织的特性。充分正确性既和模型的听众有关,也和你要处理的问题有关。
敏捷模型是足够一致的。一个敏捷模型并不需要和自己(或其它有用的artifact)保持完全的一致。如果一个用例在它的一个步骤中显式的调用了另一个用例,那么相应的用例图需要用UML的 <> 版型来标记这两个用例之间的关系。然而,你看了看图表,发现它们并没有这样做,天哪!用例和图之间不一致!危险!太危险了!红色警报!快逃命呀!等一下,你的用例模型是有不一致的地方,但也没到世界末日啊。是的,理想情况下,你的所有artifact最好是能够完全一致,但这通常是不可能的。当我开发一个简单的商用系统时,我通常都可以容忍部分的不一致。但有时我是不能容忍这种不一致的。最有力的佐证就是1999年 NASA发射火星太空探测器时采用了精密的测量系统。要树立一个观点,敏捷模型只要足够一致就行了,你通常不需要使用那么完美的模型。
关于正确性和一致性,很明显要考虑权衡问题。如果你要维护一个artifact(我们称之为“保管”),随着时间的流逝,你需要投入资源来更新它。否则它很会就会过期,对你就没用了。例如,我可以容忍一张地图标错了一两条街道,但是我绝对无法容忍一张地图中四分之三的街道都标错了。这就需要权衡了,进行足够的努力,保证artifact足够正确。过多不必要的努力反而会减缓项目的进度,而投入不足就没有办法保证artifact的有效性。
敏捷模型有足够的细节。一张路线图并不需要标记出每条街道上的每栋房子。那会有太多的细节,使得地图难以使用。然而,在修路的时候,我想施工人员一定会有这条街道的详细地图,包括每幢建筑、下水道、电线盒等足够的细节,这样的地图才是有用的。但是这张地图并不用标记出每个院子和通向它们的路线。因为这样又太繁琐了。足够的细节和听众有关,也和他们使用模型的目的有关--司机需要的是显示道路的地图,施工人员需要的是显示土木工程细节的地图。
考虑一个架构模型,可能一组画在白板上的图表就足够了--项目的进行中再对它们更新,也许你需要用CASE 工具来生成一些图表,也许这些图表还需要有详细的文档,这依赖于环境。不同的项目有不同的需要。在每一个例子中,实际上你都是在开发、维护一个有足够的细节的架构模型,只是这个“足够的细节”的概念和环境有关。
敏捷模型能提供正面价值。对项目中的任一artifact,一个基本的要求是它们能够提供正面价值。一个架构模型给你的项目带来的价值是不是能够超过开发它、维护它(可选)的总成本?一个架构模型能够坚定你们团队为之努力的愿景,所以它当然是有价值的。但是,如果它的成本超过了这个价值,那就是说,它无法提供正面价值。投入100,000美元去开发一个详细的、重量级的文档化架构模型,而它的效用,只需一些画在白板上的图表就能够达到,这些图只需要花你 5,000美元,看看,这是多么轻率的做法。
敏捷模型要尽可能的简单。只要能够达到目的,你应当努力让你的模型尽可能保持简单。模型的详细程度会影响简单性,而所使用的符号范围也会影响简单性。例如,UML的类图就包括了无数的符号,包括对象约束语言 (Object Constraint Language OCL) ,但大多数的图使用符号的一部分就能够完成。所以你常常不需要使用所有的符号,你可以限制自己使用符号的一个子集,当然,这个子集是足够让你完成工作的。
因此呢,一个敏捷模型的定义就是一个实现它的目的,没有画蛇添足的模型;为你的预期听众所理解的模型;简单的模型;足够正确、足够一致、足够详细的模型;创建和维护它的投资能够给项目提供正面价值的模型。
一个普遍的哲学问题是源代码是不是一个模型,更重要的,它是不是一个敏捷模型。如果你是在我们这篇文章之外问我这个问题,我会回答说,是,源代码是一个模型,虽然是一个高度细节化的模型,因为它是软件的一个抽象。同时我还认为,优秀的代码是一个敏捷模型。但在这里,我还需要把两者区分开来,源代码和敏捷模型还是有区别的——敏捷模型帮助你得到源代码。

㈢ 敏捷方法的敏捷开发

敏捷开发(agile development)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发是全新理论吗?答案莫衷一是。细心的人们可以发现,敏捷开发其实借鉴了大量软件工程中的方法。迭代与增量开发,这两种在任何一本软件工程教材中都会被提到的方法,在敏捷开发模式中扮演了很重要的角色。再向前追溯,我们还也可见到瀑布式与快速原型法的影子,也许还有更多。
改善,而非创新。敏捷开发可理解为在原有软件开发方法基础上的整合——取其精华,去其糟粕。因此敏捷开发继承了不少原有方法的优势。“在敏捷软件开发的过程中,我们每两周都会得到一个可以工作的软件,”Fowler介绍,“这种非常短的循环,使终端客户可以及时、快速地看到他们花钱构建的软件是一个什么样的结果。”
也许是因为时间关系,Fowler只说出了这些优势中的一部分。允许开发过程中的需求变化、通过早期迭代可以较早发现风险、使代码重用变得可行、减少项目返工……借鉴了众多先进方法和丰富经验,拥有的众多优势使得敏捷开发看来已经成为解决软件危机的标准答案。
问题与思考然而,我们不得不面对的现实却是,模式与方法的优化并不意味着问题的终结。作为一种开发模式,敏捷开发同样需要面对众多挑战。
大项目的拆分意味着更多子项目的出现,协调这些同步或异步推进的子项目,合理的资源调配都将变得更加复杂。另外,在当前项目和项目组普遍“增容”的情况下,遇到的问题同样成倍增长。人的重要性被提到了更高的高度,而缺乏有效协调手段,减少人员流动和项目变更对整个项目造成的影响也将成为一大挑战……新方法带来众多便利的同时,也相应引发了几乎同样多的问题。
敏捷开发(agile development)概念从2004年初开始广为流行。Bailar非常支持这一理论,他采取了敏捷方式组建团队:Capital One的敏捷团队包括3名业务人员、两名操作人员和5~7名IT人员,其中包括1个业务信息指导(实际上是业务部门和IT部门之间的翻译者);另外,还有一个由项目经理和至少80名开发人员组成的团队。这些开发人员都曾被Bailar送去参加过敏捷开发的培训,具备相关的技能。
每个团队都有自己的敏捷指导(Bailar聘用了20个敏捷指导),他的工作是关注流程并提供建议和支持。最初提出的需求被归纳成一个目标、一堆记录详细需要的卡片及一些供参考的原型和模板。在整个项目阶段,团队人员密切合作,开发有规律地停顿--在9周开发过程中停顿3~4次,以评估过程及决定需求变更是否必要。在Capital One,大的IT项目会被拆分成多个子项目,安排给各敏捷团队,这种方式在敏捷开发中叫蜂巢式(swarming),所有过程由一名项目经理控制。
为了检验这个系统的效果,Bailar将项目拆分,从旧的瀑布式开发转变为并列式开发,形成了敏捷开发所倡导的精干而灵活的开发团队,并将开发阶段分成30天一个周期,进行冲刺--每个冲刺始于一个启动会议,到下个冲刺前结束。
在Bailar将其与传统的开发方式做了对比后,他感到非常兴奋--敏捷开发使开发时间减少了30%~40%,有时甚至接近50%,提高了交付产品的质量。不过,有些需求不能用敏捷开发来处理。 Bailar承认,敏捷开发也有局限性,比如对那些不明确、优先权不清楚的需求或处于较快、较便宜、较优的三角架构中却不能排列出三者优先级的需求。此外,他觉得大型项目或有特殊规则的需求的项目,更适宜采用传统的开发方式。尽管描述需求一直是件困难的事,但经过阵痛之后,需求处理流程会让CIO受益匪浅。
敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则,并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作,他们认为: 个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作 胜过 合同谈判 响应变化 胜过 遵循计划 并提出了以下遵循的原则: 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。 工作的软件是首要的进度度量标准。 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。 不断地关注优秀的技能和好的设计会增强敏捷能力。 简单是最根本的。 最好的构架、需求和设计出于自组织团队。 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。 一、敏捷开发方法
(一) 说明 本文是阅读Alistair Cockburn的Agile Software Development和William C. Wake的XP Explored的一些笔记和想法,Agile Software Development是一组软件开发方法的总称,包括(Crystal , Extreme Programming , Adaptive software development等等)。敏捷开发方法又称为“轻量级”开发方法。
下面这段话摘自Martin Fowler的一篇文章:
从无到繁重再到敏捷多数软件开发仍然是一个显得混乱的活动,即典型的“边写边改” (code and fix)。设计过程充斥着短期的,即时的决定,而无完整的规划。这种模式对小系统开发其实很管用,但是当系统变得越大越复杂时,要想加入新的功能就越来越困难。同时错误故障越来越多,越来越难于排除。一个典型的标志就是当系统功能完成后有一个很长的测试阶段,有时甚至有遥遥无期之感,从而对项目的完成产生严重的影响。 我们使用这种开发模式已有很长时间了,不过我们实际上也有另外一种选择,那就是“正规方法”(methodology)。这些方法对开发过程有着严格而详尽的规定,以期使软件开发更有可预设性并提高效率,这种思路是借鉴了其他工程领域的实践。 这些正规方法已存在了很长时间了,但是并没有取得令人瞩目的成功,甚至就没怎么引起人们的注意。对这些方法最常听见的批评就是它们的官僚繁琐,要是按照它的要求来,那有做太多的事情需要做,而延缓整个开发进程。所以它们通常被认为是“繁琐滞重型”方法,或Jim HighSmith 所称的“巨型”(monumental)方法。 作为对这些方法的反叛,在过去几年中出现了一类新方法。尽管它们还没有正式的名称,但是一般被称为“敏捷型”方法。对许多人来说,这类方法的吸引之处在于对繁文缛节的官僚过程的反叛。它们在无过程和过于繁琐的过程中达到了一种平衡,使得能以不多的步骤过程获取较满意的结果。 敏捷型与滞重型方法有一些显着的区别。其中一个显而易见的不同反映在文档上。敏捷型不是很面向文档,对于一项任务,它们通常只要求尽可能少的文档。从许多方面来看,它们更象是“面向源码”(code-oriented)。事实上,它们认为最根本的文档应该是源码。 但是,我并不以为文档方面的特点是敏捷型方法的根本之点。文档减少仅仅是个表象,它其实反映的是更深层的特点: ? 敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。 ? 敏捷型方法是“面向人”的(people-oriented) 而非“面向过程”的 (process-oriented)。 它们试图使软件开发工作顺应人的天性而非逆之。它们强调软件开发应当是一项愉快的活动。我认为以上两个特点很好的概括了敏捷开发方法的核心思想:适应变化和以人为中心
(二) 方法背后的思想
Alistair Cockburn在Agile Software Development中讲述了敏捷开发方法背后的思想
人们掌握过程(process)可以分为3个阶段:1 following 遵循一个定义好的process2 detaching 知道不同process的适用范围,在不同的场合使用不同的process3 fluent 不关心是否遵循特定的process,知道在什么情况下采用什么动作
软件开发是一个充满发明和交流的协作性游戏(cooperative game of invertion and communication)。软件开发的首要目标是生产出软件,遵循特定的过程和模型只是手段,只要传递了足够的信息,手段是次要的。交流的效果要远远重于交流的形式(Effect of communication is more important than the form of communication)。一般软件开发有两个目标:1 尽快的生产出软件2 为下一个team或项目做准备,有时这两个目标是矛盾的,我们要在这两个目标之间寻求平衡
在软件开发中,人的因素要远远大于过程和技术。人是有缺陷的:1 容易犯错误,因此必须在错误扩散之前找到并改正错误2 当觉得可能失去较多的时候,不愿意冒险3 重新构造而不愿意重复使用已有的东西4 难于坚持一个习惯
针对个人因素的几个建议:1 具体的模型较抽象的模型更容易理解2 从一个例子开始是容易的3 通过观察他人的成果学习4 要有足够的不受打扰的时间5 分配的工作要与个人意向,能力匹配6 不正确的奖励会有坏作用,从长期看个人兴趣比奖励更重要,培养在工作中的自豪感:1) pride in work参与工作的自豪感,通常参与一个重要的工作会有自豪感2) pride in accomplishment 完成工作的自豪感,长期未完的工作会使士气低落3)pride in contribution 为他人贡献的自豪感7 鼓励关心其他人的工作和整体的工作
在一个团队之间,交流是最重要的,实践证明面对面的实时的交流是最有效的,对交流的延误会损失信息,白板是最好的交流工具,交流工具的先进并不能提高交流效果。文档的作用是记录和备忘,不能通过文档交流。
敏捷开发方法要避免的过程设计的几个常见错误1 对所有的项目使用同一种过程2 没有弹性3 过于沉重4 增加不必要的“必须完成”(“should do” is really should?)5 没有经过实践检验
敏捷开发方法过程设计的几个原理:1 交互的面对面的交流是代价最小,最迅速的交换信息的方法2 超过实际需要的过程是浪费的3 大的团队需要重量级方法4 处理重大问题的项目需要重量级方法强调5 增加反馈和交流可以减少中间产品和文档的需求6 轻量级方法更强调理解(understanding),自律(discipline)和技能(skill),重量级方法更强调文档(documentation),过程(process)和正式(formality)understanding指整个团队关于项目的全部知识,包括讨论的过程,documentation只能记录其中的一部分discipline是指个人主动的完成工作,process指个人根据指令完成工作skill指具有良好技能的人可以省略中间的产品,formality指必须按照规定步骤完成工作
7 确定开发中间的瓶径,提高它的效率对于瓶径处的工作应该尽量加快,减少重复,(使用更熟练的人,使用更多的人,使用更好的工具,使瓶径处的工作的深入尽量稳定)对于非瓶径处的工作可以多一些重复,在输入还不确定的情况下也可以尽早开始。
这些原理的几个结论:1 向一个项目增加人员要花费较大代价(constly),因为原有人员和新人员之间的交流要花费大量时间2 团队的规模经常是跳跃的,例子:需要6个熟练的程序员,但是只有4个,于是增加不熟练的程序员,结果团队的大量时间花费在培训不熟练的程序员上面,最后增加到了20个不熟练的程序员。3 应该侧重于提高团队的技能而不是扩充团队4 对不同的项目使用不同的过程5 在适用的条件下,轻量级的方法优于重量级的方法6 对不同的项目要裁减过程
敏捷开发方法的原则是“刚刚好”(Light and Sufficient)

㈣ 敏捷开发项目的管理流程

导语:对于敏捷开发项目的管理流程,相关人员要清楚。下面是我收集整理的敏捷开发项目管理流程,供各位阅读和参考。

前段时间给大家整理了敏捷开发的流程,最近在整理敏捷开发项目的流程和管理制度,其整理的项目管理规程如下,这份规程也不完全算是敏捷专属的项目管理规程,主要是在结合我们公司实际的情况下编写出来的,大家在实际嵌入到公司的过程中可以参考下,不能照搬。

1. 目的

规范互联网软件产品开发项目管理过程,指导开展项目研发、管理等活动。

2. 适用范围

本章程的作用范围为互联网软件产品开发立项至结项管理过程。

1.对项目经理开展产品规划及设计活动以及项目管理手段和应遵循的开发流程提供了指导;

2.对项目团队的日常管理活动及内容进行了指导;

3. 角色及职责定义

项目经理:

进行产品开发过程中的业务目标、进度、成本、质量控制。

挑选项目团队并进行团队建设,激发、鼓舞和改进团队的生产效率。

识别项目干系人,定期向干系人汇报,并作为团队和外部的接口,屏蔽外界对团队的干扰。

确保项目中流程被遵循,组织、监督、培训项目各实践活动。

产品策划

确定产品的功能,拆分用户故事。

需求功能确定优先级。

接受或拒绝开发团队的工作成果。

参与产品开发过程中的有关会议。

UI

根据用户故事,负责产品的功能交互及界面设计

组织开展人机交互及用户体验,不断跟踪改进,提高产品表现力。

参与产品开发过程中的有关会议。

开发

根据用户故事,负责产品的技术架构设计及功能开发

评估、设计及维护产品相应模块,确保模块的稳定性、易用性、高效性。

参加产品开发过程中的有关会议。

测试

根据用户故事,设计产品测试标准,确保产品品质满足市场需求。

合理分配测试资源,组织产品测试并优化测试流程及测试标准,提高测试效率。

编写产品测试用例,提交测试问题,编写测试总结报告,以测试角度来确定产品版本是否发布。

4. 项目管理过程

按照互联网软件产品项目开发过程,可将整个项目管理过程分为立项过程、规划过程、执行与监控过程、结项过程。下面分别阐述在每个阶段过程中该如何进行项目管理。

4.1 立项过程

互联网软件产品开发项目的立项过程,通常是指从准备项目启动会到召开会议这个阶段,在立项过程中,需要完成项目目标,需求范围的初步确认,项目团队成员,其他资源的安排。

确定项目的初步目标并达成共识

对于项目目标,需要和干系人在以下几点上达成共识:

项目的背景、目标用户、核心人员及产品定位是什么

项目的资源投入预算是多少

项目的资源投入是多少

各人员在项目中扮演的角色和对项目的作用是什么

准备启动会议文档

文档内容包括:

用户画像

产品定位

市场策略

业务目标

技术可行性

研发成本预算

路标规划

召开项目启动会

参加人员包括:

管理层代表

项目经理及项目团队

其他干系人代表

主要议题包括:

申明项目目标范围及对组织目标的贡献。

管理层正式任命PM,设定期望,统一思想

文档内容的宣讲。

与PM小组确定项目管理要求

项目启动会完成后,需要与PM小组成员确定项目立项机制以及公司项目管理要求。

4.2 规划阶段

在规划阶段,团队需要共同完成产品的版本规划,迭代计划

版本规划

从产品的关键特性列表中按照优先级规划产品每个版本需要完成哪些特性,在规划完成后需要在项目干系人内达成共识。具体可参考《版本规划样例》

迭代如何划分

迭代划分是指将特性列表拆分形成用户故事列表,并将其对应的主要任务划分到各个迭代中去,形成粗粒度的项目迭代计划。这个过程主要考虑以下几个因素:

有些任务间是有依赖关系,某个任务的开始或结束是以另一个任务的开始或结束为前提,在划分时必须考虑这种前后依赖关系。

在安排每个迭代的任务时,需要对各种因素进行综合考虑,如平衡每个迭代中任务的技术难度和价值差异。

除了进行初步的迭代任务划分,还需要确定项目过程中迭代任务调整的规则,如迭代任务未完成时是将剩余任务延至下一迭代还是延长迭代周期。

确定人员分工

项目经理需要根据每个人员的能力和特点,初步拟定大致分工。在进行任务分工时需考虑以下因素:

任务难度与人员能力相匹配,对于明显超出能力范围或过于简单的任务容易造成负面影响。

耦合度高的尽量分配给同一个人,避免不必要的沟通消耗。

鼓励团队内部“任务认领”,提高人员的工作积极性和主动性。

确定迭代运行模式

如一周迭代、两周迭代,每个迭代包含的工作内容等。

具体的迭代计划可参考《迭代计划样例》

制定其他辅助计划

制定沟通计划、风险计划和质量计划是必要的,沟通计划主要包含以下几个方面:沟通对象、沟通方式、沟通频率即可,如:

风险计划包括风险项、负责人、重要性、应对措施,如下:

质量计划包括:bug分布满足何种条件可以发布,有几个致命bug必须停止开发新特性等。。

搭建基础技术架构

如果是一个全新的项目,需要重新开发系统框架,则这个工作应该在迭代0完成,否则会影响后期的工作开展。系统框架的每次改动必然会导致大量的重复工作量,从而给稳定的团队节奏带来很大的毛刺。

4.3 项目执行和监控过程

迭代N的执行

A、迭代N的需求细化

考虑每个迭代需要完成的用户故事;

用户故事需包含几个部分,工作量评估、功能性需求、非功能性需求。具体的可参考《用户故事模板及样例及拆分说明》

用户故事编写完成后需要在团队内部进行需求评审,一方面是为了向团队成员解读该需求,另一方面团队成员也可在评审时给出指导性意见。

B、测试用例评审

测试人员根据用户故事要求编写对应的测试用例,并组织项目团队进行测试用例评审。根据评审意见修改测试用例

C、开发

将用户故事的'需求开发的过程。

D、开发自测

在开发过程中,每完成一个功能点,都需要及时的进行开发自测并通知产品策划人员进行验收体验。

E、验收

开发完成后,产品策划需要对开发完成的成果进行验收,验证其是否符合用户故事的要求,验证通过后方可流到测试环节,否则需与开发详细讨论其不符合性,其验收的checklist可以参考《产品验收checklist及模板》

F、测试和回归

提交测试时,必须要有正确的版本。测试人员根据测试用例进行测试,在IT平台中提交测试bug,并根据测试的角度给出产品是否发布的意见,输出《测试报告》

G、bug修改

在IT平台中获取分配给自己的bug进行修改。

H、showCase

阶段性必须有可体验版本进行showCase.需要

确定showCase时间:某个迭代开发、自测完成,准备提交测试前

会议前1-2天发出体验版给到参与人员

会议期间,由项目经理组织大家体验、反馈问题、记录问题。

项目经理根据问题情况,与开发或产品确定问题的解决时间并发出会议纪要。

I、灰度发布

迭代一定版本后,由项目经理与团队共同决定是否需要进行灰度发布。

监控方式

每日站立会

主持人轮流担任,负责控制节奏,记录问题,以备会后跟踪。

每人讲自己昨天做了什么,有什么问题,今天的计划是什么;

其他人了解别人的工作情况,并发现指出可能存在的问题。

对于发现的问题,鼓励认领,其余由项目经理指定责任人。

时间通常控制在15分钟内。

会议期间,更新任务墙,任务墙样式如下:

周报

反馈项目计划的执行情况,强调本周工作要达成的目标

暴露出项目的问题,特别是需要领导或其他团队需要协助的问题。

周报可在IT平台中输出。

月报

反馈项目当月的执行情况,包括进度、人力及质量。

反映项目存在的问题和风险。

迭代回顾

每人讲述本次迭代做的好的地方和不好的地方

回顾上个迭代不好的地方,看看改进情况。

让每个人发言。

每次迭代回顾会议完成后,可更新燃尽图

4.4 结项阶段

项目经理指导产品策划收集总结项目的产品运营数据,同时指导团队成员从自身角色进行总结,包括测试、开发、UI等。

项目经理与项目团队成员给出项目总结报告,内容可参考《项目经验教训总结-项目团队》,《项目经验教训总结-项目经理》

召开结项会议,各成员进行结项汇报。

PM小组将过程文档和经验教训总结进行归档。

㈤ 识别价值流和ART

这是SAFe ® 实施路线图系列的第五篇。 点击这里 查看整个路线图。

实施路线图的前四项“关键举措”确立了变革的紧迫感,以及有效实施SAFe所需的关键知识和专业人员:

有了紧迫感和强大的联盟,现在是实施SAFe的时候了。本文介绍了下一个关键步骤:识别价值流和敏捷发布列车(ART)。价值流和ART是组织实施SAFe的支柱,,对成功完成这一过程至关重要。试图走捷径或轻而易举地完成这一步,就像在你试图加速的同时把脚踩在刹车上一样。但是,如果这一步做对了,组织就会在成功转型的道路上越走越远。

识别 价值流 和 敏捷发布列车(ART) 需要了解一种新的组织模式,该模式经过优化以促进促进价值在 跨 职能部门、活动和边界之间的流动,其包括以下步骤:

以下各节将介绍这些活动。

价值流是理解、组织和交付SAFe价值的主要结构。如图1所示,每一个价值流都是用于创造价值的一系列长期步骤:从概念到为客户提供有形的结果。就像任何精心设计的 故事(narrative) 一样,价值流确定了一个按时间顺序排列的活动流程。

请注意,有两种类型的价值流[1],如图3所示。

SAFe主要关注的是开发价值流。毕竟,在最短的可持续交付时间内交付新的解决方案是SAFe的重点,而开发价值流则帮助企业了解如何实现目标。然而,必须首先识别企业的运营价值流,以确定支持它们的 开发价值流

对于一些组织来说,确定运营价值流很容易。许多只是公司销售的产品、服务或解决方案。然而,在大型企业中,这项任务会很复杂。价值流通过分布在组织的许多部分的各种应用、系统和服务流向 内部 外部 客户。

在这些情况下,识别运营价值流是一项重要的分析活动。图4提供了一组问题,可以帮助利益相关者完成这一识别过程。

识别大型企业中的运营价值流并非易事。它需要认识到组织更广泛的目标,并明确了解价值的具体要素如何流向客户。为了帮助你,在下面的章节中提供了两个例子:一个来自医疗保健领域,另一个来自金融服务领域。

第一个运营价值流的例子是医疗保健网络提供商,如图5所示[2]。

为了说明问题,这个例子侧重于医院,特别是代表支持患者治疗的流程和信息系统的价值流:从收治到治疗和结算。

这个运营价值流的触发点是病人到达医院。在患者接受治疗并为所提供的服务付款后,医院将获得全部价值,如图6所示。

V型标志(chevrons) (价值交付的主要活动)上面所标示的人员就是执行运营价值流中各个步骤的人员。

第二个业务价值流的例子是银行机构[3]。图7说明了在这样一个组织中可能存在的各种价值流。

红色的矩形突出显示了下文会进一步说明的“消费者银行贷款”价值流。价值流是由客户搜索并找到银行的贷款产品和利率而触发的,当客户带着利息偿还贷款时,价值流就实现了。图8突出显示了这些步骤和执行这些步骤的人员。

( 注:客户也是该价值流的直接参与者。 )

价值流定义模板(value stream definition template) 可用于进一步阐述和理解所识别的运营价值流的特征。图9提供了一个示例。

一旦确定了运营价值流的步骤,下一个活动就是确定为支持该价值流而开发的系统。对于较大的价值流,重要的是将系统与价值流中各个步骤的联系绘制出来。这样可以使人们更深入地了解它是如何运作的,如图10中的消费者贷款示例所示。

一旦确定了支持运营价值流的系统,接下来的活动就是估算构建和维护这些系统的人员数量和定位,如图11所示。

下一步是确定开发价值流,这些流代表开发这些系统所需的步骤以及开发这些系统的人员。由于这些价值流与运营价值流不同,因此组织需要考虑触发因素和价值是什么。该系统在运营价值流中支持和实现更好的操作,因此价值是系统中的新功能或修正的功能。触发因素则是驱动这些功能的需求和想法。

这些触发因素可以用来确定开发价值流的数量。如果大多数需求需要触及所有系统才能实现新功能,那么可能只有一个开发价值流。然而,如果系统是分离的,则可能有几个。无论如何,开发价值流应该大部分或完全独立,能够自行开发和发布,没有太多的价值流内部依赖关系。在图12的例子中,大多数需求都会触及前三个系统或最后一个系统,但很少会触及所有四个系统,因此存在两个开发价值流,每个价值流都能够独立于另一个开发、集成、部署和发布。

开发价值流努力提供创新的业务解决方案,因此需要的不仅仅是开发团队的贡献。参与业务解决方案交付的 每个人 (IT运营、法律、市场营销、财务、技术支持、合规、安全等)都被认为是开发价值流的一部分。考虑到这一点,下一步是确定这些额外的个人和团队,他们是上一步确定的开发价值流的一部分。

在图13的例子中,第一个开发价值流侧重于贷款申请流程,包括进行营销以编制宣传材料和开展吸引客户的活动。还包括法律团队成员,以确定所提供贷款的相关条款和条件。第二个开发价值流是开发管理贷款偿还的核心银行系统,也包括进行营销以管理与现有客户群的持续沟通。这两个开发价值流都包括支持团队,以应对任何可能出现的客户问题,以及运营团队,以管理这些系统在生产中的稳定性。

一旦确定了开发价值流,下一步就是开始了解如何组建 敏捷发布列车(ARTs) 来实现这些价值流。ART包含了提升价值流所需的所有人员和其他资产。第一步是了解组织中哪里创造了价值,因为那是人员、流程和系统所在的位置。当这样做的时候,很明显,开发价值流会跨越许多边界。企业之所以会有这样的组织方式,有很多原因:历史、功能上的便利、集中化的效率、收购、地理环境等等。因此,完全有可能没有人了解持续开发和增强有助于提供价值的系统所需的一系列完整事件。此外,改进的尝试往往倾向于功能上的局部改进,这可能导致一个功能或步骤的优化,但端到端流程的优化很少。

正是由于价值流的长期性,引发了精益组织的不同思考方法。为了解决这个问题,企业应用系统思维( 原则2,应用系统思维 ),来了解系统中的各个部分需要如何共同完成流程的改善。通常情况下,大型企业的组织结构都是按职能划分的。此外,人员往往是按地域分布的。但是,如图14所示,价值却 跨越了 这些界限。

最后一项活动是确定实现价值的ART。经验表明,最有效的ART具有以下特征:

根据工作人数的多少,ART设计有三种可能的方案,如图15所示。

大型开发价值流在大型企业中非常常见,通常需要进行一些额外的分析。在可能的情况下,列车应该集中在一个单一的、主要的解决方案上,或者该价值流中一组密切相关的产品或服务上。这是一个相当简单的设计:一个ART提供一组定义明确的有价值的东西。

然而,在需要许多人提供单一解决方案的情况下,当团队一起工作,同时开发具有高度相互依赖性的功能和组件时,这种方法最有效。这就导致了围绕 特性领域(feature areas) 或子系统组织ART的相对常见的模式。

没有一个正确的解决方案,大型系统通常需要两种类型的ART。一个典型的例子是,多个ART基于一个共同的平台提供服务或解决方案。在这种情况下,可能有一个或多个 平台ART(platform ART) 支持 特性ART(feature ART) ,如图16所示。

还有一种常见的模式,即ART在一个更大的价值流中实现特定的 环节(segments) 。这看起来似乎并不完全是端到端的,但实际上,价值流的“开始和结束”是相对的概念。在这些环节中,输入、价值、系统的类型可能大不相同,从而形成了一条逻辑分界线。

当然,这些模式的组合也经常出现在更大的价值流中,如图17中的最终示例所示。

最后,还有其他一些基于地域、口语、成本中心等因素的ART设计和优化方法,这些因素都可能影响ART的设计。但这些都是远远不够理想的。

如图所示,这个过程中涉及到批判性思维和分析。为了帮助识别价值流,Scaled Agile, Inc.提供了一个 价值流和ART识别工作坊工具包 ,包括一个研讨会和其他工具,SAFe项目顾问(SPC)可以用来指导利益相关者。该研讨会提供了一个结构化的方法来识别价值流和定义ART,从而梳理出企业的价值流。该工具包提供了一种经过验证的、系统化的方法,通过考虑依赖性、协调性和约束条件来优化ART设计。

价值流和ART识别研讨会通常在与关键利益相关者的Leading SAFe课后直接进行。目的是让他们完成对价值流的识别,设计ART的过程,在他们对SAFe实现的精益-敏捷开发有了基本的了解 之后 ,再选择首次ART启动的日期。

由于没有任何设计是完美的,所以企业有时会在学习了更多知识后需要重复这个研讨会,这是 加速 路线图步骤的一部分。这样做可以让企业加深其对价值流和ART的理解,并将新的学习成果融入到组织设计中。

这篇文章介绍了团队如何做识别价值流和设计ART的工作,这些工作构成了转型的基本组织结构。

现在是时候进行下一步了,创建实施计划,这是SAFe实施路线图的下一篇文章。

[1] Allen Ward, Lean Proct, and Process Development . (video) Lean Enterprise Institute, 2004
[2] Contributed by Jane Tudor, Justine Johnston, Matt Aaron, Steve Mayner, and Thorsten Janning.
[3] Contributed by Darren Wilmshurst, Murray Ford, Per-Magnus Skoogh, Phillip Manketo, Sam Bunting, and Virpi Rowe.
[4] Knaster, Richard and Leffingwell, Dean. SAFe Distilled, Applying the Scaled Agile Framework for Lean Software and Systems Engineering. Addison-Wesley, 2017.

Value Stream and ART Identification Workshop Toolkit for SPCs.

Last update: 28 September 2019

㈥ 什么是敏捷软件开发

敏捷软件开发是一个概念意义上的框架,用来取代软件工程项目的概念;它强调在项目的整个生命周期中,拥抱并促进由于软件进化式的发展所带来的变化。eentirelife-cycleoftheproject.这段定义来自wikipedia,我认为是我接触ASD以来,对ASD最精辟的论述。请注意其中的三个关键词:在项目的整个生命周期中:这就涉及到了【敏捷项目管理】、【敏捷需求获取】、狭义的【敏捷软件开发】三个主要的领域和过程。要注意的是,上述三个过程并不是互相分开的,而是你中有我,我中有你。拥抱并促进变化:世界上唯一不变的是变化。不论在任何领域,漠视、甚至否认、抗拒变化,都不是一个理性,严肃的人所应有的态度。学会如何识别变化的大势,并在可能的时候,促使变化向好的方向发展。这才是面对变化的正确应对之法。软件进化式的发展:虽然上面提到促进变化的发展,但是软件的演化过程,我相信是有其自身内在逻辑的,存在一些根本规律和指导方针;并不是完全以人的主观意识为主导。老子讲“顺势而为,无为无不为”,我认为是对上述后两点的精确概括与指导。了解了这三个方面,下面就要引入大名鼎鼎、如雷贯耳、耳朵都要磨出糨子来的敏捷宣言()了,让我们看看2001年提出的第一版的敏捷软件开发宣言怎么说:doit.:☆☆☆☆,,wevaluetheitemsontheleftmore.我们正在通过实践和帮助其他人实践,揭示更好的开发软件的方法。我们从实践中得出的价值观是:☆人和交互重于过程和工具。☆可以工作的软件重于求全责备的文档。☆客户合作重于合同谈判。☆随时应对变化重于循规蹈矩。虽然右项也具有价值,但我们认为左项具有更大的价值。经过六年的演变,敏捷大师们又提出了敏捷宣言的重构版本,由于尚未形成共识,暂不在此提出。在敏捷宣言的背后,有其遵循的12条原则::☆eryofvaluablesoftware.☆Welcomechangingrequirements,evenlateindevelopment.'scompetitiveadvantage.☆,,.☆.☆.,andtrustthemtogetthejobdone.☆velopmentteamisface-to-faceconversation.☆.☆.Thesponsors,developers,.☆.☆Simplicity----isessential.☆Thebestarchitectures,requirements,anddesignsemergefromself-organizingteams.☆Atregularintervals,,.★我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。★即使到了开发的后期,也欢迎改变需求,敏捷过程利用变化来为客户创造竞争优势。★经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。★在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。★围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。★在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交流。★工作的软件是首要的进度度量标准。★敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。★不断地关注优秀的技能和好的设计会增强敏捷能力。★简单--使未完成的工作最大化的艺术---是根本的。★最好的构架、需求和设计出自于自组织的团队。★每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

㈦ 软件开发模式有哪些

. 边做边改模型(Build-and-Fix Model)

好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。

在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户和测试等等满意为止。

这是一种类似作坊的开发方式,边做边改模型的优点毫无疑问就是前期出成效快。

对编写逻辑不需要太严谨的小程序来说还可以对付得过去,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:

㈧ 螺旋式和敏捷式软件开发模式有什么不同

螺旋开发,1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
“螺旋模型”刚开始规模很小,当项目被定义得更好、更稳定时,逐渐展开。

“螺旋模型”的核心就在于您不需要在刚开始的时候就把所有事情都定义的清清楚楚。您轻松上阵,定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复,直到得到您满意的最终产品。

敏捷软件开发又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。

㈨ 什么是 Agile Software Development(敏捷软件开发)

敏捷编程是软件产业适应现代商业环境的具体表现。历史的第一点,随着软件产业的快速发展,软件系统的规模越来越大,复杂性越来越高,开发周期和成本失控的问题越来越严重,也不能保证软件的可靠性。

为了解决这一系列问题,软件行业自然而然地转向传统的工程和管理方法。软件工程就是这样的结果。以“瀑布模型”为代表的传统软件开发模型为软件生命周期的每个阶段提供了一组规范,以使项目进展达到预期目的。软件开发活动的核心重点,所有计划、调度、交付的活动都是直接或间接与需求相一致的,并强调软件需求必须形成“文档”。基于计划生命周期的软件开发方法极大地促进了软件行业的发展,但现在却变得越来越“无力”。为了适应现代商业环境,提出了“敏捷编程”的开发方法。包括“极限编程”、自适应软件开发和功能驱动开发。其他的答案是由定义给出的,我已经结合敏捷软件开发宣言,从商业环境中探索这种开发方法的本质和起源。

总结:它背后的商业环境是,用户无法有效描述自己需求的最典型的例子是苹果的iPad和iPhone。在乔布斯没有推出iPhone之前,用户不知道他们需要一部智能手机,更准确地说,智能手机的需求无法被有效描述。这也是诺基亚(nokia)和摩托罗拉(MOTOROLA)等公司失败的原因之一。

㈩ 敏捷开发的实践

敏捷建模(AM)在AM原则的基础上定义了一组核心实践(practice)和补充实践,其中的某些实践已经是极限编程(XP)中采用了的,并在 Extreme Programming Explained一书中有详细的论述,和AM的原则一样,我们在描述这组实践时,将会注重于建模的过程,这样你可以从另外一个角度来观察这些已或XP采用的素材。 ◆Stakeholder的积极参与 我们对XP的现场客户(On-Site Customer)的概念做了一个扩充:开发人员需要和用户保持现场的接触;现场的用户要有足够的权限和能力,提供建构中的系统相关的信息;及时、中肯的做出和需求相关的决策;并决定它们的优先级。AM把XP的“现场客户”实践扩展为“使project stakeholder积极参与项目”,这个project stakeholder的概念包括了直接用户、他们的经理、高级经理、操作人员、支持人员。这种参与包括:高级经理及时的资源安排决策,高级经理的对项目的公开和私下的支持,需求开发阶段操作人员和支持人员的积极参与,以及他们在各自领域的相关模型。
◆正确使用artifact 每个artifact都有它们各自的适用之处。例如,一个UML的活动图(activity diagram)适合用于描述一个业务流程,反之,你数据库的静态结构,最好能够使用物理数据(physical data)或数据模型(persistence model)来表示。在很多时候,一张图表比源代码更能发挥作用,一图胜千言,同样,一个模型也比1K的源代码有用的多,前提是使用得当(这里借用了 Karl Wieger的Software Requirements中的词汇)。因为你在研究设计方案时,你可和同伴们和在白板上画一些图表来讨论,也可以自己坐下来开发一些代码样例,而前一种方法要有效的多。这意味着什么?你需要了解每一种artifact的长处和短处,当你有众多的模型可供选择的时候,要做到这一点可没有那么容易。
◆集体所有制 只要有需要,所有人都可以使用、修改项目中的任何模型、任何artifact。
◆测试性思维 当你在建立模型的时候,你就要不断的问自己,“我该如何测试它?”如果你没办法测试正在开发的软件,你根本就不应该开发它。在现代的各种软件过程中,测试和质保(quality assurance)活动都贯穿于整个项目生命周期,一些过程更是提出了“在编写软件之前先编写测试”的概念(这是XP的一项实践:“测试优先”)。
◆并行创建模型 由于每种模型都有其长处和短处,没有一个模型能够完全满足建模的需要。例如你在收集需求时,你需要开发一些基本用例或用户素材,一个基本用户界面原型,和一些业务规则。再结合实践切换到另外的Artifact,,敏捷建模者会发现在任何时候,同时进行多个模型的开发工作,要比单纯集中于一个模型要有效率的多。
◆创建简单的内容 你应该尽可能的使你的模型(需求、分析、架构、设计)保持简单,但前提是能够满足你的project stakeholder的需要。这就意味着,除非有充分的理由,你不应该随便在模型上画蛇添足--如果你手头上没有系统认证的功能,你就不应该给你的模型增加这么一个功能。要有这样的勇气,一旦被要求添加这项功能,自己就能够马上做到。这和XP的实践“简单设计”的思想是一样的。
◆简单地建模 当你考虑所有你能够使用的图表(UML图、用户界面图、数据模型等)时,你很快会发现,大部分时候你只需要这些图表符号的一部分。一个简单的模型能够展示你想要了解的主要功能,例如,一个类图,只要能够显示类的主要责任和类之间的关系就已经足够了。不错,编码的标准告诉你需要在模型中加入框架代码,比如所有的get和set操作,这没有错,但是这能提供多少价值呢?恐怕很少。
◆公开展示模型 你应当公开的展示你的模型,模型的载体被称为“建模之墙”(modeling wall)或“奇迹之墙(wall of wonder)”。这种做法可以在你的团队之间、你和你的project stakeholder之间营造出开放诚实的沟通氛围,因为当前所有的模型对他们都是举手可得的,你没有向他们隐藏什么。你把你的模型贴到建模之墙上,所有的开发人员和project stakeholder都可以看建模之墙上的模型,建模之墙可能是客观存在的,也许是一块为你的架构图指定的白板,或是物理数据模型的一份打印输出,建模之墙也可能是虚拟的,例如一个存放扫描好的图片的internet网页。如果你想要多了解一些相关的资料,你可以看看Ellen Gottesdiener的Specifying Requirements With a Wall of Wonder。
◆切换到另外的Artifact 当你在开发一个artifact(例如用例、CRC卡片、顺序图、甚至源码),你会发现你卡壳了,这时候你应当考虑暂时切换到另一个artifact。每一个artifact都有自己的长处和短处,每一个artifact都适合某一类型的工作。无论何时你发现你在某个artifact上卡壳了,没办法再继续了,这就表示你应该切换到另一个artifact上去。举个例子,如果你正在制作基本用例,但是在描述业务规则时遇到了困难,你就该试着把你的注意力转移到别的artifact上去,可能是基本用户界面原型、CRC模型,可能是业务规则、系统用例、或变化案例。切换到另一个artifact上去之后,你可能就立刻不再卡壳了,因为你能够在另一个artifact上继续工作。而且,通过改变你的视角,你往往会发现原先使你卡壳的原因。
◆小增量建模 采用增量开发的方式,你可以把大的工作量分成能够发布的小块,每次的增量控制在几个星期或一两个月的时间内,促使你更快的把软件交付给你的用户,增加了你的敏捷性。
◆和他人一起建模 当你有目的建模时你会发现,你建模可能是为了了解某事,可能是为了同他人交流你的想法,或是为了在你的项目中建立起共同的愿景。这是一个团体活动,一个需要大家有效的共同工作才能完成的活动。你发现你的开发团队必须共同协作,才能建立一组核心模型,这对你的项目是至关重要的。例如,为了建立系统的映像和架构,你需要和同组成员一起建立所有人都赞同的解决方案,同时还要尽可能的保持它的简单性。大多数时候,最好的方法是和另一些人讨论这个问题。
◆用代码验证 模型是一种抽象,一种能够正确反映你正在构建的系统的某个方面的抽象。但它是否能运行呢?要知道结果,你就应该用代码来验证你的模型。你已经用一些HTML页面建立了接受付款地址信息的草图了吗?编码实现它,给你的用户展示最终的用户界面,并获取反馈。你已经做好了表示一个复杂业务规则逻辑的UML顺序图了吗?写出测试代码,业务代码,运行测试以保证你做的是对的。永远也别忘了用迭代的方法开发软件(这是大多数项目的标准做法),也别忘了建模只是众多任务中的一个。做一会儿建模、做一会儿编码、做一会儿测试(在其它的活动之中进行)。
◆使用最简单的工具 大多数的模型都可以画在白板上,纸上,甚至纸巾的背面。如果你想要保存这些图标,你可以用数码相机把它们拍下来,或只是简单的把他们转录到纸上。这样做是因为大多数的图表都是可以扔掉的,它们只有在你画出模型并思考一个问题的时候才有价值,一旦这个问题被解决了它们就不再有意义了。这样,白板和标签往往成为你建模工具的最佳选择:使用画图工具来创建图表,给你重要的project stakeholder看。只有建模工具能够给我们的编程工作提供价值(例如代码自动生成)时才使用建模工具。你可以这样想:如果你正在创建简单的模型,这些模型都是可以抛弃的。你建模的目的就是为了理解,一旦你理解了问题,模型就没有存在的必要了,因此模型都是可以丢弃的,这样,你根本就不必要使用一个复杂的建模工具。 ◆使用建模标准 这项实践是从XP的编码标准改名而来,基本的概念是在一个软件项目中开发人员应该同意并遵守一套共同的建模标准。遵守共同的编码惯例能够产生价值:遵守你选择的编码指南能够写出干净的代码,易于理解,这要比不这么做产生出来的代码好得多。同样,遵守共同的建模标准也有类似的价值。可供选择的建模标准有很多,包括对象管理组织(OMG)制定的统一建模语言ML),它给通用的面向对象模型定义了符号和语义。UML开了一个好头,但并不充分-就像你在Be Realistic About The UML中看到的,UML并没有囊括所有可能的的建模artifact。而且,在关于建立清楚可看的图表方面,它没有提供任何建模风格指南。那么,风格指南和标准之间的差别在何处呢。对源代码来说,一项标准可能是规定属性名必须以attributeName的格式,而风格指南可能是说在一个单元中的一段控制结构(一个if语句,一段循环)的代码缩进。对模型来说,一项标准可能是使用一个长方形对类建模,一项风格指南可能是图中子类需要放在父类的下方。
◆逐渐应用模式 高效的建模者会学习通用的架构模式、设计模式和分析模式,并适当的把它们应用在模型之中。然而,就像Martin Fowler在Is Design Dead中指出的那样,开发人员应当轻松的使用模式,逐渐的应用模式。这反映了简单的价值观。换言之,如果你猜测一个模式可能适用,你应当以这样的方式建模:先实现目前你需要的最小的范围,但你要为日后的重构留下伏笔。这样,你就以一种可能的最简单的方式实现了一个羽翼丰满的模式了。就是说,不要超出你的模型。举一个例子,在你的设计中,你发现有个地方适合使用GoF的Strategy模式,但这时候你只有两个算法要实现。最简单的方法莫过于把算法封装为单独的类,并建立操作,能够选择相应的算法,以及为算法传递相关的输入。这是Strategy模式的部分实现,但你埋下了伏笔,日后如有更多的算法要实现,你就可以重构你的设计。并没有必要因为Strategy模式需要,就建立所有的框架。这种方法使你能够轻松的使用模式。
◆丢弃临时模型 你创建的大部分的模型都是临时使用的模型--设计草图,低精度原型,索引卡片,可能架构/设计方案等等--在它们完成了它们的目的之后就再不能提供更多的价值了。模型很快就变得无法和代码同步,这是正常的。你需要做出决定:如果“同步更新模型”的做法能够给你的项目增添价值的话,那就同步更新模型;或者,如果更新它们的投入将抵消它们能够提供的所有价值(即负收益),那就丢弃它们。
◆合同模型要正式 在你的系统需要的信息资源为外部组织所控制的时候,例如数据库,旧有系统和信息服务,你就需要合同模型。一个合同模型需要双方都能同意,根据时间,根据需要相互改变。合同模型的例子有API的细节文档,存储形式描述,XML DTD或是描述共享数据库的物理数据模型。作为法律合同,合同模型通常都需要你投入重要资源来开发和维护,以确保它的正确、详细。你的目标是尽量使你系统的合同模型最少,这和XP的原则traveling light是一致的。注意你几乎总是需要电子工具来建立合同模型,因为这个模型是随时需要维护的。
◆为交流建模 建模的次要原因是为了和团队之外的人交流或建立合同模型。因为有些模型是给团队之外的客户的,你需要投入时间,使用诸如文字处理器,画图工具包,甚至是那些“被广告吹得天花乱坠”的CASE工具来美化模型。
◆为理解建模 建模的最重要的应用就是探索问题空间,以识别和分析系统的需求,或是比较和对照可能的设计选择方法,以识别可能满足需求的、最简单的解决方案。根据这项实践,你通产需要针对软件的某个方面建立小的、简单的图表,例如类的生命周期图,或屏幕顺序,这些图表通常在你完成目的(理解)之后就被丢弃。
◆重用现有的资源 这是敏捷建模者能够利用的信息财富。例如,也许一些分析和设计模式适合应用到系统上去,也许你能够从现有的模型中获利,例如企业需求模型,业务过程模型,物理数据模型,甚至是描述你用户团体中的系统如何部署的模型。但是,尽管你常常搜索一些比较正确的模型,可事实是,在大多数组织中,这些模型要么就不存在,要么就已经过期了。
◆非到万不得已不更新 你应当在你确实需要时才更新模型,就是说,当不更新模型造成的代价超出了更新模型所付出的代价的时候。使用这种方法,你会发现你更新模型的数量比以前少多了,因为事实就是,并不是那么完美的模型才能提供价值的。我家乡的街道图已经使用了5年了,5年我自己街道并没有改变位置,这张地图对我来说还是有用的。不错,我可以买一张新地图,地图是每年出一次的,但为什么要这么麻烦呢?缺少一些街道并没有让我痛苦到不得不投资买一份新地图。简单的说,当地图还管用的时候,每年花钱买新地图是没有任何意义的。为了保持模型、文档和源代码之间的同步,已经浪费了太多太多的时间和金钱了,而同步是不太可能做到的。时间和金钱投资到新的软件上不是更好吗?
确实不错的主意
以下的实践虽然没有包括在AM中,但是可以做为AM的一份补充:
◆重构 这是一项编码实践。重构,就是通过小的变化,使你的代码支持新的功能,或使你的设计尽可能的简单。从AM的观点来看,这项实践可以保证你在编码时,你的设计干净、清楚。重构是XP的一个重要部分。
◆测试优先设计 这是一项开发实践。在你开始编写你的业务代码之前,你要先考虑、编写你的测试案例。从AM的观点来看,这项实践强制要求你在写代码之前先通盘考虑你的设计,所以你不再需要细节设 计建模了。测试优先设计是XP的一个重要部分。

阅读全文

与识别和描述什么是敏捷开发方法相关的资料

热点内容
最简单双螺纹起针方法 浏览:252
种玉米的方法视频 浏览:12
双层楼梯尺寸计算方法 浏览:326
类风湿性关节炎的症状及治疗方法 浏览:490
vivo手机打电话黑屏在哪里设置方法 浏览:300
分析设备设施的风险方法是 浏览:548
红警2尤里的复仇兼容性解决方法 浏览:110
手工红包小鱼灯笼制作方法步骤及图片 浏览:89
重量分析方法包括哪两个过程 浏览:670
如何让人记住你的方法短视频 浏览:287
手机图标隐藏功能在哪里设置方法 浏览:30
样本量少用什么统计学方法 浏览:489
松下遥控器通用手机版使用方法 浏览:292
简便计算的方法字母公式 浏览:899
核素敷贴治疗方法 浏览:941
如何运用会计核算的方法 浏览:834
季度开票金额计算方法 浏览:33
电脑操作方法要教给上司吗 浏览:447
goodnote闪退解决方法 浏览:883
大乌龟编织方法视频 浏览:367