1. 软件工程导论概述
软件工程导论是计算机科学与技术专业的基础课程,它系统地介绍了软件工程的基本概念、原理和方法。作为软件开发的入门课程,它为学生构建了完整的知识框架,涵盖了从需求分析到软件维护的全生命周期。
这门课程的核心价值在于:
- 建立系统化的软件开发思维
- 掌握规范的工程化方法
- 理解软件质量保证的关键要素
- 培养团队协作与项目管理能力
2. 软件生命周期与开发模型
2.1 传统生命周期模型
瀑布模型是最经典的软件开发模型,它将软件开发过程划分为需求分析、设计、编码、测试和维护五个阶段。每个阶段都有明确的输入输出,强调文档驱动和阶段评审。但实际项目中,这种线性模型难以应对需求变更。
graph TD A[需求分析] --> B[系统设计] B --> C[详细设计] C --> D[编码实现] D --> E[测试验证] E --> F[运行维护]2.2 迭代与增量模型
螺旋模型结合了瀑布模型的系统性和原型法的灵活性,通过风险分析驱动迭代过程。每个迭代周期包含四个象限:
- 确定目标与约束
- 风险评估与对策
- 开发与验证
- 下一周期计划
实际经验:在金融系统开发中,我们采用螺旋模型处理监管合规需求的不确定性,每个迭代都包含合规性验证环节。
2.3 敏捷开发实践
Scrum是最流行的敏捷框架,其核心要素包括:
- 产品待办列表(Product Backlog)
- 冲刺计划会议(Sprint Planning)
- 每日站会(Daily Scrum)
- 冲刺评审(Sprint Review)
- 冲刺回顾(Sprint Retrospective)
关键指标:
- 速率(Velocity):团队每个冲刺完成的故事点数
- 燃尽图(Burn-down Chart):剩余工作量可视化
3. 需求工程核心方法
3.1 需求获取技术
用户访谈的STAR法则:
- Situation:业务场景
- Task:用户任务
- Action:当前操作
- Result:期望结果
用例建模要点:
- 参与者(Actor)识别
- 主成功场景(Main Success Scenario)
- 扩展场景(Extensions)
- 业务规则(Business Rules)
3.2 需求规格说明
优秀SRS文档的特征:
- 完整性(Complete)
- 一致性(Consistent)
- 可验证性(Verifiable)
- 可追踪性(Traceable)
常见需求陷阱:
- 镀金需求(Gold Plating)
- 模糊限定词(如"快速响应")
- 隐性假设(Unstated Assumptions)
4. 软件设计原则与模式
4.1 SOLID原则
| 原则 | 定义 | 示例 |
|---|---|---|
| 单一职责 | 一个类只做一件事 | 用户管理 vs 权限管理分离 |
| 开闭原则 | 对扩展开放,修改关闭 | 通过策略模式实现支付方式扩展 |
| 里氏替换 | 子类不破坏父类行为 | 正方形继承长方形问题 |
| 接口隔离 | 客户端不应依赖不需要的接口 | 细粒度打印机接口 |
| 依赖倒置 | 依赖抽象而非实现 | 通过DI容器注入服务 |
4.2 架构风格对比
分层架构:
- 表现层
- 业务逻辑层
- 数据访问层
- 适合业务规则复杂的系统
微服务架构:
- 服务自治
- 独立部署
- 轻量级通信
- 适合高并发分布式场景
5. 软件测试策略
5.1 测试金字塔
UI测试(10%) / \ API测试(20%) E2E测试 / \ 单元测试(70%) 集成测试5.2 测试用例设计
边界值分析法:
- 最小值-1
- 最小值
- 正常值
- 最大值
- 最大值+1
等价类划分示例:
- 年龄输入框:
- 有效类:0-150
- 无效类:<0, >150, 非数字
6. 软件维护与演化
技术债务分类:
- 代码债务:重复代码、过长方法
- 设计债务:紧耦合、违反SOLID
- 测试债务:低覆盖率
- 文档债务:过时文档
重构策略:
- 建立安全网(测试覆盖率>80%)
- 小步修改(每次提交可验证)
- 持续集成(每日主干合并)
7. 配置管理实践
Git分支模型:
main └── release/* └── feature/* └── bugfix/*语义化版本规范:
- MAJOR.