■ 白 光 张永军 雍明远
军用软件可靠性研究
■ 白 光张永军雍明远
我国在军用软件领域的起步较晚,在军用软件的可靠性研究和应用方面起步更晚且投入的精力明显不够。在武器科技化、集成化日益明显的今天,软件可靠性方面的不足很容易成为制约我们装备发展的瓶颈。对此,笔者在应用开发方面进行了讨论。
长期以来,在实际使用过程中暴露的软件以及和软件有关的问题逐渐增多,直接影响了整个武器系统的质量。为了避免和消除错误,确保开发出的软件系统工作正确,运行可靠,如何提高软件装备的可靠性,是软件质量管理的重点工作。
1983年美国IEEE计算机学会对“软件可靠性”作出了明确定义,此后该定义被美国标准化研究所接受为国家标准,1989年我国也接受该定义为国家标准。新版GJB/Z 102-97的定义包括两方面的含义:
(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;
(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;
其中的概率是系统输入和系统使用的函数,也是软件中存在的故障的函数,系统输入将确定是否会遇到已存在的故障(如果故障存在的话)。
同时我们也都知道,第一,无论多么成熟的软件都不会十全十美,几乎所有投入使用的软件仍含有嵌入的错误,由于软件测试时间和费用上的限制,想用连续不断的检查来获得100%正确的软件是几乎不可能的。第二,软件一时的正确运行,不等于程序中已不存在任何差错。因为和有相当规模的软件一般总有多条分支和多种功能。在不同的使用目的和输入条件下,其故障的发生是随机的。
软件可靠性是关于软件能够满足需求功能的性质,软件不能满足需求是因为软件中的差错引起了软件故障。软件中有哪些可能的差错呢?
软件差错是软件开发各阶段潜入的人为错误:
1.需求分析定义错误。如用户提出的需求不完整,用户需求的变更未及时消化,软件开发者和用户对需求的理解不同等等。
2.设计错误。如处理的结构和算法错误,缺乏对特殊情况和错误处理的考虑等。
3.编码错误。如语法错误,变量初始化错误等。
4.测试错误。如数据准备错误,测试用例错误等。
5.文档错误。如文档不齐全,文档相关内容不一致,文档版本不一致,缺乏完整性等。
从上游到下游,错误的影响是发散的,所以要尽量把错误消除在开发前期阶段。
根据上面对影响软件可靠性的分析,造成软件错误的因素贯穿于整个软件开发的全过程,任何的事后弥补措施都是建立在已经造成了错误后果的基础上的。因此,将软件错误尽可能地消灭在萌芽状态是投入成本最小的,而通过采用科学的软件工程化要求进行软件系统的设计可以将软件的潜在危险控制到尽可能小的范围。
开发高可靠软件必须采用软件工程方法,搞好软件开发工程化。当前研制的军用软件装备绝大部分拥有庞大的软件体系结构:可重用或公用的功能模块,多个分承包方的参与,决定了项目的开发必然是一个团队协作开发过程。根据GJB 2786-96,需要从以下几个方面督促研制方抓好软件工程的实施:
(1)软件开发方法
软件开发方法对软件的可靠性有重要影响。面向对象的方法便于软件复杂性控制,有利于生产率的提高,符合人类的思维习惯,能自然地表达现实世界的实体和问题,具有一种自然的模型化能力,达到从问题空间到解空间的较为直接自然的映射。
在面向对象的方法中,由于大量使用具有高可靠性的库,其可靠性也就有了保证,用面向对象的方法也利于实现软件重用,所以一般应采用面向对象的方法。
(2)软件工程环境
软件工程环境应该能够集中支撑开发阶段的操作。
(3)安全性分析
一定要重视软件的容错性设计,把执行任务的潜在危险降到尽可能小。
(4)非开发软件
非开发软件应当结合到交付软件中,非开发软件的结合应用应经过签约机构的批准和遵守合同中的数据权限要求。
(5)计算机软件组成
应根据软件开发计划规定的开发方法,将软件配置项进行分解并划分成软件部件和软件单元。应确保软件配置项的需求已完全分配,并能进一步细化,以便更好地实施每个软件部件和软件单元的设计与测试。
(6)从需求到设计的可追踪性
明确划分各开发过程(需求分析过程、设计过程、测试过程、系统集成阶段等),在各开发过程中实施进度管理,产生阶段质量评价报告,对不合要求的部件和单元及早采取对策。
(7)高级语言
选择编程语言对开发和维护阶段都是重要的。当选择编程语言时必须注意特殊的应用要求及它对于软件工程现代化的质量保证原则是否支持,在满足用户需求的前提下,还要综合考虑编译和编程环境的有效性、语言的可移植性、编程人员的技术水平等。
(8)设计和编码标准
必须大力推行标准化的实施。标准对于项目的互联、互通、互操作,对于开放性、可维护性,是一个先决条件。标准的简单或复杂,决定着系统的简单与复杂。标准的可操作性,影响着系统的一致性和可维护性;标准的好坏,决定了系统性能。
为标准的实施相应制定许多实施的细则与模板,使得标准的实施不但有章可循,而且可以操作,可以重复(重用),便于检查。这些细则与模板包括需求分析、概要设计与详细设计的细则;包括需求分析、概要设计与详细设计的模板。
(9)软件开发文件
软件开发文件包括系统文档、维护文档和项目管理文档等。开发文档可以使人们对已经执行的开发过程有深入的了解,并对重要的阶段成果进行初步和清晰的说明。
(10)处理资源和预留量
应在合同期内对处理资源的利用情况进行监测,资源利用情况应记载在各软件配置的产品规格说明。
目前我国的军品承制企业由于受到多种因素的影响和制约,软件可靠性的要求都重视的不够,在软件的开发、设计阶段分析不足,缺乏严格的评审;在软件的调试、验收阶段也缺乏科学的测试手段,无法对代码进行充分的测试;在使用、维护阶段不能严格按照软件配置进行管理,造成软件在生存周期中存在更改随意性大,质量难控制的问题。
(1)软件开发过程透明度差:现有的软件承制单位依然存在软件的开发过程由开发者“自编”“自导”“自演”的现象,一旦软件出现问题只能由开发者本人去进行维护,其他人很难介入,而现在的企业人员流动比较大,一但发生人员变更,后继者往往要将前任的工作推倒从头再来,严重影响科研工作的进行。
(2)没有严格执行配置管理:未对软件的更改标识、更改控制、更改检查等进行严格控制, 造成软件的管理混乱, 产品的软件错误较多,软件质量控制差。
(3)软件测试不够:软件的测试软件、测试工具缺乏, 测试标准、规范和管理制度不健全。目前绝大多数的软件检验都与硬件一起进行。软件验收时所谓的测试也是对预先指定的几个用例进行测试, 起不到软件测试的应有作用, 因而造成软件的缺陷多、故障多。
(4)没有明确的软件可靠性指标要求:在战技指标和研制任务书中没有明确提出软件的可靠性指标要求。可靠性指标通常被认为是硬件的可靠性指标, 在考核中没有对软件的可靠性进行单独验证, 对软件的可靠性心中无数。
(5)尚未建立完善的检验体系:软件没有像硬件那样建立严格的“三检”制度, 软件检验基本上是由软件开发者完成的。而实践证明仅仅依靠自检不能保证软件质量, 因此交付部队使用的产品软件质量问题较多。
针对以上问题,需要加强软件质量控制,严格按照软件工程化的要求执行,帮助企业建立高效可靠的软件开发流程,提高软件系统的可靠性水平。具体做法如下:
(1)实施软件工程化管理:杜绝开发者集多重角色于一身,严格做到设计、生产、检验分开,形成三者相互制约的关系,由软件设计工程师编制软件的设计图纸(即详细设计报告) , 由合格的软件编程人员按设计报告编程, 最后由软件检测人员检查软件的设计、编程是否符合要求。这样才能有效提高软件质量和可靠性。
(2)按照GJB438B和GBJ2786的要求,对各阶段形成的文档进行审查,实行配置管理,确保软件设计、生产、维护过程是受控的,可重复的。
(3)严格实行软件配置管理,各阶段工作完成后把阶段成果送入软件受控库中,开发者只能使用,不得随意修改,若要修改,需按照相应的审批手续报备。当软件的集成和综合测试阶段结束时, 应该汇总并修订全部软件文档, 连同源程序清单和目标代码清单一起送入软件产品库。进入系统的运行和维护阶段后, 若要对配置项进行修改, 必须依照有关程序修改, 产生新的软件版本。
(4)必须对软件进行充分的测试:对于软件开发者来说, 开发出的软件必须具备可测试性。软件的缺陷是不可避免的, 不可测试的软件,其缺陷将不易被发现和纠正。所谓软件测试, 是通过对源程序及其实际执行所产生的结果进行检查分析, 以找出程序中可能隐藏的错误的过程, 即为了发现程序错误而执行程序的过程。程序测试过程通常要反复进行多次, 直到满足某种测试策略为止。
1.王江为,郭新河.武器装备软件可靠性研究,《电脑知识与技术》2011年32期;
2.杨英清.软件工程技术发展思索,软件学报,2005(1);
3.吴福全,苏小桅.软件质量评估方法与探讨,成都大学学报:自然科学版,2008(1);
(作者单位:空军驻西北地区军事代表室)