集成与敏捷开发在军用光电系统软件开发中的应用
2020-06-16刘国栋范鹏程徐晓枫贾子庆
刘国栋 王 艳 庞 澜 范鹏程 徐晓枫 贾子庆
(西安应用光学研究所 陕西 西安 710065)
0 引 言
随着GJB5000A[1]在军事装备软件开发中的推广,军事软件开发过程逐渐趋于正式,软件质量得到了提高。但是国内军工单位在制定本地标准时,是以大多数项目的模式定义的标准过程,在某些类型的项目上应用会出现开发流程繁琐、管理成本较高、效率低下、流于形式等情况。随着国防建设的发展和投入的增加,军事装备的科研任务有所增加,一些较新、较快的项目也有所增加,其特点是需求不明确、开发周期较短[2],传统的开发方法在这些项目中表现出局限性。为了保质保量、高效及时地完成任务,必须引入新的开发方法,在保证满足国军标的要求的前提下,使装备承研单位能迅速响应需求变化而不失大规模规范化开发。
光电系统在军事应用中发挥着重要的作用,广泛应用在侦察感知、瞄准指示、预警对抗等领域[3],并且随着信息化、智能化发展的需求,其软件规模逐步增大、可靠性要求也逐步提高,在国防领域将会发挥越来越重要的作用,因此很有必要对其研制过程进行改进。军用光电系统软件各配置项多为嵌入式软件,软件规模以中小型为主,目前多为以单个软件配置项为主划分生命周期模型进行开发,各软件配置项从软件负责人、软件主管到各级开发、测试、支撑角色一应俱全,机构庞杂,流程繁琐,引入集成化的开发方法将各配置项统一管理很有必要。针对需求不固定、研制周期短的项目,可以引入敏捷开发的思想应用到研制过程中。
1 相关研究
1.1 GJB5000A概述
为了提高设备软件的质量,提高设备软件承包商的软件开发能力,总装电子信息基础部提出了GJB5000A-2008《军用软件研制能力成熟度模型》。它由5个成熟度级别、22个过程域、48个专用目标、165个专用实践、2个共享目标和12个共用实践组成。成熟度等级向组织提供了测量其软件过程能改进得多好的方法,可用于基准对比、供方选择、合同项目监督、评估和评价活动。军用软件开发单位按照GJB5000A的要求进行落地,形成符合单位实际情况的运行改进系统,自发布以来效果显著[4-5]。
1.2 军用光电系统软件研制过程现状
在软件管理和研发人员的努力下,军用光电系统软件的开发过程按照GJB5000A的要求有序进行,完成了从“小作坊”到“正规军”的转变,提高了研发效率,管理成本降低,软件可靠性显著提高。但是随着企业改制、组织机构调整和具有新特点项目的出现,原有的研制过程中有些做法已不太适应这些变化,需要做出针对性的改进。
1.2.1开发过程以单配置项为主
光电系统软件根据功能和部署位置通常划分为多个配置项,配置项组成示意如图1所示,基本信息示意如表1所示。
图1 光电系统软件组成
表1 各配置项基本信息
续表1
可以看出,各软件配置项编程语言虽然以C语言为主,但涉及的专业性较强,且多为嵌入式软件,硬件针对性也比较强。基于以上特点,传统研制过程中主要以配置项为主体指定各类角色和选择生命周期模型,如图2所示。主要人员角色见表2。
图2 传统的光电系统软件开发过程
表2 人员角色
此方法的优点:能完美符合GJB5000A的要求,保证评价及年审的正常通过;管理细致,细化到每个配置项,保证了每个技术环节及管理环节都有相应角色,可靠性较高。缺点:需要配备的人员队伍庞大,各类角色培训成本及人工成本较高;不管软件规模及重要程度的大小,所需要的角色基本一样,灵活性较差;顶层策划较弱,各配置项之间的集成较弱,各配置项之间独立性较强,软件负责人之间缺少策划的充分交流,各配置项之间进度策划参差不齐,不利于系统集成进度的策划,缺少专业技能方面的交流,对设计规范、编码规范的应用及软件可靠性设计方面各专业有各专业的特色,水平也不一。
1.2.2生命周期模型以瀑布模型为主
生命周期过程模型自诞生之日起发挥了重要作用,它的发展起始自1970年W.Royce发表的瀑布模型,随着软件开发活动的不断变化,出现了各种模型,如原型模型、增量模型和螺旋模型[6]。瀑布模型的示意图如图3所示。
图3 瀑布模型示意图
瀑布模型在高透明、高可控性、高可靠性的同时也有各种局限性:
(1) 在项目初期就要求分析出全部需求,不能有遗漏和理解上的错误,后续以此为基础进行详尽的策划。但往往项目执行时,一方面用户由于缺乏软件开发的知识很难准确地说清楚软件到底要干什么;一方面随着硬件平台和外部环境的变化,组织机构、工作任务的变化,用户的潜在需求是不停变化的。另外对于技术较新的项目,需求在前期是无法完全明确的,需要在研制过程中逐步明确。
(2) 阶段之间具有顺序性和依赖性。在瀑布模型下,后阶段工作依赖前阶段工作完成,且产品和活动需通过评审后才能进入下阶段,对于进度要紧的项目,可能会导致进度推后,因此软件开发人员接到任务后往往急于求成而提前进行了编码,导致大量返工。
(3) 软件实现节点延迟,在需求分析和设计阶段的工作完成并通过评审后才能进入实现阶段。由于其特殊用途,军用软件对软件可靠性有很高的要求。就军用光电系统软件研制而言,其主要是嵌入式软件,以往的开发具有需求相对简明、软件规模小、开发周期长等特征,结合可靠性、安全性的高要求,因此主要采用的是瀑布型模型。虽然根据不同项目类型增加了增量、原型、迭代等要素,甚至精简合并了研制阶段,但本质还是瀑布模型的理论。
2 改进思路
2.1 集成化管理
为了解决研制过程以配置项为主体带来的问题,拟采用集成管理的方法。中心思想是将光电系统软件当成一个配置项,各软件配置项作为一个模块来管理。具体做法如下:
软件配置项的软件负责人被撤销,并且只为整个项目设置一个软件负责人。担任项目软件负责人角色的人员应具有丰富的开发经验,对各个专业的技术特点及研制过程都有一定的了解,掌握其技术难点及关键点,包括所使用的工具、开发语言、测试方法、所适用的规范、标准等。此方法对项目软件负责人的要求较高,需具备从顶层把握各软件配置项的研制进度,具有掌握各配置项研制过程的共同点和不同点的能力。
整个项目的所有软件统一项目的定义过程,选择统一的生命周期模型,并选择定制过程和活动。
项目软件负责人统一做整个项目软件的策划、监督、风险分析、测量分析,在重大事项出现时负责决策。
单元测试人员可以由其他软件配置项的开发人员承担,各配置项之间进行角色交叉。这使得测试人员数量得到了减少,各配置项之间的技术交流有所增加。
改进后的研制过程如图4所示。各角色之间职责及数量的变化见表3。
图4 集成后的光电系统软件研制过程
表3 改进后项目人员角色的职责及数量
续表3
2.2 敏捷开发方法
2.2.1敏捷方法简介
采用了集成化的方法后,生命周期模型得到了改进,研制过程中的管理流程和角色数量得到了精简,角色职能得到了优化,可以在大部分项目的研制过程中进行推广,在保证质量的前提下提升管理及研发效率。但其还是以瀑布模型为主,对需求变动频繁、开发周期短的项目缺乏适应性。针对此类项目可以在集成化改进的基础上引入敏捷开发方法。
敏捷开发就是针对软件研制过程中遇到的需求频繁变动、任务节点较紧的问题。2001年一批软件专家成立了敏捷联盟,总结出了能快速高效研发并能轻松应对需求变更频繁的价值观和原则。敏捷开发宣言的内容:个人与沟通胜过过程和工具;可工作的软件胜过面面俱到的文档;客户协作胜过合同谈判;相应变化胜过遵循计划。
敏捷开发方法注重人与人之间的交流,强调以人为核心,与以往传统的讲究编制详细的计划和技术资料的文档驱动方法不同[7]。目前使用的基本敏捷方法有很多,例如极限编程(XP)、Scrum、特征驱动开发(FDD)等[8],每种方法都有不同的实践,但基础都是基于增量和迭代的过程[9]。
敏捷开发在国外已经流行多年,像微软、IBM、谷歌、雅虎等知名公司应用此方法取得了相当不错的效率,同时开发了大量的项目管理软件如ScrumWorks、VersionOne、Rally等来支撑敏捷开发,开源工具有XPlanner、XPWeb、Trac等。国内目前仍然停留在技术采纳生命周期的初期试用阶段,在国内流行较慢的原因为国内习惯于制定详细的标准和计划,所有项目都要按照标准和计划执行。敏捷开发方法与国内特别是军用软件开发主要特点比较见表4。
表4 敏捷方法与国内军用软件传统方法主要特点比较
2.2.2敏捷方法应用
众多文献资料分析了敏捷开发与GJB5000A或CMMI结合的方法和思想[10-12],本文主要介绍了在项目管理和工程技术活动两个过程领域的敏捷开发。其思想如下:
(1) 快速交付中间版本,供竞标、试验、大系统联调使用。将软件需求分析、软件设计、软件实现、单元和集成测试迭代为一个阶段。迭代周期中,只需要有相应文档的相应内容,例如需求规格说明、设计描述、测试文档等。交付代码后再按照模板和标准编写文档和实行评审。这样做的优势一是能快速交付软件产品,解决了前面提到的按照阶段一步步执行影响进度的问题,保证了产品按时交付;二是以用户为核心,根据用户的要求及时更改软件产品,转变观念不怕变更,解决以往不敢变更和变更难的现象。缺点是对软件开发人员要求较高,如果在编码完成阶段才暴露问题,返工的成本会比较大。
(2) 项目总师/系统总体组成员作为软件项目组的用户,参与每次迭代过程的讨论沟通。一是光电系统软件均为嵌入式软件,与硬件系统结合紧密,二是嵌入式软件很难直接面对顾客或使用者,因此由熟悉软件需求和开发管理的系统总体组成员担任此角色,参与每次迭代前需求的选择和迭代后的确认,以及迭代过程中的管理过程。这样能降低上面提到的问题暴露过晚造成的风险。
(3) 单元测试和实现同时进行。往常按照瀑布模型开发时要先设计编码再进行测试,敏捷开发讲求用测试来驱动设计编码,根据用户需求先进行测试的策划、需求分析和实现,再写代码,这样能确保测试的覆盖率,也能避免冗余的设计实现。这种方法需要测试工具和经验丰富的测试角色的支撑,前期可采取测试和实现同步进行的方法进行过度,待工具配套和开发人员的水平提升后再改为测试驱动实现的方法。
3 改进后的开发过程模型
结合上述想法,我们提出了生命周期过程的主要过程,如图5所示。
图5 生命周期主要流程图
本生命周期模型有以下特点:
(1) 系统需求分析和设计阶段确定整个光电系统软件的要求,编制、评审系统需求规格说明和系统设计说明。各软件配置项的软件研制任务书都放在后面进行编制和评审。原因是光电系统的主要软件是嵌入式软件,它与硬件紧密集成,一些功能和性能的界限不太清楚,如坐标系转化功能可由光电管理计算机软件实现,也可由光电伺服控制软件实现,光电轴位存储功能可由光电管理计算机软件实现也可由视频跟踪器实现,最终可在多次迭代后选择最优化的实现方式。用户关注的是光电系统整体呈现的功能,各配置项之间的功能分配要灵活得多,这样做可以减少以往项目在研制阶段无谓的需求变更和配置管理手续,提高效率。
(2) 每次迭代以提供可运行的代码为主,将设计、实现和单元测试同步进行,保存中间数据,保证联试试验后再进行数据整理形成最终文档。这样会存在风险。因为需求分析人员和开发人员的能力导致问题发现不及时,从而增加返工的难度和成本。因此需要系统组成员参与每次迭代的需求分析、需求选择和管理过程的全程参与。
(3) 以系统软件为主线进行策划,各配置项不再单独管理,改为统一策划、研制和管理。前面已经进行了详细分析。
4 结 语
本文紧密结合GJB5000A的要求和敏捷开发方法以及集成管理的思路,提出了适用于中小型软件规模、开发周期较短的军用光电系统软件研制的生命周期模型主要流程。采取集成管理的方法,将光电系统软件当成一个配置项,各软件配置项作为一个模块来管理,整个项目的所有软件制定一个项目定义过程和生命周期模型,精简了管理流程和人员角色。吸取敏捷管理的思想,先交付产品再统一整理文档,保证系统试验、联试的顺利进行。为了保证需求不出现偏差,选择项目总师/系统总体组成员作为软件项目组的用户,参与每次迭代过程的讨论沟通。为了保证产品质量,采取了单元测试和实现同时进行。在软件质量、可靠性不降低的前提下快速交付软件产品不拖延进度。后续随着开发、管理人员水平提高以及配套工具逐渐到位,可以进一步优化此过程,进一步提高开发效率。