软件开发工艺的改进

时间:2022-01-18 04:08:37

软件开发工艺的改进

一个软件组织的软件生产能力取决于该组织的过程能力,过程能力越成熟,那么该组织的软件生产能力就越有保证。

对于软件过程绝对不能简单地理解为软件产品的开发流程,因为我们要管理的并不只是软件产品开发的活动序列,而是软件开发的最佳实践。它包括流程、技术、产品、活动间关系、角色、工具等,是软件开发过程中各个方面因素的有机结合。在软件过程管理中,首先要进行过程定义,将过程以一种合理的方式描述出来,并建立起企业内部的过程库,使过程成为企业内部可以被重用的共享资源。对于过程,还要不断地进行改进,以不断地改善和规范过程,帮助提高企业的生产力。

软件过程改进的框架

自从上个世纪70年代软件危机出现以来,人们不断地开展新方法和新技术的研究与应用。到80年代末,人们得出这样一个结论: 一个软件组织的软件生产能力取决于该组织的过程能力。一个软件组织的过程能力越成熟,该组织的软件生产能力就越有保证。有效的软件过程可以提高组织的生产能力,而理解软件开发的基本原则,可以帮我们做出明智的决定; 可以标准化软件的开发工作,提高软件的可重用性和团队间的协作; 有效的软件过程可以改善我们对软件的维护。

美国卡耐基•梅隆( Carnegie Mellon )大学软件工程研究所(CMU/SEI)主持研究与开发的CMM/PSP/TSP 技术,为软件工程管理开辟了一条新的途经。PSP、TSP 和CMM为软件产业提供了一个集成化的、三维的软件过程改革框架(如图1所示)。PSP注重于个人的技能,能够指导软件工程师如何保证自己的工作质量,TSP注重团队的高效工作和产品交付能力,CMM则注重于组织能力和高质量的产品,它提供了评价组织的能力、识别优先改善需求和追踪改善进展的管理方式。

开发人员通过PSP的实践能够学到软件过程管理和项目管理方面最先进的技能和最佳实践管理,因为要开发高质量的软件要求开发软件的每个工程师都能高质量地完成工作; 作为开发团队,TSP的实施能够在较短时间内建立高绩效的团队,确保团队开发产品的质量、安全性。个人软件过程(PSP)和团队软件过程(TSP)是专门设计来使个人和团队的工作优化及规范化的,通过让个人和团队使用预定义的标准流程来建立可测量的目标,跟踪目标的完成情况,从而提高质量。从整个企业角度来看,已有的实践证明PSP、TSP能加速CMM在企业范围内的实施,同时也是维持改进的需要。

除了这个众所周知的CMM/PSP/TSP过程体系,目前“敏捷开发”(Agile Development)和“极限编程”(Extreme Programming,简称为XP)等被认为是软件工程的一个重要的发展。它强调了软件开发应当能够对未来可能出现的变化和不确定性做出全面反应。

为了获得满足工程目标的软件,很多的软件企业都会制定自己企业的过程体系,它是一个企业质量管理系统的规范,包含的内容一般比较全,是企业长期遵循和需要重复实施的文件,具有较强的标准性,如图2就是一个例子,这个体系包括软件开发、软件管理和软件过程改进。

在一个项目的开发过程中有开发的活动和项目管理的活动,软件过程主要包括软件开发的过程和项目管理的过程。其中过程改善组织负责建立和维护整个企业基于过程的质量体系,过程执行组织具体执行过程体系中相关的过程规范和标准,过程质量保证组织负责过程执行的质量控制和基于过程生产出的产品的质量控制。

过程改进

事实上,只要软件企业在开发产品,它就一定有一个软件过程,不管这个过程是否被写出来。如果这个过程不能很好地适应开发工作的要求,就需要进行软件过程改进。软件过程需要不断地改善,以增加项目的成功机会,减少项目失败。

下面这个例子可以说明过程是如何改进的。在Watts S. Humphrey服兵役的时候,用猎枪打泥鸽子成绩非常差,并且努力训练还是没有提高。教官对Watts进行了一段观察后,建议他用左手射击。作为一个习惯右手的人,开始Watts很不习惯,但练了几次后,Watts的成绩达到了优秀。这个事例说明了几个问题。首先,要通过测量来诊断一个问题,然后,必须客观地分析测量的数据,找到问题所在。最后,也是最重要的,就是自身的变化。

类似的,软件过程改进也一样,不管是个体的过程、团队的过程,还是企业的过程,过程改进的过程大体相同(如图3)。从图中可以得知过程改进有五个步骤:

1. 把目标状态与目前状态做比较,找出差距;

2. 决定要改进差距的分阶段计划;

3. 制定具体的行动计划;

4. 执行计划,同时在执行过程中对行动计划按情况进行调整;

5. 总结本轮改进经验,开始下一轮改进。

例如,PSP过程要求在做代码审查的时候要制定一个代码检查表,针对缺陷管理,PSP还给出了PSP缺陷类型标准。某个软件开发人员经过多个项目的实践发现,只有四个类型对他是最实用的,这四类缺陷占编译和测试中的97%。他通过检查自己的C++代码的缺陷记录,发现他的代码检查表中的“确定逻辑”或者“检查标点符号”等条目是不实用的,可以删除,而应该增加类似“检查所有的指针是否初始化为Null”或者“检验==和=是否正确使用”等条目,为此他在检查C++代码缺陷的时候,将PSA的缺陷类型标准中的语法、函数、接口和环境类进行了扩展。在后来的实践中他也不断通过总结改进这个过程。

又如在《网上招聘系统》开发过程中发现有些人开发的软件质量很高,而且效率也很高,测试中发现的缺陷很少。调查发现这些人在编码过程中非常重视代码的自我走查,于是要求项目组的所有开发人员编译前进行一次,编译之后进行一次,保证测试之前执行两次代码走查。结果软件的质量得到了很大的提高。而还有一部分项目人员发现如果进行交叉代码走查,即开发人员互相进行代码走查,效果会更好。

为此,在“编码过程”的活动中增加了代码走查和代码交叉走查这两个活动。过程改进后,项目组要求在以后的项目编码过程中按照这个改进过的过程执行,代码的质量果然提高了。但是在实施过程还发现另外的一个问题,技术经理负责组织抽样评审代码时,很多人在评审会议上对代码不是很了解,花费的时间很长而且也没有效果。于是,过程改进组织建议在代码评审之前,参加评审的人员事先阅读代码,并事先提出问题,填写问题表。这样“编码过程”又进行了改进。

以上是过程改进的几个例子,软件过程改进就是这样一个持续不断的过程,要循序渐进,不能一蹴而就,只有不断总结经验才能越做越好,越做越有信心。

上一篇:编写安全的Web2.0应用 下一篇:从闪盘安装Vista