现代软件工程 ——
原理、方法与管理
华南师范大学计算机学院 金小莉
E-mail,lily_76@126.com
基本要求
一、上课认真听讲;
二、积极、独立完成作业;
三、不旷课,不迟到,不早退。
课程安排
一、课时安排
共 60学时,理论 40学时,上
机 20学时 (4楼 B,C)
二、分数比例
笔试 70%,平时 30%
课程简介
一、主要内容
1、软件工程原理
2、软件工程方法
3、软件工程管理
二、参考资料
1、软件工程-原理、方法与应用 (第二
版 ),史济民等,高等教育出版社;
2、软件工程,杨文龙等,电子工业出
版社。
1 软件与软件工程
1.1 软件工程概述
一、软件工程的研究范畴
软件工程是研究计算机软件开发技
术的一门学科,包括软件开发的原理、
开发的技术方法、管理技术、工具和
环境等。
二、实行软件工程化的目的
采用工程的概念、原理、技术与方






法将软件开发工程化,以 提高软件
开发的效率,提高开发的软件质量,
使软件开发规范化,增加软件的可
维护性。
三、软件与软件工程
1、软件( Software)
早期,认为软件指的是程序。
目前,软件被公认的解释是 程序、
数据及其相关文档的集合。












2、软件的特点
( 1)抽象性。
( 2)主观性。
( 3)复杂性。
3、软件工程
( 1)软件危机
软件危机 是指在软件开发和维
护过程中所遇到的一系列严重问
题。
软件危机的主要表现:
1)开发成本失控、进度拖延;
2)用户对, 完成的, 软件系统
不满意;
3)软件产品质量不确定;
4)难以维护;
5)没有文档或文档不足;
6)成本逐年上升;
7)供不应求;












( 2)软件工程
软件工程 是指导计算机软件开发
和维护的工程学科,它采用工程上
成熟的概念、原理、技术、方法来
开发、维护及管理软件。
( 3)软件工程方法学的内容
软件工程主要研究 软件设计方法、
软件工具、软件工程标准和规范、
软件工程管理以及有关理论等 。






软件工程三要素,
软件工程方法与技术、软件工
具与环境、软件过程。
计算机辅助软件工程 (CASE)的
软件开发支持系统。
四、软件工程的基本目标
软件工程的基本目标在于使软件
系统向 高性价比 发展,在给定成本、
进度的前提下,最终获得项目的成功。
优质的软件产品 应具有可修改性、
有效性、可靠性、可理解性、可维护
性、可重用性、可适应性、可移植性、
可追踪性、可互操作性等指标。






在这里,成功 指的是要达到以下
几个主要目标:
?付出较低的开发成本;
?达到要求的软件功能;
?取得较好的软件性能;
?开发的软件易于移植;
?需要较低的维护费用;
?按时完成工作,及时交付使用。






五、软件工程的原则
所谓 原则 就是一些经验总结、依据
的标准、基本的事实,规则和假定。
软件工程的基本原则:
1、抽象;
2、模块化;
3、信息隐蔽;
4、局部化;






5、一致性;
6、完备性;
7、可验证性。
六、软件工程的基本原理
1、用分阶段的 生命周期 计划严格
管理;
2、坚持进行阶段评审;
3、实行严格的产品控制;
4、采用现代软件开发技术;






5、结果应该能审查;
6、开发小组人员应少而精;
7、承认不断改进软件工程实践的必
要性。
八、软件工程环境( CASE环境)
1,SUITE( Rational公司)
由 4个工具组 ( 系统分析组 SUITE
AnalistStudio,软件设计开发组
SUITE DevelopmentStudio,软件






测试组 SUITE TestStudio和 Web开发
组 SUITE ContentStudio)组成。
2、青鸟系统(中国)
主要包括两大部分:
( 1)支持面向对象方法的青鸟 CASE
工具集。
( 2)支持结构化方法的青鸟 CASE工
具集。






1.2 软件生命周期
一、软件生命周期的概念
软件生命周期 ( Software Life
Cycle)是指软件产品从形成概念
(构思)开始,经过定义、开发、使
用和维护,直到最后被废弃(不能再
使用)为止的全过程。
软件生命周期一般划分为计划、开
发和运行 3个时期,每一时期又区分
为若干阶段。如下图所示:












问题定义
可行性研究
需求分析
软件设计
编码
测试
维护
计划
时期
开发
时期
运行时期
软件
定义
软件
开发
运行时期
二、软件过程模型
软件过程模型 是软件开发实际过程
的抽象与概括,是对软件开发过程各
阶段之间关系的一个描述和表示。
1、瀑布模型
特点:
因果关系紧密相连,前一阶段工作
的结果是后一阶段工作的输入。
主要缺点:
a)软件需求分析的准确性很难确定,
甚至是不可能和不现实的;
b)用户和软件项目负责人要相当长
的时间才能得到初始版本。












问题定义
可行性研究
需求分析
总体设计
详细设计
编码与单元测试
综合测试
运行与维护
2、原型模型
两个阶段:
a)原型开发阶段;
b)目标软件开发阶段。
开发原型的三种途径:
a)利用模拟软件系统的人机界面
和人机交互方式;
b)真正开发一个原型;
c)找来一个或几个正在运行的相
似的软件进行比较。












分析 设计
测试 生成
原型开发
运行
评价
确认
目标系统开发
原型模型如下图所示:
3、螺旋模型( Sprial Model) P11
螺旋模型是目前实际开发中最常
用的一种软件开发模型。它在结合瀑
布模型与快速原型的基础上增加了风
险分析。
整个软件开发过程可分成多个阶段,
每个阶段都由 4个部分组成,它们是:
a)目标设定;
b)风险分析;
c)开发和有效性验证;
d)评审。












特点:
在项目的所有阶段直接考虑技术
风险,能够在风险变成问题之前降
低它的危害。
缺点:
( 1)过多迭代周期会增加开发成
本和时间等。
( 2)开发的成败,很大程序上依
赖于风险评估的成败。






4、增量模型
增量模型 (Incremental Model)
是瀑布模型的顺序特征与快速原
型法的迭代特征相结合的产物。
该模型把软件看成一系列相互
联系的增量( Increments),在
开发过程的各次迭代中,每次完
成其中的一个增量。
增量模型如下图所示:






规格说明 设计 实现和集成 交付客户
规格说明 设计 实现和集成 交付客户
规格说明 设计 实现和集成 交付客户
..
.
..
.
..
.
构件 1:
构件 2:
构件 n:






4、构件组装模型
构件组装模型利用已有的构件来
构造应用软件系统。
建立一个健壮并且丰富的构件库,
充分复用已有构件,可以给软件开
发工作提供许多便利,缩短开发周
期,减少项目成本,大大提高软件
的可靠性和生产率。
构件组装模型具有极其广阔的实
用性和深远的意义 。
软件需求
标识构件
检索构件库
开发构件 取出构件
存入构件库 集成目标系统






构件组装模型如下图所示:






5、基于面向对象的模型
基于面向对象的模型,是综合
了面向对象和原型方法及重用技
术的一种模型。
对象技术强调类的创建与封装,
一旦一个类创建与封装成功,就
可以在不同的应用系统中被重用。
该模型如下图所示:
软件需求
构件开发
OOA原型
重用构件库
系统实现与集成
需求开发
检索构件库
面向对象分析
面向对象设计 OOD原型
目标系统






6、基于四代技术的模型
以 4GL为核心的软件开发技术称
为四代技术( Fourth-Generation
Techniques),简称 4GT。
4GL(四代语言)是在大型数据
库管理系统的基础上发展起来的程
序设计语言。
程序设计语言可分成:机器语言、
汇编语言、高级语言、第四代语言、
第五代语言(为人工智能领域应用
而设计的语言)。






4GL的主要特征描述:
( 1)它是非过程化的语言,目的在
于高效、直接地实现各种应用系统。
( 2)它与数据库的关系密切,能够
对大型数据库进行高效处理。
需要注意的是:
4GL不支持应用软件开发的全过程,
只侧重于支持应用软件开发过程中的
设计 阶段和 实现 阶段,特别是支持界
面以及与界面有关的处理过程。












需求分析
设计策略
用 4GL实现
测 试
基于四代技术的模型如下图所示:
7、变换模型
变换模型是基于 形式化规格说明
语言 及程序变换的软件开发模型,
又称 自动程序设计模型 。
变换模型把软件开发流程分成 2个
基本阶段:
( 1)软件规格说明开发。它采用形
式化的软件开发方法,形成形式化
的规格说明的原型。
( 2)当目标规格说明被确认后,就
可以进行自动或半自动的 程序变换 。












软件需求
规格说明开发
辅助支持系统
交互转换 自动编程
目标系统调整规格原型
形式语言,用数学符号严格地依照
一定的规则,形式地表达自然语言,
这种语言称为形式语言。
变换模型如下图所示:






8、净室模型
净室模型 (Cleanroom Model)是
一种 形式化的增量开发模型 。其基
本思想是力求在分析和设计阶段就
消除错误,确保正确,然后在无缺
陷或, 洁净, 的状态下实现软件的
制作。
净室开发把软件看成一系列的增
量,每个增量是一个形式化表示的
,盒, 。当需求收集结束后,就用
盒结构来表示分析和设计模型。






需求
收集
净室模型如下图所示:
盒结构
规约
形式化
设计
正确性
验证
代码
检查 统计性使用测

认证
测试计划
需求
收集
盒结构
规约
形式化
设计
正确性
验证
代码
检查 统计性使用测

认证
测试计划
..
.
..
.
..
.
..
.
增量 # 1
增量 # n
1.3 软件工程面临的问题
1、软件价格问题;
( 1)与硬件成本相比,软件成本较
高,且发展滞后;
( 2)软件对硬件有一定的依赖性,要随硬件的更新而更新。
所以软件的需求量在不断上升,成本也逐年上升。
2、可靠性问题;
软件的可靠性是指, 在给定的时
间间隔及给定的环境条件下,按设计






要求,成功地运行程序的概率, 。
软件的可靠性还应包括:安全性
和健壮性。
3、维护性问题;
软件维护是指修改已经运行了的软件系统所需要的工作。
对于软件维护人员来说,文档是
至关重要的资料,缺乏文档或文档
不合格都会给软件维护带来严重的困难。
4、生产率问题;






5、多样性问题;
软件人员必须采用综合性技术,制
作可靠的软件,灵活应对多样性。(如:多种类型的硬件平台、多种操
作系统、大型数据库、协同系统等)
6、重用性问题。
从广义上讲,重用性可包括:概念
和方法的重用、分析结果重用、设计结果重用、代码重用、测试用例重用
等。
可重用部件的应用可提高软件质量和生产率,降低软件的成本。