张萍 李栋
摘 要:为提高装备软件的质量和可靠性,其研制过程需遵循GJB 5000A(军用软件研制能力成熟度模型)开展。本文旨在对GJB 5000A中的五个工程类过程域在弹载嵌入式软件研发中的实施过程进行研究,并分析了弹载嵌入式软件的自身特点以及该过程域的实施情况。根据研制经验,提出了在工程研制中需注意的实际问题,为提高相关软件的研发质量和效率提供经验和参考。
关键词:GJB 5000A;工程类过程域;弹载嵌入式软件
中图分类号:TP311 文献标识码:A
Abstract: In order to improve the quality and reliability of military equipment software, its development process needs to follow GJB 5000A (military software development capability maturity model). This paper proposes to study the implementation process of the five engineering process areas in GJB 5000A in the development of missile-borne embedded software. Characteristics of the missile-borne embedded software and the implementation of this process area are also analyzed. Based on development experience, actual issues that need to be paid attention to in the engineering development are put forward to provide experience and reference for improving the quality and efficiency of related software development.
Keywords: GJB 5000A; engineering process areas; missile-borne embedded software
1 引言(Introduction)
随着对军用软件产品质量和可靠性的要求日益增高,中国人民解放军总装备部于2008 年颁布了《军用软件研制能力成熟度模型》[1],用以规范管理军用软件产品的研制流程。弹载嵌入式软件作为重要的装备软件,其质量和可靠性更是重中之重。军用软件研制能力成熟度模型在弹载嵌入式软件研制中的实施,为保证软件产品的高质量和高可靠性提供了有效手段。随着军用软件在武器装备中作用的不断提高,其在装备系统研制中也逐渐占据主导地位[2]。软件能力成熟度模型中的工程类过程域为弹载嵌入式软件研制的工程活动提供了标准依据和规范化的软件研制流程。在软件需求开发方面,文献[3]和文献[4]分别从可否定性方面和实施方法上对软件需求开发进行了研究。针对军用嵌入式软件,文献[5]引入了技术成熟度(M)管理的方法来解决设计过程中的常见问题。文献[6]从集成策划、产品集成和接口管理三个方面分析研究了产品集成的具体实施方法。本文基于军用软件研制能力成熟度模型在军用弹载嵌入式软件研发中的实际工程应用,对其中的工程类过程域的具体实施过程进行研究,并根据弹载软件的工程研制经验,提出了实施过程中需注意的几个问题,对不断规范装备研制单位的软件产品流程,提高软件产品研制质量起到积极的作用。
2 工程类过程域(Engineering process areas)
GJB 5000A的软件研制能力成熟度模型所包含的22 个过程域可以分为四大类,分别为过程管理类过程域五个、项目管理类过程域七个、工程类过程域五个和支持类过程域五个[7]。其中工程类的五个过程域分别为需求开发(RD)、技术解决方案(TS)、产品集成(PI)、验证(VER)和确认(VAL),如图1所示。这五个过程域贯穿软件的整个工程研制过程,使整个研发过程都有据可依,有标可循。
需求开发过程域主要是识别用户需求,并把这些需求转化为产品需求。通过对这一系列产品需求的分析,从而得出初始的产品部件需求。通过沟通协调,产品和产品部件需求能够清晰地描述产品性能、质量特性、设计特点、验证需求等,从而使开发人员能够理解和使用。需求开发过程域为技術解决方案过程域提供需求,技术解决方案过程域将这些需求转化为产品结构、产品部件设计和产品部件。同时,需求开发过程域中提出的接口需求也要在产品集成过程域中得到验证。
技术解决方案过程域为产品部件提供技术数据包,这些技术数据包在产品集成过程域或者供方协议管理过程域(SAM)中会被使用。根据已建立的准则,将会开发各种备选方案从而得到最优设计。对于不同的产品,这些准则可能完全不同,这取决于产品类型、操作环境、性能要求、维护需求以及费用和交付时间。决策分析与决定过程域(DAR)的专用实践可以用来选择最终的解决方案。技术解决方案过程域还依赖于验证过程域中的专用实践来开展设计的验证和设计中的同行评审。
验证过程域保证工作产品满足特定的需求。验证过程域根据特定的需求选择需要验证的工作产品和验证方法。验证是一个增量式过程,通常以产品部件验证开始,以集成后产品的验证结束。验证还包括同行评审,该过程能够较早地发现被评审工作产品和产品部件的缺陷,并提供宝贵意见。
确认过程域是根据客户需求对产品逐步进行确认。它可以在真实操作环境中进行,也可以在仿真环境中开展。对该过程域来说,与客户对确认要求进行沟通协调是非常重要的环节。确认的对象可以是产品、产品部件、中间工作产品以及过程。经过确认的对象通常需要重新验证和确认。
产品集成过程域包括生成集成策略、产品部件集成以及向客户递交产品等专用实践。验证和确认过程的专用实践在产品集成的实施过程中都会被涉及。验证过程更倾向于对产品部件而非产品集成的接口和接口需求的验证。接口验证在集成过程中是相当重要的。若产品集成是在真实的试验环境中进行,则运用确认过程的专用实践。
3 弹载嵌入式软件的特点(Characteristics of missile-borne embedded software)
弹载嵌入式飞行控制软件在规模上属于中等规模软件。它对外要接收载机飞行任务,对内需要控制全弹各个组件的自检以及整个工作流程,接口繁多,时序复杂。在研制初期,系统需求尚不明晰,存在诸多不确定性,这就造成在软件研制启动后的整个开发过程中会有大量的需求变更,从而引发多轮次软件迭代设计。
鉴于飞行控制软件的使用目的,其对可靠性和安全性要求严格,因此软件开发过程规范、受控、可追溯等更不可忽视。飞行控制软件为嵌入式运行的软件产品,其最终随硬件产品一同交付。软件研发过程受硬件产品的制约,接口需求等需要硬件产品配合的验证试验要在硬件到位的情况下才能开展,软件研发周期无法保证。
4 工程类过程域在软件研发中的应用(Application of Engineering process areas in software development)
在系统需求分析基本完成,软件研制任务明确后,即可启动软件研制工作。从完成系统的需求分析,到软件最终交付使用,软件研制需经历需求开发过程、设计与实现过程和验证与确认过程。五个工程类过程域贯穿整个软件的开发与迭代过程,如图2所示。
4.1 需求开发过程
需求开发过程产生并分析用户、产品和产品部件的需求,这些需求包括与产品生存周期各个阶段有关的需要,以及与产品属性有关的需要。
开发用户需求。根据飞控软件特点,系统工程组向利益相关方收集、获取需求,归纳总结共性的需求条目,编写《用户需求列表》,并对软件的功能、性能、接口等需求进行定义,编写《软件研制任务书》初稿,内容涵盖软件产品介绍、软件应遵循的标准或规范,以及软件产品的功能性需求、非功能性需求、接口需求等。
评审《软件研制任务书》。系统工程组组织对《软件研制任务书》进行评审,评审通过后,系统工程组申请将《软件研制任务书》入库,同时申请建立功能基线。
制定运行方案和场景。软件设计组分析软件对硬件平台及计算机资源的需求,包括计算机软件配置项(CSCI)环境需求和计算机资源需求。
确定并分配产品部件需求。软件设计组将产品分解为产品部件,将功能需求、性能需求、设计约束条件分配给每个产品部件,分析CSCI能力需求。
标识接口需求。软件设计组对软件产品的内部接口、外部接口(包括通讯协议)、工作用接口和测试用接口等进行标识,文档化已标识接口的类型、功能、使用方式、数据格式、限制条件等信息。
分析需求。分析利益相关方的需要、期望、约束和外部接口,识别需求的优先顺序和关键程度,并完成《软件需求规格说明》的编写。
评审《软件需求规格说明》。由软件设计组根据评审规程组织相关人员对《软件需求规格说明》进行评审,确保与用户、开发人员、测试人员以及其他利益相关方能达成一致理解,共同确认《软件需求规格说明》。
4.2 设计与集成过程
设计与集成过程是针对软件需求进行软件设计、代码实现和代码集成的工程技术活动,它涵盖技术解决方案和产品集成两个过程域。
确定设计策略。软件设计人员依据《软件需求规格说明》建立选择准则,制定备选方案,并对分配需求逐条开展设计决策,确定最能满足选择准则的设计策略方案。
体系结构设计和详细设计。软件设计人员依据《软件需求规格说明》进行软件体系结构分解,定义软件接口设计准则,分析每个软件部件的设计,确定其实现方式。根据设计策略和体系结构设计,确定软件体系结构的细节,完整定义产品部件和接口。根据设计内容,完成编写《软件设计说明》。
建立技术数据包。软件设计人员在体系结构设计期间开始建立技术数据包,并在软件产品生存周期内维护该数据包。
软件实现。软件实现人员根据《软件设计说明》实现软件部件,编写软件支持文档,并对实现的软件单元进行单元测试。
制定软件集成计划。软件实现人员依据《软件需求规格说明》和《软件设计说明》建立软件集成环境,确认软件部件和部件的内外部接口关系,制定软件集成策略,并编写《软件集成计划》。
软件集成。软件实现人员根据《软件集成计划》,将软件部件集成为可提交用户使用的完成软件产品,对集成后的软件产品进行软件仿真等功能验证,并开展部件测试。
4.3 验证与确认过程
验证与确认过程是确保工作产品满足指定的需求和使用需求。
在弹载嵌入式软件研发过程中,主要通过相关文档的评审、软件代码的测试、软件仿真等手段实施验证活动,确保工作产品满足指定的需求;在用户及利益相关方参与的情况下,通过飞控组件交付试验以及半实物仿真试验等方法,在接近真实的环境中进行产品确认,确保产品满足使用需求。
软件测试是贯穿软件开发的整个过程,是软件产品验证与确认的一个途径。它主要包括代码审查、文档审查和静态测试,与软件模块对应的单元测试,与《软件设计说明》相对应的部件测试,与《软件需求规格说明》相对应的配置项测試以及与《软件研制任务书》相对应的系统测试等。软件研制过程中的缺陷定位技术也是目前正在探索使用的一种测试技术,主要采用基于程序谱的理论[8]。
5 应用中需关注的问题(Issues to be concerned about in application)
细致实施软件需求开发。软件需求是软件项目研发的基础。软件需求具有不确定性、变化性和主观性等特点,获取高质量的软件需求是软件研制过程中的重点和难点。尤其是对于弹载嵌入式飞行控制软件来说,在研制初期,载机端的需求存在较大的不确定性,这必将给软件需求的确定带来较大困难。在需求开发阶段如若能够细化需求分解,则为交付高质量的软件产品打下良好的基础,也能大幅降低整个软件研制过程的纠错成本[9-10]。表1给出了软件各研制阶段的纠错成本,其中假设在软件实现阶段纠正一个错误的成本为1。从中我们不难看出,需求分析阶段的纠错成本最多为实现阶段的1/5,随着研制进度的深入,纠错成本将大幅提高。细致全面的需求分解必会帮助研发人员在软件开发过程中少走弯路。
软件迭代过程中的状态控制。随着系统需求的逐步明晰,软件状态也会随之迭代更改以满足其要求。软件本身的状态管理在软件开发过程中的被重视程度已较为深入。除此之外,还需格外关注需求变更引起的一系列状态更改,采用有效便捷的手段管理需求变更引发的软件状态变化。
重用模块的使用。对于不同型号的飞行控制软件开发来说,其各方面都具有较高的继承性。软件中部分功能明确、独立、接口固定且经过多轮次多途径验证的成熟函数,被封装成独立的功能模块,作为组织资产[11]的一部分供不同的项目软件使用。模块的重用是提高软件可靠性和软件研发效率的重要手段。在飞控软件的设计和集成过程中,经分析后能使用重用模块的应尽量使用,但应充分分析其适用性。若需对重用模块进行适应性修改后使用的,应分析其影响域并策划相应的软件测试,以保证其正确性。
开展及时有效的同行评审。从首版软件的形成到最终交付使用的软件版本,其间必然会通过各种方式发现许多软件相关问题。随着软件研制流程的不断深入,其牵涉的产品和试验越来越繁多,发现并修复软件问题需要付出的代价也越大。因此越早发现缺陷,其影响域越小,修复缺陷的成本也越低。走查是一种软件开发中最为有效,也最便于设计人员开展的同行评审形式。软件文档的一致性、软件代码实现的正确性等均可以通过走查的方式开展。根据研制经验,在首版软件代码形成后,开展一轮全面的走查,其缺陷检出率较高,且带来的影响也较小。在广泛实施同行评审并收集数据的基础上,可利用度量结果来评估和改进软件开发过程[12]。
6 结论(Conclusion)
GJB 5000A中的五个工程类过程域涵盖了贯穿整个软件研制过程的软件开发和维护活动。根据弹载嵌入式软件自身的特点,本文主要分析了这五个工程类过程域的特性以及其在弹载嵌入式软件研制中的实际应用情况,并根据工程实施经验提出了在实际应用中需格外关注的几个问题,为保证军用软件产品的质量,提高软件可靠性提供经验和参考。
参考文献(References)
[1] 中华人民共和国国家军用标准.军用软件研制能力成熟度模型GJB 5000A-2008[S].北京:国防工业出版社,2009:13-15.
[2] 马洁.基于GJB 5000A的军用软件过程改进的研究[D].北京:中国科学院大学,2014.
[3] 宋志刚,卢德中.软件需求的可否定性研究[J].航空计算技术,2013(3):74-76.
[4] 常柏林,孙中泉,刘阳.GJB 5000A 2级军用软件过程管理[J].四川兵工学报,2010(10):141-143.
[5] 宋志刚.基于GJB 5000A的型号软件设计过程的研究与实践[J].航空计算技术,2014(4):106-108.
[6] 苏春梅,何剑伟,刘永刚,等.基于GJB 5000A三级的产品集成过程研究与应用[J].遥测遥控,2015,36(4):37-43.
[7] CHRISSIS M B, KONRAD M, SHRUM S. CMMI for development[M]. 3rd Edition. Hoboken: Addison-Wesley Professional, 2011:68-75.
[8] NAISH L, LEE H J, RAMAMOHANARAO K. A model for spectra-based software diagnosis[J]. ACM Transactions on Software Engineering and Methodology, 2011, 20(3):1-32.
[9] 石柱.军用软件能力成熟模型可重复级实施指南[M].北京:中国标准化出版社,2006:114-131.
[10] 石柱.军用软件研制能力成熟度模型及其应用[M].北京:中国标准出版社,2009:100-104.
[11] 王勇.软件过程资产库的研究与实现[J].计算机应用与软件,2016,33(7):106-108,144.
[12] 张文秀,张锦辉.软件过程中同行评审的应用与度量[J].计算机应用与软件,2008,25(10):101-103.
作者簡介:
张 萍(1980-),女,硕士,高级工程师.研究领域:弹载嵌入式软件设计.
李 栋(1974-),男,硕士,高级工程师.研究领域:控制与导航.