1.3 军用软件工程的概念和基本原理
1.3.1 软件工程的概念
1.软件工程概念的提出
为了克服软件危机,1968年在北大西洋公约组织(NATO)召开的计算机科学会议上,Fritz Bauer首先提出“软件工程”的概念,试图用工程的方法和管理手段,将软件开发纳入工程化的轨道,以便开发出成本低、功能强、可靠性高的软件产品。几十年来,人们一直在努力探索克服软件危机的途径。
许多计算机和软件科学家尝试,把其他工程领域中行之有效的工程学知识运用到软件开发工作中来,主要思想都是强调在软件开发过程中需要应用工程化原则的重要性。经过不断实践和总结,最后得出一个结论:按工程化的原则和方法组织软件开发工作是有效的,也是摆脱软件危机的一个主要出路。
Fritz Bauer 曾经为软件工程下了定义:“软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。”
1983年IEEE给出的定义为:“软件工程是开发、运行、维护和修复软件的系统方法。”其中,“软件”的定义为:计算机程序、方法、规则、相关的文档资料及其在计算机上运行时所必需的数据。
GB/T 11457—2006《信息技术 软件工程术语》中将“软件工程”定义为“软件开发、运行、维护和引退的系统方法”,目的就是为软件全生存周期活动提供工程化的手段,从而提高软件质量、降低成本和缩短开发周期等。
软件工程是一门综合性的交叉学科,它涉及计算机科学、工程科学、管理科学和数学等。计算机科学中的研究成果都可以用于软件工程,但计算机科学着眼于原理和理论,软件工程着眼于如何建造一个软件系统。此外,软件工程要用工程科学中的技术来进行成本估算、安排进度及制订计划和方案;软件工程还要利用管理科学中的方法原理来实现软件生产的管理;并用数学的方法建立软件开发中的各种模型和算法,如可靠性模型、形式化模型等。
由于军用软件本身所固有的高复杂性、研制的高风险性及管理的高难度,使军用软件的发展一直在曲折中前进,军用软件质量和生产率无法满足军事要求、预算严重超支、项目延期或中途下马等事件屡见不鲜。
军用软件工程就是研究军用软件开发、运行、维护和管理的系统方法,是软件工程理论和方法在军事领域中的应用。军用软件工程由于其在有效提高军用软件质量方面发挥了重要作用而迅速发展起来。
2.软件工程的要素
针对军用软件的特殊应用和特点,军用软件工程主要包括4个要素:方法与技术、工具与环境、管理与控制、标准与规范。
软件工程方法与技术提供关于软件开发的一般原则、工作框架、开发策略和若干实用技术。其中包括软件生存周期模型、自顶向下方法、结构化开发方法、面向对象的方法、需求工程和测试技术等。
软件工程工具与环境为软件工程方法提供自动或半自动的软件支撑环境。它可用于提高软件的生产率,保证软件质量,便于软件测试和集成,提高软件开发过程的可见性和可控性。
软件工程管理与控制是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。软件工程管理主要包括项目、配置、文档、质量、经费、人员与进度等方面的内容。
软件工程标准与规范是为软件开发和管理的过程及软件产品规定的共同准则,它通常包括术语和符号标准、产品标准、方法和技术标准及管理标准等。
1.3.2 软件工程的基本原理
软件工程运用工程学的基本原理和方法来组织和实施软件生产,其后又发展了与软件有关的心理学、生理学和经济学等方面的学科。在此期间,研究软件工程学的科学家们陆续提出了 100 多条有关软件工程的准则,1983年美国TRW公司B.W.Boehm将它们概括为著名的软件工程7条原则。
(1)按软件生存周期分阶段制订计划并认真实施。一个软件从定义、开发、运行和维护,直到最终被废弃,要经历很长的时间,通常称这样一个时期为软件生存周期。在软件生存周期中需要完成许多不同性质的工作,所以应把软件生存周期划分为若干阶段,并制订出相应的可行计划,且按照计划对软件的开发和维护活动进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件的开发和维护工作,不应受客户或上级人员的影响而擅自背离预定计划。
(2)坚持进行阶段评审。软件的质量保证工作不能等到编码阶段结束之后再进行。因为大部分错误是在编码之前造成的,而且错误发现得越晚,为改正它付出的代价就越大。因此,在每个阶段都要进行严格的评审,以尽早发现在软件开发过程中产生的错误。根据统计,设计错误占软件错误的63%,编码错误仅占37%。
(3)坚持严格的产品控制。在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,由于外界环境的变化或软件工作范围的变化,在软件开发过程中改变需求又是难免的,不能硬性规定禁止客户改变需求,只能依靠科学的产品变更控制技术来适应需求变更。就是说,当变更需求时,为了保持软件各个配置成分的一致性,必须实施严格的产品控制,其中主要是实施基线配置管理。所谓基线配置,是经过评审后的软件配置成分,包括各个阶段产生的文档或源代码。一切有关软件修改的建议,特别是涉及对基线配置的修改建议,都必须按照严格的规程进行审查,获得批准之后才能实施修改。
(4)使用现代程序设计技术。自从提出软件工程的概念以来,人们一直致力于研究各种新的程序设计技术。1960 年代末提出的结构化程序设计(Structural Programming,SP)技术,已经成为大多数人公认的能够产生高质量程序的程序设计技术。随着软件建模技术的兴起,继而出现了结构化设计技术,接着又出现了结构化分析技术。实践表明,采用先进的技术可提高软件开发的生产率,还可提高软件的可维护性。
(5)结果应能清楚地审查。软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。软件开发人员或开发小组的工作进展情况可见性差,难以准确度量,使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。为了提高软件开发过程的可见性,有效地进行管理,应当根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使得工作结果能够得到清楚的审查。
(6)开发人员少而精。合理安排软件开发小组人员的原则是参与人员应当少而精,即小组的成员应当具有较高的素质,且人数不应过多。人员素质高能大大提高软件开发的生产率,明显减少软件中的错误。此外,随着开发小组人数的增加,因交流开发进展情况和讨论遇到的问题而造成的通信开销也急剧增加。因此,应当保证软件开发小组人员少而精。
(7)不断改进开发过程。为保证软件开发的过程能够跟上技术的进步,必须不断地灵活地改进软件工程过程。为了达到这个要求,应当积极主动地采用新的软件技术,注意不断总结经验。此外,需要注意收集和积累出错类型、问题报告等数据,用以评估软件技术的效果和软件人员的能力,确定必须着重开发的软件工具和应当优先研究的技术。