软件工程概述

3 minBeginner2026/6/14

软件工程定义、软件危机、工程化方法与软件生命周期。

1. 软件工程定义

软件工程是将系统化、规范化、可度量的方法应用于软件的开发、运行和维护的学科。

1.1 核心目标

目标说明
可靠性软件在规定条件下正确运行
可维护性软件易于修改和扩展
可扩展性软件能适应需求增长
高效性合理利用计算资源
可重用性组件可在不同项目中复用

1.2 软件危机

1968年NATO会议提出”软件危机”概念

表现原因
项目超期超预算需求不明确、估算不准
软件质量低缺乏质量保证流程
维护困难代码结构混乱、文档缺失
需求变更频繁缺乏变更管理
团队协作困难沟通机制不完善

2. 软件生命周期

2.1 主要阶段

需求分析 → 系统设计 → 编码实现 → 测试验证 → 部署运维 → 维护演进
阶段产出物关键活动
需求分析需求规格说明书需求获取、分析、验证
系统设计设计文档架构设计、详细设计
编码实现源代码编码、代码审查
测试验证测试报告单元测试、集成测试、系统测试
部署运维运行系统部署、监控、运维
维护演进新版本缺陷修复、功能增强

2.2 开发模型

模型特点适用场景
瀑布模型线性顺序需求明确的小项目
V模型测试与开发对应安全关键系统
增量模型分批交付大型系统
螺旋模型风险驱动高风险项目
敏捷模型迭代增量需求变化频繁

3. 软件质量属性

3.1 ISO 25010质量模型

软件产品质量
├── 功能适合性
│   ├── 完备性
│   ├── 正确性
│   └── 适当性
├── 性能效率
│   ├── 时间行为
│   ├── 资源利用
│   └── 容量
├── 兼容性
│   ├── 共存性
│   └── 互操作性
├── 可用性
│   ├── 可辨识性
│   ├── 易学性
│   └── 易操作性
├── 可靠性
│   ├── 成熟性
│   ├── 可用性
│   └── 容错性
├── 安全性
│   ├── 机密性
│   ├── 完整性
│   └── 不可抵赖性
├── 可维护性
│   ├── 模块化
│   ├── 可分析性
│   └── 可修改性
└── 可移植性
    ├── 适应性
    ├── 可安装性
    └── 可替换性

4. 软件工程原则

4.1 核心原则

原则说明
DRYDon’t Repeat Yourself,消除重复
KISSKeep It Simple, Stupid,保持简单
YAGNIYou Aren’t Gonna Need It,不做过度设计
关注点分离每个模块只关注一个职责
信息隐藏模块内部实现对外不可见
最少知识最小化模块间的依赖

4.2 工程化实践

实践说明
版本控制Git管理代码变更
持续集成自动化构建和测试
代码审查同行评审保证质量
自动化测试测试金字塔覆盖
文档驱动设计文档与代码同步