软件工程是一门旨在生产无故障的、及时交付的、在预算之内的和满足用户需求的软件的学科。本质上,软件工程就是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理方法和先进软件开发技术结合起来,运用到软件开发和维护过程中,解决软件危机。
1993年IEEE软件工程术语汇编定义软件工程:
“软件工程是:
1)、 将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,也就是说将工程化应用于软件开发和管理之中;
2)、对①中所选方法的研究”。
软件工程研究的基础理论主要有数学、计算机科学、经济学、工程学、管理学和心理学等其他学科。其中:数学和计算机科学用于构造模型、分析算法;工程学用于评估成本、制定规范和标准;管理学和心理学用于进度、资源、环境、质量、成本等的分析和管理。
软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。软件开发技术方面主要研究软件开发方法、软件开发过程、软件开发工具和环境。软件开发管理方面主要研究软件工程管理学、软件工程经济学、软件工程心理学。
软件工程的研究内容具有层次化结构,它的最底层是质量保证层,中间是过程层和方法层,最上层是工具层。
全面的质量管理和质量需求是推动软件工程过程不断改进的动力,正是这种改进的动力导致了更加成熟的软件工程方法不断涌现。过程层定义了一组关键过程域,目的是保证软件开发过程的规范性和可控性。方法层提供了软件开发的各种方法,包括如何进行软件需求分析和设计,如何实现设计,如何测试和维护等方法。工具层为软件工程方法和过程提供了自动或半自动的支撑环境。目前市场上已经有许多不错的软件工程工具,应用效果良好。使用软件工程工具可以有效地改善软件开发过程,提高软件开发的效率,降低开发和管理成本。
软件工程强调规范化和文档化。规范化的目的是使众多的开发者遵守相同的规范,使软件生产摆脱个人生产方式,进入标准化、工程化的生产方式。文档化是将软件的设计思想、设计过程和实现过程完整地记录下来,以便于后人的使用和维护,在开发过程中各类相关人员借助于文档进行交流和沟通。另外,在开发过程中产生的各类文档使得软件的生产过程由不可见变为可见,便于管理者对软件生产进度和开发过程进行管理。在用户最终验收时可以通过对提交的文档进行技术审查和管理审查,保证软件的质量。
软件工程的目标软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:
- (1) 实现预期的软件功能,达到较好的软件性能,满足用户的需求。
- (2) 增强软件过程的可见性和可控性,保证软件的质量。
- (3) 提高所开发软件的可维护性,降低维护费用。
- (4) 提高软件开发生产率,及时交付使用。
- (5) 合理预算开发成本,付出较低的开发费用。
软件工程的七条基本原理
自从1968年提出“软件工程”这一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的原理。美国著名的软件工程专家B.W.Boehm综合这些专家的意见,并总结了多年开发软件的经验,于1983年提出了软件工程的七条基本原理。Boehm 认为,这七条原理是确保软件产品质量和开发效率的最小集合。它们相互独立、缺一不可,并具有完备性。
原理1:用分阶段的生命周期计划严格管理
在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条基本原理意味着,应该把软件生命周期划分成若干阶段,并相应地制定出切实可行的计划,按照计划对软件的开发与维护工作进行控制。
原理2:坚持进行阶段评审
软件的质量保证工作不能等到编码阶段结束之后再进行。统计数据表明,软件中设计错误约占软件错误的63%,编码错误仅占37%。在前期改正错误所需要的可能只是橡皮和铅笔;而在交付后改正错误需要的工作就太多了:查找出错的代码,重新组织程序结构和数据结构,测试,修改文档。也就是说,错误发现与改正越晚,所付出的代价越高。因此,每个阶段都应该进行严格的评审,以便尽早发现软件开发过程中的错误,这是一条必须遵循的重要原则。
原理3:实行严格的产品控制
在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的,由于外部环境的变化,相应地改变需求是一种客观需要,因此不能硬性禁止改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求,其中主要的技术是实行基准配置管理。所谓基准配置又称基线配置,是经过阶段评审后的软件配置成分。基准配置管理的思想是:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审和控制,获得批准以后才能实施修改。目的是当需求变动时,其他各阶段的文档或代码随之相应变动,以保证软件的一致性。
原理4:采用现代程序设计技术
从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术。20世纪60年代末提出了结构化程序设计技术,以后又进一步发展出结构化分析与设计技术、面向对象的分析和设计技术。实践表明,采用先进的技术既可提高软件开发和维护的效率,又可提高软件质量。
原理5:结果应能清楚地审查
软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,明确地规定开发小组的责任和产品标准,从而使所得到的产品有明确的标准,能清楚地审查。
原理6:开发小组的人员应该少而精
这条基本原理的含义是,软件开发小组成员的素质应该好,人数不宜过多。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。素质高的人员开发效率比素质低的人员开发效率可能高几倍至几十倍,并且高素质人员所开发的软件质量高、错误少。开发小组人员过多,信息沟通会成为负担,组成少而精的开发小组是软件工程的一条基本原理。
原理7:承认不断改进软件工程实践的必要性
仅有上述六条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,跟上技术的不断进步。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条基本原理。按照这条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验,例如,注意收集关于项目规模和成本的数据、项目进度和人员组织的数据、开发中出错类型统计数据等等。这些数据不仅可以用来评价软件技术的效果,而且也为今后修正软件工程模型提供依据。
,