? 什么是软件
? 软件的分类
? 软件的发展
? 软件生存期
? 软件工程
? 软件工程的目的和要求
? 软件 是计算机系统中与硬件相互依
存的另一部分,它是包括程序,数
据及其相关文档的完整集合。
? 程序 是按事先设计的功能和性能要
求执行的指令序列
? 数据 是使程序能正常操纵信息的数
据结构
? 文档 是与程序开发,维护和使用有
关的图文材料
什么是软件?
软件的特点
? 软件是一种 逻辑实体,而不是具体
的物理实体。因而它具有抽象性
? 软件的生产与硬件不同,在它的开
发过程中 没有明显的制造过程
? 在软件的运行和使用期间,没有硬
件那样的机械磨损,老化问题
? 软件的开发和运行常受到计算机系
统的限制,对计算机系统有着不同
程度的依赖性
? 软件的开发至今 尚未完全摆脱手工
艺的开发方式
? 软件本身是复杂的
?实际问题的复杂性
?程序逻辑结构的复杂性
? 软件成本相当昂贵
? 相当多的软件工作涉及到社会因素
软件的分类
? 按软件的功能进行划分:
? 系统软件
? 操作系统
? 数据库管理系统
? 设备驱动程序
? 通信处理程序等
? 支撑软件
?文本编辑程序
?文件格式化程序
?磁盘向磁带向数据传输的程序
?程序库系统
?支持需求分析、设计、实现、
测试和支持管理的软件
? 应用软件
? 商业数据处理软件
? 工程与科学计算软件
? 计算机辅助设计/制造软件
? 系统仿真软件
? 智能产品嵌入软件
? 医疗、制药软件
? 事务管理、办公自动化软件
? 计算机辅助教学软件
? 按软件规模进行划分:
类别 参加人员数 研制期限 源程序行数
微型 1 1~ 4周 0.5k
小型 1 1~ 6月 1k~ 2k
中型 2~ 5 1~ 2年 5k~ 50k
大型 5~ 20 2~ 3年 50k~ 100k
甚大型 100~ 1000 4~ 5年 1M(=1000k)
极大型 2000~ 5000 5~ 10年 1M~ 10M
? 按软件工作方式划分:
? 实时处理软件
? 分时软件
? 交互式软件
? 批处理软件
? 按软件服务对象的范围划分:
? 项目软件
? 产品软件
? 按使用的频度进行划分:
? 一次使用
? 频繁使用
? 按软件失效的影响进行划分:
? 高可靠性软件
? 一般可靠性软件
软件发展阶段
? 程序设计阶段 — 50至 60年代
? 程序系统阶段 — 60至 70年代
? 软件工程阶段 — 70年代以后
软件工程过程
? 软件规格说明,规定软件的功能及
其运行的限制
? 软件开发,产生满足规格说明的软

? 软件确认,确认软件能够完成客户
提出的要求
? 软件演进,为满足客户的变更要求,
软件必须在使用的过程中演进
软件工程过程的特性
? 易理解性
? 可见性
? 可支持性
? 可接受性
? 可靠性
? 健壮性
? 可维护性
? 速度
软件生存期 life cycle
? 软件有一个孕育、诞生、成长、成
熟、衰亡的生存过程。这个过程即
为计算机软件的生存期
? 软件生存期的六个步骤,即 制定计
划, 需求分析, 设计, 程序编码,
测试 及 运行维护
瀑布模型
制定计划
? 确定要开发软件系统的 总目标
? 给出 功能, 性能, 可靠性 以及 接口
等方面的要求
? 完成该软件任务的 可行性研究
? 估计可利用的 资源 (硬件,软件,人
力等 ),成本, 效益, 开发进度
? 制定出完成开发任务的 实施计划,
连同可行性研究报告,提交管理部
门审查
需求分析和定义
? 对用户提出的要求进行 分析 并给出
详细的定义
? 编写 软件需求说明书 或 系统功能说
明书 及 初步的系统用户手册
? 提交管理机构 评审
软件设计
? 概要设计 — 把各项需求转换成 软件
的体系结构 。结构中每一组成部分
都是意义明确的模块,每个模块都
和某些需求相对应
? 详细设计 — 对每个模块要完成的工
作进行具体的描述,为源程序编写
打下基础
? 编写 设计说明书,提交 评审 。
程序编写
? 把软件设计转换成计算机可以接受
的程序代码,即写成以某一种特定
程序设计语言表示的“源程序清单”
? 写出的程序应当是结构良好、清晰
易读的,且与设计相一致的
软件测试
? 单元测试,查找各模块在功能和结
构上存在的问题并加以纠正
? 组装测试,将已测试过的模块按一
定顺序组装起来
? 按规定的各项需求,逐项进行 有效
性测试,决定已开发的软件是否合
格,能否交付用户使用
运行/维护
? 改正性维护 运行中发现了软件中
的错误需要修正
? 适应性维护 为了适应变化了的软
件工作环境,需做适当变更
? 完善性维护 为了增强软件的功能
需做变更
软件生存期模型
? 软件生存期模型是跨越整个生存期
的系统开发、运作和维护所实施的
全部过程、活动和任务的结构框架
? 瀑布模型
? 演化模型
? 螺旋模型
? 喷泉模型
? 智能模型
演化模型
? 由于在项目开发的初始阶段人们对
软件的需求认识常常不够清晰,因
而使得开发项目难于做到一次开发
成功,出现返工再开发在所难免。
做两次
? 第一次只是试验开发,其目标只是
在于探索可行性,弄清软件需求
? 第二次则在此基础上获得较为满意
的软件产品
螺旋模型
? 螺旋模型沿着螺线旋转,在四个象
限上分别表达四个方面的活动,即:
? 制定计划 ──确定软件目标,选定实
施方案,弄清项目开发的限制
? 风险分析 ──分析所选方案,考虑如
何识别和消除风险
? 实施工程 ──实施软件开发
? 客户评估 ──评价开发工作,提出修
正建议
喷泉模型
? 迭代
? 重复
? 演进
? 无间隙
? 各阶段间无明显界限
软件工程的定义
? Boehm,运用现代科学技术知识来设计
并构造计算机程序及为开发、运行和维
护这些程序所必需的相关文件资料
? IEEE,软件工程是开发、运行、维护
和修复软件的系统方法
? Fritz Bauer,建立并使用完善的工程化
原则,以较经济的手段获得能在实际机
器上有效运行的可靠软件的一系列方法
软件工程三要素:
方法、工具和过程
? 软件工程方法为软件开发提供了
“如何做” 的技术
? 软件工具为软件工程方法提供了自
动的或半自动的软件支撑环境
? 软件工程过程定义了,
? 方法使用的顺序
? 要求交付的文档资料
? 为保证质量和适应变化所需要的
管理
? 软件开发各个阶段完成的里程碑
软件工程项目的基本目标
? 付出较低的开发成本
? 达到要求的软件功能
? 取得较好的软件性能
? 开发的软件易于移植
? 需要较低的维护费用
? 能按时完成开发工作,及时交付使