• 沒有找到結果。

7.3.1 概述

自 20 世纪 40 年代计算机问世以来,如何编制符合要求的程序一直是人们追求的目标。

并且,随着计算机应用领域的扩大,人们对软件的需求量剧增,对软件的正确性提出了更高的 要求,并迫切地需要缩短软件生产周期。但是,当时的软件编制还只是一种手工活动,过多地 依赖于程序员的个人能力和技巧,这就导致了软件的生产周期长,可靠性及可维护性也很差。

软件开发远远落后于硬件发展,远远满足不了社会的需求,从而爆发了一场“软件危机”。

软件工程作为一门学科的出现给软件界带来了一场变革,众多的研究者和实践者投身于 软件工程领域,并取得了丰硕成果。虽然离预期目标仍有很大距离,并未能从根本上克服软件 危机,但是软件工程的思想毕竟给人们带来希望的曙光。

软件工程的研究除计算机软件本身外,还涉及众多其他的领域,如管理科学、心理学、

经济学、人体工程学等,因此,它是一门综合性学科。粗略来说,软件工程学科可划分为两大 方面:一方面是基础性理论研究,主要目标是用形式化技术解决软件生产中所遇到的问题,如 需求规格的描述、规格到系统的转换、系统测试、维护及理解等,主要为解决“做什么”的描 述手段问题;另一方面是工程化技术研究,总结软件开发过程的规律,探讨软件开发过程的工 程化因素、方法及工程支持,解决“怎么做”的问题。20 世纪 80 年代以来,计算机辅助软件 工程(CASE)的研究已成为软件工程领域中的热点,其中包括 CASE 工具和 CASE 环境的研 究,旨在应用计算机支持软件开发过程,改进软件开发行为,为开发人员提供软件开发平台和 环境,以提高软件生产率并改善软件产品的质量。

7.3.2 软件 1.软件的概念

软件是一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为系 统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,

但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务 的领域提供不同的功能。

软件并不只是包括可以在计算机上运行的程序,与这些程序相关的文档一般也被认为是 软件的一部分。简单地说软件就是程序加文档的集合体。

2.软件开发经历的三个阶段

第一个阶段是 20 世纪 50 年代到 60 年代,是程序设计阶段,基本是个体手工劳动的生产 方式。这个时期,一个程序是为一个特定的目的而编制的,软件的通用性很有限的,软件往往 带有强烈的个人色彩。早期的软件开发没有什么系统的方法可以遵循,软件设计是在某个人的 头脑中完成的一个隐蔽的过程。而且,除了源代码往往没有软件说明书等文档,因此这个时期 尚无软件的概念,基本上只有程序、程序设计概念,不重视程序设计方法,主要是用于科学计 算,规模很小,采用简单的工具(基本上采用低级语言),硬件的存储容量小、运行可靠性差。

第二阶段是 20 世纪 60 年代到 70 年代,是软件设计阶段,为小组合作生产方式。在这一 时期软件开始作为一种产品被广泛使用,出现了“软件作坊”。这个阶段,基本采用高级语言 开发工具,开始提出结构化方法。硬件的速度、容量、工作可靠性有明显提高,而且硬件的价 格降低。人们开始使用软件产品(可购买),从而建立了软件的概念。程序员数量猛增,但是 开发技术没有新的突破,软件开发的方法基本上仍然沿用早期的个体化软件开发方式,软件需 求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,开发人员的开发技术不适应规模 大、结构复杂的软件开发,失败的项目越来越多。

第三阶段是从 20 世纪 70 年代至今,为软件工程时代,是工程化的生产方式。这个阶段 的硬件向超高速、大容量、微型化以及网络化方向发展,第三、四代语言出现。数据库、开发 工具、开发环境、网络、分布式、面向对象技术等工具和方法都得到应用。软件开发技术有了 很大进步,但未能获得突破性进展,软件开发技术的进步一直未能满足发展的要求。软件的数 量急剧膨胀,一些复杂的、大型的软件开发项目提了出来,在那个时代,很多的软件最后都得 到了一个悲惨的结局。很多的软件项目开发时间大大超出了规划的时间表,一些项目导致了财 产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大,

在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,失败的软 件开发项目却屡见不鲜,因而导致了软件危机。

7.3.3 软件危机

软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括来说,

软件危机包含两方面问题:

(1)如何开发软件,以满足不断增长、日趋复杂的需求。

(2)如何维护数量不断膨胀的软件产品。

落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过

程中出现一系列严重问题的现象。

由于软件本身是一个逻辑实体,而非一个物理实体,因此软件是非实物性和不可见性的。

而软件开发本身又是一个“思考”的过程,很难进行管理。开发人员以“手工作坊”的开发方 式来开发软件,完全是按照各自的喜好和习惯进行的,没有统一的标准和规范可以遵循。因此,

在软件的开发过程中,人们遇到了许多困难。有的软件开发彻底失败了,有的软件虽然开发出 来了,但运行的结果极不理想,如程序中包含着许多错误,每次错误修改之后又会有一批新的 错误取而代之。这些软件有的因无法维护而不能满足用户的新要求,最终失败了;有的虽然完 成了,但是比原计划推迟了好几年,而且成本上大大超出了预算。

软件开发的高成本与软件产品的低质量之间的尖锐矛盾,终于导致了软件危机的发生。

具体地说,软件危机主要有以下几方面的表现:

软件的复杂性越来越高,“手工作坊”式的软件开发方式已经无法满足要求。

对软件成本和进度统计不准,费用实际超过预算。

开发周期过长。

软件质量难以保证,常被怀疑。

缺乏良好的软件文档。

现有的软件极难维护。

软件开发效率远跟不上计算机的发展要求。

用户往往对软件不满意。

为摆脱软件危机,1968 年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术 会议上第一次提出了“软件危机”(Software Crisis)这个名词。同时,讨论和制定摆脱“软件 危机”的对策。在那次会议上第一次提出了软件工程(Software Engineering)这个概念,从此 一门新兴的工程学科——软件工程学——为研究和克服软件危机应运而生。

7.3.4 软件工程学概述

(1)软件工程学的研究对象。软件工程学研究如何应用一些科学理论和工程技术来指导 软件系统的开发与维护,使其成为一门严格的工程学科。

(2)软件工程学的基本目标。软件工程学的基本目标在于研究一套科学的工程方法,设 计一套方便实用的工程系统,以达到在软件研制生产中的投资少、效率高、优质的目的。

(3)软件工程学的三要素:方法、工具和管理。

(4)软件生命周期。

一个软件项目从问题提出、定义、开发、使用、维护,直至被废弃,要经历一个漫长的 时期,通常把这个时期称为软件生命周期(Software Life Cycle)。

软件工程是研究软件的研制和维护的规律、方法和技术的学科。贯穿于这一学科的基本 线索是软件生命周期(也叫软件生存周期),它将告诉软件研制者与维护者“什么时候做什么、

怎样做”。

7.3.5 软件生存周期

同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等 阶段,一般称为软件生存周期(软件生命周期)。把整个软件生存周期划分为若干阶段,使得

每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件开发变得容易控制和管理。通

发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施 该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该 项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。对于经常变 化的项目而言,瀑布模型毫无价值(采用瀑布模型的软件过程如图 7-21 所示)。

图 7-21 瀑布模型示意图 1)瀑布模型有以下优点:

①为项目提供了按阶段划分的检查点。

②当前一阶段完成后,你只需要去关注后续阶段。

③可在迭代模型中应用瀑布模型。

2)瀑布模型有以下缺点:

①在项目各个阶段之间极少有反馈。

②只有在项目生命周期的后期才能看到结果。

③通过过多的强制完成日期和里程碑来跟踪各个项目阶段。

(2)快速原型。

快速原型模型需要迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人 员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。快速原型模型允 许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的

快速原型模型需要迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人 员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。快速原型模型允 许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的

相關文件