迭代化开发做为一种软件开发方法,已经逐渐的得到应用。本文的目的是介绍一种可实践操作的迭代化开发方法,这种开发方法描述了如
何以一种简单实用的方法来进行迭代化开发。通过采用本文所描述的迭代化开发的这种方法,能够降低项目组引入迭代化开发的难度和复杂度,从而尽可能的保证迭
代化开发使用成功。
1. 前言
迭代化开发做为一种软件开发方法,相比传统的瀑布式开发方法而言,具备很多无可比拟的优势。正是因为看到迭代化开发的这些优势,越来越多的开发组织正在内部推行核心业务流程的变革,将软件开发这种在开发组织中最核心的业务流程,由以前的瀑布式开发转换到迭代化开发。
在
从瀑布式开发向迭代化开发的转换中,我们发现,相对来讲,很多的开发组织将迭代化的开发过程定义得太复杂,引入的技术太多,同时加上项目组本身对迭代化开
发不熟悉,很难在短时间内掌握这些方法,就造成很多的项目组在使用迭代化开发的过程中,遇到相当多的困难甚至是最终失败。
从
我们的经验来看,要成功的引入迭代化开发,必须转变一下思维的方式,必须从最简单做起,越简单,就越容易被理解和执行,就越容易成功。也就是说,在迭代化
开发引入的过程中,不能再像以前一样,定义一个庞大而完善的迭代化开发过程让项目组去裁减,而是应该定义一个小的、简单的内核,这个内核很精简,不会包括
迭代化开发所需要执行的方方面面,只包括迭代化开发所应该执行的核心的活动。因为这个内核很精简,不需要项目组再去裁减,项目组需要做的是要么直接使用
它,要么以扩展的方式去使用它。
本文就是向大家介绍这样一种迭代化开发方法,这种迭代化开发方法尽量的简单但是够用,它只包含迭代化开发的核心的集合,以及执行这些集合的简单的方法。我们期望通过这种迭代化开发方法能够先让项目组将迭代用起来 – 因为迭代首先能够用起来,比什么都重要。
2. 迭代化开发方法
本文介绍的迭代化开发方法主要包括以下四个方面:制订迭代计划;监控迭代执行;在迭代中执行测试;进行迭代评估。
制订迭代计划主要关注我们应该如何划分迭代,如何制订每个迭代的迭代目标;监控迭代执行主要关注如何处理迭代执行中遇到的相关情况;在迭代中执行测试主要关注如何将测试和迭代目标关联起来;进行迭代评估主要关注如何评估迭代,保证每个迭代都能够有所收获。
2.1 制订迭代计划
一般来讲,在项目开始的时候,项目经理会对当前项目的工作范围、项目的周期有简单的了解,此时就可以开始制订迭代计划。
第一步,根据项目的周期,来划分当前项目总共应该有多少个迭代,并且要求每个迭代的周期是一致的。其实到底一个项目应该划分多少个迭代,是仁者见仁、智者见智的事情。所以,可以参考以下的列表来划分迭代:
项目组人数
一个迭代多长时间(月)
15 人以下
1 个月 |
15~30 人
2 个月 |
大于 30 人
3 个月 |
第
二步,将第 1
个迭代(或者最前的几个迭代)保留下来,用来安排进行需求调研。然后根据现在所知的粗粒度的需求,以技术的难度、业务的优先级为判断依据,分配到剩余的迭
代中,技术难度越大、业务优先级越高的需求,分配到越靠前的迭代中。分配完成后,再根据需求之间的依赖关系、工作量这两个因素进行调整。此时,可以得到以
下示例的迭代计划(假设第 1 个迭代留给需求调研):
迭代
分配的需求
第 2 个迭代
功能模块 A;功能模块 C;功能模块 D…… |
第 3 个迭代
功能模块 B;功能模块 E;功能模块 H…… |
第 n 个迭代
功能模块 F;功能模块 G…… |
第
三步,执行第 1
个迭代(或者是要进行需求调研的迭代),执行完成后,得到详细的需求。此时,不管以何种方法来记录需求,唯一要做的就是将这些需求条目化。也就是将这些需
求,划分成一条一条的这种形式,然后,再以条目化之后的需求,去更新在第二步中分配的粗粒度的需求。此时,可以根据情况对各个迭代中分配的需求进行调整
(假设第 1 个迭代留给需求调研):
迭代
分配的需求
第 2 个迭代
第 1 条需求;第 2 条需求;第 5 条需求…… |
第 3 个迭代
第 4 条需求;第 6 条需求;第 11 条需求…… |
第 n 个迭代
第 7 条需求;第 10 条需求;第 18 条需求…… |
总结下来,制订迭代计划的过程如下图:
图 1:迭代计划的过程图
2.2 监控迭代执行
在
迭代中,按照分配给这个迭代的需求,以此作为当前迭代的范围,开始按照需求、分析设计、开发和测试这个流程执行,这个流程和瀑布式是一样的,所以就按照项
目组以前的瀑布式方式执行就可以,项目组不需要做任何的改变。在监控迭代执行的时候,只需要注意的是以下几个方面的情况:
分配给迭代的需求如果不能按时开发完成,应该如何处理
迭
代是时间盒的,也就是说,每个迭代有明确的开始和结束时间,并且到达结束时间时,一定要结束这个迭代,不能延期,这是做迭代的时候遵循的原则之一。所以,
此时就会产生一个问题,那就是如果在制订迭代计划的时候,分配给这个迭代的需求太多,到迭代后期的时候才发现完成不了,此时应该如何处理?答案就是,缩减
当前迭代的范围,按时结束迭代。
迭代中测试出来的错误,来不及修改完成,应该如何处理
每次迭代中,均会执行测试,有些时候,测试执行完成,但是测试得到的缺陷,却无法在当前迭代结束前修改完成,此时,应该如何处理?答案就是,迭代中的测试要执行完毕,但是错误的修改,可以安排到下一次迭代中进行。
迭代执行过程中,如果发生需求变更,应该如何处理
自
从有软件开发这个活动,变更就从来没有停止过,变更已经是软件开发这个人类认识自然的这个活动中的规律之一,在迭代中也不例外,所以,当在迭代中发生需求
变更时,应该如何处理?此时,分为两种情况,第一种情况是,如果这个需求变更是变更以后的迭代中分配的那些需求的,那么在这种情况下,当前迭代不用考虑;
第二种情况是,如果这个需求变更是变更当前迭代中分配的这些需求的,那么此时要进行判断,如果能够在当前迭代结束前完成此变更,那么就将此变更纳入到当前
迭代中,如果不能在当前迭代结束前完成此变更,那么在当前迭代中就不用考虑。
迭代中开发和测试要配比
要以类似于“权责配比”的原则来处理,即当前迭代中开发那些需求,那么就应该将针对这些需求的测试放到当前的这个迭代中。不要在一个迭代中针对这些需求做开发,而将针对这些需求的测试放到另外一个迭代中。
2.3 在迭代中执行测试
因为每个迭代都是一个瀑布,开发完成后要发布可执行的工作版本,所以在每个迭代中都需要执行测试。在每个迭代中执行测试,可以参考以下的过程:
图 2:在每个迭代中执行测试的过程
开
发结束后发布工作版本,测试针对工作版本进行测试。可以看到,除了在迭代中要执行测试之外,其它的地方和瀑布式开发是一样的,项目组按照以前的方式执行就
可以了。在测试用例中,我们强调从需求生成测试用例,即当前迭代中开发什么,就测试什么,根据分配到迭代中的需求,来创建测试用例:
图 3:根据分配到迭代中的需求,来创建测试用例。
在创建测试用例的过程中,需要创建测试用例到需求的映射:
需求
对应的测试用例
需求 1
测试用例 1;测试用例 2 |
需求 2
测试用例 3;测试用例 4;测试用例 5 |
需求 n
测试用例 n…… |
我们在迭代评估中会用到此映射表。
2.4 进行迭代评估
在每个迭代结束的时候,一个重要的工作就是进行迭代评估。迭代评估就像是一面镜子,能够让相关人员,包括项目组自己,看到当前项目的状态,通过迭代评估,能够保证项目行驶在正确的轨道上。迭代评估的时间一般为半天时间。最好让客户/最终用户参与到迭代评估中。
我们以测试结果来进行评估。对于分配到迭代上的每一条需求,如果和它相对应的测试用例均通过,那么就代表此需求通过。当迭代结束时,根据刚才的判断方法,可以看到每一条需求是通过还是不通过,如果不通过,一定要找出原因,总结经验教训,在以后加以改进:
分配到当前迭代的需求
是否通过
如果没有通过,原因是什么
需求 1
|
|
需求 2
|
|
需求 n
|
|
3. 结论
可
以看到,在这种迭代化开发方法中,我们主要关注制订迭代计划、监控迭代执行、在迭代中进行测试和进行迭代评估这四个方面。在迭代评估中,我们就根据简单的
规则划分迭代,然后将需求分配到迭代中即可,操作比较简单;在监控迭代执行中,只需要关注相关情况的处理;在迭代中进行测试,主要的改变是要在迭代中执行
测试,并且要在测试用例和条目化需求之间建立关系;在进行迭代评估中,要根据测试的结果找出需求没有通过的原因。
通过执行以上的这些关键活动,项目组就能够将迭代化开发以简单的方式使用起来,降低项目组引入迭代化开发的难度和复杂度,从而尽可能的保证迭代化开发使用成功。当项目组将迭代使用起来之后,再根据情况进行扩展,相应来讲,就简单得多。
参考资料
关于作者
|
|
|
陈
国伟,IBM 中国软件开发中心实验室服务,高级软件工程师,2005 年加入 IBM,专注于 Rational 软件,拥有
RUP/RMUC/OOAD 认证。目前主要致力于为客户提供软件工程的方法、技术和工具的支持与服务,关注的领域有 Java 开发、RUP
实施、用例建模、OOAD、测试以及配置和变更管理。在加入 IBM 之前,在 ERP、保险、电信等大型软件项目上拥有 6 年开发和管理经验。
|
分享到:
相关推荐
迭代化软件开发是一种将整个软件开发过程分解为一系列短周期迭代的敏捷方法论,旨在通过快速反馈循环持续改进软件产品。相较于传统的瀑布模型,迭代化开发能够更早地识别和缓解风险,提高项目透明度,并促进团队之间...
总的来说,雅克比迭代法是一种实用的数值计算技术,尤其适用于大型稀疏线性方程组,因为其计算量相对较小,适合于并行计算。掌握这种方法对于理解和应用数值计算至关重要,而提供的C++源代码和相关资源无疑是学习和...
总之,React Native作为一种跨平台移动APP开发方法,通过JavaScript和React库,实现了在iOS和Android之间的代码复用,降低了多平台开发的难度和成本。虽然存在一定的局限性,但随着社区的不断发展和完善,React ...
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式是通过接口实现的,这使得我们可以遍历任何实现了`Iterable`接口的对象,例如集合框架中的`...
它在解决大规模问题时,由于其并行计算的潜力,成为了一种实用的工具。 **一、实验目的** 1. **熟悉 Matlab 基本操作**:Matlab 是一个强大的数值计算平台,提供友好的图形用户界面和丰富的数学函数库,用于进行...
本文将深入探讨设计模式中的迭代器模式,这是一种在Android APK开发中非常实用的模式,特别是在处理集合数据时。 迭代器模式是一种行为设计模式,它的主要目的是提供一种方法来顺序访问聚合对象的元素,而又不暴露...
该程序通过精心设计的参数初始化、迭代计算、归一化处理,以及最后的模式分析,实现了一种高度精确和实用的激光谐振腔模拟方法。这对于光学工程师和理论研究者来说,是理解和优化激光谐振腔设计不可或缺的技术手段。
迭代是另一种编程技术,它涉及重复执行一系列步骤,直到满足某个条件为止。在递归迭代搜索中,这意味着程序会一次处理一个目录,不断地进行下一次递归调用,直到所有子目录都被搜索过。这种结合了递归和迭代的方法...
这种基于单频GPS接收机的自迭代定位算法的提出,不仅为小型飞行器提供了一种新的导航解决方案,同时也为GPS定位系统的未来开发提供了重要的参考和借鉴。随着技术的不断进步,我们可以预见,此类算法将在提高定位精度...
在电信设备领域,滤波多音调制...总的来说,这份资料详细介绍了滤波多音调制系统中的一种迭代信道估计接收算法,为理解和实施此类技术提供了理论基础和实用方法,对从事无线通信研究和开发的人员具有很高的参考价值。
迭代器在编程中是一种非常重要的工具,特别是在处理集合类数据结构时,如数组、列表、映射等。在Java世界中,迭代器主要用于遍历集合中的每一个元素,而无需暴露集合的内部结构。Struts2作为一款流行的MVC框架,其...
针对这些特点,提出了一种分布式迭代的定位方法,旨在通过迭代计算的方式,逐层逼近节点实际位置,以达到无需依赖GPS即能定位的目标。 分布式迭代无线传感器网络节点定位算法特别适合于大规模网络和复杂应用场景,...
【发明名称】:一种基于微服务架构的税务接口快速开发方法 【技术领域】:本发明涉及计算机在税务领域的应用,特别是关于利用微服务架构进行税务接口的高效开发。 【背景技术】: 随着信息技术的发展,税务系统的...
牛顿迭代法是一种高效且广泛应用的求解非线性方程根的数值方法。在这个项目中,我们聚焦于使用C#语言来实现牛顿迭代法,以解决非线性方程组的问题。在Visual Studio 2010(VS2010)环境下,开发了具有用户界面的.NET...