软件工程导论1.ppt_第1页
软件工程导论1.ppt_第2页
软件工程导论1.ppt_第3页
软件工程导论1.ppt_第4页
软件工程导论1.ppt_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、实用软件工程Applied Software Engineering,第1章 软件工程概述,电子信息学院,图像处理与智能系统实验室 鄢煜尘 Yanyuchen. Tel:Email: Web: http:/ ,本章概要,本章是整个课程的概述,介绍软件工程的发展史,软件危机是如何形成和消除的,软件工程的基本概念、内容及基本原理等。, 为什么需要软件工程? 什么是软件工程?,Table of Contents,1.0 简介,什么是软件? Software = Program + Data + Document 软件(software)是计算机系统中与硬件(hardware

2、)相互依存的另一部分, 它包括程序(program)、 相关数据(data)及其 说明文档(document)。,软件的发展,早期 面向批处理 有限的分布 自定义软件,第二阶段 多用户 实时 数据库 软件产品,第三阶段 分布式系统 嵌入“智能” 低成本硬件 消费者的影响,第四阶段 强大的桌面系统 面向对象技术 专家系统 人工神经网络 并行计算 网路计算机,1950,1960,1970,1980,1990,2000,软件特征,软件是一种逻辑实体,而不是具体的物理实体 软件的生产与硬件不同 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题,软件的成本相当昂贵,软件是计算机系统中看不见、摸不

3、着的逻辑部分,以程序、数据和文档的形式出现。 软件已经成为限制计算机系统发展的瓶颈,产生软件危机。,10,1.1 软件危机(Software Crisis),IBM 360机的操作系统 开发时间:1963-1966年 投入人力:5000人年 代码量:100万行 结果:每次发行的新版本都是从上一个版本找出1000个错误而修正的结果,1、软件危机的典型事例,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1 . 3,Frederick P. Brooks, Jr.,一本在软件领域绝无仅有,20余年畅销不衰的必读经典

4、,拉布雷阿的焦油坑(Mural of La Brea Tar Pits),过去几十年的大型系统开发就犹如这样一个焦油坑,很多大型和强壮的动物在其中剧烈地挣扎。,软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。,游荡在软件 世界的幽灵,1968年,北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(software crisis)这个名词。,软件危机包含两方面问题: 如何开发软件,以满足不断增长,日趋复杂的需求; 如何维护数量不断膨胀的软件产品。,2、什么是软件危机,3、软件危机的主要表现,对软件开发成本和进度的估计常常不准确。开发成本超出预算,

5、实际进度比预定计划一再拖延的现象并不罕见。 用户对“已完成”系统不满意的现象经常发生。 软件产品的质量往往靠不住。Bug一大堆,Patch一个接一个。 软件的可维护程度非常之低。 软件通常没有适当的文档资料。 软件的成本不断提高。 软件开发生产率的提高赶不上硬件的发展和人们需求的增长。,引入同一变化付出的代价随时间变化的趋势,软件开发工作量分配比例,40% 50%,10% 20%,费用分配比例,55%70%,例: Windows95有1000万行代码 Windows2000有5000万行代码, 3000多个工程师,几百个小团队。 Exchange2000和Windows2000开发人员结构,4

6、、产生软件危机的原因及解决途径,原因: 软件生产本身存在着复杂性; 与软件开发所使用的方法和技术有关。,解决途径 管理措施 技术措施(方法和工具),软件工程,21,1.2 软件工程(Software Engineering),1、软件工程定义,1968年NATO(北大西洋公约组织)会议上首次提出 Fritz Bauer:软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则 IEEE: 软件工程是(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;(2)(1)中所述方法的研究 计算机科学技术百科全书:软件工程是应用计

7、算机科学、数学及管理科学等原理,以工程化的原则和方法制作软件的工程,软件工程是一门交叉学科,软件工程的主要研究内容 软件开发技术:软件开发方法学 软件开发过程 软件工具和软件工程环境 软件工程管理:软件管理学 软件经济学 软件心理学,软件工程: 一种层次化技术,软件工程三个要素:方法、工具、过程,Software engineering layers,软件工程是一种层次化的技术,以有组织的质量保证为基础。全面的质量管理和类似的理念刺激了不断的过程改进,正是这种改进导致了更加成熟的软件工程方法的不断出现。支持软件工程的根基就在于对质量的关注。 软件工程的基层是过程层。软件工程过程是将技术层结合在

8、一起的凝聚力,使得计算机软件能够被合理地和及时地开发出来。过程定义了一组关键过程区域框架,构成了软件项目的管理控制的基础,并且确立了上下各区域之间的关系,规定了技术方法的采用、工程产品(模型、文档、数据、报告、表格等)的产生、李成本的建立、质量的保证及变化的适当管理。 软件工程的方法层提供里建造软件在技术上需要“如何做?”。方法涵盖了一系列的任务:需求分析、设计、编程、测试和维护。 软件工程方法依赖于一组基本原则,这些原则控制了每一技术区域,且包含建模活动和其他描述技术。 软件工程的工具层对过程和方法提供了自动的或半自动的支持。当这些工具被集成起来使得一个工具产生的信息可被另外一个工具使用时,

9、一个支持软件开发的系统就建立了,称为计算机辅助软件工程(CASE)。CASE集成了软件、硬件和一个软件工程数据库(一个仓库,其中包含了分析、设计、编程和测试的重要信息)。,2、软件工程的本质特征,1、软件工程关注大型程序的构造 2、软件工程的中心课题:控制复杂性 3、软件经常变化 4、开发软件的效率非常重要 5、和谐地合作是开发软件的关键 6、软件必须有效地支持它的用户 7、在软件工程领域中是由一种文化背景的人替具有另一种文化背景的人创造产品,3、软件工程的基本原理,1、用分阶段的生命周期计划严格管理 2、坚持进行阶段评审 3、实行严格的产品控制 4、采用现代程序设计技术 5、结果能清楚地审查

10、 6、开发小组的成员应该少而精 7、承认不断改进软件工程实践的必要性,4、软件工程的方法学,传统方法学 生命周期方法学或结构化范型; 采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务; 使用适当的软件工具或软件工程环境来支持结构化技术的运用; 把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。 采用这种方法学开发软件的时候,从对问题的抽象逻辑分析开始,一个阶段一个阶段地进行开发。,4、软件工程的方法学,传统方法学(续) 前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进

11、了更多的实现细节。 每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。 在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,通过之后这个阶段才算结束;如果没通过检查,则必须进行必要的返工,而且返工后还要再经过审查。,4、软件工程的方法学,面向对象方法学 把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。用对象分解取代了传统方法的功能分解。 把所有对象都划分成类(class)。 继承:类的层次结构 对象彼此间仅能通过发送消息 互相联系。,31,1.3 软件生命周

12、期(Software lifecycle),软件从孕育、诞生、成长、成熟、衰亡的生存过程。,软件生命周期,1. 问题定义 2. 可行性研究 3. 需求分析 4. 总体设计 5. 详细设计 6. 编码和单元测试 7. 综合测试 8. 软件维护,系统分析,系统设计,系统实现,软件维护,定义,开发,维护,从计划、设计软件开始到产品不能使用为止的时间周期,软件生命周期划分阶段的原则,各阶段的任务彼此间尽可能相对独立。这样便于逐步完成每个阶段的任务,能够简化每个阶段的工作,易于确立系统开发计划。 同一阶段的工作任务性质尽可能相同。这样有利于软件工程的开发和组织管理,明确系统各类开发人员的分工与职责范围,

13、以便协同工作,保证质量。,软件生命周期各阶段的基本任务,1、问题定义 要解决的问题是什么? 2、可行性研究 有行得通的解决办法吗? 3、需求分析 目标系统必须做什么? 4、总体设计(概要设计) 怎样实现目标系统?怎么做?,软件生命周期各阶段的基本任务,5、详细设计(模块设计) 怎样具体地实现系统? 6、编码及单元测试 用程序设计语言表达详细设计的结果,并对每一个模块进行测试。 7、综合测试 集成测试:根据设计的软件结构,把各模块装配起来,在装配过程中进行的测试。 验收测试:按规格说明书的要求,由用户对目标进行验收。,软件生命周期各阶段的基本任务,8、软件维护:持久地满足用户的需要。 改正性维护

14、:诊断和改正在使用过程中发现的软件错误。 适应性维护:修改软件以适应环境的变化。 完善性维护:根据用户的要求改进或扩充软件使其更完善。 预防性维护:为将来的维护活动先做准备。,37,1.4 软件过程,1.4 软件过程,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,工作任务,里程碑、交付物,SQA点,过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。,公共过程框架,辅助活动,框架活动,任务集合,软件开发模型,软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直

15、观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。 软件开发模型也常称为: 软件过程模型 软件生存周期模型 软件工程范型,1.瀑布模型 (Waterfall Model),2020/8/15,42, 传统的瀑布模型,需求分析,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,定义时期,开发时期,维护时期,传统瀑布模型开发软件的特点,1.阶段间具有顺序性和依赖性。 2.推迟实现的观点。 3.每个阶段必须完成规定的文档; 每个阶段结束前完成文档审查, 及早改正错误。,传统瀑布模型存在什么问题?,传统的瀑布模型过于理想化。事实上,人在工作过程中不可能不犯错误。 在设计阶段可

16、能发生规格说明文档中的错误。 而设计上的缺陷或错误可能在实现过程中显现出来。 在综合测试阶段将发现需求分析、设计或编码阶段的许多错误。, 实际的瀑布模型, 瀑布模型的优缺点,瀑布模型有许多优点:可强迫开发人员采用规范的方法(例如,结构化技术); 严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。 “瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。 实际项目很少按照该模型给出的顺序进行; 用户常常难以清楚地给出所有需求; 用户必须有耐心,等到系统开发完成; 开发者常常被不必要地耽搁。

17、,瀑布模型适用场合,当有一个稳定的产品定义和很容易被理解的技术解决方案时,纯瀑布模型特别合适。 当你对一个定义得很好的版本进行维护或将一个产品移植到一个新的平台上,瀑布模型也特别合适。 对于那些容易理解但很复杂的项目,采用纯瀑布模型比较合适,因为可以用顺序方法处理问题。 在质量需求高于成本需求和进度需求的时候,它尤为出色。 当开发队伍的技术力量比较弱或者缺乏经验时,瀑布模型更为适合。,2. 原型模型 -快速原型模型 (Rapid Prototype Model) 快速建立起来的可以在计算机上 运行的程序,他所能完成的功能 往往是最终产品能完成的功能的 一个子集。,快速原型模型工作过程,原型模型

18、从需求收集开始。 开发者和用户在一起定义软件的总体目标,标识出已知的需求,并规划出进一步定义的区域。 然后是“快速设计”,快速设计集中于软件那些对用户可见部分的表示。“快速设计”导致原型的建造。 原型由用户评估,并进一步精化待开发软件的需求,逐步调整原型使其满足客户的要求。同时开发者对将要做的事情有更好的理解, 这个过程是迭代的。 按线性模型构建软件系统,快速原型,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,变化的需求,验证,维护过程,开发过程,原型模型 适用情况,用户定义了一组一般性目标,但不能标识出详细的输入、处理及输出需求; 开发者可能不能确定算法的有效性、操作系统的适

19、应性或人机交互的形式; 某些情况下原型模型可能是最好的选择,原型模型存在的问题,用户似乎看到的是软件的工作版本,其实 开发者常常需要实现上的折衷,以使原型能够尽快工作。,3. 增量模型(渐增模型) (Incremental Model) 先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。 系统的总体设计在初始子集设计阶段就应作出设想。,增量模型,需求分析,验证,规格说明,验证,设计,验证,维护,针对每个构件完成详细设计、编码和集成,经测试后交付给用户,分析,分析,分析,分析,设计,设计,设计,设计,编码,编码,编码,编码,测试,测试,测试,测

20、试,增量1,增量2,增量3,增量4,交付,交付,交付,交付,增量模型的优点,在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。 整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。 采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。,使用增量模型的困难,在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,

21、必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。 开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。 多个构件并行开发,具有无法集成的风险。,4.螺旋模型 (Spiral Model),4、螺旋模型(Spiral Model),Spiral 模型(Boehm, 1988提出) 综合了原型实现模型模型的迭代特征和顺序模型的控制和系统化的优点。 增加了风险分析,是以风险为导向的生命期模型。 从一个小范围的关键中心地带开始寻找风险因素,制定风险控制计划,并交付给下一步骤,如此迭代,每次迭代将项目扩展到一个

22、更大的规模。 认为软件开发是一系列增量的发布 系统的完善是随着迭代的深入,63,The spiral model,螺旋模型的活动,螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动: 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制 风险分析:分析所选方案,考虑如何识别和消除风险 实施工程:实施软件开发 客户评估:评价开发工作,提出修正建议,螺旋模型的特点,把软件开发过程组成为一个逐步细化的定义周期(螺旋周期)序列,每经历一个周期,系统就得到进一步的细化和完善; 本质上,具有上述特征的螺旋是一直运转的直到软件退役。有时这个过程处于睡眠状态,但任何时候出现了改变,过程都会从合适的入

23、口点开始; 紧密围绕开发中的风险问题,用风险分析推动软件设计向深一层扩展、求精; 强调持续地判断、确定和修改用户任务目标,并按成本、效益来分析候选的软件产品性质对任务目标的贡献; 可结合采用多种软件开发方法,但究竟结合哪一种方法仍由风险分析来决定。,螺旋模型,对于大型软件系统的开发,螺旋模型是一个很现实的方法。 优势:随着迭代的增加(成本的增加),风险程度随之降低 缺陷:比较复杂,需要相当的风险评估技术,且成功依赖于这种技术。,5、喷泉模型(Fountain Model),68/151,喷泉模型是一种支持面向对象开发的模型 体现迭代和无间隙特征 迭代:各开发活动常常重复工作多次,相关的功能在每

24、次迭代中随之加入演进的系统 无间隙:开发活动之间不存在明显的边界,6、 Rational统一过程,Rational Unified Process(RUP)使用Unified Modeling Language(UML),采取用例驱动和架构优先的策略。 UML建立用例模型、静态模型和动态模型完成对整个系统的建模,所定义的概念和符号可用于分析、设计和实现的全过程。 最佳实践: 迭代式开发 管理需求 使用基于构件的体系结构 可视化建模 验证软件质量控制软件变更,RUP的核心思想:,1、尽早并且持续的化解重大风险,否则带来很多麻烦风险列表是不断变化的,要持续不断的化解风险。 2、用例驱动用例的主要优

25、势是使团队成员在设计、实现、测试和最终编写用户手册的过程中紧紧的以用户需求为中心。,RUP的核心思想:,3、把注意力放在可执行软件上可执行软件使项目进度的最好体现。对项目进度评估时,尽可能以正在编写以及正在运行的代码和通过测试的用例为标准。 4、尽早在项目中适应变化rup要求在初始阶段结束时达成对系统总体外貌的共识,在细化阶段结束时候建立系统构架的基线(设计、实现、测试的构架),在构造阶段结束时候完成特性冻结。 5、在早期确定一个可执行的构架确立了系统的构架,就识别出了在创建系统时候会遇到的许多最复杂的困难。,72,RUP的整体架构,7、敏捷过程与极限编程,为了使软件开发团队具有高效工作和快速响应变化的能力,11位著名的软件专

温馨提示

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

评论

0/150

提交评论