现代软件过程概述
作者:徐建祥([email protected])
时间:2006/09/22
来自:http://www.anymobile.org
1、软件过程
随着软件系统的规模和复杂性的增加,其开发成本和风险随之增加,软件的质量问题已成为制约软件发展的关键因素之一。
所谓软件过程,即软件项目的开发过程,是指软件生命周期中,用于开发和维护软件产品的一系列过程,它与团队的组织管理以及开发技能相辅相成,全面提升软件产品的质量。
近年来,软件过程日益得到重视,国际软件界的敏捷、统一热也在持续升温。与传统的开发过程相比,敏捷过程更强调快速灵活反应,主动迎接和适应变化,主张更紧密的客户与开发商协作,以人为本的可持续发展,典型的有XP(极限编程)、FDD(特征驱动开发)等;统一软件过程以RUP为代表,采用OO技术对软件开发过程本身进行业务建模,集成了迭代开发、用例驱动、UML可视化建模、OOAD、架构设计、项目管理等许多主流先进的当代软件工艺。
在软件项目开发过程中,应该能够识别、分析不同软件项目的特点,采用相对适合的开发实践来适应软件开发过程,保证对软件开发的有效支持,如RUP与XP的融合。
2、XP,极限编程
极限编程(eXtreme Propgramming,XP)是由Kent Beck在1996年开创,是一种演进式的原型化方法,以最大化发挥人的能量为核心目标,以“小步快走”的逻辑指导开发,具有沟通高效、设计简单、反馈迅速等特点,是一种轻量级、敏捷的过程方法。
极限编程基于四个价值目标:沟通(communication)、简化(simplicity)、反馈(feedback)和勇气(courage),由12个最佳实践为这四个价值提供支持。
极限编程的生命周期包括4个基本活动:编码(coding)、测试(testing)、聆听(listening)、设计(designing)。
2.14个价值目标
沟通:让开发人员集体负责所有代码并结队工作,鼓励与客户及团队内部保持沟通。
简化:鼓励只开发当前的功能,避免过多的文档,专注于最小化解决方案,做好为为新特性改变设计,在系统隐喻和代码规范下不断重构的准备。
反馈:通过单元测试和功能测试获得快速反馈。
勇气:提倡积极面对现实和处理问题的勇气,拥抱变化。
2.212个最佳实践
(图片1 XP最佳实践)
有计划的开发:通过结合使用优先级“故事”和技术估算,确定下一版本的功能。
小型发布:以小的增量版本经常向客户发布软件。
系统隐喻:隐喻是一个高层次的系统构想;需要不断的细化架构,来指导全部开发。
简单设计:通过保持代码简单从而保证设计简单。不断的在代码中寻找复杂点并且立刻进行移除。
测试驱动:“先测试,后编码”。用户编写测试内容以对"故事"进行测试。程序员编写测试内容来发现代码中的任何问题。在编写代码前先编写测试内容。
重构:这是一项简化技术,用来移除代码中的重复内容和复杂之处。
结对编程:团队中的两个成员使用同一台计算机开发所有的代码。一个人编写代码或者驱动,另一个人同时审查代码的正确性和可理解性。
集体代码所有权:任何人都拥有所有的代码。提高代码透明度,增强团队合作精神。
持续集成:每天按任务多次创建和集成系统,随着需求变化,进行不断的回归测试。
每周40小时工作制:程序员在疲劳时无法保证最高效率。连续两周加班是绝对不允许的,否则会影响工作效率。
现场客户:至少有一名真实的客户全天候工作于开发环境中,帮助定义系统、编写测试内容并回答问题。
编码规范:程序员采用统一的编码规范。
总体来说,XP部分满足了CMM2~3级关键过程域(KPA)的要求,XP侧重与过程和技术,CMM更注重组织和管理。
3、FDD,特征驱动开发
特征驱动开发(Feature Drive Develop,FDD),Together创始人Peter Coad所创。通过特征来制定开发计划,以每日构建为核心,强调按特征分步开发和交付。一个特征就是一个小的、具有客户价值的功能,通常表示为<action><result><object>。
4、RUP,Rational统一过程
迭代软件开发的发展背景:软件的不确定和高风险等特性,使得传统的瀑布式开发力不从心;迭代有助于尽快发现和解决风险;迭代有助于控制项目的节奏,加快反馈,增强项目的控制力度,实现过程的有序化;迭代符合人们对事物的认识逐步加深,解决问题的能力随经验逐步提高。
Rational统一过程(Rational Unified Process,RUP),是用例驱动、以体系结构为中心,迭代、增量的软件开发过程。适合大、中型项目。
RUP强调采用现代软件开发的一些最佳实践,作为一种降低开发新软件所带来的内在风险的方式。这些最佳实践包括:
1)迭代开发;
2)管理需求;
3)使用基于组件的构架;
4)可视建模;
5)持续的质量验证;
6)控制变更。
RUP是一个迭代过程,确定了任何软件开发项目的四个阶段:初始阶段、精化阶段、构建阶段和交付阶段。每个阶段包括一次或多次迭代;每一次迭代都会生成更加接近最终产品的可执行版本。
a、初始阶段:识别和规避项目的主要风险,建立用例模型框架,并制定里程碑日期的阶段计划;
b、精化阶段:分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素,完成部分优先级最高的用例开发;
c、构建阶段:分为多个迭代,逐步完成不同优先级的用例开发,核心Case->高风险Case->次核心Case->其它Case;
d、交付阶段:进行各种功能、性能测试,进行产品化、部署,完成整个系统的开发工作。
(图片2 RUP概述图)
RUP迭代开发过程:
a、第一次迭代
1)捕获需求
2) 建立初始的领域模型
3)建立用例模型框架
4)制定开发计划
b、第二次迭代
1)关键用例的Robustness分析与交互建模
2)体系结构设计
3)建立类模型
4)关键用例的开发与测试
5)完善用例模型
c、第n次迭代
完成所有用例的分析、设计与开发。
d、最后的迭代
1)整体测试:进行各种功能、性能和压力测试。
2)部署与安装:生成相应的部署图。
3)产品化:进行一些产品化的包装。
注:每一次迭代之后,都应该交付一个可以运行的中间版本。
(图片3 RUP迭代流)
5、SPP,精简并行过程
精简并行过程(Simplified Parallel Process,SPP),对CMMI 3级以内各过程域的内容和要求作了“精简”处理,包括19个过程域、40余个规程和近60个文档模板。强调在产品生命周期之内,项目管理过程、项目研发过程和机构支撑过程“并行”开展。
(图片4 SPP)
软件过程改进解决方案(SPIS)――林锐发明。
核心组成部分
1)软件过程改进咨询服务;
2)软件工程与项目管理培训;
3)基于Web的集成化项目管理工具,Future。
Future采用CMMI和SPP为参考标准。主要功能包括项目规划、项目监控、质量管理、配置管理、需求管理、日常工作管理等。
网站:http://www.chinaspis.com