Skip to content

软件工程概述

软件工作者们在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科 -- 计算机软件工程学(通常简称为“软件工程”)。

一、软件危机

从20世纪60年代中期到70年代中期是计算机系统发展的第二时期,这个时期的一个重要特征是出现了“软件作坊”,广泛使用软件产品。但是,软件作坊基本上仍然沿用早期形成的个体化软件开发方法。随着计算机应用的日益普及,软件数量急剧膨胀。在程序运行时发现的错误必须设法改正;用户有了新的需求时必须相应地修改程序;硬件或操作系统更新时,通常需要修改程序以适应新的环境。上述种种软件维护工作,以令人吃惊的比例消耗资源。更严重的是,许多程序的个体化特征使得他们最终成为不可维护的。“软件危机”就这样出现了!!!

1. 软件危机的介绍

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的。 实际上,几乎所有软件都不同程度地存在这些问题。

概括地说,软件危机包含下述两个方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。

具体地说,软件危机主要有以下这些典型表现:

(1)对软件开发成本和进度的估计常常很不准确。 实际成本比预估成本可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年的现象并不罕见。 这种现象降低了软件开发组织的信誉。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。

(2)用户对“已完成”的软件系统不满意的现象经常发生。软件开发人员常常在对用户要求只有 模糊的理解 ,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序。软件开发人员和用户之间的信息交流往往很不充分,“闭门造车”必然导致最终的产品不符合用户的实际需要。

(3)软件产品的质量往往靠不住。软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证技术 (审查、复审、程序正确性证明和测试)还没有坚持不懈地应用到软件开发的全过程中。

(4)软件常常是不可维护的。很多程序中的错误是非常难改正的,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需要在原有程序中增加一些新的功能。“可重用的软件”还是一个没有完全做到的、正在努力追求的目标, 人们仍然在重复开发类似的或者基本类似的软件。

(5)软件通常没有适当的文档资料。计算机软件不仅仅是程序,还应该有一整套文档资料。 这些文档资料应该是在软件开发过程中产生出来的,而且应该是“最新式的”(即和程序代码完全一致的)。软件开发组织的管理人员可以使用这些文档资料作为 “里程碑” ,来管理和评价软件开发工程的进展情况;软件开发人员可以利用他们作为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是必不可少地。 缺少必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。软件开发需要大量人力, 软件成本随着软件规模和数量的不断扩大而持续上升。

(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 人们不能充分利用现代计算机硬件提供的巨大潜力。

以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些。

2. 产生软件危机的原因

事实上, 对用户要求没有完整准确的认识就匆忙着手编写程序时许多软件开发工程失败的主要原因之一。 只有用户才真正了解他们自己的需要,但是许多用户在开始时并不能准确具体地叙述他们的需要,软件开发人员需要做大量深入细致的调查研究工作,反复多次地和用户交流信息,才能真正全面、准确、具体地了解用户的要求。对问题和目标的正确认识是解决问题的前提和出发点,软件开发同样也不例外。

一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,这就如同一个人要经过婴儿、儿童、青年、中年和老年,直到最终死亡的漫长时期一样。通常把软件经历的这个漫长的时期称为 生命周期

软件开发最初的工作应是 问题定义 ,也就是确定要求解决的问题是什么;经过软件定义时期的准备工作才能进入 开发时期 ,而在开发时期,首先需要 对软件进行设计 (通常又分为概要设计和详细设计两个阶段),然后才能进入 编写程序的阶段 ,程序编写完之后还必须经过大量的测试工作才能最终交付使用。所以,编写程序只是软件开发过程中的一个阶段,而且在典型的软件开发工程中,编写程序所需的工作量只占软件开发全部工作量的 10%~20%

另一个方面还必须认识到程序只是完整的软件产品的一个组成部分,在上述软件生命周期的每一个阶段都要得出最终产品的一个或几个组成部分(这些组成部分通常以 文档资料 的形式存在)。也就是说,一个软件产品必须由一个完整的配置组成,软件配置主要包括 程序文档数据 等成分。必须清除只重视程序而忽视软件配置其余成分的观念。

3. 消除软件危机的途径

施工中

二、软件工程

1. 软件工程的介绍

概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

施工中

2. 软件工程基本原理

施工中

3. 软件工程方法学

软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。

所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。

通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。

软件工程方法学包含3个要素:方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“怎么做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

三、软件生命周期

概括地说,软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。

1. 问题定义

问题定义阶段必须回答地关键问题是:“要解决的问题是什么?”

如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会白白浪费时间和金钱,最终得出的结果很可能是毫无意义的。尽管确切地定义问题地必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。

通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模地书面报告,经过讨论和必要地修改之后这份报告应该得到客户地确认。

2. 可行性研究

这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”

为了回答这个问题,系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决方法。

可行性研究的结果是客户做出是否继续进行这项工程的决定的重要依据,一般来说,只有投资可能取得较大效益的那些工程项目才值得继续进行下去。及时终止不值得投资的工程项目,可以避免更大的浪费。

3. 需求分析

施工中

4. 总体设计

施工中

5. 详细设计

施工中

6. 编码和单元测试

施工中

7. 综合测试

施工中

8. 软件维护

施工中


参考文献作者链接
软件工程导论(第6版)张海藩 牟永敏 编著前往 软件工程 百度百科

贡献者

页面历史