graph TD
A[软件危机] --> B[成本超支50%+]
A --> C[进度失控]
A --> D[质量缺陷]
A --> E[维护困难]
B --> B1[预算超支]
C --> C1[周期延误]
D --> D1[用户不满]
E --> E1[修改代价高]
核心原则:
实施效果:
| 指标 | 改进幅度 | 说明 |
|---|---|---|
| 缺陷率降低 | 60-80% | 千行代码缺陷数下降 |
| 生产率提升 | 30-50% | 人均代码产出量提高 |
| 维护成本下降 | 40-70% | 后期优化成本减少 |
| 特性 | 瀑布模型 | 原型模型 | 螺旋模型 | 敏捷开发 |
|---|---|---|---|---|
| 需求明确度 | ★★★★★ | ★★☆☆☆ | ★★★☆☆ | ★★☆☆☆ |
| 风险控制 | ☆☆☆☆☆ | ★★★☆☆ | ★★★★★ | ★★★★☆ |
| 文档要求 | 非常完整 | 轻量级 | 完整 | 极简 |
| 适用规模 | 中小型 | 小型 | 大型复杂 | 任意 |
flowchart TD
Start{需求明确?}
Start -->|是| A{技术风险高?}
Start -->|否| B[原型模型]
A -->|是| C[螺旋模型]
A -->|否| D{团队规模>20?}
D -->|是| E[增量模型]
D -->|否| F[瀑布模型]
journey
title 需求分析四阶段
section 获取
访谈: 5: 用户
观察: 4: 场景
section 分析
建模: 8: 分析师
验证: 6: 测试组
section 定义
文档: 9: 技术写作
基线: 7: 配置库
section 验证
演示: 6: 用户
签字: 5: 管理层
pie
title 质量权重
"耦合度" : 35
"内聚性" : 30
"扇入数" : 15
"扇出数" : 20
| 问题特征 | 推荐模式 | 适用场景 |
|---|---|---|
| 需求频繁变更 | 策略模式 | 算法需要灵活切换 |
| 复杂对象创建 | 建造者模式 | 对象构造过程复杂 |
| 接口不兼容 | 适配器模式 | 整合遗留系统 |
| 覆盖级别 | 测试强度 | 用例数 | 检测能力 |
|---|---|---|---|
| 语句覆盖 | 20% | 1-2 | 基本路径 |
| 条件覆盖 | 70% | 6-10 | 边界缺陷 |
timeline
title CMMI升级路径
2024 Q1 : 初始级
2024 Q3 : 已管理级
2025 Q1 : 已定义级
2025 Q4 : 量化管理
2026 Q2 : 优化级
| 过程域 | L2要求 | L3要求 | L4要求 |
|---|---|---|---|
| 需求管理 | 建立跟踪矩阵 | 变更影响分析 | 稳定性度量 |
| 质量保证 | 执行过程审计 | 缺陷根因分析 | 质量趋势统计 |
| 概念对 | 区分要点 | 记忆口诀 |
|---|---|---|
| α测试 vs β测试 | 开发场所 vs 用户环境 | "α在厂,β在家" |
| 纠正性 vs 预防性维护 | 修复缺陷 vs 预防优化 | "治已病 vs 防未病" |
| 类型 | 特征 | 示例 |
|---|---|---|
| 无直接耦合 | 模块间无信息传递 | 不同部门员工 |
| 数据耦合 | 传递简单数据值 | 水电费计算模块 |
| 标记耦合 | 传递数据结构 | 住户信息处理 |
| 控制耦合 | 传递控制变量 | 选择计算平均/最高分 |
| 外部耦合 | 通过外部环境联结 | 设备驱动程序 |
| 公共耦合 | 共享公共数据环境 | 多线程访问全局变量 |
| 内容耦合 | 直接访问内部数据 | 直接操作类成员变量 |
| 类型 | 特征 | 示例 |
|---|---|---|
| 偶然内聚 | 元素无逻辑关联 | 三条无关语句组合 |
| 逻辑内聚 | 相似功能组合 | 多种数据类型加法 |
| 时间内聚 | 需同时执行的动作 | 原子性操作组合 |
| 过程内聚 | 按指定流程执行 | 信息录入流程 |
| 通信内聚 | 操作相同数据结构 | 员工年龄计算 |
| 顺序内聚 | 前序输出作为后续输入 | 数据处理流水线 |
| 功能内聚 | 所有元素完成单一功能 | 完整排序算法 |
○→〓□| 类型 | 特征 | 结构特点 |
|---|---|---|
| 变换型 | 输入→处理→输出 | 线性处理结构 |
| 事务型 | 中心调度多路径 | 分支选择结构 |
类:封装属性和方法的模板
继承:父子类关系
java class Animal {} class Dog extends Animal {}
| 原则 | 定义 | 示例 |
|---|---|---|
| 单一职责 | 一个类只负责一件事 | 用户管理 vs 订单管理分离 |
| 开闭原则 | 对扩展开放,对修改关闭 | 通过继承扩展功能 |
| 里氏替换 | 子类可替换父类 | 正方形继承矩形需保证行为一致 |
| 依赖倒置 | 依赖抽象而非实现 | 数据库操作依赖接口 |
| 接口隔离 | 多个专用接口优于单一总接口 | 打印机功能拆分 |
| 迪米特法则 | 最少知识原则 | 通过中介类交互 |
| 关系 | 符号 | 示例 |
|---|---|---|
| 依赖 | ┄┄> | 临时使用关系 |
| 关联 | ─── | 长期持有引用 |
| 泛化 | ───▷ | 继承关系 |
| 实现 | ┄┄▷ | 接口实现 |
| 图类型 | 视角 | 典型元素 |
|---|---|---|
| 类图 | 静态结构 | 类、接口、关系 |
| 用例图 | 用户视角 | 参与者、用例、关系 |
| 序列图 | 时序交互 | 生命线、消息 |
| 状态图 | 对象生命周期 | 状态、转移 |
| 活动图 | 业务流程 | 活动、分支 |
java interface Product {} class ConcreteProduct implements Product {} abstract class Creator { abstract Product factoryMethod(); }
抽象工厂
创建产品族(如GUI组件套件)
单例模式
java class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
适配器模式
转换接口(如SD卡读卡器)
装饰器模式
java interface Component { void operation(); } class Decorator implements Component { private Component component; public Decorator(Component c) { this.component = c; } public void operation() { component.operation(); } }
java interface Observer { void update(); } class Subject { private List<Observer> observers = new ArrayList<>(); public void attach(Observer o) { observers.add(o); } public void notifyAll() { for(Observer o : observers) o.update(); } }
策略模式
封装算法族(如支付方式)
模板方法
定义算法骨架
java abstract class AbstractClass { final void templateMethod() { primitiveOperation1(); primitiveOperation2(); } abstract void primitiveOperation1(); abstract void primitiveOperation2(); }
创建型:单抽元件(建)厂
(单例、抽象工厂、原型、建造者、工厂方法)
结构型:外侨(桥)组员(元)戴(代)配饰
(外观、桥接、组合、享元、代理、适配、装饰)
行为型:观摩(模)对(迭)策,责令解放(访),戒(介)忘台(态)
(观察、模板、迭代、策略、责任链、命令、解释器、访问者、中介者、备忘录、状态)
本文作者:枣子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!