Chp 1 软件工程学概论_第1页
Chp 1 软件工程学概论_第2页
Chp 1 软件工程学概论_第3页
Chp 1 软件工程学概论_第4页
Chp 1 软件工程学概论_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/2/41第1章软件工程学概论本章内容软件危机软件工程软件生命周期软件过程2023/2/423

学习重点1、软件危机、软件工程产生的原因2、软件工程过程和软件生命周期3、软件生命周期模型掌握一些基本概念软件危机软件工程软件生命周期软件过程软件生命周期模型瀑布模型增量模型螺旋模型RUP敏捷过程极限编程微软过程本章内容软件危机软件工程软件生命周期软件过程2023/2/445

软件危机与软件工程学软件工程学的产生要从“软件危机”说起1968年,第一届NAT0(北大西洋公约组织的计算机科学家的国际会议)会议,“软件工程”的慨念作为一种有效解决“软件危机”的途径被正式提出。什么是软件危机?软件危机有什么典型表现?为什么会产生软件危机?怎么解决软件危机?6

软件危机什么是软件危机?软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。许多软件项目不能满足客户的要求许多软件项目超出预算和时间安排功能和性能方面成本和进度方面软件危机的典型表现对软件开发成本和进度的估计常常很不正确用户对“已完成的”软件系统不满意的现象经常发生软件产品的质量往往靠不住软件常常是不可维护的软件通常没有适当的文档资料软件成本在计算机系统总成本中所占的比例逐年上升软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势2023/2/478

图硬件/软件成本变化趋势硬件/软件成本变化趋势9

几个软件危机的著名案例①1966年,IBM360机的操作系统。花费5000人一年的工作量,写了近1万行代码。错误百出,每次的新版本就是从前一版本中找1000个程序错误而修正的结果。②1963年,美国用于控制火星探测器的计算机软件中的一个“

,”号被误写为“.”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。③美国丹佛新国际机场自动化行李系统软件。投资1.93亿美元,计划1993年万圣节启用。但开发人员一直为系统错误困扰,屡次推后启用时间,直到1994年6月,机场计划者承认无法预测何时能启用。④1996年,欧洲阿里亚纳5型运载火箭坠毁,造成5亿美元损失。原因是控制软件中的一个错误。10

出现软件危机的原因主要两个原因:与软件本身的特点有关与软件开发与维护的方法不正确有关11

软件本身的特点(1)软件与硬件、一般程序存在很多不同之处。软件与硬件不同抽象性:软件生产没有明显的制造过程,难以衡量开发进展,也难以控制软件质量。问题的隐蔽性:没有硬件的磨损、老化问题,但存在开发早期在分析、设计阶段的错误,修改难度较大。12

失效率曲线13

软件与一般程序不同①软件远比一般程序规模庞大,复杂性高软件所反映的实际问题的复杂性程序逻辑结构的复杂性。例1:Windows95,1000万行代码;

Windows2000,5000万行代码例2:Exchange2000和windows2000开发人员14

软件的规模软件产品的特殊性和人类智力、知识的局限性,导致人们无力处理“复杂问题”。15

软件与一般程序不同(2)②大型软件开发既有技术问题,还有社会问题。

社会因素:组织机构、体制、管理方式、观念、人的心理素等。开发团队成员分工合作技术与管理的矛盾软件开发人员对软件应用的领域知识的了解16

软件开发维护方法中存在的问题(1)①对用户需求的获取不正确用户的原因分析人员的原因对分析人员的要求:沟通能力、归纳总结能力、经验越是早期产生的错误,付出的代价越大。图:不同时期引入同一变动的代价17

软件开发维护方法中存在的问题(2)②软件开发就是编写程序。一个完整的软件产品由一整套完整的配置组成,程序只是其中的一个组成部分。软件开发过程包括多个阶段,每个阶段的产品都是最终的完整的软件产品的一部分。③软件开发只要依靠个别编程高手就能完成。④轻视软件维护软件维护约占软件费用55一75%,包括修改软件运行的错误;对软件进行改进和功能扩充。18

其他产生软件危机的原因①软件开发尚未完全摆脱手工开发方式。②软件成本相当昂贵,主要依靠大量复杂的、高强度的脑力劳动。③软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。软件的“可移植性”就是指的软件对硬件的依赖程度。好的可移植性依赖少。19

消除软件危机的途径1、彻底消除“软件就是程序”的错误观念。2、充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,不是个人独立的劳动。

3、推广和使用在实践中总结出来的软件开发的成功技术和方法。

4、开发和使用更好的软件工具20

消除软件危机的途径“软件工程”的方法理论是摆脱软件危机的一个主要出路。计算机和软件科学家为解决软件危机问题,尝试将在其它领域中行之有效的工程学知识运用到软件开发工作中来,经过不断实践和总结,最后得出一个结论;按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。21

思考题(1)1)只要是编程高手,即使是不懂软件工程,也能编出很好的软件。软件是服务于大众,却是由个性化的开发人员完成的。如果个性化太强,程序就无法阅读,其他人员也就无法维护。22

思考题(2)2)只要拥有一套讲述如何开发软件的书籍,并了解了书中的标准与示例,就可以解决软件开发中遇到的任何问题。软件是用来解决现实问题的,现实问题的特殊性对规范提出了挑战(要进行适应)。软件技术是发展的,没有祖传秘方。就像拥有食谱并不能成为名厨一样,软件开发需要实践。23

思考题(3)3)只要拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。硬件环境只是必要条件,人才是充分条件,软件是人在一定的约束条件下创造出来的。因人因事而异。24

思考题(4)4)软件开发时,如果进度慢,落后于计划,可以增加更多的程序员来解决。增加人力可以减少开发时间吗?新手!任务的重新划分!沟通更加复杂!必须依靠科学地计划来解决这样的问题。25

思考题(5)5)争议:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?软件的性能问题;应用级别→算法的合理性;系统级别→操作系统、数据库系统、系统软件等;硬件级别→机器性能本章内容软件危机软件工程软件生命周期软件过程2023/2/42627

软件工程“软件工程”的典型定义1)1968年,第一届NATO会议

为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。2)IEEE-CS(电气电子工程师协会/计算机科学分会)

1993年,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。

②对①中提到的各种方法的研究。28

3)其他学者的定义Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。FritzBauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法所有定义都强调在软件开发过程中,应用工程化原则的重要性!29

几个关于软件工程本质特性和基本原理的问题问题1:软件工程适用范围?

软件工程关注大型程序的构造问题2:软件工程如何控制系统开发的复杂性的?

将复杂的问题进行分解问题3:需求经常变化,软件应该怎么样?适应变化,开发时考虑可能的变化30

几个关于软件工程本质特性和基本原理的问题问题4:协同工作有什么重要性?

协同工作,责任和沟通问题5:在需求分析完成并获得了用户的肯定,也通过了评审,进入软件设计阶段之后,用户的想法有了改变,提出了一个新的要求,此时如果你是项目负责人,应该怎样做?31

几个关于软件工程本质特性和基本原理的问题问题6:怎样理解“在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品”这句话?问题7:某软件开发,由于时间和资金都非常紧迫,在需求分析人员非常认真、仔细地做完需求分析之后,说:我们可以保证我们的需求分析正确性,不用花时间检查了,设计人员可以直接拿着这份分析报告,马上开始设计。如果你是项目负责人,你会如何决定?为什么?32

软件工程本质特性1)软件工程关注于大型程序的构造。2)软件工程的中心课题是控制复杂性如何分解和集成?G.Miller:“7士2”

原则3)软件经常变化4)开发软件的效率非常重要5)和谐地合作是开发软件的关键6)软件必须有效地支持它的用户7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

扩展定义:软件=知识+程序+数据+文档33

软件工程的基本原理Boehm,1983年提出:

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

2)坚持进行阶段评审

3)实行严格的产品控制基线(baseline)

4)采用现代程序设计技术

5)结果应能清楚地审查

6)开发小组的人员应该少而精7)承认不断改进软件工程实践的必要性

Boehm认为这7条基本原理是确保软件产品质量和开发效率的原理的最小集合。基线是项目储存库中每个工件版本在特定时期的一个“快照”,它是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础。34

软件工程方法学软件工程包括“管理”和“技术”两方面内容:管理——对人、财、物的合理使用和配置;技术——指软件开发中采用的方法、工具和过程。什么是软件工程方法学?通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。35

软件工程方法学三要素:工具、方法和过程要素一:软件工程过程

为获得高质量软件产品所需要进行的一系列活动的框架要素二:软件工程方法

完成软件开发的各项任务的技术方法,为软件开发提供了“如何做”的技术。如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。要素三:软件工程工具

计算机辅助软件工程CASE(computerAidedsottwareEngineering),为软件工程方法提供自动或半自动的软件支撑环境。36

软件工程方法学思想目前使用最广泛的软件工程方法学:1、传统方法学(生命周期方法学或结构化范型)

2、面向对象方法37

传统方法学(生命周期方法学或结构化范型)采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务;把软件生命周期划分为若干个阶段,按顺序完成每个阶段的任务;每个阶段开始和结束都有严格的标准,对任何两个相邻的阶段而言,前一个阶段的结束标准就是后一阶段的开始标准;每一个阶段结束之前都必须进行正式严格的技术审查和管理复审。38

传统方法学的优缺点传统方法学的优点分解任务,分工合作,降低整个软件开发工程的困难;采用科学的管理技术和良好的技术方法对每个阶段成果都进行严格的审查。保证了软件的质量。传统方法学的缺点把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。39

面向对象方法学(OO,Object-oriented)模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。40

面向对象方法学4要点把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。

功能分解对象分解把所有对象都划分成类(class)。按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。对象彼此间仅能通过发送消息互相联系。OO=Objects+Classes+inheritance+CommunicationwithMessages41

二者区别传统方法学:强调自顶向下顺序地完成软件开发的各阶段任务。面向对象方法:是主动地多次反复迭代的演化过程本章内容软件危机软件工程软件生命周期软件过程2023/2/44243

软件生命周期什么是软件生命周期(lifecycle)?

指软件孕育、诞生、成长、成熟、衰亡的生存过程

GB-8567中将软件生命周期分为7个阶段:

可行性研究和项目开发计划;需求分析;概要设计;详细设计;编码;测试;维护其他分法,5个阶段:

需求定义、设计、编码、测试及维护;需求定义阶段包括可行性研究和项目开发计划、需求分析;设计阶段包括慨要设计和详细设计。44

本教材对软件生命周期的划分45

软件定义时期任务:系统分析确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。通常分为问题定义、可行性研究和需求分析三个阶段。46

软件定义时期的三个阶段①问题定义阶段:

回答:“要解决的问题是什么?”②可行性研究阶段

回答:“对于上一个阶段所确定的问题有行得通的解决办法吗?③需求分析(RequirementAnalysis)

回答“为了解决这个问题,目标系统必须做什么?

用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。47

软件开发时期任务:具体设计和实现前一个时期定义的软件①总体设计(概要设计)

回答:“概括地说,应该怎样实现目标系统?”

根据需求分析,设计软件的体系结构;定义结构中的组成模块。②详细设计(模块设计)

回答:“应该怎样具体地实现这个系统呢?”

对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。编写设计说明书,提交评审。二者统称系统设计

48

软件开发时期四个阶段③程序编写(Coding,Programming):把软件设计转换成计算机可以接受的程序代码。④软件测试(Testing):按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,包括单元测试和综合测试。二者统称系统实现49

运行维护(软件维护)时期(Running/Maintenance)使软件持久的满足用户的需要。包括:改正性维护:运行中发现了软件中的错误需要修正。适应性维护:为了适应变化了的软件工作环境,需做适当变更。完善性维护:当用户有新的要求时,应该及时改进软件以满足用户的要求。预防性维护:即修改软件为将来的维护活动预先做准备。50

几个关于软件生命周期阶段的问题问题1:开发一个软件大概需要多少资金、时间,将获得什么效益一般是在哪个阶段确定?相对而言,在哪个阶段与用户交流最多?问题2:系统分析员主要工作在哪个时期?程序员主要工作在哪个时期?问题3:软件定义时期的三个阶段,各自回答什么关键问题?问题4:软件开发时期有几个阶段?各自回答什么关键问题?问题5:软件体系结构最早是在哪个阶段决定的?问题6:详细设计与程序编写阶段有什么样的密切联系?问题7:“软件测试是为了验证系统的正确性”这句话对吗?问题8:软件维护有那几种?各有什么功能?本章内容软件危机软件工程软件生命周期软件过程2023/2/45152

软件过程(SoftwareProcess)软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

ISO9000的定义:使用资源将输入转化为输出的活动所构成的系统。“系统”是相互关联或相互作用的一组要素。过程是软件工程三要素之一。通常用软件生命周期模型来描述。53

什么是软件生命周期模型又称:软件开发模型/软件过程模型/软件工程范型。指软件项目从需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。常见的有:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RUP、敏捷过程、微软过程54

瀑布模型(Waterfallmodel)1970年,由W.Royce提出

传统的瀑布模型从上一阶段接受本阶段

的工作对象,作为输入;利用输入,完成本阶段活

动的内容.本阶段的工作成果作为输出

传入下一阶段。55

瀑布模型—实际的瀑布模型需求分析验证规格说明验证设计验证编码测试综合测试维护变化的需求验证

增加了一个评审活动,评审每个阶段完成的活动,若得到确认,则进行下一阶段的活动;否则返回前一阶段,甚至更前阶段返工;56

瀑布模型特点阶段间具有顺序性和依赖性推迟实现的观点质量保证的观点57

瀑布模型优缺点优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段的所有产品都必须经过质量保证小组的仔细验证;缺点:无法解决软件需求不明确或不准确的问题;可能导致最终开发的产品不能真正满足用户需要。瀑布模型比较适合开发需求明确的软件。58

快速原型模型什么是“原型”?

原型是快速实现和运行的早期版本,反映最终系统部分重要特性。常见的原型实例:人机界面;系统主要功能。

优点:

1、通常能反映用户真实需求;

2、软件产品的开发基本上是线性顺序进行的。59

快速原型的过程获得用户的基本需求说明,据此快速建立一个小型软件系统.用户试用,对其评价;开发人员按照用户的意见快速地修改原型系统,获得新的原型版本,再请用户试用,如此反复,直到满足用户的要求;用户确认原型系统之后,开发人员据此书写规格说明文档,进行下一步开发。60

增量(渐增)模型把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个阶段的增量构件往往实现软件的基本需求,提供最核心的功能;后面的增量构架逐渐添加系统的功能。61

增量(渐增)模型需求分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户62

增量模型注意事项增量构件规模适中;分解的约束条件是当把新构件集成到现有软件中时,所形成的产品必须是可测试的;软件体系必须是开放的,即在对现有系统添加新增量构件时,不能破坏系统原有功能。63

增量模型优缺点优点:能在较短的时间内,提供可完成部分工作的初步产品给用户;用户有较为充裕的时间学习和适应新产品。缺点:对开发人员技术能力要求较高,要求能从系统整体出发正确划分增量构件,并进行分别开发,最后能很好地集成这些构件。64

一种风险更大的增量模型有可能提高开发速度,但需要密切地监控整个开发过程,否则将冒构件无法集成到一起的风险。分析分析分析分析设计设计设计设计编码编码编码编码测试测试测试测试构件1构件2构件3构件465

螺旋模型(spiralmodel)大型软件开发面临的重要问题:软件风险如:产品交付给用户之后,用户不满意;

开发进度落后,开发成本超出预算;

产品完成前关键的开发人员跳槽;

在产品投人市场前,竞争对手发布了一个功能相近,价格更低的软件………构建原型能使某些类型的风险降到最低.66

简单的螺旋模型螺旋模型改进了原型模型,在每个阶段都加入风险分析。简化的螺旋模型

67

完整的螺旋模型68

螺旋模型的优缺点优点:强调可选方案和约束条件,有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;维护是一个周期,与开发并没有本质区别缺点:需要开发人员具有相当丰富的风险评估经验和专门知识;进行风险分析的费用可能较大。适合大型软件开发69

各种模型的比较模型优点缺点瀑布模型规范,文档驱动系统可能不满足客户真正的需求快速原型克服了瀑布型的缺点增量模型开发早期回报明确,易于维护要求开放的软件体系结构螺旋模型风险驱动,适用于大型项目开发风险分析人员需要有经验且经过充分训练喷泉模型喷泉模型是典型的面向对象软件过程模型以用户需求为动力,以对象为驱动的模型

在开发早期定义一系列面向问题的对象,在整个开发过程中不断充实和扩充它们多次迭代,无缝连接

各阶段都使用统一的概念和表示符号采用面向对象范型后维护时间缩短了!2023/2/470Rational统一过程RationalUnifiedProcess,简称RUP或UP

基于构件(component),在UML基础上发展起来的,“用例驱动,以架构为核心,迭代并且增量”。在某种程度上,统一过程尝试从传统软件过程中挖掘最好的特征和性质,但是以敏捷开发中许多好的原则来实现。采用迭代方式开发软件在软件开发的全过程中有效地管理需求使用基于构件的软件体系结构建立软件产品的可视化模型在软件开发的全过程中严格地验证软件质量控制软件变更2023/2/471RUP软件开发生命周期9个核心工作流(6个过程工作流,3个支持工作流)2023/2/472RUP软件开发生命周期RUP强调采用迭代和渐增的方式来开发软件,整个项目开发过程由多个迭代过程组成。RUP循环遍历多次软件生命周期。每次循环都经历一个完整的生命周期,每次循环结束都向用户交付产品的一个可运行的版本。RUP软件开发生命周期中的每个阶段进一步细分为一次或多次迭代过程。项目经理根据当前迭代所处的阶段及上一次迭代的结果,对核心工作流程中的活动进行适当的裁剪,以完成一次具体的迭代过程。2023/2/473敏捷过程(AgileSoftwareDevelopment)敏捷过程是针对传统的瀑布开发模式的弊端而产生的一种新的开发模式,目标是提高开发效率和响应能力。根据下述4个价值观提出的软件过程统称为敏捷过程开发人员的素质及相互间的交互与协作比过程和工具更重要可以工作的软件比面面俱到的文档更重要与客户的合作比合同谈判更重要及时响应变化比死板地遵循计划更重要2023/2/474极限编程(eXtremeProgramming,XP)极限编程是最著名的敏捷过程,“极限”是指把最有效的软件开发实践运用到极致。极限编程的有效实践(12条)

1、完整团队XP项目的所有参与者(开发人员、客户、测试人员等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。

2、计划游戏计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。2023/2/475极限编程的有效实践(续)

3、客户测试

作为选择每个所期望的特性的一部分,客户可以根据脚本语言来定义出自动验收测试来表明该特性可以工作。

4、简单设计

团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论