Lecture 1:软件工程概述
408 学习笔记:Lecture 1:软件工程概述。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。
本页目录
描述:本节说明软件的组成与特点、软件危机的表现与原因,以及软件工程为何产生、要解决什么问题。
1.1 什么是软件
软件是与计算机系统运行有关的程序、数据及配套文档的完整集合,可概括为:
$$ \text{软件}=\text{程序}+\text{数据}+\text{文档}. $$
从使用形态看,它包含两部分:
- 机器可执行部分:程序和程序处理的数据。
- 人可阅读部分:与开发、测试、部署、维护和使用有关的需求、设计、测试、操作、维护等文档。
文档不是可有可无的附件。没有需求、接口、部署和维护说明的软件,很难由团队长期演化,也难以验证其行为是否符合预期。
1.2 软件的特点
1.2.1 逻辑性、抽象性和无形性
软件是一种逻辑产品,其结构和行为不能像机械零件一样直接触摸,必须借助源代码、模型、文档、存储介质和运行结果来观察。
1.2.2 智力密集
软件是人类分析、设计和创造活动的产物。其主要成本通常集中在需求、设计、编码、测试、协作和维护,而不是复制介质。
1.2.3 不会发生物理磨损
软件被反复运行不会像硬件那样因摩擦而磨损,复制成本也很低。
但“不会被用坏”不等于“永远不失效”:
- 潜在缺陷可能在特定输入或环境下被触发。
- 操作系统、依赖、硬件和业务环境变化会使原软件不再适用。
- 多次维护若引入新缺陷或破坏结构,会产生常说的“软件退化”或“软件老化”现象。
1.2.4 复杂性和定制性
软件需要针对用户需求进行系统分析与设计,业务规则、状态和交互组合会带来很高的逻辑复杂度。
NOTE 课件写“每一个软件都具有定制性”适合强调需求差异,但不能理解为所有软件都必须从零开发。现代工程广泛使用组件、框架、开源库、软件产品线和配置化平台,只对差异部分定制。
1.2.5 维护复杂
软件交付后仍需修复缺陷、适应环境、增加功能和改善质量。维护人员必须理解原有需求、架构、代码、数据和历史决策,修改还可能影响其他模块,因此维护往往占软件生命周期的大量成本。
1.3 软件危机
1.3.1 定义
软件危机是软件开发和维护过程中遇到的一系列严重问题的统称,不是某一次孤立故障。
1.3.2 典型表现
- 项目成本和进度难以准确估计,频繁超支、延期甚至取消。
- 最终产品与真实需求不一致。
- 软件质量差、缺陷多、可靠性和安全性不足。
- 缺乏完整文档,维护和交接困难。
- 生产率增长跟不上软件规模和复杂度增长。
- 修改一个局部却引发其他模块故障,维护费用持续上升。
1.3.3 主要原因
- 软件规模、状态和交互迅速增长,复杂度难以由个人直接掌控。
- 需求不完整、含糊或持续变化。
- 开发过程缺少规范、计划、评审、度量和风险管理。
- 只重视编码,忽视需求、设计、测试、文档和维护。
- 团队沟通、配置管理和质量保证不足。
- 工具、方法和人员能力不能匹配项目难度。
1.4 软件工程的产生与定义
软件工程是为解决软件危机而形成的工程学科。它使用工程化、系统化、规范化并可度量的方法开发、运行和维护软件。
课件的定义强调:
- 采用工程的概念、原理、技术和方法。
- 把经过实践验证的管理技术与当前可用的优秀技术方法结合起来。
- 以经济方式开发高质量软件。
- 软件交付后仍要能够被有效维护。
因此,软件工程既不是“会编程”,也不是单纯使用某种工具,而是技术与管理的结合。
1.5 软件工程的基本要素
可以从四个相互配合的方面理解:
| 要素 | 作用 |
|---|---|
| 质量目标 | 规定正确性、可靠性、可维护性、性能、安全性等期望 |
| 过程 | 组织需求、设计、实现、测试、交付和维护活动 |
| 方法 | 提供分析、建模、设计、编码、测试和度量技术 |
| 工具 | 对过程和方法提供自动化或半自动化支持 |
项目管理、质量保证、配置管理、风险管理和评审活动贯穿整个过程。
1.6 常考辨析
1.6.1 程序是否等于软件
不等于。程序只是软件的一部分,软件还包括数据和开发、使用、维护所需的文档。
1.6.2 软件没有物理磨损,为什么仍需维护
因为缺陷会被触发,需求和运行环境会变化,系统还需增加功能和改善质量。软件维护针对逻辑和环境变化,不是修复材料磨损。
1.6.3 软件工程是否只关注开发
不是。软件工程覆盖开发、运行、维护和退役,并包含人员、过程、项目和质量管理。
相关知识
- 科目导航:复试常考科目导航
- 阅读顺序:上一篇:数据库恢复技术 · 下一篇:软件过程
- 关联专题:数据库系统组成
本节复盘
- 软件由程序、数据和文档组成,程序不等于完整软件。
- 软件具有抽象、智力密集、无物理磨损、复杂和维护困难等特点。
- 软件危机表现为延期、超支、质量差、需求偏离和维护困难,根源既有复杂度,也有过程和管理问题。
- 软件工程因软件危机而产生,以工程化方法经济地开发高质量、可维护的软件。
- 软件工程同时依靠质量目标、过程、方法、工具和贯穿始终的管理活动。