⚙️ 软件工程

从开发模型到项目管理的完整方法论

软件开发模型

经典软件开发模型

📊

瀑布模型

线性顺序开发

🔄

螺旋模型

风险驱动开发

🔁

迭代模型

增量式开发

🚀

敏捷模型

快速响应变化

开发模型对比分析

瀑布模型 (Waterfall Model)

特点

  • • 线性顺序执行各个阶段
  • • 每个阶段有明确的交付物
  • • 前一阶段完成才能进入下一阶段
  • • 文档驱动的开发过程

适用场景

  • • 需求明确且稳定的项目
  • • 技术成熟的项目
  • • 对质量要求很高的项目

缺点

  • • 难以适应需求变化
  • • 风险发现较晚
  • • 客户反馈周期长

螺旋模型 (Spiral Model)

四个象限

  • • 制定计划:确定目标和约束
  • • 风险分析:识别和解决风险
  • • 实施工程:开发和测试
  • • 客户评估:评价结果

优点

  • • 强调风险分析
  • • 适合大型复杂项目
  • • 支持需求变化

缺点

  • • 对风险分析要求高
  • • 过程复杂
  • • 成本较高

敏捷开发 (Agile Development)

核心价值观

  • • 个体和互动 > 流程和工具
  • • 工作的软件 > 详尽的文档
  • • 客户合作 > 合同谈判
  • • 响应变化 > 遵循计划

常见方法

  • • Scrum:迭代式增量开发
  • • XP:极限编程
  • • Kanban:看板方法
  • • Lean:精益开发

DevOps

核心理念

开发(Dev)和运维(Ops)的紧密协作

  • • 持续集成(CI)
  • • 持续交付(CD)
  • • 基础设施即代码
  • • 监控和日志

工具链

  • • Git、Jenkins、Docker
  • • Kubernetes、Ansible
  • • Prometheus、ELK Stack

软件测试

按测试阶段分类

单元测试

测试最小可测试单元

集成测试

测试模块间的接口

系统测试

测试完整系统功能

验收测试

用户验收系统

按测试方法分类

黑盒测试

不考虑内部结构

  • • 等价类划分
  • • 边界值分析
  • • 决策表测试

白盒测试

基于代码内部结构

  • • 语句覆盖
  • • 分支覆盖
  • • 路径覆盖

灰盒测试

结合黑盒和白盒

按测试目的分类

功能测试

验证功能需求

性能测试

测试系统性能

安全测试

验证安全机制

兼容性测试

测试兼容性

可用性测试

测试用户体验

测试覆盖率分析

测试用例设计实例

等价类划分法实例

需求

用户年龄输入:18-65岁为有效,其他为无效

等价类划分
有效等价类: 18 ≤ 年龄 ≤ 65
无效等价类1: 年龄 < 18
无效等价类2: 年龄 > 65
测试用例
TC1: 输入30 (有效)
TC2: 输入10 (无效)
TC3: 输入70 (无效)

边界值分析法实例

需求

密码长度:6-20位字符

边界值识别
最小值:6
最大值:20
最小值-1:5
最小值+1:7
最大值-1:19
最大值+1:21
测试用例
TC1: 5位密码 (无效)
TC2: 6位密码 (有效)
TC3: 7位密码 (有效)
TC4: 19位密码 (有效)
TC5: 20位密码 (有效)
TC6: 21位密码 (无效)

软件项目管理

PMBOK十大知识域

📋

整合管理

项目统一协调

🎯

范围管理

确定项目边界

进度管理

时间计划控制

💰

成本管理

预算成本控制

质量管理

质量保证控制

👥

资源管理

人力资源管理

💬

沟通管理

信息传递协调

⚠️

风险管理

风险识别应对

🤝

采购管理

外部资源获取

🎪

相关方管理

利益相关者管理

五大过程组

启动过程组

定义和授权项目或项目阶段

  • • 制定项目章程
  • • 识别相关方

规划过程组

制定项目管理计划

  • • 制定项目管理计划
  • • 收集需求、定义范围
  • • 制定进度计划、预算

执行过程组

执行项目管理计划中确定的工作

  • • 指导和管理项目工作
  • • 管理项目团队

监控过程组

跟踪、审查和调节项目进展

  • • 监控项目工作
  • • 实施整体变更控制

收尾过程组

正式完成或关闭项目

  • • 结束项目或阶段
  • • 经验教训总结

进度管理工具

甘特图 (Gantt Chart)

以图形方式显示项目进度

  • • 显示任务时间线
  • • 展示任务依赖关系
  • • 跟踪项目进度

关键路径法 (CPM)

识别项目关键路径

  • • 计算最早开始时间
  • • 计算最晚完成时间
  • • 确定关键活动

PERT技术

项目评审技术

  • • 三点估算法
  • • 处理不确定性
  • • 概率分析

风险管理过程

🔍

风险识别

识别可能影响项目的风险

📊

风险分析

评估风险概率和影响

🎯

风险应对

制定风险应对策略

👀

风险监控

跟踪风险和应对措施

项目进度管理实例

配置管理

配置管理活动

配置标识

识别和标记配置项

配置控制

控制配置项的变更

配置状态报告

报告配置项状态

配置审计

验证配置完整性

版本控制系统

集中式版本控制

SVN、CVS等

  • • 中央服务器存储
  • • 客户端检出工作副本
  • • 需要网络连接

分布式版本控制

Git、Mercurial等

  • • 每个客户端都是完整仓库
  • • 支持离线工作
  • • 更好的分支合并