软件与软件工程的概念
Created: 2025-02-24 Mon 16:03
教师姓名 | 李欣 |
工作单位 | 北方工业大学 信息学院 |
电子邮箱 | lx@ncut.edu.cn |
办公地点 | 瀚学楼1122 |
固定电话 | 010-8880-1685 |
共计32学时
周次 | 周二 7-8节 软件工程实践 | 周四 5-6节 软件工程 |
---|---|---|
1 | [2025-02-27 Thu] 励学楼416 | |
2 | [2025-03-04 Tue] 瀚学楼1010 | [2025-03-06 Thu] 励学楼416 |
3 | [2025-03-13 Thu] 励学楼416 | |
4 | [2025-03-18 Tue] 瀚学楼1010 | [2025-03-20 Thu] 励学楼416 |
5 | [2025-03-27 Thu] 励学楼416 | |
6 | [2025-04-01 Tue] 瀚学楼1010 | [2025-04-03 Thu] 励学楼416 |
7 | [2025-04-10 Thu] 励学楼416 | |
8 | [2025-04-15 Tue] 瀚学楼1010 | [2025-04-17 Thu] 励学楼416 |
答疑
- 时间 :每周二5-6节
- 地点 :瀚学楼1122 也可通过腾讯会议或微信语音等线上答疑
周次 | 周二 7-8节 软件工程实践 | 周四 5-6节 软件工程 |
---|---|---|
9 | [2025-04-24 Thu] 励学楼416 | |
10 | [2025-04-29 Tue] 瀚学楼1010 | [2025-05-01 Thu] \(^*\) 励学楼416 |
11 | [2025-05-08 Thu] 励学楼416 | |
12 | [2025-05-13 Tue] 瀚学楼1010 | [2025-05-15 Thu] 励学楼416 |
13 | [2025-05-22 Thu] 励学楼416 | |
14 | [2025-05-27 Tue] 瀚学楼1010 | [2025-05-29 Thu] 励学楼416 |
15 | [2025-06-05 Thu] 励学楼416 | |
16 | [2025-06-10 Tue] 瀚学楼1010 | [2025-06-12 Thu] 励学楼416 |
* 因涉及五一放假,调休及是否补课将遵循学校安排,请及时留意教务处通知。
- 书名 :软件工程概论(第3版)
- 作者 :郑人杰,马素霞,殷人昆
- 出版社 :机械工业出版社
Figure 1: 教材封面
书名 | 作者 | 出版社 | 年份 |
---|---|---|---|
软件工程实例教程 | 吴洁明 | 清华大学出版社 | 2010 |
软件工程导论(第5版) | 张海藩 | 清华大学出版社 | 2008 |
软件工程(第2版) | 齐治昌等 | 高等教育出版社 | 2004 |
软件工程:实践者的研究方法(第7版) | 郑人杰等译,Roger S Pressman著 | 机械工业出版社 | 2011 |
软件工程实践教程(面向对象) | 谭庆平等 | 高等教育出版社 | 2009 |
UML宝典 | 耿国桐等译,Tom Pender著 | 电子工业出版社 | 2004 |
UML面向对象分析 | 吴际等 | 北京航空航天大学出版社 | 2002 |
Figure 2: 鸟巢
Figure 3: 张家界玻璃桥
Figure 4: 一条道路
Figure 5: 三峡水利工程
- 开发软件不只是写代码;
- 开发软件要有 工程化 意识。
软件工程 主要讲述 软件开发的道理 , 基本上是软件实践者的 成功经验 和 失败教训 的总结。
软件工程的 观念 、 方法 、 策略 和 规范 都是朴实无华的, 平凡之人皆可领会,关键在于 运用 。 —知易行难
周次 | 讲课(教学大纲分章和题目名称) | 学时 |
---|---|---|
第1周 | 第一知识单元 :软件工程概述与软件过程(软件工程的出现、软件工程的定义) | 2 |
第2周 | 第一知识单元 :软件工程概述与软件过程(软件生命周期和软件过程) | 2 |
第3周 | 第二知识单元 :结构化方法(需求工程) | 2 |
第4周 | 第二知识单元 :结构化方法(结构化分析) | 2 |
第5周 | 第二知识单元 :结构化方法(结构化分析、概要设计) | 2 |
第6周 | 第二知识单元 :结构化方法(概要设计、详细设计) | 2 |
第7周 | 第二知识单元 :结构化方法(详细设计) | 2 |
第8周 | 第二知识单元 :结构化方法(结构化编码) | 2 |
第9周 | 第三知识单元 :面向对象方法(面向对象基础) | 2 |
第10周 | 第三知识单元 :面向对象方法(面向对象分析) | 2 |
第11周 | 第三知识单元 :面向对象方法(面向对象设计) | 2 |
第12周 | 第三知识单元 :面向对象方法(软件体系结构与设计模式、软件重构) | 2 |
第13周 | 第四知识单元 :软件测试与维护(软件测试基础、白盒测试) | 2 |
第14周 | 第四知识单元 :软件测试与维护(黑盒测试、软件维护) | 2 |
第15周 | 第五知识单元 :软件项目管理(软件项目管理概述、项目估算) | 2 |
第16周 | 第五知识单元 :软件项目管理(进度管理、配置管理、质量管理) | 2 |
虽然软件对于现代的人并不陌生,但很多人对于软件的理解并不准确......
软件就是程序,软件开发就是编程序 的这种错误观点仍然存在。
软件 是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
其中,
特性1 形态特性
软件是 无形的 、 不可见 的 逻辑实体 。 度量常规产品的几何尺寸、物理性质和化学成分对它却是毫无意义的。
特性2 智能特性
软件是 复杂的 智力产品 ,它的开发凝聚了人们的大量脑力劳动, 它本身也体现了知识实践经验和人类的智慧,具有一定的智能。 它可以帮助我们 解决复杂的计算、分析、判断和决策问题 。
特性3 开发特性
尽管已经有了一些工具(也是软件)来辅助软件开发工作, 但到目前为止尚未实现 完全的 自动化。 /软件开发 中仍然包含了相当份量的 个体劳动 , 使得这一大规模知识型工作充满了 个人行为 和 个人因素 。
特性4 质量特性
目前还 无法 得到 完全没有 缺陷 的软件产品。
特性5 生产特性
与硬件或传统的制造业产品的生产完全不同,软件一旦设计开发出来, 如果需要提供多个用户,它的 复制 十分 简单 ,其 成本 也极为 有限 。
特性6 管理特性
由于上述的几个特点,使得软件的 开发管理 显得更为 重要 ,也更为 独特 。
特性7 环境特性
软件的开发和运行都离不开相关的计算机系统环境, 包括支持它的开发和运行的相关硬件和软件。 软件对于计算机系统的 环境 有着不可摆脱的 依赖性 。
特性8 维护特性
软件投入使用以后需要进行维护, 但这种维护与传统产业产品的维护概念有着很大 差别 。 传统产业产品因 老化 和 机械磨损 而维护, 软件因 修复缺陷 或扩展和提升软件的 功能 或 性能 而维护。
特性9 废弃特性
与硬件不同,软件并不是由于被 用坏 而被废弃的, 而是因 环境变化 或 需求变更 被淘汰的。
特性10 应用特性
软件的应用极为广泛,如今它已渗入 国民经济 和 国防 的各个领域, 现已成为 信息产业 、 先进制造业 和 现代服务业 的核心,占据了 无可取代 的地位。
按照软件的作用,一般可以将软件分成 4类 。
类别1 系统软件
系统软件 是能与计算机硬件紧密配合在一起, 使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。
例如,
类别2 支撑软件
支撑软件 亦称为工具软件,是协助用户开发软件的工具性软件, 其中包括帮助程序人员开发软件产品的工具, 也包括帮助管理人员控制开发进程的工具。
类别3 应用软件
应用软件 是在系统软件的支持下, 在特定领域内开发,为特定目的服务的一类软件。
例如,
商业数据处理软件 、 工程与科学计算软件 、 实时控制软件 、 智能化软件 、 事务管理软件 、 办公自动化软件 等。
类别4 可复用软件
可复用软件 最典型的例子是各种标准函数库, 通常是由计算机厂商提供的系统软件的一部分。 后来可复用的范围扩展到算法之外,数据结构也可以复用。
到了20世纪90年代,作为复用的基础, 可复用的范围从代码复用发展到体系结构复用、开发过程复用。
面向对象开发方法的核心思想就基于复用, 为此,建立了可复用的类库,应用程序库, 以及可复用的设计模式等。
软件危机 暴发于上个世纪六十年代末。
主要表现为: 软件的发展速度远远滞后于硬件的发展速度 , 不能满足社会日益增长的软件需求 。 软件开发 周期长 、 成本高 、 质量差 、 维护困难 。
美国IBM公司在1963年至1966年开发的IBM 360机的操作系统。 这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:
…… 正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深。 最后无法逃脱灭顶的灾难, …… 程序设计工作正像这样一个泥潭, …… 一批批程序员被迫在泥潭中拼命挣扎, …… 谁也没有料到竟会陷入这样的困境 ……
以上列举的仅仅是软件危机的一些 明显 的表现, 与软件开发和维护有关的问题 远远不止 这些。
除了软件本身的特点, 软件危机 发生的 主要原因 有:
为了克服软件危机,1968年10月在北大西洋公约组织(NATO)召开的计算机科学会议上, Fritz Bauer首次提出 软件工程 的概念,试图将 工程化方法 应用于软件开发。
在NATO会议上,Fritz Bauer对 软件工程 的定义是: 软件工程 是为了 经济地 获得 可靠的 且能在实际机器上 有效地 运行的软件, 而建立并使用的完善的工程原理。
1993年IEEE给出的定义:
软件工程 是,
- 将 系统的 、 规范的 、 可度量 的 方法 用于 软件开发 、 运行 和 维护 的过程,即 将工程应用于软件 ;
- 研究1中提到的 方法 。
概括地说,
软件工程 是指导软件开发和维护的 工程性学科 ,
它以计算机科学理论和其他相关学科的理论为指导,
采用 工程化 的 概念 、 原理 、 技术 和 方法 进行软件的开发和维护,
把经过时间考验且证明是正确的 管理技术 和当前能够得到的最好的 技术方法 结合起来,
以较少的代价获得高质量的软件并维护它 。
软件工程的目标 是运用先进的 软件开发技术 和 管理方法 来提高软件的 质量 和 生产率 , 也就是要以 较短的周期 、 较低的成本 生产出 高质量的软件产品 ,并最终实现软件的 工业化生产 。
生产率 与 成本 密切相关, 生产率的提高往往意味着成本的下降 , 开发周期的缩短 。
生产率 与 质量 之间也有着内在的联系, 表面上看,追求高质量会 延长软件开发时间 ,并因此 增加了成本 ,似乎降低了生产率。 但如果生产的软件质量差,虽然开发的时间可能缩短,但之后可能会造成返工,总的开发时间可能会更长。 即使不返工,也无疑会增加维护代价。
软件 同任何其他事物一样,也有着孕育、诞生、成长、成熟和衰亡的生存过程, 我们称这个过程为 软件生命周期 或 软件生存期 。
软件生存期 由 软件定义 、 软件开发 和 运行维护 3个时期组成, 每个时期又可划分为 若干个阶段 。
主要任务是解决 做什么 的问题,即:
- 确定工程的 总目标 和 可行性 ;
- 导出实现工程目标 应使用的策略 及 系统必须完成的功能 ;
- 估计完成工程需要的 资源 和 成本 ;
- 制订 工程进度表 。
通常又分为3个阶段: 问题定义 、 可行性研究 和 需求分析 。
主要任务是解决 如何做 的问题,即:
具体 设计 和 实现 在前一个时期定义的软件。
由 概要设计 、 详细设计 、 编码 和 测试 4个阶段组成。
主要任务是 使软件持久地满足用户的需要 ,通常有4类维护活动:
- 改正性维护 诊断和改正在使用过程中发现的软件错误。
- 适应性维护 修改软件以适应环境的变化。
- 完善性维护 根据用户的要求改进或扩充软件,使它更完善。
- 预防性维护 修改软件为将来的维护活动预先做准备。
文档 | 描述 |
---|---|
软件需求规格说明书 | 将要开发的软件 做什么 。 |
项目计划 | 将要完成的 任务 及其 顺序 ,并 估计 所需要的 时间 及 工作量 。 |
软件测试计划 | 如何 测试 软件,使之确保软件应实现规定的 功能 ,并达到预期的 性能 。 |
软件设计说明书 | 软件的结构,包括 概要设计 及 详细设计 。 |
用户手册 | 如何 使用 软件。 |
通常把 软件开发生命周期全过程 中使用的 一整套技术的集合 称为 方法学(methodology) , 也称为 范型(paradigm) 。
在软件工程的范畴,这两个词的含义基本相同。
软件工程方法学 包含三个要素:
软件工具 是指能支持软件生存期中某一阶段的需要而使用的软件。 早期的软件工具主要用来辅助程序员编程,如 编辑程序 、 编译程序 等。
在提出软件工程的概念以后,又出现了 软件生存期 的概念, 出现了许多开发模型和开发方法,同时软件管理也开始受到人们的重视。
与此同时,出现了一批软件工具来辅助软件工程实施, 因此,软件工具通常也称为 CASE (Computer Aided Software Engineering,计算机辅助软件工程) 工具。
该时期出现了 程序设计语言 ,软件开发主要是 编程 ,出现的工具主要是为了 辅助软件编程活动 。
- 编译 程序
- 汇编 程序
- 解释 程序
- 连接 程序
- 装配 程序
- 排错 程序
- ……
该时期提出了 软件工程 的概念,支持 软件开发 、 维护 、 管理 等过程的工具也应运而生。
- 支持 需求分析活动 的 需求分析工具
- 支持 维护过程 的 维护工具 和 理解工具
- 支持 管理过程中 进度管理活动 的 PERT(Program Evaluation and Review Technique)工具
- 支持 软件过程 的 质量保证工具
- ……
参考教材
SoftWare Engineering BOdy of Knowledge 简称 SWEBOK ,即 软件工程知识体系指南 。
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
classDiagram
软件工程标准 --|> 软件工程管理类
软件工程标准 --|> 软件生存期过程类
软件工程管理类 --|> 软件生存期过程类
软件工程基础类 --|> 软件生存期过程类
class 软件工程管理类 {
+软件工程过程
+软件工程管理
+软件配置管理
+软件质量
+软件工程专业实践
}
class 软件生存期过程类 {
+软件工程模型和方法
+软件需求
+软件设计
+软件构造
+软件测试
+软件维护
}
class 软件工程基础类 {
+软件工程经济学
+计算基础
+工程基础
+数学基础
}
Figure 6: 软件工程知识体系的三类知识域
从图中可看出: