扎实推进软件工程化方式方法
摘要:我国开展软件工程化推进多年,但效果并不是很理想。笔者结合软件工程化推进的现状,根据多年军品软件研发和软件工程化推进的实践经验,提出了推进软件工程化的一些方式和方法,以期能在推进软件工程化尤其是在提高软件产品质量方面起到应有的效果。
关键词:GJB5000;软件工程化;软件能力成熟度;CMM;CMMI
引言
当今社会的发展越来越离不开软件的支撑,许多发达国家已将软件视为“国家间竞争ต的重要武器”,把对软件技术的研究和软件产业的发展作为国家竞相扶持的重点。如何提升软件的技术能力,加强对软件开发过程的管理,已经成为软件行业主要关注的方向。在装备研制和使用保障过程中,质量是关系官兵生命,关系战争胜负的重大问题。为确保我国军品软件产品质量,总装备部于2003开始引入由美国卡耐基﹒梅隆大学软件工程研究所(CMU/SEI)提出的CMM/CMMI。在进行深入研究CMM的基础上,于2003年发布了基于CMM的GJB5000-2003《军用软件能力成熟度模型》[1]。经过多年的试点和探索,2008年发布了基于CMMI-DEV1.2[2]的GJB5000A-2008《军用软件研制能力成熟度模型》[3]。规范了为达到研制高质量的军用软件的目标,划分了软件研发能力等级以及各等级的典型特征和能力水平,并给出了如何持续改进能力等级的具体指导[4]。但在将近二十年的推进过程中,推进效果并不是很理想。
1软件工程化推进现状
1.1缺乏系统和专业的软件工程化建设指导
按照GJB8000-2013《军用软件研制能力等级要求》[5],大多数军品软件承研单位需要满足GJB5000A三级研制能力等级要求。GJB5000A三级需覆盖17个过程域39个目标132个特定实践,内容涵盖了软件工程和软件过程管理的内容[3]。原来开展软件研制,软件设计师主要依据GJB2786A-2009《军用软件开发通用要求》和GJB438B-2009《军用软件开发文档通用要求》这两份标准,主要开展软件工程相关的活动即可。GJB5000对软件研制全生命周期的方方面面应开展哪些活动都进行了说明[5]。很多承研单位都面临如何在软件研发过程中开展项目策划、项目监控、风险管理、供方管理等方面的工作的困惑。参照美国软件工程研究所(SEI)提出的SCAMPI评估方式[6]考评单位是否满足GJB5000的目标,在如何开展、如何推进方面没有给出一定的指导。各单位的最佳实践也没有形成军品承研单位共同的资产,每个单位在软件过程体系建设和软件工程推进中都是在重复不断摸索。
1.2软件研发过程与软件工程化要求的冲突
随着信息技术的发展,应用于新领域系统的军品软件越来越多,系统需求不明确是经常存在的情况。在系统需求不明确的情况下,软件需求也无法明确和清晰。在软件研制进度紧张、技术难度高和人力资源紧张时,为了减少不必要的软件研发投入,往往先开展软件代码的编写、调试和系统联试,在反复迭代确认软件需求后,才根据软件代码开展软件需求和设计的编写。造成软件工程化的需求分析、需求管理等活动证据缺乏,规范的工作分解结构(WorkBreakdownStructure)任务策划与实际开展的软件工程活动冲突(如正常应该是先需求分析、再设计、后编码,而实际是先编码,后补充需求分析和设计的证据)。造成软件工程化实施无法给出合理的证据。
1.3软件工程师技能与工程化要求的不匹配
GJB5000A对项目的软件工程化的开发和管理都提出了很高要求,软件设计师是顺利开展软件工程化的关键角色。软件设计师由原来只需熟悉GJB438B-2009《军用软件开发文档通用要求》和GJB2786A-2009《军用软件开发通用要求》,还需熟悉项目管理的相关内容(如项目策划、项目监控、风险管理、资源管理等)。由原来的只需开展软件工程活动,到软件工程活动和软件过程活动都得理解和开展。从开发过程中对需求、设计及实现的具体活动定义,到项目管理、跟踪报告的周期机制,事无巨细[7]。软件设计师的技能与工程化的要求存在的不小的差距。
2推进软件工程化的方式方法
戴明(W.E.Deming)和朱兰(J.Juran)指出一个系统的质量主要取决于用来开发和维护该系统的过程的质量。而GJB5000就是通过规范ฆ软件研发过程的活动,避免软件过程无规则和混乱的管理,来确保软件产品的质量。GJB5000给出了系统的开展软件过程活动的具体要求和实施的具体指导[4]。结合具体软件过程工程化的开展方面,笔者认为可以采取一些好的方式方法。
2.1构建面向全组织的软件工程过程组织架构
承研单位和软件设计师对开展软件工程化的第一反应是抗拒,这是目前普遍存在的现象。软件工程化要求多、内容复杂。软件工程化评价专家对GJB5000有各自不同的理解。造成承研单位对具体如何开展、如何实施无所适从。各单位在推进过程中,除了软件工程化的交流资料外,可借鉴和参考的资料有限。再加上软件工程化推进短期内无法看到效果,软件工程师普遍认为软件工程化推进没必要和无意义。为降低各单位推进软件工程化的难度,降低软件工程师对推进软件工程化的抵触心里,提高开展软件工程化推进的积极性,应构建全组织的软件工程过程组织架构。为军品承研单位的互相学习、相互借鉴,最佳实践在软件工程化推进中的推广搭建平台。搭建的平台如图1所示。军品装备发展部SEPG管理全组织的软件工程化专家、评价专家,可有效的收集到各承制公司和承制单位的最佳实践。在对其进行梳理和整理后,可构建全组织的软件工程化组织资产,为各承制公司提供知识共享。承制公司SEPG负责本公司内的最佳实践收集、资源共享,负责本公司内的最佳实践的收集和推广。该组织可确保最佳实践在全组织内的有效利用,减少不必要的软件工程化建设的重复工作,提高软件工程化推进的效率,消除各承制单位的孤岛状态。
2.2软件工程过程要求为导向的求同存异推进
能否直接或间接的提高软件产品质量是检验软件工程过程活动必要性和有效性的标准。我国在引进CMM/CMMI时,根据军品软件研制的特点进行了本地化的修订ป,但在推进的过程中还是存在了一些问题。如评价时以GJB5000A的资料性部件为标准,不满足就是不合格,造成软件工程师对软件工程化推进的抵触心里。国外的一些标杆企业,如波音、柯林斯、洛克希德马丁等也达到了三级以上的成熟度等级,但并不是完全照搬CMMI,其中有一些公司是采用了公司自己的管理机制(为类三级)。这说明在国外的软件工程化推进过程中,其主要目标是满足软件工程化的要求即可,没对采取的形式进行限制。我国军品软件研制单位各有各的实际情况,各有各的特点,完全按照同一个模式开展推进是不可能也是不现实的。应允许单位根据各自的特点开展推进。
2.3紧密结合军品软件研制特点制定推进方式
我国装备软件发展的过程中,存在一些自身的特点。武器装备的研发模式而影响的军品软件的开发模式,如软件研发普遍存在的时间紧(软件作为武器装备研发的后端)、需求变动大(改软件比硬件方便,成本低)、软件研发不受重视(软件基本不计价)等。遵循软件工程过程的要求开展,存在一定的难度。如目前普遍存在的逆向工程问题,是没法回避的现实问题。如果生搬硬套,既违背了GJB5000推进的初衷,又增加了不必要的工作量。针对这种普遍存在的共性问题,应组织全组织的软件工程过程组织进行专题讨论,在确保软件产品质量的前提下,讨论具体推进的方式和方法,并作为全组织的最佳实践进行推广。从而减少各单位对这种共性问题如何推进的不必要的和重复的摸索、讨论、试点和解释。
2.4软件工程师针对性的技能培训
GJB5000A的推进从二级开始。GJB5000A二级包含7个过程域(配置管理、测量与分析、项目监控、项目策划、过程和产品质量保证、需求管理、供方协议管理),除需求管理外都属于支持类和项目管理类的过程域。7个过程域基本上是软件工程师在研发过程中不太关注的内容,对软件工程师开展所有的培训成本高,效果也不会太理想。应对软件项目中的软件负责人开展这方面的培训,软件负责人在进行具体的推进过程中,结合具体的工作内容有针对性的对软件工程师进行指导即可。确保软件项目中有软件过程的明白人。
3结束语
软件工程化推进是一个复杂的系统工程,需要在具体实践中不断的探索、研究新的方式和方法,寻求更为合适的推进途径。目前,军用软件开发和应用的范围越来越广,军用软件对武器装备的质量起着至关重要的作用。在软件工程化的推进实践中,在执行国家军用标准的同时,探索合适的软件工程化推进模式,从而提升军用软件☃的产品质量。
参考文献
[3]GJB5000A-2008军用软件研制能力成熟度模型.
[4]石柱,军用软件研制能力成熟度模型及其应用[M].北京:中国标准出版社,2009.
[5]GJB8000-2013军用软件研制能力等级要求.
[6]过程改进用的标准CMMI评估方法实施指南.王方德,译.总装备部电子信息基础部技术基础局,2005.
[7]任甲林.术以载道——软件过程改进实践指南[M].北京:人民邮电出版社,2014.
[8]石柱.软件质量管理[M].北京:航空工业出版社,2003
[9]邓成飞,李洁.软件工程管理.北京:国防工业出版社,2000.
[10]张万军,郑宁,赵宇兰.基于CMMI的软件工程及实训指导.清华大学出版社2011.
[11]任甲林.术以载道——软件过程改进实践指南人民™邮电出版社2014.