第一讲
软件工程概述
About SE
? 内容丰富,课时有限
– 基本概念、原理、规律
– 软件开发方法、工具和环境,软件开发过程
– 软件开发管理,软件产品规范
? 新兴学科,发展迅速
? 实践性强
参考文献
?, 软件工程 ——实践者的研究方法, 第四版,
Roger S,Pressman,机械工业出版社
?, 软件工程 ——理论与实 践, 第二版, Shari
Lawrence Pfleeger,高等教育出版社
?, 实用软件工程, 第二版, 郑人杰, 殷人昆, 陶永
雷, 清华大学出版社
有关 SE的一些组织及网站
? SWEBOK——The Software Engineering
Body of Knowledge
? ACM——Association for Computer
Machinery
? IEEE
? 卡耐基,梅隆大学的 SEI
对软件工程最浅显的认识
?由建筑工程来认识软件工程
–对工程的认识
–需求分析的重要性
–设计与实现仅仅是软件工程的一小部分
–规范与标准的重要性
–工具的重要性
–质量的意义及重要性
软件产业发展的背景
? 人类社会正经历着一场前所未有的由工业社会向信息社
会的巨变,软件产业,任重道短,。
? 从 1991年起,信息产业保持了 10—20%的增长速度。
? 2000年,全球 IT产业的产值为 5000亿美元。
? 2001年,全球 IT产值首次超过汽车工业和钢铁工业。
? 硬、软件开发人员的比例为 1, 8
? 软件,正处于信息技术的核心位置,触及到人类社会的
各个角落和人类文化的各个层次。
? 全球 10大软件企业,有 7个在美国,2个在日本。
? 在这辉煌的另一面,“软件危机”一直折磨着软件业界。
人类社会已经发展到信息时代
? 茹毛饮血的石器时代
? 文明初肇的青铜时代
? 工业革命的蒸汽时代
? 社会化大生产的电气时代
? 信息膨胀的数字时代
Return
计算机科学技术的巨大作用
? 开拓人类认识自然改造自然的新资源
– 物质资源、能量资源 → 信息资源
? 增添了人类发展科学技术的新手段
– 理论推倒、科学实验、虚拟与现实 ……
? 提高了人类创造文化的新工具
– 人的行为、思想、言语、行动 ……
? 引起了人类工作方式与生活方式的变化
Return
软件的历史
? 第一个写软件的人是 Augusta Ada Lovelace,1860年代他尝试
为 Charles Babbage的机械式计算机写软件, 但失败了 。
? 晶体管的发明为存储器的大量应用提供了基础 。
? 50年代, 第一台电子计算机的问世诞生了 。 以写软件为职业
的人也开始出现, 多是经过训练的数学家和电子工程师 。
? 60年代,美国大学里开始出现授予计算机专业的学位,教人
们写软件。
? 当通用硬件普及的初期,软件的通用性却是很有限的。早期
的软件开发也没有什么系统的方法可以遵循,软件设计是在
某个人的头脑中完成的一个隐藏的过程。而且,除了源代码
往往没有软件说明书等文档。大多数软件是由使用该软件的
个人或机构研制的,往往带有强烈的个人色彩。
软件的定义
? Software = Program + Data + Document
? 其中,
– 程序是按照事先设计的功能和性能要求执行的
指令序列;
– 数据是使程序能够正常操纵信息的数据结构;
– 文档是与程序开发维护和使用有关的各种图文
资料 。
软件产品的特性
? 软件是一种逻辑实体,具有高度复杂性和抽象性。
? 软件“开发过程”有别于一般物质的制造过程。一旦研
制开发成功,就可以大量拷贝同一内容的副本。
? 软件没有磨损、老化的问题,其生命周期曲线不符合所
谓的“浴缸曲线”。
? 对硬件和环境的依赖性。这导致了软件移植的问题。
? 至今尚未完全摆脱手工作坊式的开发方式,生产效率低。
? 软件的成本相当昂贵。
? 软件工作牵涉到很多社会因素。涉及机构、体制和管理
方式、人们的观念和心理。



时间
图 1.1 浴缸曲线
实际的曲线
理想的曲线



时间
图 1.2 软件故障曲线
Change
软件的分类
? 按功能划分
? 按规模划分
? 按工作方式划分
? 按服务对象的范围划分
? 按可靠性的高低划分
人们对软件开发的新认识
? 个人技巧 ——团队意识
? 效率第一 ——清晰度第一
软件危机( Software Crisis)
? 首次提出,1968年北大西洋公约组织在联邦德国召开的
国际学术会议上。
? 软件危机是指在计算机软件的开发和维护过程中所遇到
的一系列严重问题。
? 可以把软件危机概括为两个方面的问题:一、如何开发
软件,以满足不断增长,日趋复杂的需求;二、如何维
护数量不断膨胀的软件产品。
? 从软件工程几十年的发展历程来看,软件危机不
是, crisis”所能形容的,而更象, chronic
affliction”,是一种顽固的慢性痛苦。软件危机的根本
原因是软件系统高度复杂、难于驾驭和软件开发所带有
的个人色彩。
软件危机的具体表现
? 对软件开发成本和进度的估计常常不准确。开发成本超
出预算,实际进度比预定计划一再拖延的现象并不罕见。
? 用户对“已完成”系统不满意的现象经常发生。
? 软件产品的质量往往靠不住。 Bug一大堆,Patch一个接
一个。
? 软件的可维护程度非常之低,即“维护墙”问题。
? 软件通常没有适当的文档资料。
? 软件成本不断提高(软件生产是复杂的高智力活动)。
? 软件开发生产率的提高赶不上硬件的发展和人们需求的
增长。
软件危机产生的原因
? 与软件本身的特点有关。
? 与软件开发和维护的方法不正确有关。软件开发和维护
的不正确方法主要表现为忽视软件开发前期的需求分析;
开发过程没有统一的、规范的方法论的指导,文档资料
不齐全,忽视人与人的交流;忽视测试阶段的工作,提
交用户的软件质量差;轻视软件的维护。这些大多数都
是软件开发过程管理上的原因。
? 硬件技术和产品的发展速度远远大于软件。
? 计算机应用普及 —社会对软件的依赖 —对软件的需求、
质量和可靠性的要求巨增。
? 涉及问题、资源问题使得我们难以支持和增强已有的软
件,即所谓的“维护墙”问题。
第二讲
软件工程概述
软件工程( software engineering)
? 1968年秋季,NATO(北约)的科技委
员会召集了近 50名一流的编程人员、计
算机科学家和工业界巨头,讨论和制定
摆脱“软件危机”的对策。 Fritz Bauer
在那次会议上第一次提出了“软件工程”
这个概念。到今天,软件工程整整走过
了 36年的历程。
软件工程框架
开发范型
设计方法
支持过程
管理过程
可用性 正确性 合算性










软件工程定义
? 软件工程是一门研究如何用系统化、规范化、
数量化等工程原则和方法去进行软件的开发和
维护的学科。
? 软件工程包括两方面内容:软件开发技术和软
件项目管理。
– 软件开发技术包括软件开发方法学、软件工具和软件工
程环境。
– 软件项目管理包括软件度量、项目估算、进度控制、人
员组织、配置管理、项目计划等。
Fritz Bauer的定义
? 软件工程是为了经济地获得可靠的,能
在实际的机器上高效运行的软件而建立
和使用的科学的工程原则。
IEEE的定义
? 软件工程是( 1)将系统化的、规范的、
可度量的方法应用于软件的开发、运行
和维护的过程,即将工程化思想应用于
软件开发过程中,( 2)上述方法的研
究。
软件工程原则
? 质量原则
? 管理原则
? 工程原则
质量原则
? 避免产生缺陷(具有恰当的标准、规范、
质量审计过程等)
? 确保尽早地发现缺陷并加以改正
? 辨别和消除产生缺陷的原因和征兆
? 根据标准和规范对生产的各个过程进行
独立审计( SEI-CMM等)
管理原则
? 规定任务和职责
? 制定工作计划
? 按照计划跟踪进度
? 不断地完善计划
在 CMM中有一个 PDCA循环( Plan,Do,
Check,Action)
工程原则
? 分析问题
? 分解任务
? 控制各个部门之间的关系
? 为了更好地贯彻这些原则,实现软件工
程的目标,我们必须连接软件工程的思
想,研究软件工程的工具、方法、过程
和质量管理。
B,W,Boehm 的七条原则
? 用分阶段的生命周期计划严格管理
? 坚持进行阶段评审
? 实行严格的产品控制
? 采用先进的程序设计技术
? 开发过程具有可见性,所获结果清楚,
便以审查
? 开发人员少而精
? 承认不断改进软件工程实践的必要性
基线( Baseline)
? 里程碑( Milestone)
? 基线的特征
– 具有明确的标识
– 具有明确的内容
– 经过正式审批
– 严格控制变更
软件工程的目标
? 低成本
? 高质量
? 按时交付
软件工程总体面临的困难与风险
? 复杂性与大量的细节(火星探测器的失败)
? 技术的不确定性(技术的发展与开发人员对技术
的理解程度都不同)
? 由于交流障碍而引起的需求不确定性
? 需求是持续变化的
? 不断的修改所带来的错误使得软件退化
? 人为和市场的风险
? 软件费用、可靠性、生产率、重用问题难以解决
软件开发的四个要素
? 人员
? 项目
? 产品
? 过程
过程
产品
项目人员 工具参与者
结果
自动化模板
软件工程过程
? 软件工程过程规定了获取, 供应, 开发, 操
作和维护软件时, 要实施的过程, 活动和任
务 。 其目的是为各种人员提供一个公共的框
架, 以便用相同的语言进行交流 。
? 事实上,软件工程过程是一个开发机构为开
发特定的软件而制订的工作步骤,包含和涉
及软件工程所有参与者的各种活动、任务。
? 四种基本的过程活动:规格说明、开发、确
认和演进。
? 另一种说法:软件工程过程包含获取、供应、
开发、操作、维护、管理、支持七个过程。
软件过程因素
? 一个过程定义了为达到每个确定的目标,
需要什么人在什么时间以何种方式做何
种工作( Goal,Who,When,How,What)。
? 影响软件过程的四个方面
– 技术
– 工具
– 人员
– 组织模式
过程定义的作用
? Process vs Music score
? 用于指导 Customer,User,Developer,Manager.
? 促使过程的有机结合和改善,获得“最好过程”
? 一个广泛适用的过程使得所有参与人员更好地
理解自己所扮演的角色、他人做什么。
? 公司内部的培训可以标准化。
? 由于过程的可重复性,利于开发进度的安排,
利于成本估算。
统一过程( RUP)
? RUP的突出特点
– 用况驱动(系统功能)
– 以构架为中心(表现形式)
– 迭代和增量开发(过程实施)
从百花齐放到 UML 2.0
? 百花齐放:到 1994,OO思想已经贯穿整个软件生存期,具
有影响的 OOA&D方法达 50余种。
? UML是一种对软件密集型系统进行可视化、详述、构造和
文档化的建模语言,主要用于分析和设计阶段的系统建模。
1994
Booch方法
Rumbaugh OMT
Coad/Yourdon
Fire Smith 方法
Jacobson OOSE
……
1995.10发布
Unified Method 0.8
1996.6发布 UML 0.9
不包含过程指导
Rational联合 12家公司成立
UML组织,形成 UML 1.0,
1997.1提交给 OMG
1997.11.4,
UML 1.1被 OMG采纳
2002发布 UML 2.0
软件开发模型
? 模型
– 所谓模型是为了理解事物而对事物做出的
一种抽象,它忽略不必要的细节, 是事物的
一种抽象形式, 一个规划, 一个程式 。
? 软件开发模型
– 软件开发全部过程、活动和任务的结构框架。
软件开发模型的种类
? 瀑布模型
? 快速原型开发模型
? 演化模型
– 多次分析和设计
– 针对事先不能完成定义需求的软件开发
– 原型系统的重要性螺旋模型
– 考虑风险因素,由 Boehm提出
? 喷泉模型
– 多次重复,无间隙
– 适用于面向对象技术(复用技术)
? 增量模型
– 完整的体系结构的实现确定
– 多次迭代
? RUP模型( Rational Unified Process)
瀑布模型 ?




(W
ate
rfa
ll M
ode
l

?







型(Cl
ass
ic
Lif
e Cy
cle
M
ode
l)
?
线




型(L
ine
ar
Se
que
nti
al
Mo
de
l)
问题定义
需求分析
概要设计
详细设计
编码
测试
维护
瀑布模型的三个特点
? 阶段间具有顺序性和依赖性
? 推迟实现的观点
? 质量保证的观点
Co
st
to
ch
an
ge
After release
图 1.3 The impact of change
Definition Development
1.5~6x ??????
1x
60~100x
计划
需求分析
概要设计
详细设计
编码
测试 维护环
计划
需求分析
运行 评价
编码 设计
The Waterfall Model
With Maintenance Circle
问题定义
系统测试
需求分析
概要设计
详细设计
编码
单元测试
维护
集成测试
提交运行
The Software Development Process in
Reality
运行维护
需求分析
概要设计
详细设计
编码单元测试
集成测试
验收测试
Prototyping
系统测试
Validate
Verify
The Waterfall Model
With Prototyping
运行、维护
需求分析
概要设计
详细设计
编码
单元集成测试
验收测试
系统测试
Validate Requirements
Verify Design
The V Model
Operational Specification Model
Operational
Specification
(problem-
oriented)
Transformed
Specification
(implementation –
oriented )
TEST
Execute and
Revise
System
Requirements
(sometimes informal
or incomplete)
Delivered
System
Transformational Model
Transform n
Formal
Specification
problem-oriented
Transform 2 TEST
Compare with
requirements;
Update as needed
System
Requirements
(sometimes informal
or incomplete)
Delivered
System
Transform 1
Formal Development Record
Sequence of
transformations
Plus rationale for them
The Phased Development Model
Build Release 2Build Release 1 Build Release 3
Use Release 2Use Release 1 Use Release 3
Time
Production system
Development system
De
ve
lop
ers
Use
rs
The Incremental and Iterative Model
Incremental Development
Iterative Development
The
Spiral Mo
de
l
Start
Determine goalsAlternatives,
Constraints
Evaluate
Alternatives
And Risks
Develop
And TestPlan
Budget 4 B3 B2 Budget 1 Prototye1 Prototye4P2 P3
Concept of
operation
Development Plan
Integration and test Plan
Implementation Plan
Requirements,
Life-cycle Plan Software
requirements
Validatedrequirements
Softwaredesign
Validated,Verified design
Detaileddesign
Code
Unittest
Systemtest
Acceptancetest
技术审查和管理复审
? 任务:在软件生存周期的每个重要的里
程碑 (一般是每个阶段结束时 ),对工程项
目的成本, 实际花费的经费, 投资回收
的前景, 项目的进度等经济因素从管理
角度进行审查 。
? 不让错误进入下一个阶段
? 技术审查也是降低软件成本的一个重要
措施
? 在技术审查合格之后再进行管理复审
软件开发方法
? 结构化开发方法
– DFD
– 基于功能的分解:自顶向下,逐步求精
– 逐步降低抽象层次
? Jackson 方法
– 面向数据结构
? 维也纳开发方法( VDM)
– 软件需求用严格的形式化语言描述
? OO开发方法
– 更接近人类认知世界的方法和思维方式
– UML
软件开发工具
? 软件工具一般是指为了支持软件人员开发和维
护活动而使用的软件。
? 软件工具发展的三个阶段
– 工具箱
– 软件开发环境 SDE
– 计算机辅助软件工程 CASE (Computer Aided Software
Engineering)
? 工具应该支持软件生命周期的各个阶段
– Requirements Management
– Visual Modeling
– Programming Tool
– Quality Assurance
软件生存周期
? 生命周期 ( Life Cycle):事物孕育, 诞生, 成长,
成熟, 到衰亡的生存过程 。
? 软件生存周期是指一个软件从提出开发要求开始
直到该软件报废为止的整个时期 。
? 把整个生存周期划分为若干阶段, 使得每个阶段
有明确的任务, 使规模大, 结构复杂和管理复杂
的软件开发变得容易控制和管理 。
? 软件生存周期的各阶段有不同的划分。在划分时,
应遵循的一条基本原则是各阶段的任务应尽可能
相对独立,同一阶段各项任务的性质尽可能相同,
从而降低每个阶段任务的复杂程度,简化不同阶
段之间的联系,有利于软件项目开发的组织管理。
软件生命周期的 8个阶段
? 问题定义
? 可行性研究
? 需求分析
? 总体设计
? 详细设计
? 编码和单元测试
? 综合测试
? 软件维护
软件定义阶段
? 问题定义,问题提出和简单的描述,产
生有关“规模和目标的报告书” 系统分
析员。
? 可行性研究、可行性分析、高层逻辑模型:
数据流图,成本 /效益分析 领域专家
? 需求分析,What?逻辑模型和需求说明书:
数据流图,数据字典等 需求分析师
开发阶段
? 概要设计(结构或系统设计) How? 建立
软件的总体结构,即模块结构,产生系统
流程图或层次图或结构图,高级程序员
? 详细设计 算法设计,设计模块内的结构,
IPO图或 PDL语言 程序员
? 编码与单元测试 编写程序,是实现阶段,
生成源程序代码和单元测试方案、数据和
结果,由编程人员进行
? 综合测试 产品测试,综合测试方案和结果,
软件配置 验收员和用户
运行阶段
? 维护,持续不断满足用户的需求,
书写维护记录,由专门的维护人员
和用户进行。
? 四种类型的维护,改正性维护,适应性
维护,完善性维护,预防性维护
第三讲
可行性研究与成本效益分析
本讲的主要内容
? 问题定义与可行性研究
? 可行性研究的任务
? 可行性研究的步骤
? 系统流程图
? 成本 /效益分析
问题定义
? 问题是什么?
– 问题性质
– 工程目标
– 工程规模
? 结束标准:提交规模和目标的报告书
软件可行性研究
? 软件可行性研究的目的
– 用最小的代价在尽可能短的时间内确定该软
件项目是否能够开发,是否值得去开发。
? 结束标准
– 描述系统的高层逻辑模型(系统流程图)
– 成本效益分析
– 关于“是否可行”的明确回答
软件可行性研究的任务
? 技术可行性
? 经济可行性
? 社会可行性
? 操作可行性
软件可行性研究的步骤
1,确定项目规模和目标
2,研究正在运行的系统
3,建立新系统的高层逻辑模型
4,导出和评价各种方案
5,推荐可行的方案
6,编写可行性研究报告
可行性研究报告主要内容
? 1,引言
? 2,可行性研究前提
? 3,对现有系统的分析
? 4,所建议系统的技术可行性分析
? 5,所建议系统的经济可行性分析
? 6,社会因素可行性分析
? 7,其它可供选择方案
? 8,结论意见
系统流程图
? 系统流程图是描绘物理系统的传统工具, 它用
图形符号来表示系统中的各个元素, 如人工处
理, 数据处理, 数据库, 文件, 设备等 。 它表
达了系统中各个元素之间的信息流动的情况 。
? 在可行性研究的过程中, 要根据项目的概要范
围, 功能, 性能等需求, 以概括的形式描述现
有系统的高层的逻辑模型, 并通过概要的设计
变成所建议的系统物理模型 。 系统流程图就是
用来描述所建议系统的物理模型的 。
? 系统流程图不仅用于可行性研究, 也可用于需
求分析 。
一个库存管理系统的系统流程图
订货信息
库存管理模块
报告生成模块
订货报告
库存文件
输入变更记录I/O显示
磁盘
联机存储
处理
文档
成本 /效益分析
? 目的
– 将开发成本与可能取得的效益比较和权衡,从经济角
度评价开发一个新的软件项目是否可行。
? 效益分为有形效益和无形效益
– 有形效益可以用货币的时间价值、投资回收期、纯收
人等指标进行度量
– 无形效益主要从性质上、心理上进行衡量,很难直接
进行量的比较。
? 有形效益分析
– 货币的时间价值
– 投资回收期
– 纯收入
项目开发计划
? 项目概述 —主要工作;软件功能, 性能;条
件;用户及合同承包者承担的工作, 完成期
限及其它条件限制;应交付的程序名称, 所
使用的语言及存储形式;应交付的文档 。
? 实施计划 —任务的划分, 各项任务的责任人;
开发进度, 按计划应完成的任务, 用图表说
明每项任务的开始时间和完成时间;说明项
目的预算, 各阶段的费用支出预算 。
? 人员组织及分工
? 交付期限
作业( P43)