使用PSP对软件工程师的素质影响浅析
2012-08-15刘胜艳
刘胜艳
(中南财经政法大学武汉学院,湖北 武汉 430079)
使用PSP对软件工程师的素质影响浅析
刘胜艳
(中南财经政法大学武汉学院,湖北 武汉 430079)
要成为高绩效软件组织,必须拥有高绩效团队,拥有高绩效软件工程师。PSP为个体软件工程师提供了持续改善绩效的指南,为软件过程优化提供了具体而有效的途径,告诉接受过PSP培训的工程师如何在高绩效团队中有效地工作。PSP对软件工程师本身的素质提高带来了很大益处。本文对PSP的概念、发展现状、内容、支持环境以及PSP的进化框架进行了介绍,总结了PSP对软件工程师的素质提高所带来的相应影响。
PSP;软件工程师;素质;影响
随着软件工程知识的普及,软件工程师都知道,要开发高质量的软件,必须改进软件生产的过程。由美国软件工程研究所SEI(Software Engineering Institute)开发完成的软件能力成熟度模型CMM(Capability Maturity Model)是一种协助企业改进软件制作质量与管理流程并进行评估的标准。它是SEI集多年软件研究的经验所研制的过程标准,如今已成为国际上最流行最适用的软件质量改进体系,并且CMM已经成为事实上的软件过程工业标准。
但是,CMM虽然提供了一个有力的软件过程改进框架,却只告诉我们“应该做什么”,而没有告诉我们“应该怎样做”,并未提供有关实现关键过程域所需要的具体知识和技能。为了弥补这个欠缺,美国Carnegie Mellon大学软件工程研究所又主持开发了个体软件过程(Personal Software Process,PSP)。
一、关于PSP
(一)PSP概述
个体软件过程(Personal Software Process)于1995年推出,它的推出在软件工程界引起了极大的轰动,可以说是由定向软件工程走向定量软件工程的一个标志。PSP是一种可用于控制、管理和改进个人工作方式的自我改善过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径,例如如何制订计划,如何控制质量,如何与其他人相互协作等等。在软件设计阶段,PSP的着眼点在于软件缺陷的预防,其具体办法是强化设计结束准则,而不是设计方法的选择。根据对参加培训的104位软件人员的统计数据表明,在应用了PSP后,软件中总的差错减少了58.0%,在测试阶段发现的差错减少了71.0%,生产效率提高了20.0%。PSP的研究结果还表明,绝大多数软件缺陷是由于对问题的错误理解或简单的失误所造成的,只有很少一部分是由于技术问题而产生的。而且根据多年来的软件工程统计数据表明,如果在设计阶段注入一个差错,则这个差错在编码阶段引发了3~5个新的缺陷,要修复这些缺陷所花的费用要比修复这个设计缺陷所花的费用多一个数量级。因此,PSP保障软件产品质量的一个重要途径是提高设计质量。
(二)个体软件过程PSP的现状
1.从1993年开始,美国、欧洲、澳大利亚等地已先后有20多所大学开设了讲授PSP的课程。
2.在工业界,PSP也先后在Motorola、HP等公司推广使用。
3.北航软件工程研究所于1997年开始,在北航计算机科学与工程系率先讲授了PSP课程,并组织了PSP应用实验。
(三)个体软件过程PSP的内容
PSP与具体的技术(程序设计语言、工具或者设计方法)相对独立,其原则能够应用到几乎任何的软件工程任务之中。PSP能够:1.说明个体软件过程的原则;2.帮助软件工程师作出准确的计划;3.确定软件工程师为改善产品质量要采取的步骤;4.建立度量个体软件过程改善的基准;5.确定过程的改变对软件工程师能力的影响。
(四)个体软件过程PSP的支持环境
北航软件工程研究所在研制的基于Internet的“个体软件过程支持环境”,支持个体软件过程的定义、运作、度量、分析和优化,支持PSP在实际软件开发项目中的应用,支持PSP概念和方法的推广普及,支持软件工作人员软件工程方面素质的提高。
二、PSP进化框架
据统计,软件项目开发成本的70%取决于软件开发人员个人的技能、经验和工作习惯。因此,一个单位的软件开发人员如能接受PSP培训,对该单位软件能力成熟度的升级是一个有力的保证。CMM侧重于软件企业中有关软件过程的宏观管理,面向软件开发单位,PSP则侧重于企业中有关软件过程的微观优化,面向软件开发人员。
按照PSP规程,改进软件过程的步骤首先需要明确质量目标,也就是软件将要在功能和性能上满足的要求和用户潜在的需求。接着就是度量产品质量,有了目标还不行,目标只是一个原则性的东西,还不便于实际操作和判断,因此,必须对目标进行分解和度量,使软件质量能够“测量”。然后就是理解当前过程,查找问题,并对过程进行调整。最后应用调整后的过程,度量实践结果,将结果与目标做比较,找出差距,分析原因,对软件过程进行持续改进。
就像CMM为软件企业的能力提供一个阶梯式的进化框架一样,PSP为个体的能力也提供了一个阶梯式的进化框架,以循序渐进的方法介绍过程的概念,每一级别都包含了更低一级别中的所有元素,并增加了新的元素。这个进化框架是学习PSP过程基本概念的好方法,它赋予软件人员度量和分析工具,使其清楚地认识到自己的表现和潜力,从而可以提高自己的技能和水平。
PSP进化框架共有四级。每一级都试图指出过程缺陷并提供解决方法,每个都包括几个单独的步骤。
(一)个体度量过程PSP0和PSP0.1
这一过程建立了包括测量和报告格式的基线,对测量进展和详细说明的基础提供了一致的根据。这一步骤记录了软件工程师在工程中使用的具有代表性的软件开发方法和在当前工程中使用的方法。这一级别简单地接受软件工程师所使用的独特的方法列表。这些方法应该用对测量有意义的方式表现。例如,方法可以存放在关系数据库中,增加额外的字段标示花了软件工程师多少时间来编制标准算法,也可有一字段说明软件工程师使用这些方法的舒适度。
PSP0的目的是建立个体过程基线,通过这一步,学会使用PSP的各种表格采集过程的有关数据,此时执行的是该软件开发单位的当前过程,通常包括计划、开发(包括设计、编码、编译和测试)以及后置处理三个阶段,并要作一些必要的试题,如测定软件开发时间,按照选定的缺陷类型标准、度量引入的缺陷个数和排除的缺陷个数等,用作为测量在PSP的过程中进步的基准。
PSP0.1增加了编码标准、程序规模度量和过程改善建议等三个关键过程域,其中过程改善建议表格用于随时记录过程中存在的问题、解决问题的措施以及改进过程的方法,以提高软件开发人员的质量意识和过程意识。
应该强调指出,在PSP0阶段必须理解和学会使用不合格进行规划和度量的技术。设计一个好的表格并不容易,需要在实践中积累经验,以准确地满足期望的需求,其中最重要的是要保持数据的一致性、有用性和简洁性。
一般来讲软件工程师来自不同的背景和拥有不同的软件开发风格,约束他们的设计方法,采用由组织规定的设计方法学和编码标准已被建议。
这一过程在后CASE系统实现的形式是,对设计过程、开发过程和设计语言结构进行约束。例如,在C语言的IFTHEN-ELSE语句中使用SWITCH语句不被认为是专业编程,这种方式在后CASE时代被丢弃。同样地,后CASE工具也对软件工程师设计的模块强行约束。一般地,统一的编码标准能够通过后CASE系统使用约束实现。
(二)个体规划过程PSP1和PSP1.1
PSP1的重点是个体计划,引入了基于估计的计划方法,用自己的历史数据来预测新程序的大小和需要的开发时间,并使用线性回归方法计算估计参数,确定置信区间以评价预测的可信程度。PSP1.1增加了对任务和进度的规划。
在PSP1阶段应该学会编制项目开发计划,这不仅对承担大型软件的开发十分重要,即使是开发小型软件也必不可少。因为,只有对自己的能力有客观的评价,才能作出更加准确的计划,才能实事求是地接受和完成客户(顾客)委托的任务。
(三)个体质量管理过程PSP2和PSP2.1
PSP2的重点是个体质量管理,根据程序的缺陷善建立检测表,按照检测表进行设计复查和代码复查(有时也称“代码走查”),以便及早发现缺陷,使修复缺陷的代价最小。随着个人经验和技术的积累,还应学会怎样改进检测表以适应自己的要求。PSP2.1则论述设计过程和设计模板,介绍设计方法,并提供了设计模板、但PSP并不强调选用什么设计方法,而强调设计完备性准则和设计验证技术。
实施PSP的一个重要目标就是学会在开发软件的早期实际地、客观地处理由于人们的疏忽所造成的程序缺陷问题。人们都期盼获得高质量的软件,但是只有高素质的软件开发人员并遵循合适的软件过程,才能开发出高质量的软件,因此,PSP2引入并着重强调设计复查和代码复查技术,一个合格的软件开发人员必须掌握这两项基本技术。
(四)个体循环过程PSP3
PSP3的目标是把个体开发小程序所能达到的生产效率和生产质量,延伸到大型程序。其方法是采用螺旋式上升过程,即迭代增量式开发方法,首先把大型程序分解成小的模块,然后对每个模块按照PSP2.1所描述的过程进行开发,最后把这些模块逐步集成为完整的软件产品。
应用PSP3开发大型软件系统,必须采用增量式开发方法,并要求每一个增量都具有很高的质量。在这样的前提下,在新一轮开发循环中,可以采用回归测试的方法,集中力量考察新增加的这些增量是否符合要求。因此,要求在PSP2中进行严格的设计复查和代码复查,并在PSP2.1中努力遵循设计结束准则。
从对个体软件过程框架的概要描述中,可以清楚地看到,如何作好项目规划和如何保证产品质量,是任何软件开发过程中最基本的问题。
三、PSP对软件工程师本身素质提高带来的影响
开发小组的人员应该少而精。该原则意味着,软件开发项目的组成人员的素质应该好,而人数则不宜过多。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件。此外,随着开发小组人员数目的增加,因为交流问题而造成的沟通成本也急剧增加。因此,构建和维持少而精的开发团队甚至标杆团队是软件工程的一条基本原理。
软件工程师的所需要的一个重要能力是软件工程能力,有了好的技术功底和设计知识可以称其为优秀的程序员,可还未必是个好的软件工程师,好的软件工程师必须要懂得软件工程。从PSP入手是个比较好的学习方法,学习这些轻量级的方法然后再根据实际条件应用到平时开发中,进步就会很快了。个体软件过程PSP使用自底向上的方法来改进过程,向每个软件工程师表明过程改进的原则,使他们能够明白如何有效地生产出高质量的软件。
PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径。如果从儒家经典哲学的角度加以考察,PSP恰似“修身”,聚焦于个人和技能,从个体的角度提升个人的技能。在软件行业,开发人员如果不经过PSP培训,就只能靠在开发中通过实践逐步掌握这些技能和方法,这不仅周期很长,要付出很大的代价,而且有越来越大的风险。PSP可以帮助软件工程师在个人的基础上运用过程的原则,借助于PSP提供的一些度量和分析工具,了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作的评估、计划和预测更加准确、更加有效,进而改进个人的工作表现,提高个人的工作质量和产量。
综上所述,其实PSP就是教你如何指定计划,如何实施计划最终成为一个职业软件工程师的过程。这才是“素质”教育。
[1][美]Watts S.Humphrey.小组软件开发过程[M].韩丹,等译.人民邮电出版社,2001.6.
[2]何新贵,等.软件能力成熟度模型[M].清华大学出版社,2000.11.
[3]张海藩.软件工程导论[M].清华大学出版社,1992.3.
[4]杨一平.现代软件工程技术与CMM的融合[M].人民邮电出版社,2002.11.
[5]吕晓辉.基于CMM/PSP/TSP的软件过程改进[J].计算机工程,2003.1.