精心组织PSP训练提高学员软件工程实践能力
费晓飞
摘 要 随着软件工程技术的不断进化和GJB5000A贯标工作的深入开展,如何提高学员软件工程实践能力,成为我们在专业教学改革中首要考虑的重点问题。在研究了个体软件过程PSP的产生过程,分析了PSP的特点后,提出了通过精心组织PSP训练提高学员软件工程实践能力的教学改革思路,制订了相应的PSP训练方法,并付诸教学改革实践,在提高学员软件工程规范化与标准化方面取得了明显的教学效果。
关键词 个体软件过程; PSP训练;软件工程;教学改革
一、引言
随着现代软件工程技术的发展,软件工程的规范化与标准化成为重要趋势,在计算机相关专业的教学中,对培养学员软件工程实践能力提出了更高的要求。
1999年5月,ISO和IEC的第一联合技术委员会(ISO/IEC/JTC1)为了建立权威的软件工程知识体系结构,启动了标准化项目——“软件工程知识体系指南”(Guide to the Software Engineering Body of Knowledge,SWEBOK),目前最新发布的是2004年版。SWEBOK指南[1]规范了软件工程学科的知识体系,共包括10大知识领域,明确了大学毕业四年后应达到的软件工程教育水平,其中较为重要的是软件工程多种实践能力。
美国卡耐基梅隆大学软件研究所在美国国防部的资助下,从软件过程能力的角度提出了软件能力成熟度模型(Capability Maturity Mode,CMM),并于1991年推出CMM 1.0,然后在CMM基础上提炼出多学科间的公共过程域,于2002年推出CMM I,并于2006年推出CMM I 1.2[2]。
为保障我国军用软件的质量,总装参照CMM于2003年发布了GJB5000军用软件研制能力成熟度模型,参照CMM I于2008年发布了GJB5000A[3],军用软件研制能力成熟度模型。目前,我校正致力于贯彻该项国军标工作。
因此,研究如何在计算机相关专业教学中培养学员个人较强的软件工程实践能力,具有重要意义。我们提出,通过精心组织PSP训练,进一步提高学员的软件工程实践能力,以尽快适应GJB5000A的工作要求。
二、PSP特点
CMM提供了一个软件过程改进的框架与策略,但缺少实现关键过程所需的具体知识、技能和基本方法。因此研究人员将CMM5级过程中的成功经验用来改进个体的过程意识和过程能力,提出了个体软件过程(Personal Software Process,PSP)[4],为软件工程师提供了发展个人技能的结构化框架和必须掌握的方法。PSP也随着CMM的发展不断升级,于2005年发布了PSP BOK1.0版[5],目前最新的是2009年8月发布的2.0版[6]。
(一) PSP框架
个体软件过程是一种可用于控制、管理和改进个人工作方式的自我改善过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP为个体的能力也提供了一个阶梯式的进化框架,每一级别都包含了更低一级别中的所有元素,并增加了新的元素。PSP进化框架分为4级。
1.个体度量过程PSP0和PSP0.1
PSP0使用软件工作人员当前的软件过程,通常包括计划、设计、编码、编译和测试以及后置处理几个阶段,另外增加了对各个开发阶段时间的记录、对整个开发过程中所出现错误与错误类型的记录,这些数据对于准确的项目计划和有效的软件质量管理有着重要的意义。
PSP0.1增加了编码标准、程序规模度量和过程改进建议3个关键过程域,其中过程改进建议表格用于随时记录过程中存在的问题、解决问题的措施以及改进过程的方法,以提高软件开发人员的质量意识和过程意识。
2.个体规划过程PSP1和PSP1.1
PSP1的重点是个体计划,引入了基于估计的计划方法PROBE(Proxy Based Estimating),用自己的历史数据来预测新程序的大小和需要的开发时间,并使用线性回归方法计算估计参数,确定置信区间以评价预测的可信程度。
PSP1.1这一级别中,增加了对资源和进度的估算,并使用获得值追踪的方法,进行项目进度的控制。
3.个体质量管理过程PSP2和PSP2.1
PSP2的重点是个体质量管理,在这一级别中引入了设计复查和代码复查,以便及早发现缺陷,使修复缺陷的代价最小,软件开发人员可以根据所积累的差错数据,建立自己的设计复查和代码复查表格,并根据这些表格进行复查。
PSP2.1这一级别中则引入了设计规格说明技术与设计差错预防技术。
4.个体循环过程PSP3
PSP3的目标是把个体开发小程序所能达到的生产效率和生产质量,延伸到大型程序。其方法是采用螺旋式上升过程,即迭代增量式开发方法,首先把大型程序分解成小的模块,然后对每个模块按照PSP2.1所描述的过程进行开发,最后把这些模块逐步集成为完整的软件产品。
应用PSP3开发大型软件系统,必须采用增量式开发方法,并要求每一个增量都具有很高的质量。在这样的前提下,在新一轮开发循环中,可以采用回归测试的方法,集中力量考察新增加的这个或这些增量是否符合要求。因此,要求在PSP2中进行严格设计复查和代码复查,并在PSP2.1中努力遵循设计结束准则。
(二) PSP新发展
软件工程专业要发展并成熟,就必须要具备明显的专业化关键要素,包括建立知识体系结构和职业资格认证。PSP知识体系结构2.0版,是用知识域组成概念和被证明有效的过程改进方法,对SWEBOK进行补充。共定义了7个能力域,依次是:基础知识、基本PSP概念、规模度量与估计、项目计划制订与跟踪、软件质量计划与跟踪、软件设计、过程扩展与定制。
随着PSP方法的不断应用,PSP变得越来越重要,掌握其基本知识和技术的工程师纷纷脱颖而出。PSP知识体系结构可以帮助软件工程师评估和改进自己的技术;为项目管理人员提供一个客观的基准,可以评估开发团队成员的个人过程技术与能力;可以指导高等院校如何把PSP结合到软件工程教学课程中;还可以提供知识体系,帮助发展PSP认证工作。
三、精心组织PSP训练
根据我们的教学改革实践经验,通过精心组织PSP训练,可以锻炼学员的个人软件工程能力,能帮助学员顺利适应GJB5000A的工作要求。
我们的做法是,通过简化PSP0个人数据收集与能力测评,迅速掌握学员的软件开发水平;通过规范实践训练过程,培养学员的规范化标准化软件工程实践能力。
(一)简化PSP0
PSP0阶段主要通过收集个人在软件开发过程中的真实量化数据,评测个人工程能力与规范程度,掌握个人软件开发水平现状,作为整个PSP训练的基础。我们用调查问卷的形式,将PSP0阶段简化,可以迅速掌握学员的软件开发水平。具体设计了15个问题:
(1)在开始工作前仔细审查过项目的需求规格说明吗?
(2)是否创建有严格的软件设计模型或文档?
(3)在开发中是否进行设计审查和代码审查?
(4)是否跟踪记录自己的时间是如何分配在项目上的?
(5)是否记录自己对工作的估计?
(6)是否将实际的工作结果与自己的估计相比较,并总结其异同的原因?
(7)是否注意避免不跟别人商量就在软件中加入自己突发奇想的新功能?(www.xing528.com)
(8)是否采用一种持续的代码风格编写程序?
(9)是否使用测试工具?
(10)是否使用运行代码分析器来查找存储器中的错误或类似错误的内容?
(11)是否系统化地设计单元测试?
(12)是否将单元测试记录了下来?
(13)是否在自己检查出的缺陷的基础上改进自己的开发工作?
(14)是否系统化地跟踪系统漏洞报告?
(15)是否采用文档化和自动化的方法开展软件过程?
每个问题有4个候选答案: A.从不或几乎没有这样做过; B.有时这样做; C.经常这样做; D.一直这样做。答A得0分,答B得1分,答C得2分,答D得3分。问卷收回后,累加计算每个学员的总得分。如果只得到0~15分,那么反映出该学员目前的日常软件开发工作中很可能还存在着许多问题。应该将表格中自己选择A的地方记下来,立即开始去做。若得分为15~25分,可以挑选几个现在还没有采用的方法进行学习了解,并开始实施。若为25~35分,则在今后的开发工作中可以持续采用目前使用的部分开发方法。如果得分为35~45分,则表示该学员已具有良好的软件开发过程思想,且能用自己的开发思想去指导团队中其他人员的工作。
(二)规范实践训练过程
精选5~8个小规模软件开发项目,按照如图1所示规范过程框架,规范个人开发过程。规范过程框架中,纵向给出项目开发需要完成的8个具体工作步骤,横向给出完成每一步骤的基本方法。
图1 规范过程框架
从计划开始,计划程序的规模、资源,从而确定进度计划,并将计划存入计划和总结报告中,以便与实际的执行结果对比;脚本用于指导工作及数据的收集,经过设计、设计检查、编码、编码检查、编译、测试等阶段实施开发,其中将设计和编码所需时间和发现的缺陷错误记入日志中;在后置处理阶段收集日志中的时间、缺陷错误等数据,度量程序的规模记入计划总结表格,同时将日志记入产品计划总结报告中。
每一级的每个阶段都按规范的脚本去执行。每个脚本都由目的、启动标准、行动步骤和结束标准这4部分组成。其中,目的部分简要说明该脚本的主要用途。启动标准部分描述了执行该脚本前,应该首先具备的条件和必要的准备。行动步骤部分详细描述了执行步骤、每一步的行动需要完成哪些任务,以及如何去完成。结束标准部分说明如何判断该脚本得到成功的执行,可以结束执行脚本过程。下面以PSP0的脚本为例,说明PSP0-PSP3的规范脚本。
表1是PSP0的整体过程脚本。训练时,先按照启动标准,做好必要的准备。然后开始执行第一个步骤“计划”,此时又可进一步按照细化了的这一步骤的脚本,如表2所示,具体实施,完成PSP0的“计划”步骤。
表1 PSP0整体过程脚本
表2 PSP0计划步骤脚本
然后,再按表3的脚本去执行PSP0的“开发”步骤。
表3 PSP0开发步骤脚本
续表
最后,按照表4的脚本去执行PSP0的“后置处理”步骤,用实际的时间、错误和规模数据修正完成项目计划概要表。
表4 PSP0后置处理步骤脚本
续表
项目计划概要表、时间记录日志、错误记录日志都定义了标准的格式,制订了规范的填写方法。
从PSP0直至PSP3的训练,每级都制订有一个与上述类似的整体过程脚本,整体过程中的每个步骤对应制订有具体的详细脚本。每一步骤需要记录的日志表格都有标准格式和填写规范。在教学中的操作性极强。
四、结束语
我们在计算机相关专业的教学改革实践中,按照上述思路与方法,精选项目例程,精心组织PSP训练,组织了试点教学,在提高学员软件工程规范化与标准化方面取得了明显的教学效果。
[1]Alain Abran,etc.Guide to Software the Software Engineering Body of Knowledge[EB/ OL].http://www.swebok.org/,2004.
[2]CMM I Product Team.CMM I for Development Version1.2[R].Software Engineering Institute,Carnegie Mellon University,CMU/SEI-2006-TR-008,2006.8.
[3]军用软件研制能力成熟度模型[S].GJB 5000A-2008,2008.6.
[4]Watts S.Humphrey.The Personal Software Process[R].Software Engineering Institute,Carnegie Mellon University,CMU/SEI-2000-TR-022.2000.11.
[5]Marsha Pomeroy-Huff,etc.The Personal Software Process Body of Knowledge,Version 1.0[R].Software Engineering Institute,Carnegie Mellon University,CMU/SEI-2005-SR-003.2005.8.
[6]Marsha Pomeroy-Huff,etc.The Personal Software Process Body of Knowledge,Version 2.0[R].Software Engineering Institute,Carnegie Mellon University,CMU/SEI-2009-SR-018.2009.8.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。