您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第1章 软件工程学概述
软件工程导论(第5版)普通高校本科计算机专业特色教材精选张海藩编著主讲:徐怡E-mail:xuyi1023@126.com主要内容第1章软件工程学概述第2章可行性研究第3章需求分析第5章总体设计第6章详细设计第7章实现第8章维护第9章面向对象方法学引论成绩期末考试(70%)平时成绩(30%)考勤,作业,课堂练习上机成绩(单独给成绩)参考书籍软件工程技术概论朱三元科学出版社实用软件工程郑人杰清华出版社现代软件工程周之英科学出版社第1章软件工程学概述1.1软件危机1.2软件工程1.3软件生命周期1.4软件过程1.5小结本章要点1.了解软件的发展和软件危机2.掌握软件工程和软件生存周期的概念3.了解软件过程引言1.什么是软件2.软件的特点什么是软件软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。软件=程序+数据+文档程序是按事先设计的功能要求执行的指令序列。程序=算法+数据结构数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文资料软件的特点软件是一种逻辑实体,具有抽象性。人们无法看到软件本身的形态,必须通过观察、分析、思考、判断才能了解它的功能和性能。软件在使用过程中无磨损问题;却要根据硬件、环境、需求变化而修改,这些修改不可避免引入错误,导致软件失效率升高,从而软件退化;当修改成本难以承受时,软件被抛弃。软件对硬件和环境有不同程度的依赖,这导致了移植问题。软件开发至今尚无法摆脱手工作坊式的开发方式,生产效率低。软件本身是复杂的。软件成本相当昂贵。软件工作涉及到很多社会因素。机构、体制和管理方式;人们的观念和心理;这些因素,常常成为软件开发的困难所在,直接影响到项目的成败个体化开发阶段(20世纪60年代中期以前)计算机系统发展的初期,软件带有强烈的个人色彩,采用个体化开发方式;软件开发没有方法可寻,软件设计是在人们头脑中完成的,除了程序清单之外,没有其他文档资料保存下来。软件作坊时期(60年代中期到70年代)“软件作坊”,软件作为一种产品被广泛使用;但是仍然使用早期的个体化开发方式。1.1软件危机随着软件数量的增加及软件需求的日趋复杂,维护难度越来越大,开发成本高,质量低。更严重的是,许多程序的个体化特性使得它们最终成为不可维护的。导致“软件危机”。1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了。软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。1.1.1软件危机的介绍具体地说,软件危机主要有以下一些典型表现。(1)对软件开发成本和进度的估计常常很不准确。(2)用户对“已完成的”软件系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。具体包括以下几个方面:1、软件是逻辑部件,缺乏“可见性”,软件开发过程的进展情况较难衡量;开发质量较难评价,开发过程管理和控制较难;运行过程才能暴露没有检测出来的事故,相当于修改设计,软件维护困难。2、软件规模庞大,有技术问题,也有管理方法问题。3、早期开发的个体化;忽视需求分析;认为软件开发就是写程序,文档资料不齐全,轻视软件维护等。4、对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。所以对前期工作不能忽视,做好软件定义时期的工作,这是降低成本,提高软件质量的关键。5、在软件开发的不同阶段进行修改需要付出的代价是很不相同的(后期是前期的2-3个数量级)。6、轻视维护是一个最大的错误。软件维护是极端艰巨复杂的工作,(费用占软件总费用的55%~70%)。1.1.2产生软件危机的原因图1.1引入同一变动付出的代价随时间变化的趋势(1)正确认识计算机软件(软件是程序、数据及相关文档的完整集合)(2)很好地借鉴前人在开发和使用计算机系统的长期实践中积累和总结的宝贵经验(3)积极开发和使用计算机辅助软件工程工具总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。1.1.3消除软件危机的途径概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。软件工程的三要素:工程方法+软件开发技术+软件项目管理。1.2软件工程1.2.1软件工程的介绍软件工程具有下述的本质特性。1.软件工程关注于大型程序的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐地合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品软件工程的7条基本原理(确保软件产品质量和开发效率的原理的最小集合)1.用分阶段的生存周期计划严格管理2.坚持进行阶段评审3.严格实行产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性1.2.2软件工程的基本原理通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。软件工程方法学包含3个要素:方法、工具和过程。方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。使用得最广泛的软件工程方法学:传统方法学和面向对象方法学。1.2.3软件工程方法学1.传统方法学传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务。把软件生命周期的全过程依次划分为若干个阶段,顺序地完成每个阶段的任务。前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化。在每一阶段结束前都进行管理复审和技术审查。管理复审:主要任务是对工程项目的成本,实际花费的经费,投资回收的前景,项目的进度等经济因素从管理角度进行审查。技术审查是保证软件质量和降低开发成本的重要措施。2.面向对象方法学传统方法学把数据和操作分离成两个独立的部分,当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。面向对象方法学尽量模拟人类习惯的思维方式,把数据和对数据的操作紧密地结合起来,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。概括地说,面向对象方法学具有下述4个要点。(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。也就是说,用对象分解取代了传统方法的功能分解。(2)把所有对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。(4)对象彼此间仅能通过发送消息互相联系。也就是说,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期。通常把这个漫长的时期称为生命周期。软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。1.3软件生命周期软件定义时期的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。维护时期的主要任务是使软件持久地满足用户的需要。改正性维护、适应性维护、完善性维护、预防性维护。每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。下面扼要介绍软件生命周期每个阶段的基本任务。1.问题定义:要解决的问题是什么?2.可行性研究:对于上一个阶段所确定的问题有行得通的解决办法吗?3.需求分析:为了解决这个问题,目标系统必须做什么?4.总体设计:概括地说,应该怎样实现目标系统?5.详细设计:应该怎样具体地实现这个系统呢?6.编码和单元测试:写出正确的容易理解、容易维护的程序模块并测试。7.综合测试:通过各种类型的测试(及相应的调试)使软件达到预定的要求。8.软件维护:通过各种必要的维护活动使系统持久地满足用户的需要。软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。为获得高质量的软件产品,软件过程必须科学、有效。通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。常用软件开发模型:瀑布模型,快速原型模型、增量模型、螺旋模型、喷泉模型等。1.4软件过程瀑布模型又叫流水式过程模型,它是模仿旅游景点的阶梯瀑布,由上向下一个阶梯一个阶梯地倾泻下来,最后进入一个风平浪尽的大湖,这个大湖就是软件企业的产品库。模型的本意:根据软件生存周期是由问题定义、可行性研究、需求分析、总体设计、详细设计、编程、测试、维护等阶段所组成的,把每个阶段当作瀑布中的一个台阶,把软件生存过程比喻成瀑布中的流水,软件生存过程在这些台阶中由上向下地奔流。开发人员按阶段开发,管理人员按阶段管理。1.4.1瀑布模型图1.2传统的瀑布模型瀑布模型的特点:1.阶段间具有顺序性和依赖性这个特点有两重含义:①必须等前一阶段的工作完成之后,才能开始后一阶段的工作;②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。2.推迟实现的观点瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现。3.质量保证的观点在瀑布模型的每个阶段都应坚持两个重要做法:(1)每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。(2)每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。传统的瀑布模型过于理想化了,实际的瀑布模型是带“反馈环”的,如图1.3所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)。当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面
本文标题:第1章 软件工程学概述
链接地址:https://www.777doc.com/doc-4275568 .html