本书以软件过程管理为核心,围绕软件过程改进的5个方面展开描述,循序渐进地提出软件过程改进模型,为软件开发组织提高管理能力提供了引路的“灯塔”。本书首先描述了软件过程管理框架及其在软件过程评估中的作用,阐述了开始有效过程改进的步骤;其次确定了软件过程管理所需要的活动;接着又提出相关概念,确定开发过程和管理及控制过程所需要的技术和管理;随后介绍了对软件过程进行量化控制的方法;最后引导人们如何防患于未然,将工作重心从解决问题转移到预防问题。
本书是美国卡内基·梅隆大学软件工程研究所推荐教材,适合软件学院和高校计算机相关专业的软件工程相关课程使用。亦是软件开发人员和开发经理的提高级读物。
第I部分 软件过程成熟度
第1章 软件成熟度框架
1.1软件过程改进
1.2过程成熟度级别
1.3优化过程中的人员
1.4对优化过程的需求
1.5小结
参考文献
第2章 软件过程改进的原则
2.1过程透视
2.2 6项基本原则
2.3对软件过程的一些常见误解
2.4实施软件过程改进的策略
2.5小结
参考文献
第3章 软件过程评估
3.1评估概述
3.2评估阶段
3.35项评估原则
3.4评估过程
3.5评估实施
3.6实现考虑
3.7小结
参考文献
第4章 初始过程
4.1初始过程的特征
4.2一个浑沌项目的案例研究
4.3软件组织浑沌的原因
4.4软件过程熵
4.5出路
4.6小结
参考文献
第Ⅱ部分 可重复过程
第5章 软件组织管理
5.1承诺规章
5.2管理系统
5.3建立项目管理系统
5.4小结
参考文献
第6章 项目计划
6.1制定项目计划的原则
6.2项目计划内容
6.3规模度量
6.4估计
6.5影响生产率的因素
6.6进度安排
6.7项目跟踪
6.8开发计划
6.9计划模型
6.10最后的考虑事项
6.11小结
参考文献
第7章 软件配置管理(一)
7.1配置管理的意义
7.2软件产品术语
7.3基本的配置管理功能
7.4基线
7.5配置管理职责
7.6对自动化工具的需求
7.7小结
参考文献
第8章 软件质量保证
8.1质量管理
8.2 SQA的作用
8.3启动SQA程序
8.4 SQA计划
8.5 SQA需要考虑的问题
8.6 SQA人员
8.7独立的验证和确认
8.8小结
参考文献
第Ⅲ部分 已定义过程
第9章 软件标准
9.1定义
9.2定义软件标准的原因
9.3标准的效益
9.4主要标准举例
9.5软件标准的建立
9.6标准与指南
9.7小结
参考文献
第10章 软件审查
10.1评审的类型
10.2审查的目标
10.3审查的基本原则
10.4审查的实施
10.5审查的培训
10.6报告和跟踪
10.7需要考虑的其他问题
10.8启动审查程序
10.9未来的方向
10.10小结
参考文献
第11章 软件测试
11.1定义
11.2软件测试的原则
11.3软件测试的类型
11.4测试计划
11.5测试开发
11.6测试的执行和报告
11.7测试的工具和方法
11.8实时测试
11.9测试的组织
11.10小结
参考文献
第12章 软件配置管理(二)
12.1软件配置管理计划
12.2软件配置管理的问题
12.3 SCM支持功能
12.4需求阶段
12.5设计控制
12.6实现阶段
12.7操作数据
12.8测试阶段
12.9对工具的配置管理
12.10配置记录
12.11软件配置审计
12.12小结
参考文献
第13章 定义软件过程
13.1过程标准
13.2定义
13.3软件过程模型的层次
13.4模型的规定和描述性使用
13.5软件过程构架
13.6软件过程的关键问题
13.7初级过程构架
13.8更大的过程模型
13.9详细的过程模型
13.10实体过程模型
13.11过程模型视图
13.12过程定义的建立和使用
13.13基本的过程指导原则
13.14小结
参考文献
第14章 软件工程过程组
14.1软件过程的变更
14.2 SEPG的作用
14.3建立标准
14.4过程数据库
14.5技术引入的焦点
14.6教育和培训
14.7过程咨询
14.8过程状态和评估
14.9建立SEPG
14.10小结
参考文献
第Ⅳ部分 已管理过程
第15章 数据采集和分析
15.1数据采集的原则
15.2数据采集过程
15.3软件度量
15.4数据分析
15.5需要考虑的其他问题
15.6小结
参考文献
第16章 软件质量管理
16.1质量管理的模式
16.2质量管理举例
16.3进行质量管理的动因
16.4度量准则
16.5建立软件质量计划
16.6软件质量评估
16.7清除错误的效率
16.8质量目标
16.9质量计划
16.10软件质量的跟踪和控制
16.11小结
参考文献
第Ⅴ部分 优化的过程
第17章 缺陷预防
17.1缺陷预防并非新话题
17.2软件缺陷预防的原则
17.3改进过程以预防缺陷
17.4缺陷预防应考虑的问题
17.5管理层的作用
17.6小结
参考文献
第18章 软件过程的自动化
18.1对软件自动化的需求
18.2什么需要自动化
18.3开发环境
18.4组织的自动化计划
18.5技术转换
18.6一些特殊考虑事项
18.7生产率
18.8关于申请理由方面的考虑
18.9小结
参考文献
第19章 软件合同的签订
19.1软件合同的签订
19.2软件合同的协商
19.3对软件合同进行有效管理的原则
19.4软件合同的管理
19.5过程证明
19.6技术领导
19.7小结
参考文献
第20章 结论
20.1软件过程改变的框架
20.2对软件过程改变所遇阻力的管理
20.3下一步该做什么
20.4最后的评论
参考文献
附录
附录A. 软件过程成熟度框架
附录B. 软件工程研究所评估协议
附录C. 实施软件审查
名词对照表
如果您不知道要去哪里,走任何一条路都可以。 ——中国谚语
如果您不知道身在何处,任何地图都与事无补。 ——瓦茨·S·汉弗莱
软件工程学的发展在为软件开发带来效益的同时,尚有许多方面不尽如人意。面对软件开发领域的巨大挑战,我们仍然举步维艰,许多软件开发过程常常跌入可怕的深渊。从美国来说,软件开发的状况和水平亟待改进,分清轻重缓急,制定一个变更计划也迫在眉睫。制定此类计划时,要求我们认清现状,明确目标,这便是本书的主题。
确定软件过程的现状似乎看是一件微不足道的小事,事实上并非如此。准确定义软件过程现状,要求我们有一套评价标准。一个度量框架以及对其他许多工作提出要求。明确现状是正确解决问题的前提。要衡量一个软件组织的能力,方法之一是观察该组织在危机时刻的表现。危机时刻最需要优秀实践的时候,同时也是软件人员最缺乏指导的时候。本书将帮助读者回答如下问题:
(1)当前的软件过程处于什么水平?
(2)必须做什么才能改进过程?
(3)从哪里着手?
本书取材于卡内基·梅隆大学软件工程研究所的一项美国空军项目的研究成果。这项研究的目的在于为军方选择合格的软件供应商提供正确的指导。
事实证明,评价软件供应商优劣的方法同样适用于评估其他软件组织。本书阐述了评估中发现的。对于改进软件过程十分重要的技术和管理话题。书中的各个话题都和软件过程管理的基本原则相关。本书的目的在于为读者提供一个软件开发过程评估和改进框架及相关技术,而非单纯地提供一套特定的解决方案,这与学习如何阅读和具体去读某个故事之间的区别相似。软件领域是一个新的领域,很多新的工具和方法将会相继产生。本书阐述的技术基于数世纪以来一直推动科学和工程技术进步的。持续有效的原则。这些原则为学习和改进软件工程过程构建了一个强大的概念框架。
个人、团队和大军
软件开发的历史是一个规模不断扩大的历史。初期少数几个人可以手工编写一些小程序,但这种生产能力很快便难以满足发展的要求。由一打、两打专业人员组成的团队应运而生,但软件开发的成功却变得含糊了。在很多组织解决了小型系统问题的同时,软件开发的规模在继续扩大。今天,大型的项目需要很多团队协同工作。软件开发的复杂程度已经不允许我们靠直觉及时解决问题,我们急需更有条理的软件过程管理方法。
我们发现过程改进方法既适用于大型项目,也适用于较小的项目,事实上稍作简化,这套方法也非常适用于个人编程。这一点很关键,如果不能为单个的专业人士服务,它就失去了生命力。
人才和软件过程
在任何软件组织中,人都是最重要的因素。找到优秀人才是至关重要的第一步。软件开发人员水平越高、经验越丰富,产出一流产品的可能性就越大。竭尽所能找到优秀人才之后,下一步该做什么呢?如果每个人都使用不同的编程语言,使用不同的约定,或者更改设计和编码时不与他人协调,结果就只能是一团糟。成功的软件组织已经认识到,即使最优秀的专家也需要一个结构化。制度化的环境,这样的环境是保证团队协作的前提。
在没有建立这些规则的软件组织中,员工经常无休止地重复处理技术细节问题。也许挑战性的工作正等待处理,可是人们已经被堆积如山的。失控的细节问题压得无暇顾及。除非这些细节问题得到严格的管理,否则最优秀的人也无法有所作为。一流的人才是基础,但只有在有序的过程支持下,一流人才才能完成一流的工作。
超级程序员的神话
人们通常认为,几个软件高手远比普通的软件团队工作更有成效,这就是说,这些高手凭直觉就能知道如何完成一流的工作,任何有序的过程框架都是多余的。果真如此的话,拥有优秀人才的软件组织就不会存在软件质量和生产能力方面的常见问题。事实上,一些国内领先的软件组织一直在最好的计算机院校招聘高材生,这些组织的员工都是当时最好的人才,但他们所在的软件开发组织和其他软件组织一样,面临着同样的问题。看来超级程序员方法需要的是更优秀的人才,即使在一流大学里也找不到。很显然,这种靠超级高手解决软件问题的想法,充其量只能是一个理论上的解决方案,没有任何现实意义。吸引优秀人才固然重要,但通过对软件过程的有效管理,为优秀人才提供支持也必不可少。
过程和技术
另一个神话是一种广泛流传的观点,认为某些技术先进的工具和方法可以魔术般地消除软件危机。这种观点不仅错误,而且危险。长期的改进离不开技术,但是不加思考地依赖虚无飘渺的“银弹”,会使人们的注意力偏离追求更好的过程管理。 当问及面临的关键问题时,很少会有软件专业人士提到技术。他们担心的问题主要涉及到没完没了的需求、对系统的修改失控、随意的进度安排、测试时间不足、缺乏培训以及未经管理的系统标准等。他们还会提到使用电脑的时间有限、终端不足、工具质量低劣等问题,但是这些问题大多与管理有关,而非单纯的技术问题。
几方面的因素都制约了软件技术的高效运用:过程定义不清。技术实施不协调以及过程管理不善等。在这些问题得到足够重视之前,软件技术不可能充分发挥作用。本书主要阐述软件过程管理。软件过程是将用户的需求转化为有效的软件解决方案的一系列活动,许多软件组织无法正确定义和控制这一过程,但这恰恰是组织改进的关键,也是本书关注的焦点。
本书概览
本书分5个部分,分别涵盖软件过程改进的5个不同的方面。编排的顺序和书中阐述的软件过程改进模型一致,这一模型已经为一批领先的软件组织提供了适用的过程改进框架。
每个部分中的各章和相应改进阶段的关键要素对应。根据第1章中提出的成熟度框架,软件组织可以确定自身目前所处的阶段,从而明确应从何处开始实施改进活动,然后根据后文相应的内容,确定过程改进的重点和步骤。例如处于1级的组织,应当集中关注第II部分的内容,
处于2级的组织,应当重视本书第III部分的内容。 值得注意的是,很多软件问题是相互关联的,一些内容几乎贯穿软件活动的所有阶段。过程管理的关键问题是优先顺序,不仅要知道改进应关注的问题,还要清楚谁先谁后。本书的逻辑结构也是按照管理的优先次序编排的。例如,在第III部分强调标准,并不代表标准问题在已定义过程阶段之前。之后都不重要,而是表明在第III部分,标准需要优先得到管理层的关注。
本书每部分都简要概述了当前部分的主要话题以及这些话题在当前阶段的过程改进中的重要性。本书5个部分的内容简述如下:第I部分"软件过程成熟度",描述了软件过程管理框架及其在软件过程评估中的作用,阐述了开始有效过程改进的步骤。
第II部分"可重复过程",概述了确立对软件过程的基本控制所需要的活动,这些活动可以保证过程持续有序地改进所需要的稳定性。 第III部分"已定义过程",阐述如何确定开发过程以及控制该过程所需要的技术和管理方面的概念。软件开发是一个难以预料的过程,一个已定义过程有助于有条不紊地应对突发事件。
第IV部分"已管理过程",介绍了对软件过程的量化控制方法。在本阶段,通过收集和分析数据,可以做到对质量和过程的量化管理。量化管理是指导我们准确把握工作任务的工具,是准确控制活动的方法,是持续改进的正确基础。
第V部分"优化的过程",代表了软件过程进化的最高级别,它将人们关注的焦点从解决问题转移到预防问题。在这一级别上,软件经理和专业技术人员学会利用量化的过程方法,发挥技术作用,达到质量和生产能力的持续改进。
本书阅读方法建议
本书的编排顺序适合从头至尾阅读。读者如果想从总体上了解本书的内容,可先阅读第1章、第19章、第20章,然后再读其他各章最后的小结,这样就可以从总体上认识当前的软件问题和未来的过程目标。然后,从本书的开头开始,结合所在组织在软件过程改进实践中的进展,逐步往后阅读。