为了确保软件质量和提高产品竞争力,软件组织需要规范软件开发过程、实施软件过程管理。软件过程管理可以为快速开发高质量软件、有效地维护软件运行等各类活动提供指导性框架、实施方法和最佳实践。
全书共分为10章,全面阐述软件过程管理的各个方面。首先说明了软件过程规范、成熟度及其相关的概念和理论,包括软件过程标准体系。然后,在此基础上,深入讨论软件过程的组织管理、需求管理、项目管理、质量管理、技术管理和集成管理等流程、方法和实践,并进一步探讨软件过程评估和改进的框架、模型和实施细节,最后,通过具体的应用实践对软件过程管理做全方位的阐释。
本书内容丰富、实用,并提供了大量的实例,内容涉及到软件过程管理工作的各个层次。本书可作为高等学校的计算机软件专业和相关专业的教材,也适合软件企业中各类管理和软件工程技术人员的学习。
前言
近10年来,软件过程越来越成为人们关注的焦点,它正在打破过去人们已经习惯的面向任务的思维方式,逐渐加强面向过程的思考,软件开发和维护的运作以过程为中心的方式正在进行。正如软件工程领域领袖级人物、能力成熟度模型(CMM)奠基人瓦茨·汉弗莱(Watts Humphrey)所说,要解决软件危机,首要任务是把软件活动视作可控的、可度量的和可改进的过程。
其实,通过下面这个“七人分粥”寓意的小故事,就很清楚地说明了软件过程的重要性。
有7个人曾经住在一起,每天分一大桶粥。要命的是,粥每天都不够吃。
(1) 一开始,指定一人负责分粥事宜,很快大家发现,这个人为自己分的粥最多最好,于是推选出一个道德高尚的人出来分粥。强权就会产生腐败,大家开始挖空心思去讨好他,搞得整个小团体乌烟瘴气,显然这个方法不行。
(2) 指定一个人分粥和一个人监督,起初比较公平,但到后来分粥的人与监督的人从权力制约走向权力合作,于是只有这两个人能吃饱,这种方法也失败了。
(3) 谁也信不过,干脆大家轮流主持分粥,每人一天。虽然看起来平等了,但是,每人在一周中只有1天吃得饱,其余6天都吃不饱,而且每天粥还有剩的,这种方法造成资源浪费。
(4) 民主选举一个3人分粥委员会和一个4人监督委员会,实行集体领导,公平是做到了。但是,监督委员会经常提出各种议案,分粥委员会据理力争,等粥分完时,粥早就凉了,此方法效率太低。
(5) 最后想出来一个方法——每个人轮流值日分粥,但分粥的那个人要最后一个领粥。令人惊奇的是,结果7只碗里的粥每次都是一样多,就像用科学仪器量过一样。因为,每个主持分粥的人都认识到,如果每只碗里的粥不相同,他无疑将拿到那份最少的。
同样是7个人,不同的流程和方法,就会造成迥然不同的结果,包括效率、成本上的差异。从这个故事可以看出,有什么流程,就有什么结果,流程决定了结果。
业务流程重组(BPR)是另外一个例子,许多企业通过业务重组拯救了自己或从经营业绩的低谷走出来。业务流程重组,就是改变过去纯目标管理的思想,强调管理过程的重要性,实现从职能管理到面向业务流程管理的转变。业务流程重组注重整体流程的优化,确定了“组织为流程而定,而不是流程为组织而定”的指导思想,充分发挥每个人在整个业务流程中的作用。
软件过程管理体现在过程模型、规范、问题处理方法和具体实践等一系列内容之上,但首先体现在组织的文化中,即建立过程管理的先进理念。
(1) 以客户为导向、以过程为中心。
(2) 好的过程就能产生好的产品。
(3) 尊重流程,自上而下,依赖流程。
(4) 只关注质量过程而不是质量结果。
过程管理的先进文化一旦在组织中建立起来,其他问题就迎刃而解。软件过程管理存在的最大障碍可能不在究竟用什么过程模型或过程管理系统,而是在于软件企业自身传统的管理理念和思维方式,树立和保持企业全体人员的正确的、先进的理念,比推广一个管理工具要难得多。所以,软件过程管理的关键是建立正确的过程管理文化。
在当今互联网蓬勃发展的时代,软件企业面临着巨大的挑战。顾客需求瞬息万变、全球性竞争环境和技术创新不断加速等,导致产品生命周期不断缩短、商业模式不稳定,软件过程管理必须适应这种变化。CMM(能力成熟度模型)没有几年前那么火热而开始受到了一些冷落,敏捷过程管理越来越受到推崇。同时,IBMRational的统一过程(RUP)管理和微软公司的解决方案框架(MSF)在保持其核心内容的前提下,也在不断进行调整,加入新的内容,以适应软件商业模式和开发模式的变化。所以,从这个意义上说,没有一成不变的软件过程管理模式,也没有放之四海而皆准的、通用的软件过程管理模式。软件过程管理模式应该是在不断发展的,就每个具体的软件组织和企业,应该选择适合自己的过程管理模式,并且也可能不只是选择一种模式,而是选择多种模式,以一种模式为主,对其他模式兼收并蓄,形成更有效的软件过程自定义模式。
本书正是从上述基本思想出发,来讨论软件过程管理,以期对读者及其所在的软件组织有更大的启发和帮助。
全书共10章,全面介绍了软件过程管理的各个方面,包括软件过程规范、软件过程的组织管理、项目管理、质量管理和需求管理等,最后介绍了软件过程评估和改进、软件过程管理实例。
第1章介绍了软件过程规范的内容、影响和作用,全面阐述了软件生命周期的过程需求和过程标准体系。最后介绍了基于UML、IDEF3、Agent以及SOA等各种方法的软件过程建模。
第2章相继介绍了软件过程不成熟的特点、软件过程成熟的标准、能力成熟度模型(CMM/ CMMI)的基本内容、系统工程能力模型和集成化产品开发模型。并就过程成熟度级别及其特征、可视性和过程能力等展开讨论,包括CMM/CMMI过程域。最后介绍了软件过程文化、环境和过程框架等。
第3章软件过程组织管理的描述,包括组织过程焦点、过程定义、过程剪裁等。着重讨论了PSP和TSP过程框架,包括工作流程、计划、设计和实现等具体内容。
第4章软件过程的需求管理,主要介绍了软件需求工程、需求开发和管理的模型、需求管理工作流程、需求获取的过程和方法、需求定义过程和需求的确认、跟踪和变更控制。
第5章描述了软件过程的技术架构及其层次、内容等,重点讨论了软件过程的资源管理、技术路线、问题解决的系统方法,包括原因分析和缺陷分析、决策分析与决定、技术解决计划的建立和实施、知识传递和各类过程管理的技术工具等。
第6章介绍了项目启动和项目实施过程需要解决的各种问题。主要内容包括了项目的配置管理、风险分析、资源和成本估算、项目跟踪等。
第7章说明了质量控制的重要性,也介绍了控制软件质量的方法和手段。通过本章的学习可以基本掌握软件评审的方法和技术,以及软件缺陷的分析和有效移除。
第8章软件过程的集成管理,主要介绍了项目的集成管理流程。重点内容包括产品集成的过程管理、集成产品开发模式、产品及周期优化方法、IPD过程框架模式以及市场过程管理、流程重整、产品重整和新产品开发等。
第9章首先阐述了软件过程评估和改进的基本思想和方法,然后相继介绍了各种常用的评估和改进模型,如ISO/IEC 15504、Bootstrap、Trillium和CMM/CMMI的评估体系以及质量改进范例、IDEAL模型、Raytheon方法以及6 Sigma方法等过程改进模型和方法。
第10章通过具体实例进一步阐述了软件过程的管理,介绍了IBMRational 业务驱动开发的RUP、微软公司MSF、敏捷过程管理、面向构件的软件过程和软件过程的自定义体系。
每一章的最后都有本章的小结和思考题,以帮助读者更好理解每一章的内容。
本书特别重视理论与实践相结合,使读者既能领会基本原理,又能掌握原理的实际应用。因此,它既适合软件公司中的软件工程师和管理人员阅读,也适合软件质量管理的专业人员和实践人员。同时,本书很适合作为计算机软件、软件工程学科大中专学校的教材。
全书由朱少民主编、审稿和定稿。第1、2、5、8、9、10章由朱少民编写,第3、4、6、7章由左智编写。感谢作者的家人、作者所在的网迅(WebEx)公司的大力支持,特别感谢清华大学出版社丁岭主任所提供的合作机会,来填补目前图书市场在“软件过程管理”教材方面的空白。
由于水平和时间的限制,本书不可避免会出现一些错误、遗漏以及中英文术语不一致的地方,请读者见谅并恳请提出宝贵意见。
作者
2006年10月
目录
第1章软件过程规范
1.1软件过程
1.1.1过程
1.1.2软件过程的分类和组成
1.1.3软件过程定义的层次性
1.2过程规范
1.2.1什么是过程规范
1.2.2过程规范的内容和示例
1.2.3过程规范的影响和作用
1.3软件生命周期的过程需求
1.3.1软件工程过程
1.3.2软件支持过程
1.3.3软件管理过程
1.3.4软件组织过程
1.3.5客户供应商过程
1.4软件生命周期标准
1.4.1ISO/IEC标准体系
1.4.2IEEE标准体系
1.4.3标准体系的全貌图
1.5软件过程建模
1.5.1软件过程模型
1.5.2基于UML的过程建模
1.5.3基于IDEF3的过程建模
1.5.4基于Agent的软件过程建模
1.5.5基于SOA的软件过程模型
1.6小结
1.7习题
第2章软件过程成熟度
2.1过程成熟度标准
2.1.1软件过程不成熟的特点
2.1.2软件过程成熟的标准
2.2能力成熟度模型概述
2.2.1CMM介绍
2.2.2系统工程能力模型
2.2.3集成化产品开发模型
2.2.4CMMI的建立和目标
2.3过程成熟度级别
2.3.1成熟度等级的行为特征
2.3.2理解成熟度等级
2.3.3成熟度等级的过程特征
2.3.4CMMI过程域
2.3.5CMM和CMMI过程域的比较分析
2.4软件过程的可视性
2.5过程能力和性能预测
2.6软件过程框架
2.6.1软件过程环境和过程框架
2.6.2软件过程文化
2.6.3PSP/TSP和CMM组成的软件过程框架
2.7小结
2.8习题
第3章软件过程的组织管理
3.1组织过程焦点
3.1.1组织过程焦点的基础
3.1.2组织过程焦点的活动
3.1.3软件过程焦点的评估
3.2组织过程定义
3.2.1软件过程定义基础
3.2.2剪裁标准软件过程的指南和准则
3.3PSP过程框架和成熟度模型
3.3.1PSP原则和思想
3.3.2PSP过程框架
3.3.3PSP成熟度模型
3.4PSP设计与实践
3.4.1PSP0/PSP0.1——个体度量过程
3.4.2PSP1/PSP1.1——个体计划过程
3.4.3PSP2/PSP2.1——个体质量管理过程
3.4.4PSP3——个体循环过程
3.5TSP的结构和启动过程
3.5.1TSP的原则和思想
3.5.2TSP结构
3.5.3TSP启动过程
3.6TSP工作流程
3.6.1策略和计划
3.6.2需求
3.6.3设计和实现
3.6.4测试和后期维护
3.7小结
3.8习题
第4章软件过程的需求管理
4.1需求管理的模型和流程
4.1.1软件需求工程概述
4.1.2需求过程系统模型
4.2需求开发
4.2.1需求获取的过程和方法
4.2.2基于用例的需求获取和分析
4.2.3需求定义
4.3需求管理
4.3.1需求确认
4.3.2需求跟踪
4.3.3需求变更控制
4.4小结
4.5习题
第5章软件过程的技术管理
5.1软件过程的技术架构
5.1.1过程技术架构的层次和内容
5.1.2软件过程资源的管理
5.2软件过程的问题分析和决策方法
5.2.1过程问题解决的系统方法
5.2.2原因分析和缺陷分析
5.2.3决策分析与决定
5.3软件过程的技术路线
5.3.1软件项目过程的技术解决流程
5.3.2技术解决计划的建立和实施
5.3.3开发设计
5.3.4编程和单元测试
5.3.5验证、确认与测试
5.4知识传递
5.5软件过程管理工具
5.5.1需求管理工具
5.5.2面向对象的分析设计工具
5.5.3配置管理和变更管理工具
5.6小结
5.7习题
第6章软件过程的项目管理
6.1软件配置管理
6.1.1配置管理过程
6.1.2基线控制
6.1.3版本控制
6.1.4变更控制
6.2项目估算和资源管理
6.2.1规模度量
6.2.2成本估算
6.2.3资源管理
6.3项目风险评估
6.3.1风险识别
6.3.2风险分析和评估
6.4制定项目计划
6.4.1工作分解结构表(WBS)
6.4.2日程和人员安排
6.5项目跟踪和监督
6.5.1项目跟踪的重要性
6.5.2项目过程的跟踪和控制
6.6小结
6.7习题
第7章软件过程的质量管理
7.1质量管理概述
7.2软件质量方针和计划
7.2.1软件质量方针
7.2.2质量计划
7.3软件评审过程和方法
7.3.1角色和责任
7.3.2软件评审过程
7.3.3软件评审方法
7.4缺陷分析和预防
7.4.1缺陷分析
7.4.2鱼骨图
7.4.3缺陷预防
7.5质量度量
7.5.1度量要素
7.5.2基于缺陷的质量度量
7.6PSP过程质量管理
7.6.1过程质量度量
7.6.2缺陷移除和预防
7.7小结
7.8习题
第8章软件过程的集成管理
8.1集成项目管理
8.1.1项目过程的集成管理
8.1.2集成管理流程
8.2集成项目的合成计划
8.2.1合成项目计划
8.2.2合成项目计划的管理
8.2.3合成项目计划的实施
8.2.4组间协调
8.3产品集成的过程管理
8.3.1软件产品工程
8.3.2产品集成的管理流程
8.3.3软件产品工程的实践
8.4集成产品开发模式
8.4.1IPD产生的背景
8.4.2产品及周期优化方法
8.4.3IPD核心思想
8.4.4IPD的过程框架模式
8.5IPD方法应用和实践
8.5.1IPD的方法体系
8.5.2IPD的方法启动和建立
8.5.3市场过程管理
8.5.4流程重整
8.5.5产品重整
8.5.6新产品开发
8.6小结
8.7习题
第9章软件过程的评估和改进
9.1过程模型的剪裁
9.1.1软件开发组织的类型
9.1.2CMMI表示方法
9.1.3模型剪裁的用途
9.1.4连续式表示模型的剪裁
9.2软件过程度量
9.2.1过程度量的内容
9.2.2过程度量的流程
9.2.3过程度量的方法
9.2.4过程度量技术
9.2.5过程能力度量
9.2.6软件过程生产率的度量
9.3过程评估参考模型
9.3.1ISO/IEC 15504评估模型
9.3.2Bootstrap评估模型
9.3.3Trillium评估模型
9.3.4CMM/CMMI评估体系
9.4过程评估
9.4.1软件过程评估的目标和期望
9.4.2软件过程评估的内容和范围
9.4.3软件过程评估的方式和类型
9.4.4软件过程评估的方法
9.5过程改进的模型和方法
9.5.1质量改进范例
9.5.2过程改进的IDEAL模型
9.5.3过程改进的Raytheon方法
9.5.4过程改进的6 Sigma方法
9.6组织和技术革新
9.7软件过程改进的实施
9.7.1过程改进的原则和策略
9.7.2过程改进的组织支持
9.7.3软件过程改进计划
9.7.4过程改进的具体实施步骤
9.7.5软件过程改进的自动化实现
9.8小结
9.9习题
第10章软件过程的管理实践
10.1IBMRational业务驱动开发的过程管理
10.1.1RUP的迭代过程
10.1.2提高过程的适应性
10.1.3需求开发和质量改进
10.1.4架构设计和组件复用
10.1.5跨团队协作
10.1.6过程实施的最佳实践
10.2微软公司的软件开发过程模式
10.2.1MSF的过程模型
10.2.2MSF的团队模型
10.2.3MSF过程模型的特点和原则
10.2.4MSF过程模型的应用
10.3敏捷模型的软件过程管理
10.3.1敏捷方法的过程模型
10.3.2敏捷过程的最佳实践
10.4面向构件的软件过程
10.4.1面向构件软件过程的思想
10.4.2面向构件软件过程的阶段划分
10.5软件过程的自定义体系
10.5.1过程模式的对比分析
10.5.2自我定义的理想管理过程
10.6小结
10.7习题
附录A软件过程规范示例
A.1总则
A.2项目管理过程规范
A.2.1项目立项与计划
A.2.2项目实施
A.2.3项目结束
A.3开发过程规范
A.3.1过程总述
A.3.2需求分析阶段
A.3.3系统架构设计阶段
A.3.4细化设计阶段
A.3.5编码和单元测试
A.3.6系统集成与集成测试
A.3.7系统测试
A.3.8验收测试与安装
A.3.9维护
A.4需求变更管理过程规范
A.4.1过程总述
A.4.2过程规范
A.5配置管理过程规范
A.5.1配置管理的目标
A.5.2配置管理过程规范
A.6附件
附录BCMMI术语
附录C
参考文献