第1章软件工程1.1软件的基本概念1.2软件工程1.3软件生存周期1.4结构化的软件开发方法1.5面向对象的软件开发方法习题1第1章软件工程1.1.1软件的特征要理解软件的含义,首先要了解软件的特征。软件是逻辑的而不是物理的产品,因此,软件具有与硬件完全不同的特征。(1)软件的开发不是传统意义上的生产制造。软件开发与硬件制造之间有一些相似之处,但却有着本质的区别。软件产品的生产主要是脑力劳动、手工开发方式,大部分产品是“定做”的。1.1软件的基本概念第1章软件工程(2)软件不会“磨损”。硬件在其生命初期有较高的故障率(这些故障主要是设计或制造的缺陷),这些缺陷修正之后,故障率在一段时间内会降到一个很低的水平;随着时间的推移,故障率又将提升。硬件故障率的变化曲线如图1.1所示。第1章软件工程图1.1硬件故障率的变化曲线第1章软件工程软件并不受引起硬件磨损的环境因素的影响。因此,理论上讲,软件的故障率曲线呈现出如图1.2所示的形式。软件在其生命初期具有较高的故障率,但在这些错误改正之后(我们假设理想情况下改正过程中并不引入其他错误),曲线就会趋于平稳。软件不会被磨损,不过它会退化,这一点可以通过图1.2来解释清楚。在其生命期中,软件会经历修改(维护),随着这些修改有可能会引入新的错误,使得故障率曲线呈现为图1.2所示的锯齿形。第1章软件工程图1.2软件故障率的理想曲线与实际曲线第1章软件工程硬件和软件之间的不同还表现在当一个硬件构件磨损时,可以用另外一个备用零件替换它,但对于软件就没有备用零件可以替换了。每一个软件故障都表明了设计或是将设计转换成机器可执行代码的过程中存在错误。因此,软件维护要比硬件维护复杂得多。第1章软件工程(3)软件的可复用性差,不能通过已有的构件组装而成。我们先来看一下一个基于微处理器的控制硬件是如何设计和建造出来的。设计工程师画一个简单的数字电路图,做一些基本的分析以保证可以实现预定的功能,然后查阅所需的元器件的目录,每一个集成电路(通常称为“IC”或“芯片”)都有一个零件编号、固定的功能、定义好的接口和一组标准的集成指南,每一个选定的零件都可以买到,由此可以很方便地组装起一个基于微处理器的控制硬件。在软件开发中,采用一些已有的构件组建一个软件的方法,仅仅在小范围内得到应用。多数软件的设计开发还必须完全从零开始。第1章软件工程1.1.2软件的分类软件种类繁多,概括起来可分为两类:系统软件和应用软件。1.系统软件系统软件是指操作系统及与之相关的各种软件的总称。系统软件是一组为其他程序服务的程序。一类系统软件(如编译器、编辑器和文件管理程序)所处理的信息结构是复杂的,但又是确定的;还有一类系统软件(如操作系统、驱动程序和通信进程等)则处理大量的非确定的信息。系统软件具有以下特点:第1章软件工程●与计算机硬件频繁交互;●支持多用户;●需要精细调度、资源共享及灵活的进程管理的并发操作;●复杂的数据结构;●多外部接口;●具有可移植性,例如嵌入式系统中的实时操作系统。常见的操作系统有DOS、UNIX、Linux以及Windows。2.应用软件应用软件是指为用户的特殊应用目的而开发的软件。例如财务管理软件、人力资源管理软件。第1章软件工程1.1.3软件的发展今天,软件担任着双重角色,它是一种产品,同时又是开发和运行产品的载体。作为一种产品,它扩充了计算机硬件的功能;作为开发和运行产品的载体,它是计算机控制(操作系统)的基础、信息通信(网络)的基础,也是创建和控制其他程序(软件工具和环境)的基础。计算机硬件的发展经历了四个时代,同样,计算机软件的发展也大致经历了四个阶段。第1章软件工程(1)20世纪60年代中期以前,是计算机系统发展的早期阶段。在计算机发展的早期阶段,大多数人把软件开发看成是不需预先计划的事情。计算机编程很简单,没有什么系统化的方法。软件的开发没有任何管理,一旦进度拖后了或者成本提高了,程序员才开始手忙脚乱地弥补。由于那个时期的软件很简单,因而他们的努力在一般情况下往往也会见效。第1章软件工程当通用的硬件已经非常普遍的时候,软件却相反,对每一类应用均需自行设计,应用范围...