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 许可协议。转载请注明出处!