面向对象技术与工具(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 软件工程概述

1.1 软件工程的产生和发展

软件工程(Software Engineering)是在克服20世纪60年代末所出现的“软件危机”的过程中逐渐形成与发展的。自1968年在北大西洋公约组织(NATO)举行的软件可靠性学术会议上正式提出“软件工程”的概念以来,在这40 年的时间里,软件工程在理论和实践两方面都取得了长足的进步。

软件工程是一门指导计算机软件系统开发和维护的工程学科,是一门新兴的边缘学科,它涉及计算机科学、工程科学、管理科学、数学等多学科。软件工程的研究范围广,不仅包括软件系统的开发方法和技术、管理技术,还包括软件工具、环境及软件开发的规范。

软件是信息化的核心,国民经济、国防建设、社会发展及人民生活都离不开软件。软件产业关系到国家经济发展和文化安全,体现了国家综合实力,是决定21世纪国际竞争地位的战略性产业。因此,大力推广应用软件工程的开发技术及管理技术,提高软件工程的应用水平,对促进我国软件产业与国际接轨,推动软件产业的迅速发展起着十分重要的作用。

1.1.1 软件工程的发展过程

软件工程的产生和发展是与软件的发展过程紧密相关的。自从第一台电子计算机诞生以来,就开始了软件的生产,“软件工程”提出至今,它的发展经历了4个重要阶段。

1.第一代软件工程

20世纪60年代末,软件生产主要采用“生产作坊方式”。随着软件需求量、规模及复杂度的迅速增大,生产作坊的方式已不能够适应软件生产的需要,出现了所谓“软件危机”(Software Crisis),其表现为软件生产效率低,大量质量低劣的软件涌入市场或在开发过程中夭折。软件危机不断扩大,对软件生产已经产生了严重危害。

为了克服软件危机,在NATO举行的软件可靠性会议上第一次提出“软件工程”这一名词,将软件开发纳入了工程化的轨道,基本形成了软件工程的概念、框架、技术和方法。这阶段又称为传统的软件工程。

2.第二代软件工程

从20世纪80年代中期开始,以Smalltalk为代表的面向对象的程序设计语言推出,面向对象的方法与技术得到发展。从20世纪90年代起,研究的重点从程序设计语言逐渐转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系。与此同时,出现了许多面向对象的开发方法的流派,面向对象的方法逐渐成为软件开发的主流。所以这一阶段又称为对象工程

3.第三代软件工程

随着软件规模的不断增大,开发人员也随之增多,开发时间相应持续增长,加之软件是知识密集型的逻辑思维产品,这些都增加了软件工程管理的难度。人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是对“软件过程”的控制和管理,是软件开发和维护中的管理和支持能力。提出对软件项目管理的计划、组织、成本估算、质量保证、软件配置管理等技术与策略,逐步形成了软件过程工程

4.第四代软件工程

从20世纪90年代起,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现存的可复用构件组装完成,而无须从头开始构造,从而达到提高效率和质量,降低成本的目的。软件复用技术及构件技术的发展,对克服软件危机提供了一条有效途径。将这一阶段称为构件工程

1.1.2 软件危机

1.软件危机的产生

“软件危机”(Software C risis)的出现是由于软件的规模越来越大,复杂度不断增大,而软件需求量也不断增大,“生产作坊式”的软件开发模式及技术已不能满足软件发展的需要。

软件开发过程是一种高密集度的脑力劳动,需要投入大量的人力、物力和财力,如果软件开发的模式及技术不能适应软件发展的需要,将致使大量质量低劣的软件产品涌向市场,有的甚至在开发过程中就夭折了。国外在开发一些大型软件系统时,遇到了许多困难,有的系统最终彻底失败了;有的系统则比原计划推迟了好多年,而且费用大大超过了预算;有的系统不能符合用户当初的期望;有的系统则无法进行修改维护。典型的例子如下。

IBM公司的OS/360,共约100万条指令,花费了5000人年,经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“就像野兽在泥潭中做垂死挣扎,挣扎得越猛,陷得越深,最后没有一个野兽能够逃脱淹没在泥潭中的命运……”

1967年,前苏联“联盟一号”载人宇宙飞船,由于其软件设计时忽略了一个小数点,导致返航时打不开降落伞,当进入大气层时因摩擦力太大而烧毁,造成机毁人亡的巨大损失。

还有,可以称为20世纪世界上最精心设计,并花费了巨额投资的美国阿波罗登月飞行计划使用的软件,也仍然没有避免出错,例如,阿波罗8号由于太空飞船的一个计算机软件错误,造成存储器的一部分信息丢失;阿波罗14号在飞行的10天中,出现了18个软件错误。

2.软件危机的表现

20世纪60年代末期所发生的软件危机,反映在软件可靠性没有保障、软件维护工作量大、费用不断上升、进度无法预测、成本增长无法控制、程序人员无限度增加等方面,以致形成人们难以控制软件开发的局面。

软件危机主要表现在以下两个方面。

① 软件产品质量低劣,甚至在开发过程中就夭折。

② 软件生产率低,不能满足需要。

软件危机所造成的严重后果已致使世界各国的软件产业危机四伏,面临崩溃,克服软件危机刻不容缓。从NATO会议以来,世界各国的软件工作者为克服软件危机进行了许多开创性的工作,在软件工程的理论研究和工程实践两个方面都取得长足的进步,缓解了软件危机。但距离实现彻底克服软件危机这个软件工程的最终目标,仍然任重而道远,还需要软件工作者付出长期艰苦的努力。

1.1.3 软件工程研究的内容

1.软件工程的定义

自从1968年提出软件工程这个名词,对于软件工程就有了各种各样的定义,但是它们的基本思想都是强调在软件开发过程中应用工程化原则的重要性。

1983年,IEEE(美国电气与电子工程师协会)所下的定义是:软件工程是开发、运行、维护和修复软件的系统方法。

1990年,IEEE又将定义更改为:对软件开发、运作、维护的系统化的、有规范的、可定量的方法之应用,即对软件的工程化应用。

从软件工程的定义可见,软件工程是一门指导软件开发的工程学科,它以计算机理论及其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经过实践证明的科学的管理措施与最先进的技术方法结合起来。软件工程研究的目标是“以较少的投资获取高质量的软件”。

2.软件工程研究的内容

软件工程有方法、工具和过程三个要素。软件工程方法研究软件开发是“如何做”的。软件工具是研究支撑软件开发方法的工具、为方法的运用提供自动或者半自动的支撑环境。软件工具的集成环境,又称为计算机辅助软件工程(Computer-Aided Software Engineering,CASE)。软件工程过程则是指将软件工程方法与软件工具相结合,实现合理、及时地进行软件开发的目标,为开发出高质量软件而规定各项任务的工作步骤。

软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广。归结起来,软件工程研究的主要是以下4个方面的内容。

① 方法与技术。软件开发方法主要讨论软件开发的各种方法及其工作模型,包括多方面的任务,如软件系统需求分析、总体设计,以及如何构建良好的软件结构,数据结构及算法设计等,同时讨论具体实现的技术。

② 工具及环境。软件工具为软件工程方法提供了支持,研究计算机辅助软件工程,建立软件工程环境。

③ 软件工程管理。软件工程管理是指对软件工程全过程的控制和管理,包括计划安排、成本估算、项目管理、软件质量管理。

④ 标准与规范。软件工程的标准化与规范化,使得各项工作有章可循,以保证软件生产率和软件质量的提高。软件工程标准可分为:国际标准、行业标准、企业规范和项目规范。

必须强调的是,随着人们对软件系统研究的逐渐深入,软件工程所研究的内容也不是一成不变的。

3.软件工程的基本原则

过去,软件工程的基本原则是抽象化、模块化、清晰的结构、精确的设计规格说明。但是,今天的认识已经发生了很大的变化。现在提出的软件工程的四项基本原则如下。

第一,必须认识软件需求的变动性,以便采取适当措施来保证产品能更好地满足用户要求。在软件设计中,通常要考虑模块化、抽象与信息隐蔽、局部化、一致性等原则。

第二,稳妥的设计方法大大地方便软件开发,以达到软件工程的目标。软件工具与环境对软件设计的支持十分重要。

第三,软件工程项目的质量与经济开销直接取决于为该工程提供的支撑的质量与效用。

第四,只有在强调对软件过程进行有效管理的情况下,才能实现有效的软件工程。