软件工程知识体系全面梳理
一、软件工程概述
1. 软件工程基本概念
-
定义:应用系统化、规范化、可量化的方法开发、运行和维护软件的学科
-
目标:提高软件质量、降低开发成本、控制开发周期
-
三要素:方法、工具、过程
2. 软件生命周期
-
可行性分析 → 需求分析 → 设计 → 编码 → 测试 → 维护
-
各阶段任务、交付物和评审要求
3. 软件工程基本原则
-
分阶段生命周期计划
-
阶段性评审验证
-
严格的产品控制
-
采用现代程序设计技术
-
结果应能清楚地审查
-
开发小组人员素质要求
-
承认不断改进软件工程的必要性
二、软件过程模型
1. 传统模型
-
瀑布模型:线性顺序、文档驱动
-
V模型:测试活动与开发阶段对应
-
原型模型:快速原型、演化原型
-
增量模型:分批次交付功能
2. 迭代模型
-
螺旋模型:风险驱动、迭代循环
-
RUP:初始、细化、构造、移交四个阶段
3. 敏捷模型
-
Scrum:Sprint迭代、产品待办列表
-
XP:结对编程、测试驱动开发
-
Kanban:可视化工作流、限制WIP
三、需求分析
1. 需求工程过程
-
需求获取 → 需求分析 → 需求规格说明 → 需求验证
2. 需求分类
-
功能需求:系统应提供的服务
-
非功能需求:性能、安全性等质量属性
-
领域需求:特定应用领域相关需求
3. 需求分析方法
-
结构化分析:数据流图(DFD)、ER图
-
面向对象分析:用例图、类图
-
形式化方法:Z语言、Petri网
4. 需求规格说明书(SRS)
-
IEEE标准830内容框架
-
需求可追溯性管理
四、系统设计
1. 设计过程
-
体系结构设计 → 模块设计 → 接口设计 → 数据设计
2. 设计原则
-
SOLID原则
-
高内聚低耦合
-
信息隐藏
-
模块化设计
3. 设计方法
-
结构化设计:结构图、模块说明书
-
面向对象设计:UML建模
-
设计模式:创建型、结构型、行为型
4. 架构风格
-
分层架构
-
MVC架构
-
微服务架构
-
事件驱动架构
五、系统测试
1. 测试级别
-
单元测试 → 集成测试 → 系统测试 → 验收测试
2. 测试类型
-
功能测试
-
性能测试(负载/压力/并发测试)
-
安全测试
-
兼容性测试
-
回归测试
3. 测试技术
-
黑盒测试:等价类、边界值、决策表
-
白盒测试:语句/分支/条件/路径覆盖
-
灰盒测试
4. 测试管理
-
测试用例设计
-
缺陷生命周期管理
-
测试覆盖率分析
六、运行和维护
1. 软件部署
-
部署计划制定
-
环境配置管理
-
数据迁移策略
2. 维护类型
-
改正性维护:修复缺陷
-
适应性维护:适应环境变化
-
完善性维护:功能增强
-
预防性维护:提高可维护性
3. 维护过程
-
变更控制流程
-
影响分析
-
配置管理
-
维护记录与度量
4. 软件退役
-
数据归档
-
系统替换计划
-
知识转移
七、软件项目管理
1. 项目规划
-
工作分解结构(WBS)
-
估算技术:功能点、COCOMO模型
-
进度计划:甘特图、PERT图
2. 风险管理
-
风险识别与分析
-
风险应对策略
-
风险监控
3. 质量管理
-
质量计划
-
质量保证活动
-
质量控制技术
4. 配置管理
-
版本控制
-
变更管理
-
构建管理
八、软件质量
1. 质量模型
-
ISO 9126质量特性
-
McCall质量模型
-
Dromey质量模型
2. 质量保证
-
评审与审计
-
过程改进
-
标准与规范
3. 质量度量
-
缺陷密度
-
故障率
-
可用性度量
九、软件度量
1. 产品度量
-
规模度量:代码行、功能点
-
复杂度度量:圈复杂度
-
可靠性度量:MTBF
2. 过程度量
-
生产率度量
-
进度偏差
-
成本绩效指数
3. 项目度量
-
团队效率
-
沟通效率
-
资源利用率
十、软件工具与开发环境
1. 开发工具
-
IDE工具:Eclipse、Visual Studio
-
建模工具:Enterprise Architect、Rational Rose
-
版本控制:Git、SVN
2. 测试工具
-
单元测试:JUnit、NUnit
-
自动化测试:Selenium、LoadRunner
-
缺陷跟踪:JIRA、Bugzilla
3. 集成开发环境
-
持续集成:Jenkins、Travis CI
-
容器化:Docker、Kubernetes
-
云开发环境
4. CASE工具
-
上流CASE:需求分析、设计工具
-
下流CASE:编码、测试工具
-
集成CASE:全生命周期支持
知识体系关联图
复制
软件工程概述 ├─ 软件过程模型 → 项目管理 ├─ 需求分析 → 系统设计 → 系统测试 → 运行维护 ├─ 软件质量 ↔ 软件度量 └─ 软件工具与环境(支持全生命周期)
这个知识体系涵盖了软件工程从理论到实践的各个方面,建议结合实际项目经验逐步深入理解每个知识点,并通过案例学习掌握其应用方法。