APP下载

军用软件研制中的敏捷开发方法实践

2015-05-30王莹

中国新通信 2015年9期

王莹

【摘要】 通过科研院所对GJB5000A软件研制管理下不同项目在实际应用中引入多种开发方法需要的分析,探讨了使用敏捷开发方法在GJB5000A框架下实施开发过程的方法的可行性,同时介绍了利用Scrum及其扩展方法实现GJB5000A过程域目标的实践方法

【关键词】 软件质量管理 GJB5000A 敏捷开发

一、引言

在国防信息化程度的不断提高的今天,军事领域中的软件产品已经成为了和硬件产品比肩而立的重要存在,军用软件的质量高低也成为了决定军事和武器系统质量的关键因素。随着武器装备系统中的软件规模迎来爆炸式增长,只有对过程质量的全面控制,才有可能最大程度的降低风险,提高软件产品质量。我单位从2011年开始试推行GJB5000A软件研制过程管理,到如今已实现了军用软件研制能力二级管理的全面覆盖,期间为兼顾不同专业领域、不同项目类型、不同规模和军兵种的要求,对体系进行了持续改进。改进焦点在执行GJB5000A标准的大框架下尽可能解决特异性问题上,同时在开发方法及操作层面上鼓励项目组团队在现有质量体系策略要求下进行创新式探索。其中利用敏捷开发的方法与CJB5000A管理体系的融合就是一种有益思考。

二、GJB5000A质量管理体系结合敏捷方法在科研院所的适应性

2.1 GJB5000A在科研院所的落地实施

GJB5000A-2008《军用软件研制能力成熟度模型》作为框架模型,体现了业内软件研制过程最佳实践集,其采用分级表示的方法,按预先确定的过程域来定义组织的改进路径,同时规定了软件研制和维护活动中的主要软件管理过程和工程过程的实践。模型五个级别中共定义了22个过程域,每个过程域由不同个数的专用目标和相同个数的共用目标组成,每个目标又推荐了不同的实践。在GJB5000A的定义中,目标是必需的部件,实践是期望的部件,我们用满足所有目标来确定过程域的实现,用实践来指导过程改进和评估。换句话说,GJB5000A标准允许我们用规定的实践或可接受的替代实践来满足目标。所以科研院所要想真正实现标准落地就必须按照单位自身产品特点和用户要求将实践本地化。

在实现本地化过程中,组织会按照大多数项目的模式定义标准过程,但却无法确保所有过程适用于所有项目,同时在执行自由度上也遇到了很大困扰,强约束导致了项目缺乏灵活性,而降低约束度则可能带来质量和进度的双重风险。此外,即使组织开放了项目组利用替代实践实现目标,但南于团队人员的经验不足,也很难找到恰当的替代实践,组织还必须承担面对评估时替代实践有效性的质疑,所以在组织层面上定义多种开发方法供项目选择就显得尤为重要。

2.2 敏捷开发方法在军用软件研制过程中的适用性

软件敏捷开发是一种相对于传统软件开发而言的轻型开发方法,它改变了传统开发中以文档为驱动的开发模式,以人为主要驱动核心,目前常用的基本敏捷实践方法有很多,如极限编程(XP)、Scrum方法、特征驱动开发(FDD)等,每种方法的实践过程都有不同,但基础都是基于增量和迭代的过程。软件敏捷开发有四大价值观:个体和交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;客户合作胜过合同谈判;响应变化胜过遵循计划。这些特点使得敏捷开发方法灵活、适用多变需求,可快速交付,但应用在军用软件研制过程中可能会带来以下问题:1、敏捷开发方法应用的是需求的快速迭代,每一个迭代作为一个计划阶段,很难对项目的整体目标有完整计划。2、敏捷开发方法更注重有效代码的快速交付,而非文档,这对有严格军标约束下的文档编制提出了更高的要求。3、敏捷开发最重要的开发方式是与客户一起开发,因军用软件的需方往往是部队使用方,面对面开发的形式较难实现。4、敏捷开发方法对开发人员的能力要求极高,人员要不但要精通设计、编码、测试相关工作,而且要能参与项目的需求分析和架构设计,能对频繁变更的需求做出快速响应。

既然敏捷方法会带来以上问题,我们为何还要考虑在军用软件承研单位引入敏捷开发过程呢?这是因为随着军用软件研制领域中引入的竞争机制,出现了越来越多需要直接进行代码交付的PK项目,如果再应用传统研发方式,就失去了市场竞争优势。所以,对于规模小、周期短、需求变动频繁、现场开发为主要形式且已经具备了较稳定的开发技术架构的项目而言,敏捷开发方法既能让项目组在短时间内针对需求拿出有效代码,而且在快速迭代中能总结大量有用的文档信息。只要我们可以偏重组建成员技术水平在同一层面上的成熟开发团队来承接这样的项目,必然起到事半功倍的效果。

三、GJB5000A质量管理体系下的敏捷开发方法实施

3.1 用敏捷开发方法定义过程

在组织级,GJB5000A三级过程域中的组织过程定义(OPD)可以帮助组织建立起自己的敏捷开发方法下的过程定义,包括过程和过程元素的说明,过程剪裁指南,敏捷开发方法下的生命周期,标准工作环境、组织测量库、组织资产库等。有了组织级定义,项目组就可以按照集成项目管理(IPM)实现方法对组织标准过程进行剪裁,形成项目的已定义过程(P'DP),这个过程就可以直接指导项目的过程实施。从项目级的角度看,GJB5000A的过程管理关注的是项目做了什么,而敏捷开发方法正是提供了该怎么做的具体开发方法,敏捷开发方法中的活动经过合理替代和剪裁的实践方法以实现GJB5000A目标是完全可行的。

3.2 敏捷开发方法实践

1.实践方法的选择。在敏捷开发的众多方法中,我们选择了以Scrum为基本敏捷实践,以持续集成(CI)和测试驱动开发(TDD)为扩展方法的敏捷开发架构。Scrum方法是敏捷开发中最典型的模型框架,它把产品需求的实现分为若干个Sprint来完成,每个Sprint完成后进行产品演示,收集、细化直至实现用户需求,整个过程为一个迭代式增量过程。持续集成提倡利用一个全自动的过程,在一天中根据代码变化进行多次构建(包括编译、发布和自动化测试)来验证集成结果和发现集成错误。测试驱动开发技术(TDD)基本原理是在开发功能代码之前,先编写单元测试用例代码是持续集成的验证手段。

2.项目定义过程。Scrum结合CI与TDD的过程可以简单描述为:一开始先由项目负责人确定一个ProductBacklog(产品需求列表),而后召集项目团队召开Sprint计划会议对列表中的需求进行工作量预估和安排,从中挑选出一个story作为本次迭代完成的目标,形成SprintBacklog(迭代需求列表)分配给项目组成员,每个成员接收到任务后将任务进一步细化,在每日例会上汇报自己的完成情况和对下一步工作作出承诺,同时在公示板上标注出自己的工作情况(燃尽图法等方法)。每个项目组成员对工作进行每日集成,集成后利用测试驱动开发构建测试来快速评估集成结果,如果发现问题马上修改,再次集成测试,反复循环,直到一个迭代结束形成可用的代码。

3.用GJB5000A过程管理敏捷开发方法下的研制。从项目层面看,Scrum方法可以结合GJB5000A过程域中的需求开发,项目策划、项目监控等,CI与TDD可以结合产品集成、配置管理等,当敏捷开发的方法在GJB5000A的过程管理方法约束下,可以得到更精确的控制和工作产品反馈。下表我们就给出了部分实践的实施方案。

四、总结

GJB5000A体系结合敏捷开发方法有别于传统研制方法中以文档为驱动的顺序研制过程,它充分强调了消除冗余、减少返工、缩短周期,提高效率的理念,同时用过程记录的方法收集重要的项目信息,可以在一轮迭代完成后一次输出成可用的文档和经过测试的可交付代码。于项目而言,这种研制方式给项目提供了更多的灵活性选择。于组织而言,因总装备部和军标的强制要求,承研军用软件的单位必须要在GJB5000A及相关配套军标的要求下建立质量管理体系和规范项目研制过程。通过合理剪裁那些能提高产品质量、提高生产率的方法和模型后,通过验证和确认方法形成组织标准过程,必然能增强组织标准框架的适应性和实用性,提升组织管理能力目标。