《软件工程导论》(第6版)第1章 软件工程学概述 复习笔记

第1章 软件工程学概述

一、软件危机

1.软件危机的介绍

(1)概念

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

①如何开发软件,以满足对软件日益增长的需求;

②如何维护数量不断膨胀的已有软件。

(2)典型表现

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

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

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

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

⑤软件通常没有适当的文档资料。计算机软件不仅仅是程序,还应该有一整套文档资料。

⑥软件成本在计算机系统总成本中所占的比例逐年上升。由于微电子学技术的进步和生产自动化程度的不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而持续上升。

⑦软件开发跟不上计算机应用迅速普及深入的趋势。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

2.产生软件危机的原因

(1)客观原因

①软件是计算机系统中的逻辑部件而不是物理部件。

②软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。

(2)主观原因

①对软件开发和维护有不少糊涂观念,采用了错误的方法和技术。 

②存在与软件开发和维护有关的许多错误认识和做法。

③对用户要求没有完整准确的认识就匆忙着手编写程序。

④一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期。

⑤一个软件产品必须由一个完整的配置组成,主要包括程序、文档和数据等成分。

⑥在软件开发的不同阶段进行修改需要付出的代价是很不相同的。

⑦轻视维护是一个最大的错误。

3.消除软件危机的途径

(1)应该对计算机软件有一个正确的认识。应该彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。

(2)应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。

(3)应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。

(4)应该开发和使用更好的软件工具。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。

二、软件工程

1.软件工程的介绍

(1)概念

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

(2)产生

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

(3)本质特征

①软件工程关注于大型程序的构造

把一个人在较短时间内写出的程序称为小型程序,而把多人合作用时半年以上才写出的程序称为大型程序。传统的程序设计技术和工具是支持小型程序设计的,不能简单地把这些技术和工具用于开发大型程序。

②软件工程的中心课题是控制复杂性

软件所解决的问题通常十分复杂,不得不把问题分解,使得分解出的每个部分是可理解的,而且各部分之间保持简单的通信关系。用这种方法并不能降低问题的整体复杂性,但是却可使它变成可以管理的。

注意:许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节造成的。

③软件经常变化

绝大多数软件都模拟了现实世界的某一部分。现实世界在不断变化,软件为了不被很快淘汰,必须随着所模拟的现实世界一起变化。因此,在软件系统交付使用后仍然需要耗费成本,而且在开发过程中必须考虑软件将来可能发生的变化。

④开发软件的效率非常重要

社会对新应用系统的需求超过了人力资源所能提供的限度,软件供不应求的现象日益严重。软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具。

⑤和谐地合作是开发软件的关键

软件处理的问题十分庞大,必须多人协同工作才能解决这类问题。为了有效地合作,必须明确地规定每个人的责任和相互通信的方法,每个人还必须严格地按规定行事,纪律是成功地完成软件开发项目的一个关键。

⑥软件必须有效地支持它的用户

开发软件的目的是支持用户的工作。软件提供的功能应该能有效地协助用户完成他们的工作。有效地支持用户意味着必须仔细地研究用户,以确定适当的功能需求、可用性要求及其他质量要求。还意味着软件开发不仅应该提交软件产品,而且应该写出用户手册和培训材料。

⑦软件工程领域由具有一种文化背景的人替具有另一种文化背景的人创造产品

软件工程师是软件设计、软件体系结构、测试或统一建模语言等方面的专家,但他们不仅缺乏应用领域和文化领域的实际知识,还缺乏该领域的文化知识,这是软件开发项目出现问题的常见原因。

2.软件工程的基本原理

(1)七条基本原理

①用分阶段的生命周期计划严格管理

在软件开发与维护的漫长的生命周期中,需要完成许多性质各异的工作。应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。

②坚持进行阶段评审

由于大部分错误都是在编码之前造成的,并且错误发现与改正的越晚,所需付出的代价也越高,所以软件的质量保证工作不能等到编码阶段结束之后再进行。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。

③实行严格的产品控制

当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。所谓基准配置又称为基线配置,它们是经过阶段评审后的软件配置成分。

基准配置管理也称为变动控制,主要包括以下两个方面。

a.一切有关修改软件的建议,特别是涉及对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。

b.绝对不能谁想修改软件(包括尚在开发过程中的软件),就随意进行修改。

④采用现代程序设计技术

采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。

⑤结果应能清楚地审查

软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。软件开发人员的工作进展情况可见性差,难以准确度量。为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。

⑥开发小组的人员应该少而精

软件开发小组的组成人员的素质应该好,而人数则不宜过多。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。

⑦承认不断改进软件工程实践的必要性

为了保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。例如,收集进度和资源耗费数据,收集出错类型和问题报告数据等。

(2)意义

这七条原理是确保软件产品质量和开发效率的原理的最小集合。这七条原理是互相独立的,而且是缺一不可的最小集合,然而这七条原理又是相当完备的。

3.软件工程方法学

(1)概念

软件工程包括技术和管理两

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值