软件工程
Software Engineering
授课教师:刘永锋信息学院课程介绍及要求用工程化的方法来开发软件信息学院
为什么要学习这门课程
有助于正确理解和认识,软件,的概念及其特点
理解软件开发面临的问题和挑战
掌握软件工程的原则、方法和思想,并使用它们系统地开发软件,尤其是复杂、庞大的软件
了解和接触软件开发所需的各种技术手段教学目标信息学院
1.理 解
什么是软件工程
为什么需要软件工程 (产生背景 )
软件工程需要解决那些问题
软件工程涉及那些方面内容教学目标信息学院
2.掌 握
软件工程
概念
技术
过程
工具教学目标信息学院
3.运 用
运用工程化思想进行软件开发
需求分析
软件设计
程序设计
软件维护教学目标先行课
程序设计语言
最好有一定的软件开发经验信息学院学习 要求

理解知识点和思想
不可死记硬背

实践
体会软件工程的原则、方法和技术,在实践中提高
培养抽象思维能力
培养独立解决问题的能力
培养合作精神信息学院第 1章 软件工程概述
软件工程产生的背景 (软件危机 )
软件工程定义
软件工程方法学
软件过程模型
小结信息学院
1.1 软件工程产生的背景
1) 软 件
a,软件的定义软件 ( Software) 是计算机系统中与硬件相互依存的另一部分,它是包括 程序 ( Program)
,数据 ( Data) 及其相关 文档 ( Document) 的完整集合。
Software = Program + Data + Document
程序是按事先设计的功能和性能要求执行的指令序列
数据是使程序能正常操纵信息的数据结构
文档是与程序开发、维护和使用有关的图文材料信息学院非常复杂
逻辑复杂
远远高于硬件的逻辑复杂度
开发复杂
成本难以估算
进度难以控制
人员素质要求高
质量得不到保证
1.1 软件工程产生的背景
b、软件的特征信息学院成本 高
1.1 软件工程产生的背景
b、软件的特征信息学院风险大
1995年美国 Standish咨询集团的统计分析 (至 90年代初的软件项目执行情况 )
成功,16.2%
失败,31%
受到挑战,53.8%
近几年来的统计数据
成功,26%
失败,28%
受到挑战,46%
1.1 软件工程产生的背景
b、软件的特征信息学院维护困难
维护形式多样化
改正性:修改故障
完善性:增加功能
适应性:移植
维护成本越来越高
55%到 70%
维护带来的问题
1.1 软件工程产生的背景
b、软件的特征信息学院
1.1 软件工程产生的背景
c,软件的发展早期
面向批处理
有限的分布
自定义软件第二阶段
多用户
实时
数据库
软件产品第三阶段
分布式系统
嵌入,智能,
低成本硬件
消费者的影响第四阶段
强大的桌面系统
面向对象技术
专家系统
人工神经网络
并行计算
1950 1960 1970 1980 1990 20001968年 10月,北大西洋公约组织( NATO)的科学家在德国召开的学术会议上正式提出了软件危机问题。
信息学院
1.1 软件工程产生的背景
2),软件危机
a、软件危机的表现( 1/3)
成本高
IBM 360 OS,5000多人年,
耗时 4年 (1963- 1966),花费
2亿多美元
美国空军,1955年软件占总费用 (计算机系统 )的 18%,70
年 60%,85年达到 85%
美国全球军事指挥控制系统
,硬件 1亿美元,软件高达
7.2亿美元
计算机软件和硬件费用比
0
10
20
30
40
50
60
70
80
90
6 0 年代 8 0 年代计算机软件计算机硬件信息学院
软件质量得不到保证
软件应用面的扩大:科学计算、军事、航空航天、工业控制、企业管理、办公、家庭
软件越来越多的应用于安全攸关的系统,对软件质量提出更高的要求
由于软件质量问题导致失败的软件项目非常多
a、软件危机的表现( 2/3)
信息学院
2007年评出的最糟糕的 10大 IT灾难:
1,苏联导弹预警系统软件故障差点导致第三次世界大战( 1983

2,AT&T网络瘫痪导致 7500万用户受影响 (1990)
3,阿丽亚娜 5号火箭爆炸 (1996)
4,空中客车 A380出现软件不兼容问题( 2006)
5,美国发射的火星气候探测器因导航系统单位不同而被毁
(1998)
6,EDS CS2计算机系统给纳税人带来 10亿英镑的损失( 2004)
7,千年虫问题( 1999/2000)
8,索尼电池引发的一系列笔记本爆炸事件( 2006)
9,西门子计算机系统故障引发 50万英国居民新护照延迟( 1999

10,软件故障导致 1.7万架飞机滞留洛杉矶国际机场( 2007)
信息学院
a、软件危机的表现( 3/3)
进度难以控制
项目延期比比皆是
由于进度问题而取消的软件项目较常见
只有一小部分的项目能够按期完成
维护非常困难
软件维护的多样性
软件维护的复杂性
软件维护的副作用信息学院
b、产生软件危机的原因
与软件本身的特点有关 (逻辑复杂、难于维护 )
与软件开发与维护的方法不正确有关,
软件 ≠ 程序急于求成 =拔苗助长各自为阵无方法 /学信息学院
开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样
正如建设鸡窝和高楼大厦
大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动
C、软件工程(学)因危机而产生信息学院
d、软件工程 (学 ):克服软件危机的努力
( 1)从管理的角度软件开发过程的研究、文档的标准化以及人们的交流方式等
( 2)软件开发方法的研究结构化软件开发方法,面向对象的开发信息学院
提出有效的方法和工具支持软件开发
1968年提出软件工程概念和思想
20世纪 70年代的结构化软件开发方法
20世纪 80年代的面向对象的软件开发方法
新的技术,软件重用、快速原型、需求工程
典型技术,COM,Java,C++,J2EE,.Net,…,
支撑工具和环境,Jbuilder,Visual Studio,
WebLogic,…
1、解决危机的技术途径信息学院
20世纪 80年代末,开始认识到管理的重要性
一项研究表明,70%的项目由于管理不善导致难以控制进度、成本和质量;
进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部
如果软件开发组织不能对软件项目进行有效管理,就不能充分发挥软件开发方法和工具的潜力,也就不能高效率地开发出高质量的软件产品
2、解决危机的管理途径信息学院
1.2 软件工程定义 (1)
软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。
信息学院
1.2 软件工程定义 (2)
软件工程是,( 1) 把系统的、规范的、
可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;( 2)研究
( 1) 中提到的途径。
信息学院
1.2 软件工程定义总之:
软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。
软件工程的特性:
1,软件工程关注于大型程序的构造
2,软件工程的中心课题是控制复杂性
3,软件经常变化
4,开发软件的效率非常重要
5,和谐地合作是开发软件的关键
6,软件必须有效地支持它的用户
7,在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人信息学院
1.2 软件工程定义软件工程的基本原理
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。在软件工程领域中,
这两个术语的含义基本相同。
软件工程方法学包含 3个要素:方法、工具和过程。
1.3 软件工程方法学信息学院
1.3 软件工程方法学软件工程,一种层次化技术质量关注点过程方法工具软件工程层次图软件工程三个要素,工具、方法、过程基础层,综合方法及工具,定义方法使用的顺序,所需要的管理为软件开发提供,
如何做,的技术为软件开发提供自动或半自动的软件支撑环境
,建立计算机辅助软件工程 (CASE)的软件开发支撑系统信息学院
1.3 软件工程方法学
ALM( Application Lifecycle Management)
MSF( Microsoft Solution Framework )
信息学院软件工程层次的扩展信息学院
1.4 软件生命周期模型问题定义软件定义 可行性研究需求分析总体设计详细设计软件生命周期 软件开发 编码单元测试综合测试运行维护 持久满足用户需求信息学院
1.4 软件过程模型软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤

软件过程软件生命周期的每一阶段都有明确的任务,把规模大、结构复杂、管理复杂的软件开发变得容易控制和管理。
各个阶段的活动如何衔接,开发过程中采用什么样的策略,应遵守什么样的规定和制约,将这些活动框架
(忽略不必要的细节)用一种模型表示出来,称为 软件过程模型 (或 软件开发模型 或 软件生命周期模型 )。
也就是说,软件过程模型是软件开发全部过程、活动和任务的结构框架。
信息学院
1.4 软件过程模型
( 1)瀑布模型 (Waterfall Model )
传统瀑布模型信息学院
1.4 软件过程模型传统瀑布模型的特点
提供了软件过程模型的基本框架(模板)。
强调了每一阶段活动的严格顺序。
质量保证观点:以经过评审确认了的阶段工作产品(文档)驱动下一阶段的工作,便于管理。
是一种整体开发模型,程序的物理实现集中在开发阶段的后期,用户在最后才能看到自己的产品。
传统瀑布模型存在什么问题?
信息学院
1.4 软件过程模型实际的瀑布模型信息学院
1.4 软件过程模型
瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。
,瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。
实际项目很少按照该模型给出的顺序进行;
用户常常难以清楚地给出所有需求;
用户必须有耐心,等到系统开发完成。
瀑布模型的优缺点信息学院
1.4 软件过程模型
( 2)原型模型 — 快速原型模型( Rapid Prototype Model)
在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求
,快速建造一个原型(可运行的软件),然后进行评估
,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。
建造 /修改原型听取用户意见用户测试运行原型原型实现范型信息学院
1.4 软件过程模型快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证维护过程开发过程信息学院
1.4 软件过程模型原型模型存在的问题
⑴ 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。
⑵ 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。
⑶ 开发过程不便于管理。
有效的使用原型模式建造原型仅是为了定义需求,之后就被抛弃(或被部分抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。
信息学院
1.4 软件过程模型
( 3)增量模型 (Incremental Model)
是一种渐进地开发逐步完善的软件版本的模型。
需求分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户信息学院
1.4 软件过程模型分析分析分析分析设计设计设计设计编码编码编码编码测试测试测试测试增量 1
增量 2
增量 3
增量 4
交付交付交付交付
●● ● ● ●
反复的应用瀑布模型的基本成分和原型模型的迭代特征,每一个线型过程产生一个,增量,的发布或提交,该增量均是一个可运行的产品。
早期的版本实现用户的基本需求,并提供给用户评估的平台。
增量模型信息学院
1.4 软件过程模型
1,在较短时间内向用户提交可完成部分工作的产品,
并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。
2,整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。
3,逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
4,采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。
增量模型的优点信息学院
1.4 软件过程模型增量模型的困难
1,在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。
2,开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。
3,多个构件并行开发,具有无法集成的风险。
信息学院
1.4 软件过程模型
( 4)螺旋模型 (Spiral Model)
软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。
对于复杂的大型软件,开发一个原型往往达不到要求。
螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的迭代中,发布的增量可能是一个纸上的模型或原型,在以后的迭代中,逐步产生系统更加完善的版本。
螺旋模型的基本思想是 降低风险 。
信息学院
1.4 软件过程模型快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证风险分析 风险分析风险分析风险分析风险分析风险分析可看作在每个阶段之前都增加了风险分析过程的快速原型模型。
简化的螺旋模型信息学院
1.4 软件过程模型完整的螺旋模型信息学院螺旋模型 风险分析工程实施用户通信用户评估产品维护项目产品增强项目新产品开发项目概念开发项目计划建造及发布信息学院
1.4 软件过程模型螺旋模型的优点
对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
减少了过多测试或测试不足
维护和开发之间并没有本质区别螺旋模型的特点
风险驱动,需要相当丰富的风险评估经验和专门知识,
否则风险更大
主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险
随着迭代次数的增加,工作量加大,软件开发成本增加信息学院
1.4 软件过程模型
( 5)面向对象模型
喷泉模型 (Fountain Model)
分析设计实现测试集成演化特点:主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征信息学院
1.4 软件过程模型
可重用部件组装模型 (构件集成模型 )
(Component Integration Model)
构件( components)也称为组件,是一段实现一系列有确定接口的程序体,具有自己的功能和逻辑,能同其他构件集成起来协调工作。
该模型支持软件重用 ( Reusability),对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合某应用领域体系结构标准的构件,可以用来搭建分布式的、跨越不同操作平台 (集成化软件开发环境(
ISEE) )的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。
因此,在此基础上专家们又提出了,基于构件的软件工程,(CBSE)。
构件集成模型如下图所示:
信息学院
1.4 软件过程模型构件集成模型软件体系结构被建立后,必须用构件去充实,这些构件可从复用库中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。
信息学院
1.4 软件过程模型
Sommerville提出基于组件开发有两种思路:
完成高层设计,对设计中的组件给出描述,以便找出可复用的组件,这些组件可在体系结构层次上加入或更详细的设计层次上加入。
先根据需求搜寻可复用组件,再将设计建立在获得的组件基础上。
这两种思路可结合起来。
设计系统体系结构 描述组件搜寻可复用组件 集成系统先完成架构设计的复用系统需求描述搜寻可复用组件 对需求作某些修改 体系结构设计 集成系统复用驱动设计信息学院
1.4 软件过程模型构件技术主要有三种流行标准:
OMG的 CORBA:
对象管理组织发布的公用对象请求代理体系结构 (Common Object Request Broker Architecture)。通过一个对象请求代理( ORB)提供一系列服务,使得一个构件和其他构件通信,而不管它们在系统中的位置,实现了远程对象通过接口进行通信的机制。
为了解决 CORBA对象引用不透明、缺少多重接口
、系统过于复杂等问题,专家们又开发了新一代面向对象中间件平台 ICE ( Internet Communications Engine—
互联网通信引擎)。使构建分布式应用系统更容易、性能和伸缩性更好。
信息学院
1.4 软件过程模型
微软的 COM / DCOM:
微软开发了构件对象模型( Component Object
Model),它提供了运行于 windows之上的单个应用系统使用不同厂商生产的构件的规约。基于分布式环境下的 COM
称为 DCOM (Distribute COM)。
构件技术主要有三种流行标准:
信息学院
1.4 软件过程模型
SUN的 EJB ( Enterprise JavaBean ):
随着 Java在企业级应用的地位日趋重要,Sun
提出了一个统一的企业级 Java平台 — J2EE( Java 2
Enterprise Edition)。在 J2EE中,EJB负责最核心的业务处理。它为服务器端的应用程序提供了一种与厂商无关的 Java接口,让任何符合 EJB规范的构件都可以运行在每一台这样的服务器上。
构件技术主要有三种流行标准:
信息学院
1.4 软件过程模型
( 6)统一软件开发过程是由 Rational公司的 Booch,Jacobson、
Rumbaugh提出的软件过程模型,也称 RUP(
Rational Unified Process)。 RUP重复一系列周期
,每个周期由一个交付给用户的产品结束。
每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。
模型见下图:
信息学院图 1.10 RUP软件开发生命周期信息学院
1.4 软件过程模型 RUP
初始阶段,进行问题定义,确定目标,评估其可行性,降低关键风险。
细化阶段,制定项目计划、配置各类资源、
建立系统架构(包括各类视图)。
构造阶段,开发整个产品,并确保产品可移交给用户。
移交阶段,产品发布、安装、用户培训。
在每个阶段的每次迭代的最后,用例模型、
分析模型、设计模型、实现模型都会增量,每个阶段结束的里程碑处,管理层做出是否继续、进度、预算、是否给下一阶段提供资助等决定。
不同阶段工作流的侧重点不同,前两阶段大部分工作集中在需求、分析和架构设计上;在构造阶段
,重点转移到详细设计、实现和测试上。
7、敏捷 (灵活 )过程与极限编程极限编程是敏捷过程中最有名的一个,适于小型项目,
极限编程 (XP,eXtreme Programming)对于传统的软件工程中看来是“极端的”实践,
图 1.11 XP项目的整体开发过程图 1.12 XP迭代开发过程
1.4.8微软过程图 1.13微软软件生命周期阶段划分和主要里程碑图 1.14微软过程的生命周期模型
软件 =程序 +数据 +文档
软件危机,原因,现象,办法 (软件工程学 )
软件工程 (学 ):开发、运行和维护 软件 的系统方法
软件工程 3个要素:方法、工具和过程。
软件生命周期,定义,开发,运行维护
软件过程,瀑布模型 +RUP
1.5 小结