002-开发方法与开发模型
学习目标
通过本章学习,您将能够:
- 掌握主要的软件开发方法和特点
- 理解各种软件开发模型的适用场景
- 分析不同开发模型的优缺点
- 选择合适的开发方法和模型
- 理解敏捷开发与传统开发的区别
2.1 软件开发方法概述
2.1.1 开发方法分类
软件开发方法是指导软件开发过程的系统化方法,主要分为以下几类:
mindmap
root((软件开发方法))
结构化方法
结构化分析
结构化设计
结构化编程
面向对象方法
面向对象分析
面向对象设计
面向对象编程
敏捷方法
极限编程(XP)
Scrum
看板(Kanban)
形式化方法
形式化规约
形式化验证
模型检查
2.1.2 方法选择原则
选择开发方法时需要考虑以下因素:
| 因素 | 结构化方法 | 面向对象方法 | 敏捷方法 | 形式化方法 |
|---|---|---|---|---|
| 项目规模 | 大中型 | 中大型 | 小中型 | 关键系统 |
| 需求稳定性 | 稳定 | 相对稳定 | 变化频繁 | 非常稳定 |
| 团队经验 | 一般 | 较高 | 较高 | 专业 |
| 时间压力 | 中等 | 中等 | 紧迫 | 充裕 |
| 质量要求 | 高 | 高 | 中高 | 极高 |
2.2 结构化开发方法
2.2.1 结构化方法概述
结构化方法是一种传统的软件开发方法,强调自顶向下、逐步求精的分析和设计思想。
核心思想:
- 自顶向下,逐步分解
- 模块化设计
- 结构化编程
- 严格的文档管理
2.2.2 结构化分析(SA)
主要工具:
分析步骤:
- 建立系统模型:绘制数据流图
- 建立数据字典:定义数据元素
- 描述加工逻辑:编写加工说明
- 建立数据模型:绘制E-R图
2.2.3 结构化设计(SD)
设计原则:
- 模块独立性:高内聚、低耦合
- 模块大小适中:便于理解和维护
- 模块接口简单:减少模块间依赖
耦合类型(从弱到强):
内聚类型(从弱到强):
| 内聚类型 | 描述 | 示例 | 质量评价 |
|---|---|---|---|
| 偶然内聚 | 模块内元素无关联 | 杂项处理模块 | 最差 |
| 逻辑内聚 | 逻辑上相关的功能 | 输入处理模块 | 差 |
| 时间内聚 | 同时执行的功能 | 初始化模块 | 一般 |
| 过程内聚 | 按执行顺序组合 | 文件处理流程 | 一般 |
| 通信内聚 | 操作同一数据 | 记录处理模块 | 较好 |
| 顺序内聚 | 输出是下一个输入 | 数据转换链 | 好 |
| 功能内聚 | 完成单一功能 | 计算平方根 | 最好 |
2.2.4 结构化编程
基本控制结构:
编程原则:
- 只使用三种基本控制结构
- 避免使用goto语句
- 一个模块只有一个入口和一个出口
- 模块功能单一,逻辑清晰
2.3 面向对象开发方法
2.3.1 面向对象基本概念
核心概念:
2.3.2 面向对象分析(OOA)
分析步骤:
2.3.3 面向对象设计(OOD)
设计原则:
| 原则 | 英文名称 | 描述 | 应用 |
|---|---|---|---|
| 单一职责 | SRP | 一个类只有一个变化原因 | 类设计 |
| 开闭原则 | OCP | 对扩展开放,对修改关闭 | 系统架构 |
| 里氏替换 | LSP | 子类可以替换父类 | 继承设计 |
| 接口隔离 | ISP | 客户端不依赖不需要的接口 | 接口设计 |
| 依赖倒置 | DIP | 依赖抽象而不是具体实现 | 模块设计 |
2.3.4 设计模式
常用设计模式分类:
mindmap
root((设计模式))
创建型模式
单例模式
工厂方法
抽象工厂
建造者模式
原型模式
结构型模式
适配器模式
装饰器模式
外观模式
组合模式
代理模式
行为型模式
观察者模式
策略模式
命令模式
状态模式
模板方法
2.4 软件开发模型
2.4.1 瀑布模型
模型特点:
- 线性顺序开发
- 阶段间有明确的里程碑
- 每个阶段都有详细的文档
- 前一阶段完成后才能进入下一阶段
适用场景:
- 需求明确且稳定
- 技术成熟,风险较低
- 项目规模较大
- 对文档要求严格
优缺点分析:
| 优点 | 缺点 |
|---|---|
| 结构清晰,易于管理 | 缺乏灵活性 |
| 文档完整,便于维护 | 风险发现较晚 |
| 质量控制严格 | 用户参与度低 |
| 适合大型项目 | 开发周期长 |
2.4.2 增量模型
模型特点:
- 将软件分解为多个增量
- 每个增量都是一个可工作的软件
- 逐步增加功能
- 用户可以早期使用部分功能
2.4.3 螺旋模型
模型特点:
- 结合瀑布模型和原型模型
- 强调风险分析
- 迭代开发
- 适合大型复杂项目
四个象限活动:
- 计划阶段:确定目标、约束和替代方案
- 风险分析:识别和解决风险
- 工程实现:开发和验证产品
- 客户评估:评价结果,规划下一轮
2.4.4 V模型
V模型强调测试与开发的对应关系:
2.4.5 原型模型
原型类型:
| 原型类型 | 目的 | 特点 | 适用场景 |
|---|---|---|---|
| 抛弃型原型 | 需求澄清 | 快速构建,用后丢弃 | 需求不明确 |
| 演化型原型 | 系统开发 | 逐步完善,最终成为系统 | 创新性项目 |
| 增量型原型 | 分步实现 | 分批交付,逐步完善 | 大型系统 |
原型开发过程:
2.5 敏捷开发方法
2.5.1 敏捷宣言
四个价值观:
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
十二条原则:
mindmap
root((敏捷原则))
客户价值
尽早持续交付
欢迎需求变化
经常交付软件
业务人员协作
团队协作
信任激励团队
面对面沟通
可持续开发
团队自组织
技术卓越
技术卓越
简洁设计
持续关注
定期反思改进
2.5.2 Scrum方法
Scrum角色:
Scrum事件:
| 事件 | 时间盒 | 目的 | 参与者 |
|---|---|---|---|
| Sprint | 1-4周 | 开发可交付增量 | 整个团队 |
| Sprint计划会 | 8小时 | 规划Sprint工作 | 整个团队 |
| 每日站会 | 15分钟 | 同步进展和障碍 | 开发团队 |
| Sprint评审 | 4小时 | 展示和收集反馈 | 团队+利益相关者 |
| Sprint回顾 | 3小时 | 改进过程 | Scrum团队 |
Scrum工件:
2.5.3 极限编程(XP)
XP实践:
mindmap
root((XP实践))
规划实践
用户故事
发布计划
迭代计划
小版本发布
设计实践
简单设计
重构
隐喻
CRC卡片
编码实践
结对编程
代码标准
集体代码所有权
持续集成
测试实践
测试驱动开发
单元测试
验收测试
自动化测试
XP价值观:
- 沟通:团队成员之间的有效沟通
- 简单:做最简单能工作的事情
- 反馈:快速获得反馈
- 勇气:敢于做正确的事情
2.5.4 看板(Kanban)
看板原则:
- 可视化工作流
- 限制在制品数量
- 管理流动
- 明确流程策略
- 反馈循环
- 协作改进
看板示例:
kanban
待办 : 用户注册功能
待办 : 密码重置功能
进行中 : 登录功能开发
进行中 : 数据库设计
测试中 : 用户管理模块
完成 : 项目初始化
完成 : 环境搭建
2.6 开发模型比较与选择
2.6.1 模型比较
| 特征 | 瀑布模型 | 增量模型 | 螺旋模型 | 敏捷模型 |
|---|---|---|---|---|
| 适用项目规模 | 大型 | 中大型 | 大型 | 小中型 |
| 需求稳定性 | 稳定 | 相对稳定 | 不稳定 | 变化频繁 |
| 风险控制 | 一般 | 较好 | 很好 | 好 |
| 用户参与度 | 低 | 中等 | 高 | 很高 |
| 交付速度 | 慢 | 较快 | 中等 | 快 |
| 文档要求 | 很高 | 高 | 中等 | 低 |
| 团队技能要求 | 一般 | 较高 | 高 | 高 |
2.6.2 选择指导原则
项目特征分析:
实践练习
练习1:方法选择
针对以下项目场景,选择合适的开发方法和模型:
- 银行核心业务系统升级
- 移动应用快速原型开发
- 航天控制系统开发
- 电商网站功能迭代
练习2:模型分析
比较瀑布模型和敏捷模型在以下方面的差异:
- 需求变更处理
- 风险管理策略
- 质量保证方法
- 团队协作方式
练习3:案例研究
选择一个实际的软件项目,分析:
- 项目采用的开发方法和模型
- 选择该方法的原因
- 实施过程中遇到的问题
- 改进建议
总结
本章详细介绍了软件开发方法和模型,主要内容包括:
- 开发方法:结构化、面向对象、敏捷、形式化方法的特点和应用
- 传统模型:瀑布、增量、螺旋、V模型的优缺点和适用场景
- 敏捷方法:Scrum、XP、Kanban的核心实践和价值观
- 选择原则:根据项目特征选择合适的方法和模型
⚠️ 考试重点:各种开发模型的特点、适用场景、优缺点比较是考试的重点内容,特别是瀑布模型、螺旋模型和敏捷方法。
下一步
掌握了开发方法和模型后,下一章将学习003-软件生命周期与过程模型,深入了解软件开发的生命周期管理。
更新记录:
- 2024-01-15:初始版本创建
- 版本:v1.0.0
1574

被折叠的 条评论
为什么被折叠?



