军用软件工程标准研究及意义分析
一、软件工程标准产生的背景
众所周知,计算机(硬件)一问世,软件即如影随形而来,井进而发展成一门产业--软件开发。早在60年代,软件开发通常还只是编程者个人行为,软件开发者和使用者往往是同一个(或同一小组的)人。这种个体化的特性使软件设计成为人头脑中的一个隐含过程,除了程序清单之外,没有其他文档保存下来。
从60年代中期到70年代中期,随着计算机应用的日益普及及软件需求量的急剧增加,出现了以小组或小集体为单位的"软件作坊",他们开发的软件主要供本单位使用。这种"软件作坊"基本上仍然沿用早期形成的"个体式"的软件开发方法。但是,由于用户不断提出新需求,所以程序也必须不断做出相应修改;随着硬件或操作系统的频繁更新,又要修改程序以适应新的环境;程序运行时发现错误也需设法改正,所以,不仅"作坊"式的开发方法不能满足客观需求,而且人们发现软件维护工作以令人吃惊的比例在耗费着资源。更严重的是,程序设计的个体化特性使软件最终难于甚至不能维护,于是出现了"软件危机"。软件危机主要体现在:
a. 不能正确估计软件开发的成本和进度;
b. 对"已完成的"软件系统,用户经常不满意;
c. 软件质量靠不住;
d. 软件常常不能维护;
e. 没有建立适当的文档资料记录软件开发过程中的信息及其变化;
f. 软件费用占计算机系统总费用的比例逐年上升等等。
软件危机的产生与软件开发和维护时所使用的方法有关,但根本的还是软件本身的特点使然。软件是计算机系统中的逻辑部件而不是物理部件,在计算机上运行之前,软件质量较难评价,因此,管理和控制软件开发过程相当困难。软件的另一个显著特点是规模庞大,复杂程度高,如美国穿梭号飞船的软件含4000万行代码,相当于4000人年的编程工作量,如何保证每个人完成的工作合在一起构成一个高质量的大型软件显然是一个极端复杂的问题。再者,软件维护常常意味着要修改原来的设计,这样大型复杂的软件的修改,其难度之大是不难想像的。
总之,解决软件危机,仅靠技术措施是办不到的,它更需要有先进的管理措施。60年代后期计算机科学家们就开始研究解决软件危机的方法,并逐渐形成了计算机科学技术领域中的一门新兴学科一一软件工程学。软件工程学是研究采用工程的概念、原理和方法进行软件开发和维护的一门学科。它是软件发展到一定阶段的产物。软件工程学的出现既有工程技术发展提供的客观背景,也是软件发展的必然。
软件发展到软件工程学时代,根本上摆脱了软件"个体式"或"作坊式"的生产方法,人们更注重项目管理和采纳形式化的标准和规范,并以各种生命周期模型来指导项目的开发进程。在此期间出现了CASE(计机算机辅助软件工程)工具,并被广泛用于辅助人们的分析和设计活动,并试图通过创建软件开发环境和软件工厂等途径来提高软件生产率和软件产品质量。
随着软件工程学的蓬勃发展,政府部门、软件开发机构以及使用部门等都深切感到了在软件工程领域内制定各种标准的迫切性,于是软件工程标准应运而生。
二、软件工程标准体系
软件工程标准是对软件开发、运行、维护和引退的方法和过程所作的统一规定。根据GB/T15538,软件工程标准体系可分为4个部分:过程标准、产品标准、行业标准和记法标准。其中过程标准和产品标准是软件工程标准的最基本也是最主要的组成部分,ISO/JTC1/SC7《软件工程》及我国军用软件工程标准通常也只包括这两部分内容。过程标准是用来规定软件工程过程中(如开发、维护等)所进行的一系列活动或操作以及所使用的方法、工具和技术的标准,如GJB2786《武器系统软件开发》、GB/T 14079《软件维护指南》和GB/T 15532《计算机软件单元测试》等都为软件工程过程标准。
产品标准是用于规定软件工程过程中,正式或非正式使用或产生的那些产品的特性(如完整性、可接受性)。软件开发和维护活动的文档化结果就是软件产品。这类标准有GJB2255《军用软件产品》、GJB 438A《武器系统软件开发文档》、GJB 9385《计算机软件需求说明编制指南》等。以下提供的表1"软件工程标准分类表"既可帮助标准化人员管理和规划软件工程标准也可帮助广大科研人员选用软件工程标准。
标 准 类 型 | ||||
过程标准 | 产品标准 | |||
任 务 功 能 | 验证 与 确认 | 审查和审核 | ||
产品分析 | ||||
测 试 | ||||
技术 管理 | 过程管理 | |||
产品管理 | ||||
资源管理 | ||||
软 件 生 存 周 期 | 概念阶段 | |||
需求阶段 | ||||
设计阶段 | ||||
实现阶段 | ||||
测试阶段 | ||||
制造阶段 | ||||
安装和验收阶段 | ||||
运行和维护阶段 | ||||
引退阶段 |
三、国外软件工程标准现状及发展动向
ISO是国际标准化团体中最重要的一个组织,其宗旨是在世界范围内促进标准化工作的开展。它发布的标准被越来越多的国家直接采用,因此,其标准也是最有影响的标准之一。 ISO/JTC1/SC7软件工程分委员会已正式发布标准就有15项。另一个在软件工程标准化方面相当活跃的组织为IEEE(电气与电子工程师协会),其标准部和软件工程分委员会经常举办有关软件工程的研讨班,并与有关标准化组织、协会以及政府部门保持密切联系,到目前为止已正式发布的IEEE标准约30余项。
世界上第一个软件工程标准是由美国军方制定的。美国是国际上软件工程最为发达的国家,尤其是军用软件,70年代前后美军就开始陆续制定军用软件工程标准,到目前已发布的软件工程标准约30项。提高软件生产率、保证软件质量一直是软件界追求的目标。在过去几十年里人们不断探索新技术、新方法和新工具,并为实现这个目标做出了巨大努力。但是,仍有不尽如人意之处,诸如有成熟的技术方法和工具,但使用起来却千差万别;有严格的标准规范,但管理起来却总很困难;有标准的开发模型作指导,但这些都起不到很大的控制作用。这里固然有人为因素、技术因素和管理因素,但其中重要的一点是缺少软件过程的约束性。人们渐渐认识到,软件产品开展成败的关键在软件过程。软件过程评估技术和标准的研究成为近年来备受国际社会广泛重视的热点。
1987年,美国软件工程研究所(SEI)发表了承包商软件工程能力的评估方法标准,1991年该标准发展成为能力成熟度模型1.0版(CMM1.0)。该方法的研究本是受美国政府委托用来评估美国国防部潜在的软件开发承包商软件工程能力的,但在CMM试用过程中一个更加重要的作用越来越被人们重视,那就是描述了软件过程不断改进的科学途径,从而使软件开发组织能自我分析,找出提高软件过程能力的方法,所以CMM也得到了国际软件产业界和软件工程界的广泛关注和认可。1993年,ISO在调研国际社会对软件过程评估标准需求的基础上决定组织制定软件过程标准,1995年完成了ISO/IEC15504《软件过程评估》工作草案,该草案以CMM为基础,并吸收了国际上软件过程工作的成果。ISO/IEC
15504目前仍处于试用阶段,可望今年完成标准定稿。
四、我国军用软件工程标准分析
1. 军用软件工程标准现状
我国软件工程标准化工作80年代初才开始起步,经过10余年的努力取得了喜人的成果,现已颁布国标22项、国军标约15项,另如航空、航天、电子、机械等部门也基于行业软件管理的需要分别制定了若干行业标准,国内大型工程项目也制定了自己的软件工程标准规范,如921工程软件研制管理办法、青鸟工程软件规范等。1983年军用标准化工作实行统一管理以后,软件工程标准化工作受到各有关方面的重视,取得了可喜的成绩,迄今已颁布的15项国军标中的大多数标准已被军内外广泛应用,对一些大型信息系统工程及重点武器型号的研制、生产及使用起到了积极的促进作用。按照"积极采用国际标准及国外先进标准"的技术政策,我国军用软件工程标准绝大多数都是参考美国军用标准,并结合我国具体情况制定的,但由于共知的原因,我国军用软件工程标准整体水平还是落后于国外先进国家,这从表2中不难看出,我国同类标准的出台,一般落后美国军标近10年左右。然而相对于目前我国软件工程化水平而言,这些标准确具有先进性和指导性,至少在今后的几年内仍将会发挥重要的作用。
2. 重点标准分析
(1)GJB437《军用软件开发规范》是第一个软件工程国军标,它规定了软件生命周期中软件需求分析、软件设计、软件实现和软件测试的基本要求,同时它还涉及到这些阶段中的软件质量保证、软件配置管理、软件开发管理和软件文档编制等方面的内容。GJB 437为军用软件开发规定了统一的最低要求,而GJB 438、GJB 439、GJB 1090、GJB 1267和GJB 1268则是对GJB 437要求的补充和细化,在GJB437的实施过程中,常常需要与这些标准配套使用。GJB 437、GJB 438和GJB 439等标准在我国军用软件的开发中曾起到十分重要的作用,然而随着软件工程技术的迅速发展以及计算机在军事领域中更广泛深入的应用,GJB 437已难以满足当前软件开发等各方面的需要。首先,现代武器装备特别是大型武器系统的软件往往嵌入到系统中,与设备或其他分系统密不可分,因此在系统研制一开始就必须考虑软件问题。然而GJB 437则是将软件系统作为单纯软件来考虑,淡化了软件与整个武器系统的关系,因此导致系统的要求较难向下分解,软件与设备或其他分系统的接口较难定义,系统集成和测试也较难实现。其次,采用GJB 327意味着按照瀑布式开发模型进行软件开发,限制了软件开发人员对目前较先进的开发模型、开发方法的使用,因此也给军用软件的开发工作带来了很大不便。另外,GJB 437的内容也不够完善,对开发过程中涉及到的风险管理、安全性等问题都未作出规定。对GJB 437进行修订或制定新的软件开发标准已经势在必行。
标准号 | 标准名称 | 参考标准 |
GJB 437-88 | 军用软件开发规范 | DOD-STD-1679A:1983 |
GJB 438A-97 | 武器系统软件开发文档 | DI-MCCR-8002 8:1986等 |
GJB 439-88 | 军用软件质量保证规范 | MIL-STD-5277A:1979 |
GJB 1091-91 | 军用软件需求分析 | IEEE-STD-830:1984 IEEE-STD-829:1983等 |
GJB 1267-91 | 军用软件维护 | FIPS-PUB-106:1984等 |
GJB 1268-91 | 军用软件验收 | DOD-STD-1703:1987等 |
GJKB 1419-92 | 军用计算机软件摘要 | FIPS-PUB-30:1974 |
GJB 1566-92 | 军用计算机软件文档编制格式和内容 | |
GJB 2115-94 | 军用软件项目管理规范 | FIPS-PUB-105:1983 |
GJB 2255-94 | 军用软件产品 | DOD-STD-1703:1987 |
GJB 2434-95 | 军用软件测试与评估通用要求 | ISO 9126:1991等 |
GJB2694-96 | 军用软件支持环境 | DOD-STD-1467A:1987 |
GJB 2786-96 | 武器系统软件开发 | DOD-STD-2167A:1988 |
GJB/Z 102-97 | 软件可靠性和安全性设计规则 | SWC-TR-89-33;MIL-HDBK-764:1990等 |
GJB 3181-98 | 军用软件支持环境选用要求 | MIL-HDBK-764:1990 |
GJB 2786(武器系统软件开发)剪裁指南 | MIL-HDBK-287:1989 | |
军用软件验证和确认指南 | F IPS-PUB-132:1987(即IEEE-STD-1012)等 |
(2)GJB 2786《武器系统软件开发》规定了武器系统软件开发和保障的基本要求,适用于软件生存周期的全过程,为软件的订购方或使用方了解承制方的软件开发,测试和评价工作提供了依据。GJB 2786克服了GJB 437的不足,充分体现了系统工程和软件工程的思想,具有鲜明的特点。特点之一就是提供了承制方在满足合同或任务书要求前提下的灵活性。在标准中,它定义了软件开发的8项主要活动,并特别说明这些活动可以重迭,也可以交叉或循环进行,因此GJB 2786对许多软件开发模型来说都是可接受的,即其本身可接受多种不同的软件开发方法。标准中唯一带有约束性的是承制方应使用有充分的文件证明的、系统化的软件开发方法,且该方法应支持合同要求的正式审查和审核。
GJB 2786规定了软件开发的8项主要活动,即:
a. 系统要求分析和设计
b. 软件需求分析
c. 概要设计
d. 详细设计
e. 编码和计算机软件单元测试
f. 计算机软件部件集成和测试
g. 计算机软件配置项测试
h. 系统集成和测试
同时又从软件开发管理、软件工程、正式合格性测试、软件产品评价、软件配置管理、向软件保障阶段转移等6个方面对上述8项活动提出了具体要求。
GJB 2786中每项要求都是唯一的,不存在冗余,一般要求与详细要求具有严格的对应关系,可以很方便地对标准进行一致的剪裁;而且标准只包含要求,没有其他指导或辅助性信息。便于剪裁是GJB 2786的另一大特点。
GJB
2786的参考标准DOD-STD-2167A《防务系统软件开发》是美国国防部于80年代末期组织强有力的技术队伍,包括各种不同意见的专家,政府部门、学术界及应用领域中的人才共同研究制定的,是这一时期美国标准化工作的一项重要成果。美国防部规定,凡国防部关键任务计算机资源项目一律要遵守该标准,足见其位置之重要。但随着技术的发展,DOD-STD-2167A于1994年11月被美军标MIL-STD-498《软件开发和文档》所代替,究其原因,主要有以下两方面:一方面是受当时业已开始的美国军用标准改革的冲击;另一方面是进入90年代以后,软件工程技术日益普及,软件工具、平台环境开始广泛进展。MIL-STD-498与DOD-STD-2167A相比不论在指导思想上,还是标准的内容上都有较大改变,不仅增强了与不同开发模型的兼容性,而且还增强了与非层次结构设计方法以及与CASE工具的兼容性,对文档的编制要求也更具灵活性,并对软件重用提出了明确要求。另外还引进了软件管理标准,更加强调了软件的可支持性及与系统的联系。
五、对军用软件工程标准化工作的几点建议
1. 军用软件工程标准有待整顿和完善
军用软件工程标准体系应是一个动态的体系,以适应不断变化的环境需求。对于一些不适用的标准应及时作废或修订,对于新的需求应制定新的标准及时给予反应。从目前情况来看,这方面我们虽然做了不少工作,但还有不少地方有待进一步改进完善,从前面的分析中可以看出,GJB 437和GJB 439已到了作废的时候,GJB 437的内容完全可由GJB 2786取代:GJB 439的要求也在GJB/Z 90000系列中基本都得到反映。GJB 1091、GJB 1267和GJB 1268也应及时修订以保证与GJB 2786的协调一致。对于不断涌现的新的软件工程技术如软件过程评估、软件安全性分析、软件风险管理及软件重用等也应积极开展标准化研究工作,加强有关标准的制定,以补充完善军用软件工程标准体系。
2. 加强软件工程标准宣传工作,促进标准的贯彻实施
计算机软件已成为现代化武器装备中不可缺少的组成部分,武器装备的性能和功能越来越依赖于软件来实现。然而,我们有些项目管理人员对此重要性没有足够的认识,他们知之甚少,对软件开发缺乏足够的重视,因而监督管理不力,致使软件开发常常成为拖延武器装备研制进度、费用增加的一个主要问题。对此,我们应通过各种方式加强软件工程重要性及其标准内容的宣传,提高广大科研人员、管理人员的标准化意识和促进其对软件工程的了解,从而使软件工程标准在武器装备研制、生产和使用中真正得到贯彻实施。
3. 积极跟踪和研究国际。国外软件工程标准发展动向
国际标准反映了世界工业发达国家当代的先进技术水平。通过积极研究和采用国际、国外软件工程标准是一条加速标准制定、提高软件工程化水平的捷径。目前我们虽然拥有丰富的美国军用标准资料,有能查询各种标准最新信息的Internet网站点,然而由于这方面工作缺乏统一规划和具体安排,加之标准化研究队伍松散,致使新的标准技术跟踪很不及时。因此,笔者认为,加强国际、国外软件标准化发展动向的跟踪,深入开展ISO 9000-3和ISO15504及 CMM等研究,对加速有关标准的制修订,提高软件质量是十分重要的,应当有组织、有计划地开展好此项工作。
软件工程标准化的意义
为什么要积极推行软件工程标准化工作,其道理是显而易见的。仅就一个软件开发项目来说,有多个层次、不同分工的人员相配合,在开发项目的各个部分以及各开发阶段之间也都存在着 许多联系和衔接问题。如何把这些错综复杂的关系协调好,需要有一系列统一的约束和规定。在软件开发项目取得阶段成果或最后完成时,需要进行阶段评审和验收测试。投入运行的软件,其维 护工作中遇到的问题又与开发工作有着密切的关系。软件的管理 工作则渗透到软件生存期的每一个环节。所有这些都要求提供统 一的行动规范和衡量准则,使得各种工作都能有章可循。
软件工程的标准化会给软件工作带来许多好处,比如:提高软件的可靠性、可维护性和可移植性(这表明软件工程标准化可提高软件产品的质量)提高软件的生产率提高软件人员的技术水平提高软件人员之间的通信效率,减少差错和误解有利于软件管理有利于降低软件产品的成本和运行维护成本有利于缩短软件开发周期。