57
软软软软 Software Engineering 软软软 [email protected]

软件工程 Software Engineering

  • Upload
    conan

  • View
    131

  • Download
    0

Embed Size (px)

DESCRIPTION

软件工程 Software Engineering. 主讲人:毛 锐 邮 箱: [email protected]. 软件工程课程的目标及意义. 目 标 :了解软件工程的研究对象(软件开发工具、项目管理、系统分析、需求分析、软件设计、程序编码、软件测试、软件维护),掌握软件工程的设计方法。 意 义 :学习软件管理思想和管理经验. 软件工程课程要求. 作 业 按时完成章后作业 认真阅读相关参考文献 实 验 按时完成实验报告. 参考书目. 软件工程导论 (第 4 版) 清华大学出版社 软件工程 — 实践者的研究方法 - PowerPoint PPT Presentation

Citation preview

Page 1: 软件工程 Software  Engineering

软件工程Software

Engineering

主讲人:毛 锐

邮 箱:[email protected]

Page 2: 软件工程 Software  Engineering

信息学院

Page 3: 软件工程 Software  Engineering

信息学院

Page 4: 软件工程 Software  Engineering

信息学院

软件工程课程的目标及意义

目 标:了解软件工程的研究对象(软件开发工具、项目管理、系统分析、需求分析、软件设计、程序编码、软件测试、软件维护),掌握软件工程的设计方法。

意 义:学习软件管理思想和管理经验

Page 5: 软件工程 Software  Engineering

信息学院

软件工程课程要求

作 业 按时完成章后作业 认真阅读相关参考文献

实 验 按时完成实验报告

Page 6: 软件工程 Software  Engineering

信息学院

参考书目

软件工程导论(第 4 版) 清华大学出版社

软件工程—实践者的研究方法 Roger S. Pressman ( 第 5 、 6 版) 机械工业出版社

Page 7: 软件工程 Software  Engineering

信息学院

第 1 章 软件工程概述

软件工程产生的背景软件工程定义软件生命周期软件过程模型

Page 8: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景1) 软 件 a. 软件的定义 软件软件(( Software )是计算机系统中与硬件相互是计算机系统中与硬件相互

依存的另一部分,它是包括依存的另一部分,它是包括程序程序(( Program ) ,,数据数据(( Data )及其相关及其相关文档文档( ( Document )的完的完整集合。整集合。

Software = Program + Data + Document

程序是按事先设计的功能和性能要求执行的指令序列程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料文档是与程序开发,维护和使用有关的图文材料

Page 9: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景b. 软件特征 软件是一种逻辑实体,而不是具体的物理实体 软件是设计开发的,而不是传统意义上生产制造的 软件不会“磨损”

磨合调整 磨损

用坏

硬件失效率曲线 时间

失效率

变更点实际曲线

理想曲线

时间

失效率

软件失效率曲线

Page 10: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景b. 软件特征 软件的复杂性高,成本相当昂贵。

软件技术的发展落后于需求

时间

软件复杂性

软件需求

差距

软件技术

硬、软件成本比例的变化

年份

成本 %

软件

1950 1970 1985 1995

硬件

Page 11: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景c. 软件的发展

早期•面向批处理•有限的分布•自定义软件

第二阶段•多用户•实时•数据库•软件产品

第三阶段•分布式系统•嵌入“智能”•低成本硬件•消费者的影响

第四阶段•强大的桌面系统•面向对象技术•专家系统•人工神经网络•并行计算•网路计算机

1950 1960 1970 1980 1990 2000

Page 12: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景2 、软件危机 60 年代中期,随着硬件技术的发展,软件应用范围的扩展,软件越来越大型化、复杂化,产生了上万行的源程序。 当发现错误时需要对这些程序进行修改 当用户需求发生变化时需要修改 当硬件环境更新时需要修改

其它

软件维护 软件维护工作大比例的耗费资源 55%--70%

1968 年 10 月,北大西洋公约组织( NATO )的科学家在德国召开的学术会议上正式提出了软件危机问题。

Page 13: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景

b. 软件危机的表现 ① 软件成本高 硬件代价降低(摩尔定律, CPU 的处理速度每 18个

月提高 1 倍,价格降低 1 半),而软件成本上涨 ② 软件开发无计划,周期长;工作量估计困难,开发

过程无规范、难以控制 ③ 软件产品无测评手段,质量差 ④ 软件适应性差,维护困难

a. 软件危机包含两方面问题如何开发软件,以满足不断增长,日趋复杂的需求如何维护数量不断膨胀的软件产品。

四大难题!

Page 14: 软件工程 Software  Engineering

信息学院

1.1 软件工程产生的背景

c. 克服软件危机的努力( 1 )从管理的角度 软件开发过程的研究、文档的标准化以及人们的交流方式等

( 2 )软件开发方法的研究 面向过程的开发、 面向对象的开发、面向方面的

软件开发 (Aspect-Oriented Software Development , AOSD ) 、模型驱动开发( MDA/MDD )等

( 3 )软件开发技术上的三大突破(仲萃豪) 基于构件和构架的软件生产线技术、不断完善的

UML 、面向服务的架构( SOA )

Page 15: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义 (1)

The establishment and use of sound engineering principles (methods) in order to obtain economically software that is reliable and works on real machines. (1968- Fritz Bauer)

软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。

Page 16: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义 (2)

Software engineering. (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1). (IEEE(The Institute for Electrical and Electronic engineers) Std 610-1990. )

软件工程是:( 1 )把系统的、规范的、 可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;( 2 )研究( 1 )中提到的途径。

Page 17: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义 (3)

Engineering is the systematic application of scientific knowledge in creating and building cost-effective solutions to practical problems in the service of mankind. Software engineering is that form of engineering that applies the principles of computer science and mathematics to achieving cost-effective solutions to software problems.

SEI software engineering definition from 1990 SEI Report on Undergraduate Software Engineering Education (CMU/SEI-90-TR-003):

Page 18: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义

总之: 软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。

Page 19: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义软件工程: 一种层次化技术

质量关注点

过程

方法

工具

软件工程层次图

软件工程三个要素:工具、方法、过程

基础层,综合方法及工具,定义方法使用的顺序,所需要的管理

为软件开发提供“如何做”的技术

为软件开发提供自动或半自动的软件支撑环境,建立计算机辅助软件工程 (CASE) 的软件开发支撑系统

Page 20: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义

ALM ( Application Lifecycle Management )

MSF ( Microsoft Solution Framework )

Page 21: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义

软件工程层次的扩展

Page 22: 软件工程 Software  Engineering

信息学院

1.2 软件工程定义

软件工程的基本原理

用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性

Page 23: 软件工程 Software  Engineering

信息学院

1.3 软件生命周期

问题定义 软件定义 可行性研究 需求分析 总体设计 详细设计软件生命周期 软件开发 编码 单元测试 综合测试

运行维护 持久满足用户需求

Page 24: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

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

工作任务

里程碑、交付物

SQA 点

A process defines

Who is doing

What, When, and

How, in order to

reach a certain

goal.

公共过程框架

辅助活动

框架活动

任务集合

软件过程

Page 25: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

软件生命周期的每一阶段都有明确的任务,把规模大、结构复杂、管理复杂的软件开发变得容易控制和管理。 各个阶段的活动如何衔接,开发过程中采用什么样的策略,应遵守什么样的规定和制约,将这些活动框架(忽略不必要的细节)用一种模型表示出来,称为软件过程模型(或软件开发模型或软件生命周期模型)。 也就是说, 软件过程模型是软件开发全部过程、活动和任务的结构框架。

Page 26: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 1 )瀑布模型 (Waterfall Model ) 传统瀑布模型

Page 27: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

传统瀑布模型的特点

提供了软件过程模型的基本框架(模板)。 强调了每一阶段活动的严格顺序。 质量保证观点:以经过评审确认了的阶段工作 产品(文档)驱动下一阶段的工作,便于管理。 是一种整体开发模型,程序的物理实现集中在 开发阶段的后期,用户在最后才能看到自己的 产品。

传统瀑布模型存在什么问题?

Page 28: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型实际的瀑布模型

Page 29: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。

“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。

实际项目很少按照该模型给出的顺序进行; 用户常常难以清楚地给出所有需求; 用户必须有耐心,等到系统开发完成。

瀑布模型的优缺点

Page 30: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 2 )原型模型—快速原型模型( Rapid Prototype Model) 在用户不能给出完整、准确的需求说明,或者开发者

不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。

建造 / 修改原型建造 / 修改原型

听取用 户意见 听取用 户意见

用户测试运行原型

用户测试运行原型

原型实现范型

Page 31: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

快速原型验证

规格说明验证

设计验证

编码测试

综合测试

维护

变化的需求验证

维护过程开发过程

Page 32: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型原型模型存在的问题 ⑴ 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。 ⑵ 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。 ⑶ 开发过程不便于管理。

有效的使用原型模式 建造原型仅是为了定义需求,之后就被抛弃(或被部分抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。

Page 33: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 3 )增量模型 (Incremental Model)

是一种渐进地开发逐步完善的软件版本的模型。需求分析

验证

规格说明验证

设计验证

维护

针对每个构件完成详细设计、编码和集成,经测试后交付给用户

Page 34: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型分析

分析

分析

分析

设计

设计

设计

设计

编码

编码

编码

编码

测试

测试

测试

测试

增量 1

增量 2

增量 3

增量 4

交付

交付

交付

交付

●● ● ● ●

• 反复的应用瀑布模型的基本成分和原型模型的迭代特征,每一个线型过程产生一个“增量”的发布或提交,该增量均是一个可运行的产品。 • 早期的版本实现用户的基本需求,并提供给用户评估的平台。

增量模型

Page 35: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

1. 在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。

2. 整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。

3. 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。

4. 采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。

增量模型的优点

Page 36: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

增量模型的困难

1. 在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。

2. 开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。

3. 多个构件并行开发,具有无法集成的风险。

Page 37: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 4 )螺旋模型 (Spiral Model)

软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。 对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的迭代中,发布的增量可能是一个纸上的模型或原型,在以后的迭代中,逐步产生系统更加完善的版本。 螺旋模型的基本思想是降低风险。

Page 38: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

快速原型验证

规格说明验证

设计验证

编码测试

综合测试

维护

变化的需求验证

风险分析风险分析

风险分析

风险分析

风险分析

风险分析

可看作在每个阶段之前都增加了风险分析过程的快速原型模型。

简化的螺旋模型

Page 39: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

完整的螺旋模型

Page 40: 软件工程 Software  Engineering

信息学院

螺旋模型 风险分析

工程实施

用户通信

用户评估

产品维护项目产品维护项目

产品增强项目产品增强项目

新产品开发项目新产品开发项目

概念开发项目概念开发项目

计划计划

建造及发布建造及发布

Page 41: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型螺旋模型的优点

对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标减少了过多测试或测试不足维护和开发之间并没有本质区别螺旋模型的特点

风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险随着迭代次数的增加,工作量加大,软件开发成本增加

Page 42: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 5 )面向对象模型

喷泉模型 (Fountain Model)

分析分析

设计设计

实现实现

测试测试

集成集成

演化演化

特点:主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征

Page 43: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型可重用部件组装模型 ( 构件集成模型 ) (Component Integration Model) 构件( components)也称为组件,是一段实现一系列有确定接口的程序体,具有自己的功能和逻辑,能同其他构件集成起来协调工作。 该模型支持软件重用( Reusability ) ,对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合某应用领域体系结构标准的构件,可以用来搭建分布式的、跨越不同操作平台 ( 集成化软件开发环境( ISEE ) ) 的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。 因此,在此基础上专家们又提出了“基于构件的软件工程” (CBSE) 。 构件集成模型如下图所示:

Page 44: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

构件集成模型 软件体系结构被建立后,必须用构件去充实,这些构

件可从复用库中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。

Page 45: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型Sommerville 提出基于组件开发有两种思路: 完成高层设计,对设计中的组件给出描述,以便找出可

复用的组件,这些组件可在体系结构层次上加入或更详细的设计层次上加入。

先根据需求搜寻可复用组件,再将设计建立在获得的组件基础上。

这两种思路可结合起来。设计系统体系结构 描述组件 搜寻可复

用组件 集成系统

先完成架构设计的复用

系统需求描述

搜寻可复用组件

对需求作某些修改

体系结构设计

集成系统

复用驱动设计

Page 46: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型 构件技术主要有三种流行标准: OMG 的 CORBA : 对象管理组织发布的公用对象请求代理体系结构

(Common Object Request Broker Architecture) 。通过一个对象请求代理( ORB) 提供一系列服务,使得一个构件和其他构件通信,而不管它们在系统中的位置,实现了远程对象通过接口进行通信的机制。

为了解决 CORBA 对象引用不透明、缺少多重接口、系统过于复杂等问题,专家们又开发了新一代面向对象中间件平台 ICE ( Internet Communications Engine—互联网通信引擎)。使构建分布式应用系统更容易、性能和伸缩性更好。

Page 47: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

微软的 COM / DCOM : 微软开发了构件对象模型( Component Object

Model) ,它提供了运行于 windows之上的单个应用系统使用不同厂商生产的构件的规约。基于分布式环境下的 COM称为 DCOM (Distribute COM) 。

SUN 的 EJB ( Enterprise JavaBean ) : 随着 Java 在企业级应用的地位日趋重要, Sun 提

出了一个统一的企业级 Java平台— J2EE ( Java 2 Enterprise Edition )。在 J2EE 中, EJB负责最核心的业务处理。它为服务器端的应用程序提供了一种与厂商无关的 Java接口,让任何符合 EJB规范的构件都可以运行在每一台这样的服务器上。

构件技术主要有三种流行标准:

Page 48: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 6 ) 形式化方法模型

是基于形式化语言和程序变换的模型,因此,也称变换模型。从软件需求形式化说明开始,经过一系列的数学变换和正确性证明,最终得到系统的目标程序。形式化方法使开发者应用一个严格的数学符号体系来表示、构造和验证系统,从而大大提高软件的可靠性。

模型见下图:

Page 49: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

非形式化的规格说明

半形式化的规格说明

抽象的规格说明

细化的规格说明

需求

变换

变换

变换

程序

形式化开发模型

Page 50: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型形式化方法模型的两种技术: 基于模型的规格说明及其变换技术 基于模型的技术使用数学上的结构如集合和函数为系

统建模。它们能展现系统的状态以简化对某些行为的描述。基于模型的描述语言及方法如 Z 、 VDM ( Vienna Definition Method) 、 B、 Petri Nets等。

基于代数结构及其变换技术 代数方法适合于对接口的描述。这里接口被定义为一

组对象类或抽象数据类型的集合,用接口操作之间的关系来刻画系统。

Page 51: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型形式化方法模型特点: 该模型迫使对系统需求的分析在软件开发的早期阶段完成。在这个阶段改正错误比在系统被交付之后修改错误要经济得多。 形式化描述是对非形式化描述技术的补充。可以用来精化非形式化的详细的系统需求描述。描述是精确的和无二义的,避免了由于语言误解而产生的一些问题。 最适合用于安全性、可靠性和保密性等性能要求极高的系统。 开发成本较高。 需要严格的数学理论和开发环境的支持。 难以与用户进行通信。

Page 52: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型 形式化过程模型的一个扩展,称为净室软件工程

( cleanroom software engineering)或净室模型,它除了强调分析和设计上的严格性,以及使用基于数学的正确性证明来对设计模型的每个元素进行形式化验证外,还强调了统计质量控制技术。

基本思想: 力求在分析和设计阶段就消除错误,确保正确,然

后在无缺陷或“洁净”的状态下实现软件的制作。 关键技术: 1 、基于统计过程控制之下的增量开发。 2 、基于函数的规范、设计、验证。 3 、统计测试和软件认证。

Page 53: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

日本东京法政大学刘少英教授针对于形式化工程设计了一种 SOFL ( Structured Object-oriented Formal Language )语言。

SOFL = Language + Method + Process model

结合 VDM-SL (VDM specification language) 、 Petri Nets 、 DFD 的特点,设计了含有控制的 DFD ( CDFD ),并提出了可将其转换为形式化的需求规约和设计规约的匹配技术,为规约规约直接转换为下层代码(源程序)奠定了基础。还开发了 SOFL 的 GUI原型和需求与设计规约测试工具的原型。

Page 54: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型( 7 )统一软件开发过程 是由 Rational 公司的 Booch 、 Jacobson 、

Rumbaugh 提出的软件过程模型,也称RUP ( Rational Unified Process) 。 RUP重复一系列周期,每个周期由一个交付给用户的产品结束。

每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。

模型见下图:

Page 55: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型

Page 56: 软件工程 Software  Engineering

信息学院

1.4 软件过程模型 初始阶段:进行问题定义,确定目标,评估其可行

性,降低关键风险。 细化阶段:制定项目计划、配置各类资源、建立系

统架构(包括各类视图)。 构造阶段:开发整个产品,并确保产品可移交给用

户。 移交阶段:产品发布、安装、用户培训。 在每个阶段的每次迭代的最后,用例模型、分析模

型、设计模型、实现模型都会增量,每个阶段结束的里程碑处,管理层做出是否继续、进度、预算、是否给下一阶段提供资助等决定。

不同阶段工作流的侧重点不同,前两阶段大部分工作集中在需求、分析和架构设计上;在构造阶段,重点转移到详细设计、实现和测试上。

Page 57: 软件工程 Software  Engineering

信息学院

作业:

1 、什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 2 、什么是软件工程?它有哪些本质特性?怎样用软件工程清除软件危机? 3 、什么是软件过程模型?试说明所学模型的特点和使用范围。