黄小波
(中国电子科技集团公司第三十八研究所,安徽 合肥230088)
固件软件工程化管理应用探讨
黄小波
(中国电子科技集团公司第三十八研究所,安徽 合肥230088)
随着技术的不断发展,固件软件的修改和升级日益变得简单。固件的更新升级在为用户带来多样化的功能满足同时,也带来了开发过程和质量不可控的风险。本文在引入固件的定义和特点后,借鉴GJB2786A《军用软件开发通用要求》标准中对软件工程化管理规定,提出了固件软件开发过程的管理要求。从提高软件质量角度出发,提出了固件软件可靠性设计的相关要求。最后,将固件软件的工程化管理应用于某型项目中,经过实际运行,表明固件软件工程化管理切实可行。
固件;软件工程化;开发过程;软件质量;可靠性设计
固件就是 “固化的软件”,它是指固化在集成电路内部的程序代码,负责控制和协调集成电路的功能。有时也理解具有程序代码的硬件装置。在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。虽然以“固件”为名,但还是应当被我们理解为软件。固件既然是软件,就有大小之分。大的可有几百兆,小的也许只有几K,甚至不足1K。固件常用的开发的语言一般包括有:汇编语言、C语言、AHDL语言、VHDL语言、Verilog语言等。
随着技术的不断发展,修改固件以适应不断更新的硬件环境成了用户们的迫切要求,升级固件也变得越来越简单,越来越没有危险,固件程序与我们通常所说的程序的区别已经越来越小。由于设计师可以随意迅速修改设计、进行硬件设计,从而忽略了良好的设计流程;随着集成电路规模越来越大,设计、验证、封装和测试的经费需求也越大。
如同软件产业引起软件工程化管理的必要性所示,固件软件开发存在着与常用软件同样问题:团队沟通困难,软件重用率低下,开发人员各自为政,代码冗余度高,文档不健全等;结果造成数据丢失,开发周期漫长,产品可靠性差,质量低劣,软件维护困难,用户抱怨使用不便,项目风险增加等。随着固件软件易于修改的灵活性和应用的持续增长,暴露的问题也逐渐增多,必须用标准的设计方法和开发过程约束。
固件软件工程化是引用软件工程化的理论、概念和技术以提高固件设计的质量和数量,降低开发和维护成本,提高软件质量,加快和控制开发进度,实现开发过程受控。
我国软件工程标准化工作从上世纪80年代初才开始起步,经过近30年努力发展,取得了喜人成果,现已颁布国标50多项、国军标约15项,另外,航空、航天、电子、机械等部门也基于自身管理需要分别制定了若干标准。自1983年军用标准化工作实行统一管理以后,软件工程标准化工作受到各有关方面的重视和研究[1-2],取得了可喜成绩,迄今已颁布的15多项国军标中的大多数标准已被军内外广泛应用,对一些大型信息系统工程及重点武器型号的研制、生产及使用起到了积极的促进作用。形成的主要标准如:GJB2786A《军用软件开发通用要求》、GJB438B《军用软件开发文档通用要求》、GJB1268A《军用软件验收要求》、GJB5000A《军用软件研制能力成熟度模型》和GJB/Z102《软件可靠性和安全性设计规则》等。
软件工程化带来的好处是显而易见的,比如:提高软件的可靠性和可移植性、软件人员的技术水平、提高软件人员间的沟通效率,减少差错和误解,降低软件产品开发和运行维护成本、缩短软件开发周期等。
软件工程化发挥的巨大引领作用,可以从载人航天工程中得以体现[3]。在神舟六号质量问题汇总中,软件质量问题占全部质量问题的比例仅为7.69%,而在三年前的神舟三号中,这个问题的比例高达31.25%。
GJB2786A《军用软件开发通用要求》第一章节“1.范围”中明确描述了”本标准适用与需方和开发方获取、开发及维护军用软件(含固件中的软件)。”软件开发的基本活动主要包括:系统需求分析、系统设计、软件需求分析、软件设计、软件实现和单元测试、单元集成和测试、CSCI合规性测试、CSCI/HWCI集成和测试、系统合规性测试、软件使用准备、软件移交准备、软件验收;在实际软件开发过程中,可根据软件的关键等级和项目的应用场合,对上述开发活动进行裁剪。同时,GJB 2786A又从软件开发管理、软件工程、正式合格性测试、软件产品评价、软件配置管理、软件保障阶段等6个方面对上述活动提出了具体要求。
参考GJB 2786A《军用软件开发通用要求》,根据固件自身的设计特点,固件软件的开发流程阶段一般划分为六个阶段:任务分析阶段、需求分析阶段、设计阶段、实现阶段、验证阶段、运行维护阶段。其开发模式也可以采用如“瀑布模型”、“螺旋模型”、“敏捷模型”等。其开发流程及对应形成的主要文档如下图所示:
图1 固件软件开发流程图
各阶段形成的一般文档资料如表1所示:
表1 软件研制过程文档
任务分析阶段主要分析所使用的固件软件是否满足任务要求。描述的关键点主要包括:
1)固件软件的软硬件运行环境;
2)设计约束:包括综合方式、时钟要求、速度要求、时序参数和管脚分配;
3)技术要求:包括功能指标、性能指标及用到的协议和算法;所实现功能的框图、数据流和控制流等;
4)接口信号状态:包括接口信号、电平、输入/输出关系;
5)功能验证要求;
6)安全性可靠性设计要求。
需求分析阶段主要是对任务书内容的细化,使得固件产品设计师和编码人员能够根据需求规格说明完成设计和编码工作。描述的关键点主要包括:
1)功能性能需求描述;
2)内/外部接口需求描述;
3)时序关系需求描述;
4)安全性可靠性需求描述。
设计阶段主要是进行功能分解和模块划分。描述的关键点主要包括:
1)软件结构的使用;
2)状态和模式的转换关系;
3)模块的功能、接口和相互关系;
4)地址空间划分;
5)性能实现方式。
软件实现阶段,主要根据需求文档和设计文档,依据相关行业标准和编程规范,进行代码编写和时序验证工作。
验证阶段是软件测试生命周期中的一个阶段,在验证活动中发现尽可能多的缺陷。验证阶段应和需求规格说明同步开展工作,开发软硬件验证平台、脚本、定义需要开发的总线接口模型、编写验证用例及其对应的验证通过依据。验证的手段主要包括:文档审查、代码规则检查、功能验证、时序验证、设计确认。
运行维护阶段主要是对固件软件开发过程和产品本身进行正式验收,经过验收后的软件交付给用户使用,在使用过程中维护软件的正常运行、不断改进软件的性能和质量。通过编制软件质量履历书,形成固件软件产品从单机验证、测试记录、系统联调记录、交接记录、使用记录、检查记录等相关使用维护信息。
软件可靠性(software reliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。软件可靠性不但与软件存在的缺陷和(或)差错有关,而且与系统输入和系统使用有关。由于固件软件设计与器件紧密相连,因此,影响固件软件可靠性设计的因素很多。
固件软件可靠性设计一般需考虑如下几方面因素:
1)建立时间和保持时间:数据的稳定传输必须满足建立和保持时间的要求;
2)竞争和冒险:竞争和冒险会影响逻辑电路的稳定性。时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能引起系统出错;
3)时钟信号:可靠的时钟信号对固件软件是非常关键的。一般都要求将时钟信号综合到全局网络进行考虑,对跨时钟域信号进行同步化处理;
4)组合逻辑设计:由于组合逻辑的输出易产生毛刺,因此,在系统要满足高可靠性要求时,尽量避免大量使用组合逻辑电路设计;
5)多余调试端口设计:由于多余调试端口在悬空状态下可能会引入外部触发信号,从而触发固件软件内部工作逻辑,从而产生异常;因此,不用的调试端口或多余管教尽量进行下拉接地处理;
6)触发器亚稳定处理:由于亚稳态无法避免的,因此设计电路要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感;
7)脉冲计数突跳处理:脉冲计数的突跳会导致采样出差,一般采用格雷码计数器设计避免;
8)上电和掉电对输入和输出管脚影响考虑:在上电和掉电这一过渡阶段中,管脚的逻辑电平是不确定的,从而会程序运行不正常。一般考虑在上电时增加延时、确保各个管脚电平稳定后开始工作;通过设计硬件电路检测电压降低来处理掉电对程序可能的影响[4];
9)其它还需要考虑的因素包括:看门狗电路失效性处理、总线切换中时序冲突处理、对复位信号的去毛刺、上/下拉抗干扰考虑等等。
影响固件软件可靠性设计因素是多方面的,这需要从开发起始阶段就要将可靠性设计纳入整个开发过程。
以某项目产品研制过程为例,整个项目包含六个固件软件。按照软件关键等级定义,六个固件软件关键等级定义为重要级别。按照产品研制大纲要求,六个固件软件都需进行软件第三方评测,并最终交付使用。
参考GJB 2786A《军用软件开发通用要求》,产品开发流程划分为六个阶段,开发模式采用“瀑布模型”,每个固件软件在研制过程中最终形成如下文档:
10)软件研制任务书;
11)软件需求文档;
12)软件设计文档;
13)软件安装手册;
14)软件源代码和可执行程序;
15)软件版本说明;
16)软件仿真分析报告;
17)软件测试需求文档;
18)软件测试报告。
软件在每个阶段形成的文档经过会议评审,形成评审结论。同时,软件所有文档资料按照三库(开发库、配置库和产品库)方式进行管理。对经过第三方测评后进行的软件修改,形成软件更改影响域分析报告,并进行回归测试。软件最终经过验收,交付用户使用。
在固件开发过程中引入软件工程化管理的目的是为了实现开发过程受控、提高固件软件设计的质量、降低开发和维护成本。本文在引入固件软件的定义和特点后,按照GJB 2786A《军用软件开发通用要求》,将固件软件开发流程划分为六个阶段,并给出各研制阶段对应形成的过程数据包资料。同时,为提高固件软件质量,本文给出了固件软件可靠性设计过程中需要考虑的相关因素。结合项目实际管理结果,表明固件软件工程化管理在开发过程中的应用是切实可行。
[1]耿聪.软件工程化管理方法在武器装备软件研制中的应用研究[D].西北大学,2007.
[2]王杨玲,王英浩,颠迁贵,等.航天型号软件过程改进实践[J].航天标准化,2011(3):18-22.
[3]张强.扛起航天软件工程化旗帜[N].科技日报,2013-01-15.
[4]王小平.解决系统上电和掉电可靠性的一种处理方法[J].单片机与嵌入式系统应用,2001(7):356-357.
The Application of the Software Engineering Management to Firmware
HUANG Xiao-bo
(China Electronics Technology Group Corporation No.38 Research Institute,Hefei Anhui 230088,China)
With the development of technology,firmware-software modification and upgrade becomes more simple.Although firmware update brings diverse functions for the user,but also brings uncontrollable risk of development process and sofeware quality.After the definition and characteristics of the firmware introduced,the paper proposed the management requirements to firmware’s development,referring to the GJB2786 standard.From the perspective of improving software quality,some rules of software reliability design are given.Finally,with the application to a project,the software management to firmware is feasible.
Firmware;Software engineering;Development process;software quality;Reliability design
黄小波(1975—),男,安徽合肥人,硕士,中国电子科技集团公司第三十八研究所,高级工程师,研究方向为浮空器和SAR测控系统设计。
丁艳]