002-开发方法与开发模型

002-开发方法与开发模型

学习目标

通过本章学习,您将能够:

  • 掌握主要的软件开发方法和特点
  • 理解各种软件开发模型的适用场景
  • 分析不同开发模型的优缺点
  • 选择合适的开发方法和模型
  • 理解敏捷开发与传统开发的区别

2.1 软件开发方法概述

2.1.1 开发方法分类

软件开发方法是指导软件开发过程的系统化方法,主要分为以下几类:

mindmap
  root((软件开发方法))
    结构化方法
      结构化分析
      结构化设计
      结构化编程
    面向对象方法
      面向对象分析
      面向对象设计
      面向对象编程
    敏捷方法
      极限编程(XP)
      Scrum
      看板(Kanban)
    形式化方法
      形式化规约
      形式化验证
      模型检查

2.1.2 方法选择原则

选择开发方法时需要考虑以下因素:

因素结构化方法面向对象方法敏捷方法形式化方法
项目规模大中型中大型小中型关键系统
需求稳定性稳定相对稳定变化频繁非常稳定
团队经验一般较高较高专业
时间压力中等中等紧迫充裕
质量要求中高极高

2.2 结构化开发方法

2.2.1 结构化方法概述

结构化方法是一种传统的软件开发方法,强调自顶向下、逐步求精的分析和设计思想。

核心思想

  • 自顶向下,逐步分解
  • 模块化设计
  • 结构化编程
  • 严格的文档管理

2.2.2 结构化分析(SA)

主要工具

结构化分析
数据流图
数据字典
加工说明
实体关系图
顶层数据流图
分层数据流图
底层数据流图
数据流定义
数据存储定义
数据元素定义
结构化语言
判定表
判定树

分析步骤

  1. 建立系统模型:绘制数据流图
  2. 建立数据字典:定义数据元素
  3. 描述加工逻辑:编写加工说明
  4. 建立数据模型:绘制E-R图

2.2.3 结构化设计(SD)

设计原则

  • 模块独立性:高内聚、低耦合
  • 模块大小适中:便于理解和维护
  • 模块接口简单:减少模块间依赖

耦合类型(从弱到强):

耦合类型
数据耦合
标记耦合
控制耦合
外部耦合
公共耦合
内容耦合
最理想:只传递数据参数
传递数据结构
传递控制信息
共享外部环境
共享全局数据
最糟糕:直接访问内部

内聚类型(从弱到强):

内聚类型描述示例质量评价
偶然内聚模块内元素无关联杂项处理模块最差
逻辑内聚逻辑上相关的功能输入处理模块
时间内聚同时执行的功能初始化模块一般
过程内聚按执行顺序组合文件处理流程一般
通信内聚操作同一数据记录处理模块较好
顺序内聚输出是下一个输入数据转换链
功能内聚完成单一功能计算平方根最好

2.2.4 结构化编程

基本控制结构

结构化编程
顺序结构
选择结构
循环结构
语句1
语句2
语句3
if-then-else
switch-case
while循环
for循环
do-while循环

编程原则

  • 只使用三种基本控制结构
  • 避免使用goto语句
  • 一个模块只有一个入口和一个出口
  • 模块功能单一,逻辑清晰

2.3 面向对象开发方法

2.3.1 面向对象基本概念

核心概念

实例化
扩展
保护
实现
对象
+属性1
+属性2
+方法1()
+方法2()
+类属性
+类方法()
+实例化()
继承
+父类属性
+子类属性
+重写方法()
封装
-私有属性
+公有方法()
+访问控制()
多态
+虚函数()
+重载()
+动态绑定()

2.3.2 面向对象分析(OOA)

分析步骤

面向对象分析
识别对象和类
定义属性
定义方法
确定关系
建立模型
名词分析法
CRC卡片法
用例分析法
关联关系
聚合关系
组合关系
继承关系
依赖关系

2.3.3 面向对象设计(OOD)

设计原则

原则英文名称描述应用
单一职责SRP一个类只有一个变化原因类设计
开闭原则OCP对扩展开放,对修改关闭系统架构
里氏替换LSP子类可以替换父类继承设计
接口隔离ISP客户端不依赖不需要的接口接口设计
依赖倒置DIP依赖抽象而不是具体实现模块设计

2.3.4 设计模式

常用设计模式分类

mindmap
  root((设计模式))
    创建型模式
      单例模式
      工厂方法
      抽象工厂
      建造者模式
      原型模式
    结构型模式
      适配器模式
      装饰器模式
      外观模式
      组合模式
      代理模式
    行为型模式
      观察者模式
      策略模式
      命令模式
      状态模式
      模板方法

2.4 软件开发模型

2.4.1 瀑布模型

模型特点

  • 线性顺序开发
  • 阶段间有明确的里程碑
  • 每个阶段都有详细的文档
  • 前一阶段完成后才能进入下一阶段
需求分析
系统设计
详细设计
编码实现
单元测试
集成测试
系统测试
维护
需求规格说明书
系统设计说明书
详细设计说明书
源代码
单元测试报告
集成测试报告
系统测试报告

适用场景

  • 需求明确且稳定
  • 技术成熟,风险较低
  • 项目规模较大
  • 对文档要求严格

优缺点分析

优点缺点
结构清晰,易于管理缺乏灵活性
文档完整,便于维护风险发现较晚
质量控制严格用户参与度低
适合大型项目开发周期长

2.4.2 增量模型

模型特点

  • 将软件分解为多个增量
  • 每个增量都是一个可工作的软件
  • 逐步增加功能
  • 用户可以早期使用部分功能
0 1 2 3 4 5 6 7 8 9 10 11 需求分析 设计编码 需求分析 测试部署 设计编码 需求分析 测试部署 设计编码 测试部署 增量1 增量2 增量3 增量模型开发时间线

2.4.3 螺旋模型

模型特点

  • 结合瀑布模型和原型模型
  • 强调风险分析
  • 迭代开发
  • 适合大型复杂项目
计划
风险分析
工程实现
客户评估
识别风险
分析风险
解决风险
设计
编码
测试
演示
评审
反馈

四个象限活动

  1. 计划阶段:确定目标、约束和替代方案
  2. 风险分析:识别和解决风险
  3. 工程实现:开发和验证产品
  4. 客户评估:评价结果,规划下一轮

2.4.4 V模型

V模型强调测试与开发的对应关系:

需求分析
系统设计
详细设计
编码
单元测试
集成测试
系统测试
验收测试

2.4.5 原型模型

原型类型

原型类型目的特点适用场景
抛弃型原型需求澄清快速构建,用后丢弃需求不明确
演化型原型系统开发逐步完善,最终成为系统创新性项目
增量型原型分步实现分批交付,逐步完善大型系统

原型开发过程

确定基本需求
开发初始原型
使用原型
满足需求?
修改原型
完成开发

2.5 敏捷开发方法

2.5.1 敏捷宣言

四个价值观

  1. 个体和互动 高于 流程和工具
  2. 工作的软件 高于 详尽的文档
  3. 客户合作 高于 合同谈判
  4. 响应变化 高于 遵循计划

十二条原则

mindmap
  root((敏捷原则))
    客户价值
      尽早持续交付
      欢迎需求变化
      经常交付软件
      业务人员协作
    团队协作
      信任激励团队
      面对面沟通
      可持续开发
      团队自组织
    技术卓越
      技术卓越
      简洁设计
      持续关注
      定期反思改进

2.5.2 Scrum方法

Scrum角色

Scrum团队
Product Owner
Scrum Master
Development Team
定义产品愿景
管理产品待办列表
确定优先级
促进Scrum过程
移除障碍
保护团队
开发产品
自组织团队
跨功能协作

Scrum事件

事件时间盒目的参与者
Sprint1-4周开发可交付增量整个团队
Sprint计划会8小时规划Sprint工作整个团队
每日站会15分钟同步进展和障碍开发团队
Sprint评审4小时展示和收集反馈团队+利益相关者
Sprint回顾3小时改进过程Scrum团队

Scrum工件

Product Backlog
Sprint Backlog
Increment
用户故事
优先级排序
估算
Sprint目标
选定的PBI
实现计划
潜在可发布
完成定义
工作软件

2.5.3 极限编程(XP)

XP实践

mindmap
  root((XP实践))
    规划实践
      用户故事
      发布计划
      迭代计划
      小版本发布
    设计实践
      简单设计
      重构
      隐喻
      CRC卡片
    编码实践
      结对编程
      代码标准
      集体代码所有权
      持续集成
    测试实践
      测试驱动开发
      单元测试
      验收测试
      自动化测试

XP价值观

  • 沟通:团队成员之间的有效沟通
  • 简单:做最简单能工作的事情
  • 反馈:快速获得反馈
  • 勇气:敢于做正确的事情

2.5.4 看板(Kanban)

看板原则

  1. 可视化工作流
  2. 限制在制品数量
  3. 管理流动
  4. 明确流程策略
  5. 反馈循环
  6. 协作改进

看板示例

kanban
    待办 : 用户注册功能
    待办 : 密码重置功能
    
    进行中 : 登录功能开发
    进行中 : 数据库设计
    
    测试中 : 用户管理模块
    
    完成 : 项目初始化
    完成 : 环境搭建

2.6 开发模型比较与选择

2.6.1 模型比较

特征瀑布模型增量模型螺旋模型敏捷模型
适用项目规模大型中大型大型小中型
需求稳定性稳定相对稳定不稳定变化频繁
风险控制一般较好很好
用户参与度中等很高
交付速度较快中等
文档要求很高中等
团队技能要求一般较高

2.6.2 选择指导原则

项目特征分析

小型
中型
大型
稳定
不稳定
高风险
低风险
项目评估
项目规模
敏捷方法
需求稳定性
风险程度
增量模型
敏捷方法
螺旋模型
瀑布模型
Scrum/XP
增量交付
迭代开发
风险驱动
文档驱动

实践练习

练习1:方法选择

针对以下项目场景,选择合适的开发方法和模型:

  1. 银行核心业务系统升级
  2. 移动应用快速原型开发
  3. 航天控制系统开发
  4. 电商网站功能迭代

练习2:模型分析

比较瀑布模型和敏捷模型在以下方面的差异:

  1. 需求变更处理
  2. 风险管理策略
  3. 质量保证方法
  4. 团队协作方式

练习3:案例研究

选择一个实际的软件项目,分析:

  1. 项目采用的开发方法和模型
  2. 选择该方法的原因
  3. 实施过程中遇到的问题
  4. 改进建议

总结

本章详细介绍了软件开发方法和模型,主要内容包括:

  1. 开发方法:结构化、面向对象、敏捷、形式化方法的特点和应用
  2. 传统模型:瀑布、增量、螺旋、V模型的优缺点和适用场景
  3. 敏捷方法:Scrum、XP、Kanban的核心实践和价值观
  4. 选择原则:根据项目特征选择合适的方法和模型

⚠️ 考试重点:各种开发模型的特点、适用场景、优缺点比较是考试的重点内容,特别是瀑布模型、螺旋模型和敏捷方法。

下一步

掌握了开发方法和模型后,下一章将学习003-软件生命周期与过程模型,深入了解软件开发的生命周期管理。


更新记录

  • 2024-01-15:初始版本创建
  • 版本:v1.0.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值