软件工程
电子教案
王树林
第一部分 产品和过程
这部分我们主要解决下列问题
? 究竟什么是计算机软件?
? 为什么我们要不断努力建造高质量的软件系
统?
? 关于软件存在什么样的神话
? 什么是软件过程?
? 线性过程和迭代过程有何区别?
? 软件开发中可以应用什么过程模型?
? 在软件工程中已提出了什么高级的过程模型?
第一章 产品
? 软件工程 ---一个过程,一组方法和一系
列工具;
? 计算机软件:新的驱动力;推动着社会
各行各业迅猛发展。
1.1 软件的发展
软件具有双重角色,( 1)它是一种产品;
( 2)它又是开发和运行产品的载体。
实际上,它还是一个信息转换器。
第一章 产品
? 早期 面向批处理
? 第二阶段 多用户 实时 数据库 软件产

? 第三阶段 分布式系统 嵌入“智能”
低成本硬件 消费者的影响 大众化
? 第四阶段 强大的桌面系统 面向对象技
术 专家系统 人工神经网络 并行计算
网络计算机
第一章 产品
软件的发展存在许多问题
( 1) 硬件的发展一直超过软件;
( 2)我们建造新程序的能力远远不能满
足人们对新程序的需求,同时我们开发
新程序的速度也远远不能满足商业和市
场的需求。
( 3)计算机的普遍使用已使得社会越来
越依赖于可靠的软件。
第一章 产品
( 4)我们一直在不断努力建造具有高可
靠性和高质量的计算机软件
( 5)拙劣的设计和资源的缺乏使得我们
难以支持和增强已有软件。
为了解决这些问题,我们需要软件工程
实践
第一章 产品
? 1.1.1 产业的观点
早期 开发系统围绕硬件转,硬件成本最高
程序设计是一门艺术,开发者可以为所欲为;
今天 软件是最大的成本项,管理者和开发人
员不断地问:
( 1)为什么需要那么长时间才能结束开发?
( 2)为什么成本如此之高?
( 3)为什么我们不能在把产品交给用户之前就
发现所有的问题。
第一章 产品
( 4)为什么我们在软件开发过程中难以度量其
进展?
1.1.2 老化的软件工厂
许多公司都有一个老化的软件工厂,成千
上万的软件需要修改。
20年前开发的系统经过许多的修改已变得
不可维护了,一些关键的工程应用,由于不
断地修改和老化,已经没有人能够了解其内
部结构。
第一章 产品
1.1.3 软件的竞争
早期 许多公司雇佣的软件开发人员仅仅在公
司内部服务,每个程序都是自己开发的,
目前 已发生了很大的变化,那些曾经要开发
的软件已能够在货架上买到。
成本、进度和质量将是未来若干年中导致软件
激烈竞争的主要因素。
美国 西欧 韩国 新加坡 印度 日本 中国 东欧等。
第一章 产品
1.2 软件
软件是,
( 1)能够完成预定功能和性能的可执
行的指令;
( 2)使得程序能够适当地操作信息的
数据结构;
( 3)描述程序的操作和使用的文档。
第一章 产品
1.2.1 软件特征
( 1)软件是由开发而形成的,而不是
制造出来的;
( 2)软件不会“磨损”。
( 3)大多数软件是自定的,而不是通
过已有的构件组装而来的。
第一章 产品
1.2.2 软件构件
随着工业化的发展,大量标准的设计构件产生了。
机器语言
汇编语言
中层语言 C/C++,Pascal,Object Pascal
Java,SmallTalk
第四代语言,也称非过程语言
软件开发越来越独立于硬件
支撑软件会把这种规约自动转换成机器可执行的程

第一章 产品
1.2.3 软件应用
只要预先定义一个算法,机器执行的步骤,
软件就可以应用于任何场合。
软件的分类:
( 1)系统软件 操作系统和编译器等
( 2)实时软件 管理、分析和控制现实世界
中发生的事件的程序就称为实时软件。
数据采集,数据分析,控制输出,管理协
调,响应时间一般在 1ms到 1分钟。
( 3)商业软件 管理信息系统 MIS
( 4)工程和科学计算软件
第一章 产品
( 5)嵌入式软件 智能仪表 刹车系统 微波炉控制
( 6)个人计算机软件 字处理 电子表格
( 7)人工智能软件 模式识别,定理证明和游戏
( 8)基于 WEB的软件
1.3 软件危机
危机:任何事情过程中的一个转折点,决定性的或危
急的时刻、阶段或事件。
疾病过程中的一个转折点,能够确定病人是生是
死。
是指软件开发过程中遇到的一系列问题。
第一章 产品
有 bug的软件,难以维护的软件,不能满
足日益变化的需求的软件。
1.4 软件神话
软件神话使人产生了误解和混乱。
我们有了建造软件的标准和规范,难道它
们就不能给我们提供有用的信息
我们的工作已经落后与计划了,再多派一
些程序员就可以赶上进度了。
项目需求总是在不断地变化,但这些变化
总是可以满足,因为软件是灵活的。
第一章 产品
一旦我们写出了程序,并使其正常
运行,我们的工作就结束了。
在程序真正运行之前,我们是没有
办法评估其质量的。
一个软件项目,唯一应该提交的就
是程序。
1.5 软件工程的七条基本原理
著名的软件工程专家 B.W.Boehm综合 1968
年在联邦德国召开的国际会议上专家学者们把
100多条关于软件工程的思想上总结了 TRW公
司多年开发软件的经验, 于 1983年在一篇论文
中提出了软件工程的七条基本原理 。
七条基本原理是确保软件产品质量
和开发效率的原理的最小集合。七条原
理又是相当完备的。
1,用分阶段的生命周期计划严格管理
2,坚持进行阶段评审
?大部分错误是在编码之前造成的;
?错误发现与改正得越晚,所需付出的代价
也越高。
3,实行严格的产品控制
不能硬性禁止客户提出改变需求的要
求, 而只能依靠科学的产品控制技术来顺
应这种要求 。
4,采用现代程序设计技术
60年代末提出的结构程序设计技术, 已经
成为绝大多数人公认的先进的程序设计技术 。
以后又进一步发展出各种结构分析 (SA)与结构
设计 (SD)技术 。 实践表明, 采用先进的技术既
可提高软件开发的效率, 又可提高软件维护的
效率 。
5,结果应能清楚地审查
为了提高软件开发过程的可见性, 更好地
进行管理, 应该根据软件开发项目的总目标
及完成期限, 规定开发组织的责任和产品标
准, 从而使得所得到的结果能够清楚地审查 。
6,开发小组的人员应该少而精
开发小组人员的素质和数量是影响软件产品
质量和开发效率的重要因素 。
? 素质高的人员的开发效率比素质低的人员的
开发效率可能高几倍至几十倍;
? 素质高的人员所开发的软件中的错误明显少
于素质低的人员所开发的软件中的错误;
? 随着开发小组人员数目的增加, 因为交流情
况讨论问题而造成的通信开销也急剧增加 。
7,承认不断改进软件工程实践的必要性
不仅要积极主动地采纳新的软件技术,
而且要注意不断总结经验 。
软件工程采用的的生命周期方法学就是
从时间角度对软件开发和维护的复杂问题进
行分解, 把软件生命的漫长周期依次划分为
若干个阶段, 每个阶段有相对独立的任务,
然后逐步完成每个阶段的任务 。
解决途径,软件工程 -----生命周期方法学:
问题定义
可行性研究
需求分析
总体设计
详细设计
编码
测试
维护
项目任务书
可行性报告
需求规格说明书
总体设计文档
详细设计文档
程序代码文本
测试报告
计划
时期




运行
时期
把软件生命周期划分成若干个阶段, 每个阶段
的任务相对独立, 而且比较简单, 便于不同人员分
工协作, 从而降低了整个软件开发工程的困难程度;
在软件生命周期的每个阶段都采用科学的管理技术
和良好的技术方法, 而且在每个阶段结束之前都从
技术和管理两个角度进行严格的审查, 合格之后才
开始下一阶段的工作, 这就使软件开发工程的全过
程以一种有条不紊的方式进行, 保证了软件的质量,
特别是提高了软件的可维护性 。 总之, 采用生命周
期方法学可以大大提高软件开发的成功率, 软件开
发的生产率也能明显提高 。
采用生命周期方法学的优点:
使各阶段的任务彼此间尽可能相对独立, 同
一阶段各项任务的性质尽可能相同, 从而降低每
个阶段任务的复杂程序, 简化不同阶段之间的联
系, 有利于软件开发工程的组织管理 。
软件生命周期由软件定义, 软件开发和软件
维护三个时期组成, 每个时期又进一步划分成若
干个阶段 。
划分软件生命周期各阶段的基本原则:
小结
软件已经成为基于计算机系统及产品的关
键组成成分。在过去的四十年中,软件已经
从特定的问题解决和信息分析工具演化成一
门独立的产业。早期形成的程序设计文化已
成为计算机系统演化过程中的阻碍因素。软
件是由程序,数据和文档组成。软件工程的
目的就是为建造高质量的软件提供一个框架。