陈 福,牟 明,戴小氐,段海军,徐 明
(中航工业西安航空计算技术研究所 19室,陕西 西安 710065)
机载大规模复杂软件开发及验证技术
陈福,牟明,戴小氐,段海军,徐明
(中航工业西安航空计算技术研究所 19室,陕西 西安710065)
摘要针对航空电子系统结构综合化、硬件共享化、功能软件化引发软件规模、复杂度指数级上升的趋势,分析了软件开发、软件综合以及软件测试的困难和挑战,并从开发技术、测试验证技术和项目管理3个维度,结合模型驱动开发、软件复用、虚拟仿真验证、DO-297规范、CMMI等技术和管理方法,为机载大规模复杂软件开发及验证提供了解决方案,提高软件的可靠性,缩短软件的研发周期。
关键词机载大规模;模型开发;软件复用;虚拟仿真
Development and Verification of Large-scale and Complex Airborne Software
CHEN Fu,MU Ming,DAI Xiaodi,DUAN Haijun,XU Ming
(Unit 19,AVIC Xi’an Aero Institute of Computing Technology,Xi’an 710065,China)
AbstractThe difficulties and challenges for software development due to the exponential growth of software size and complexity with the rapid development of integrated modular avionics systems are analyzed.The development,testing and verification techniques and project management are discussed.The techniques of MDA,software reuse,virtual simulation,DO-297,and CMMI are employed to provides a solution for the development and verification of large-scale and complex Airborne software in an attempt to improve the reliability and shorten the development cycle of software.
Keywordsairborne;large-scale;model development;software reuse;virtual simulation
半个世纪以来,科学技术的飞速发展、战场环境的日益严峻和作战需求的不断升级,加速了航空电子技术的更新换代。航空电子系统结构经历了从最初的分立式航空电子系统、联合式航空电子系统,到综合化航空电子系统的发展过程,正迅速朝着结构综合化、硬件共享化、功能软件化和信息网络化的方向发展,设备的体积功耗重量不断下降。与此同时,以往许多由硬件实现的功能都交由软件来实现,导致软件规模和复杂度呈指数级增长。美国的第二代战机F-111D,软件规模为5万行代码,航空电子系统功能的20%为软件实现;第三代战机F-16A,软件规模为12.8万行代码,航空电子系统功能的40%为软件实现;第四代战机中,F-22的机载软件规模达500万行代码,而F-35的机载软件规模则更是高达近1 000万行,航空电子系统功能的80%为软件实现。国外研究数据表明,机载软件的代码量正以每10年超过200%的速度在快速增长,让机载软件研制面临严峻的考验。
1软件开发面临的新挑战
机载软件规模、复杂度的指数级增长,不仅造成软件研发工作量的剧增,还将软件研发难度和技术、成本风险提高到了危机边缘。
(1)开发效率与成本问题。据国外权威统计数据,对于A级软件的手工开发效率为平均32行/天/人。据此计算,要开发一个代码规模为100万行的A级软件,需要一个人干118年,而实际机载软件交付周期大多不超过两年时间,因此需要60名开发人员并行工作才能在两年内完成。按照国外IT公司的平均薪酬标准,工程师每小时工时费为110美元,则要完成全部软件开发就需要3 800万美元。若再将8%管理成本及系数为1.1的风险因素考虑在内,仅软件研发费用就高达4 500万美元。未来,代码行上亿的超大规模软件将越发常见,数亿乃至数十亿的开发成本将会是对软件研制单位的重大挑战;
(2)需求管理问题。机载软件规模猛增,与之对应的需求条目数也急剧增加。以某个具有100万行代码规模的飞行显示器软件为例,其需求条目数达到了33 000条,按照每页10条需求计算,高层需求将近3 300页。如此大规模的需求数目,要做到每条需求均定义完整、清晰,可行可验证,难度较高。同时,需求的追踪和变更成为巨大的管理负担;
(3)软件缺陷问题。国际上,机载软件千行代码缺陷率平均水平在4‰~5‰之间。对于安全关键软件,要求达到0.1‰~1‰。控制软件缺陷率的难度,随着软件的规模和复杂度的增大而大幅增加。对于小规模的机载软件(5 000行有效代码以下),还能凭借开发人员的经验和能力控制软件缺陷率。但对于大规模复杂软件,安全性可靠性要求很高,不在开发技术上有所突破和提升,并借助软件需求管理工具、建模仿真工具、代码静态分析和动态测试工具、安全性分析工具等,根本无法保证软件质量;
(4)系统综合问题。大规模复杂软件,往往包含多个软件配置项,分由多家研制单位承担。各个配置项独立开发、独立测试,实现各自的功能,并提供对外交互的接口,最后由总体单位将所有的软件配置项综合到一起,进行系统综合测试。由于各承研单位的软件研制能力参差不齐,软件开发有关的标准和规范也不统一,导致系统综合十分困难,各个软件配置项的兼容性问题层出不穷。此外,诸多之前未暴露的软件问题在系统综合时会大量暴露,大量的分析故障、排除故障工作将极大影响系统综合的进度;
(5)测试验证问题。软件的安全性可靠性一方面要靠规范完善的开发过程支撑,另一方面也需充分的验证来保证。软件开发生命周期中验证的工作量常达到50%以上,在一些特定领域甚至高达80%。而航电系统机载软件功能大幅增多,代码规模、复杂度指数级增长的同时,影响范围也在急剧增大,要求对机载软件尤其是对各子系统集成进行全面充分的验证,验证的工作量在软件开发生命周期中所占比例将进一步提高。同时,如图1所示,在软件开发生命周期中,70%的软件问题产生于需求和设计阶段[1],但一般只有3.5%的问题能在这两个阶段被发现和消除,大部分问题要到单元集成和集成测试阶段才被发现。而编码阶段后的问题的修复代价是需求和设计阶段修复问题代价的4~44倍。
图1 软件开发各阶段引入和消除问题概率及消除难度
2应对措施和关键技术
在机载软件大规模、高安全、高可靠的背景下,如何解决目前软件开发所面临的挑战成为业界研究热点。近年来,国内外众多专家学者都进行了大量的研究和实践工作,诞生了众多新的开发技术和工具,同时也逐步形成了相关的标准和规范。
2.1开发技术方面
(1)基于需求的管理。在机载软件开发生命周期中,需求管理是一个获取需求、定义需求、分析需求、条目化需求、实现需求和验证需求的过程,并在开发及验证的各个阶段对需求进行追踪。正确的获取和定义需求,能避免或有效减少后续环节的无用功,能够做到有的放矢,保证需求分析、软件架构设计、部件设计、详细设计、编码、测试和验证都紧紧围绕系统对软件的需求这一中心点开展,保证软件的开发效率和质量。好的需求须满足条目化、惟一性、可标识、正确性、完整性、清晰性、一致性、可验证性、可追踪性、可配置型、模块化、正义性和设计无关性等要求。同时,针对每一条需求,在开发过程并行开展测试验证工作,保证在交付集成之前每个软件单元都满足相应的质量要求;
(2)基于模型的开发。模型开发是一种以软件模型为驱动,以软件模型构建、模型验证、自动代码生成为主线的开发方式。随着嵌入式软件规模的迅速扩张与功能的日益复杂,手工编码方式日益成为软件研发的瓶颈。软件工程的关注点不再局限于使用文本化的代码编辑器和调试器等进行嵌入式系统的开发,转而使用诸如模型开发技术等新一代软件开发技术。以模型为中心的基于MDA的软件开发模式在大规模复杂软件项目中越来越展现出卓越的问题解决能力和强大的生命力。在机载大规模复杂软件研发中,航电、机电、飞控等子系统的领域建模及其验证技术、模型库构建及管理技术等[2],成为研究重点;
(3)完整的工具链。开发工具是软件开发过程中不可或缺的要素。各个开发阶段都有相应的开发工具,辅助该阶段开发活动,提高效率。但各种工具之间往往无法兼容,前一阶段工具所产生的数据,无法导入后一阶段的工具,这大幅影响了软件开发效率,没有形成工具的集合效能。对软件研发过程中所涉及的需求分析、建模、仿真及测试验证等工具进行有效集成,打通工具间的数据接口,形成统一的开发工具集,实现工具的规范化和统一应用,将会大幅提高软件研发效率和质量;
(4)软件复用。随着机载软件规模和复杂度的迅猛增长,传统的以新开发为主的方式,显然无法满足研发周期和成本控制等要求。软件复用是解决此问题的有效途径之一。软件复用是指重复使用“为了复用目的而设计的软件”的过程,其体现了软件工程思想的一种转变,即从建立单一的系统到建立一系列相似或相关的系统。实践证明,有效的软件复用可提高软件开发的效率和质量。软件复用包括两个过程:可复用软件(构件)的开发(Development for Reuse)和基于可复用软件(构件)的应用系统构造(集成和组装)(Development with Reuse)。关键因素如图2所示。
图2 实现软件复用的关键因素
2.2测试验证技术方面
(1)基于虚拟环境的仿真验证[3]。利用虚拟环境仿真验证技术,可以摆脱真实硬件设备的依赖,在尚不具备硬件条件的情况下,也能提供一个数字化的软件开发和验证平台,进行软件的开发和调试,实现软硬件并行开发,将软件技术验证工作提前,提高技术成熟度[4]。其次,利用虚拟环境仿真验证技术,便于制造各种故障模式,进行软件故障注入,调试软件的故障检测、容错重构功能[5]。此外,虚拟环境仿真验证还可完成众多在真实硬件环境下具有较高破环性或危险性的测试验证工作。图3为引入虚拟仿真验证技术的前后对比;
图3 引入虚拟仿真验证技术前后
(2)集成测试验证方面。DO-297规范为综合化大规模软件的测试验证提供了方法指南。综合化大规模软件多采用分区操作系统,具有多个应用和大量任务,应采取自底向上增量式集成测试的策略,如图4所示。根据DO-297规范要求,综合化大规模软件的验证和确认,作为综合化模块化机载系统开发、综合过程的一个重要组成部分,必须伴随系统的综合过程同步进行。避免前一个阶段的缺陷到后一个阶段放大或叠加,引发更大范围的缺陷[6]。
图4 综合化大规模软件测试策略
2.3项目管理
“软件系统的质量受制于开发和演化其所用过程的质量”,解决软件质量问题的根本措施之一是提高软件过程能力。国外广泛使用CMMI(Capability Maturity Model Integration,能力成熟度模型集成)来加强项目管理,并取得了丰硕成果。国外某著名软件公司推行CMMI后,项目开发效率提高了62%,计划偏离控制在了20%以内,研发周期缩短36%,产品交付后的千行代码缺陷率降到了1‰以下。运用先进的项目管理方法,也是机载大规模复杂软件研发的必然要求。
3结束语
综合化模块化航空电子系统技术的发展,使机载软件的规模和复杂度呈现出指数级的增长,也给传统的机载软件研制模式和流程造成了巨大的冲击,新一轮软件危机随时可能爆发,机载软件业界已到了必须变革的危险时刻。因此,需从软件开发技术、软件测试验证技术、软件项目管理3方面同时入手,紧盯国际前沿技术,掌握多领域建模、模型转换、模型量化评估、模型复用、组合式仿真、多学科多项目协同开发等技术,建立模型库和仿真试验资源库,以适应机载大规模复杂软件的研制要求。
参考文献
[1]陈小峰.可信平台模块的形式化分析和测试[J].计算机学报,2009,32(4):646-653.
[2]张霖,张雪松,宋晓,等.面向复杂系统仿真的模型工程[J].系统仿真学报,2013,25(11):2729-2736.
[3]蒋崇武,杨顺昆,刘斌.面向嵌入式软件测试的仿真建模[J].计算机工程,2008,34(4):87-89.
[4]陈西选,徐珞,曲凯,等.仿真体系结构发展现状与趋势研究[J].计算机工程与应用,2014,50(9):32-36,40.
[5]侯春燕,崔刚,刘宏伟.基于率的构件软件可靠性过程仿真[J].软件学报,2011,22(11):2749-2759.
[6]周燕,宋敬华.面向对象的集成测试顺序的研究[J].计算机测量与控制,2010,18(9):2014-2015,2018.
中图分类号TP311.5;V243
文献标识码A
文章编号1007-7820(2016)03-190-04
doi:10.16180/j.cnki.issn1007-7820.2016.03.050
作者简介:陈福(1984—),男,工程师。研究方向:机载嵌入式软件研发和软件工程。
基金项目:国家重大专项基金资助项目(2012ZX01041-006);航空支撑技术预研基金资助项目(619010604)
收稿日期:2015- 08- 10