CSDN专栏:
第5讲:嵌入式场景二范式决策树:什么情况快写、什么情况严写
开篇:为什么需要决策树?
在实际开发中,很多工程师会困惑:
- 这个项目应该用Vibe还是Spec?
- 这个驱动应该快写还是严写?
- 这个功能应该追求速度还是质量?
错误的做法:
- ❌ 全部用Vibe:代码质量差,无法量产
- ❌ 全部用Spec:开发速度慢,效率低
- ❌ 随意混用:代码风格混乱,难以维护
正确的做法:
- ✅ 根据场景选择范式
- ✅ 使用决策树指导决策
- ✅ Vibe和Spec有机结合
一、二范式决策树
1.1 主决策树
#mermaid-svg-AXyJd6zxiBXmyOd9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AXyJd6zxiBXmyOd9 .error-icon{fill:#552222;}#mermaid-svg-AXyJd6zxiBXmyOd9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AXyJd6zxiBXmyOd9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .marker.cross{stroke:#333333;}#mermaid-svg-AXyJd6zxiBXmyOd9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AXyJd6zxiBXmyOd9 p{margin:0;}#mermaid-svg-AXyJd6zxiBXmyOd9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .cluster-label text{fill:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .cluster-label span{color:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .cluster-label span p{background-color:transparent;}#mermaid-svg-AXyJd6zxiBXmyOd9 .label text,#mermaid-svg-AXyJd6zxiBXmyOd9 span{fill:#333;color:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .node rect,#mermaid-svg-AXyJd6zxiBXmyOd9 .node circle,#mermaid-svg-AXyJd6zxiBXmyOd9 .node ellipse,#mermaid-svg-AXyJd6zxiBXmyOd9 .node polygon,#mermaid-svg-AXyJd6zxiBXmyOd9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .rough-node .label text,#mermaid-svg-AXyJd6zxiBXmyOd9 .node .label text,#mermaid-svg-AXyJd6zxiBXmyOd9 .image-shape .label,#mermaid-svg-AXyJd6zxiBXmyOd9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-AXyJd6zxiBXmyOd9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .rough-node .label,#mermaid-svg-AXyJd6zxiBXmyOd9 .node .label,#mermaid-svg-AXyJd6zxiBXmyOd9 .image-shape .label,#mermaid-svg-AXyJd6zxiBXmyOd9 .icon-shape .label{text-align:center;}#mermaid-svg-AXyJd6zxiBXmyOd9 .node.clickable{cursor:pointer;}#mermaid-svg-AXyJd6zxiBXmyOd9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .arrowheadPath{fill:#333333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AXyJd6zxiBXmyOd9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AXyJd6zxiBXmyOd9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AXyJd6zxiBXmyOd9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-AXyJd6zxiBXmyOd9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .cluster text{fill:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 .cluster span{color:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AXyJd6zxiBXmyOd9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AXyJd6zxiBXmyOd9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-AXyJd6zxiBXmyOd9 .icon-shape,#mermaid-svg-AXyJd6zxiBXmyOd9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AXyJd6zxiBXmyOd9 .icon-shape p,#mermaid-svg-AXyJd6zxiBXmyOd9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-AXyJd6zxiBXmyOd9 .icon-shape .label rect,#mermaid-svg-AXyJd6zxiBXmyOd9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AXyJd6zxiBXmyOd9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-AXyJd6zxiBXmyOd9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-AXyJd6zxiBXmyOd9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
是
否
是
否
是
否
开始
是否需要量产?
使用Vibe范式
是否安全关键?
使用Spec范式
SIL等级要求
是否长期维护?
使用Spec范式
开发时间是否紧张?
使用Vibe范式
快速交付
使用Spec范式
提升质量
快速验证
Demo原型
快速交付
后续优化
严格规范
安全认证
可维护
团队协作
高质量
易维护
1.2 决策树详解
第一层:是否需要量产?
判断标准:
- 是否需要批量生产?
- 是否需要长期使用?
- 是否需要客户交付?
选择Vibe的情况:
- 实验室原型
- 概念验证
- 学习实验
- 临时测试
选择Spec的情况:
- 量产产品
- 客户项目
- 长期使用
- 商业交付
第二层:是否安全关键?
判断标准:
- 失效是否危及人身安全?
- 失效是否造成重大损失?
- 是否有SIL等级要求?
- 是否需要安全认证?
选择Spec的情况:
- 轨交设备(SIL2/SIL3/SIL4)
- 工控设备(SIL1/SIL2)
- 医疗设备(IEC 62304)
- 汽车电子(ISO 26262)
第三层:是否长期维护?
判断标准:
- 是否需要长期维护?
- 是否有团队协作?
- 是否需要版本管理?
- 是否需要文档交付?
选择Spec的情况:
- 长期维护项目
- 团队协作项目
- 需要交接的项目
- 需要文档的项目
第四层:开发时间是否紧张?
判断标准:
- 是否有紧急截止日期?
- 是否可以先交付后优化?
- 是否可以接受后续重构?
选择Vibe的情况:
- 时间非常紧张
- 可以后续优化
- 快速验证优先
选择Spec的情况:
- 时间充裕
- 一次性做对
- 质量优先
二、典型场景决策
2.1 按项目类型决策
| 项目类型 | 推荐范式 | 原因 | 注意事项 |
|---|---|---|---|
| 实验室原型 | Vibe | 快速验证,不需要量产 | 记录参数,为后续做准备 |
| 概念验证 | Vibe | 验证可行性,可能失败 | 失败成本低 |
| 毕设项目 | Vibe+Spec | Demo用Vibe,论文用Spec | 提升工整度和分数 |
| 竞赛项目 | Vibe | 时间紧,演示为主 | 功能优先,质量次要 |
| 量产产品 | Spec | 需要稳定可靠 | 完整错误处理 |
| 工控设备 | Spec | 安全关键 | SIL等级要求 |
| 轨交设备 | Spec | 安全关键 | SIL2/SIL3/SIL4 |
| 医疗设备 | Spec | 安全关键 | IEC 62304 |
| 汽车电子 | Spec | 安全关键 | ISO 26262 |
| 物联网设备 | Spec | 需要稳定可靠 | 远程升级考虑 |
| 外包项目 | Spec | 需要交付文档 | 可维护性重要 |
2.2 按开发阶段决策
| 开发阶段 | 推荐范式 | 原因 | 产出 |
|---|---|---|---|
| 需求验证 | Vibe | 快速验证需求可行性 | 可行性报告 |
| 硬件验证 | Vibe | 快速验证硬件设计 | 硬件验证报告 |
| 驱动开发 | Vibe→Spec | 先验证后量产 | 量产级驱动 |
| 应用开发 | Spec | 业务逻辑需要稳定 | 可维护代码 |
| 测试阶段 | Vibe | 快速定位问题 | 问题定位报告 |
| 量产交付 | Spec | 需要完整文档 | 交付包 |
| 维护阶段 | Spec | 需要可维护 | 维护文档 |
2.3 按代码类型决策
| 代码类型 | 推荐范式 | 原因 | 示例 |
|---|---|---|---|
| 外设驱动 | Vibe→Spec | 先验证后量产 | I2C/SPI/UART驱动 |
| 通信协议 | Spec | 需要稳定可靠 | Modbus/CAN协议 |
| RTOS任务 | Spec | 需要避免冲突 | 多任务调度 |
| 中断服务 | Spec | 需要严格规范 | 外部中断处理 |
| 算法实现 | Spec | 需要正确性 | 滤波算法 |
| 测试代码 | Vibe | 临时使用 | 单元测试代码 |
| 调试代码 | Vibe | 临时使用 | 调试打印代码 |
三、混合使用策略
3.1 Vibe→Spec转换策略
最优策略:Vibe探路 + Spec定型
开发流程:
#mermaid-svg-cSrnm3ckhPLia7ZR{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cSrnm3ckhPLia7ZR .error-icon{fill:#552222;}#mermaid-svg-cSrnm3ckhPLia7ZR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cSrnm3ckhPLia7ZR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cSrnm3ckhPLia7ZR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cSrnm3ckhPLia7ZR .marker.cross{stroke:#333333;}#mermaid-svg-cSrnm3ckhPLia7ZR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cSrnm3ckhPLia7ZR p{margin:0;}#mermaid-svg-cSrnm3ckhPLia7ZR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR .cluster-label text{fill:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR .cluster-label span{color:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR .cluster-label span p{background-color:transparent;}#mermaid-svg-cSrnm3ckhPLia7ZR .label text,#mermaid-svg-cSrnm3ckhPLia7ZR span{fill:#333;color:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR .node rect,#mermaid-svg-cSrnm3ckhPLia7ZR .node circle,#mermaid-svg-cSrnm3ckhPLia7ZR .node ellipse,#mermaid-svg-cSrnm3ckhPLia7ZR .node polygon,#mermaid-svg-cSrnm3ckhPLia7ZR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cSrnm3ckhPLia7ZR .rough-node .label text,#mermaid-svg-cSrnm3ckhPLia7ZR .node .label text,#mermaid-svg-cSrnm3ckhPLia7ZR .image-shape .label,#mermaid-svg-cSrnm3ckhPLia7ZR .icon-shape .label{text-anchor:middle;}#mermaid-svg-cSrnm3ckhPLia7ZR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cSrnm3ckhPLia7ZR .rough-node .label,#mermaid-svg-cSrnm3ckhPLia7ZR .node .label,#mermaid-svg-cSrnm3ckhPLia7ZR .image-shape .label,#mermaid-svg-cSrnm3ckhPLia7ZR .icon-shape .label{text-align:center;}#mermaid-svg-cSrnm3ckhPLia7ZR .node.clickable{cursor:pointer;}#mermaid-svg-cSrnm3ckhPLia7ZR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cSrnm3ckhPLia7ZR .arrowheadPath{fill:#333333;}#mermaid-svg-cSrnm3ckhPLia7ZR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cSrnm3ckhPLia7ZR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cSrnm3ckhPLia7ZR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cSrnm3ckhPLia7ZR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cSrnm3ckhPLia7ZR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cSrnm3ckhPLia7ZR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cSrnm3ckhPLia7ZR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cSrnm3ckhPLia7ZR .cluster text{fill:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR .cluster span{color:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cSrnm3ckhPLia7ZR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cSrnm3ckhPLia7ZR rect.text{fill:none;stroke-width:0;}#mermaid-svg-cSrnm3ckhPLia7ZR .icon-shape,#mermaid-svg-cSrnm3ckhPLia7ZR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cSrnm3ckhPLia7ZR .icon-shape p,#mermaid-svg-cSrnm3ckhPLia7ZR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cSrnm3ckhPLia7ZR .icon-shape .label rect,#mermaid-svg-cSrnm3ckhPLia7ZR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cSrnm3ckhPLia7ZR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cSrnm3ckhPLia7ZR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cSrnm3ckhPLia7ZR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 阶段4内容
单元测试
集成测试
边界测试
异常测试
阶段3内容
按规格生成代码
完整错误处理
完整容错机制
完整测试用例
阶段2内容
总结硬件参数
总结时序参数
总结容错策略
编写Spec文档
阶段1内容
快速写驱动
快速测试时序
快速验证功能
记录成功参数
阶段1:Vibe快速验证
1-2天
阶段2:提炼规格
0.5天
阶段3:Spec量产开发
2-3天
阶段4:测试验证
1天
时间对比:
| 开发方式 | 步骤 | 时间 |
|---|---|---|
| 传统开发 | 看数据手册 + 写代码 + 调试 + 错误处理 + 测试 | 10天 |
| Vibe→Spec | Vibe验证 + 提炼规格 + Spec开发 + 测试 | 4.5天 |
效率提升:2.2倍
3.2 分模块混合策略
策略:不同模块使用不同范式
项目结构:
项目结构:
├── drivers/ # 驱动层
│ ├── i2c/ # I2C驱动(Spec)
│ ├── spi/ # SPI驱动(Spec)
│ └── sensor/ # 传感器驱动(Vibe→Spec)
├── middleware/ # 中间层
│ ├── protocol/ # 通信协议(Spec)
│ └── algorithm/ # 算法(Spec)
├── application/ # 应用层
│ ├── task/ # RTOS任务(Spec)
│ └── logic/ # 业务逻辑(Spec)
└── test/ # 测试代码
└── debug/ # 调试代码(Vibe)
决策原则:
- 底层驱动:Spec(稳定可靠)
- 中间层:Spec(可维护)
- 应用层:Spec(业务关键)
- 测试代码:Vibe(临时使用)
3.3 分阶段混合策略
策略:不同阶段使用不同范式
阶段1:原型开发(Vibe)
- 目标:快速验证可行性
- 范式:Vibe
- 产出:可运行的Demo
阶段2:功能完善(Vibe→Spec)
- 目标:完善功能,提升质量
- 范式:逐步转换为Spec
- 产出:功能完整的代码
阶段3:量产准备(Spec)
- 目标:准备量产,完善文档
- 范式:Spec
- 产出:可量产的代码
阶段4:维护迭代(Spec)
- 目标:长期维护,持续改进
- 范式:Spec
- 产出:可维护的代码
四、决策树实战案例
案例一:毕设项目
项目背景:
- 项目:智能温控系统
- 要求:演示功能 + 撰写论文
- 时间:3个月
- 团队:个人项目
决策分析:
Q1:是否需要量产?
- 答:否(毕设演示为主)
- 推导:倾向Vibe
Q2:是否需要长期维护?
- 答:否(毕设结束后不需要)
- 推导:倾向Vibe
Q3:是否有论文要求?
- 答:是(需要撰写论文)
- 推导:倾向Spec(提升工整度)
最终决策:Vibe+Spec混合
实施方案:
阶段1(1个月):Vibe快速实现
- 快速搭建硬件平台
- 快速实现基本功能
- 快速验证可行性
- 产出:可运行的Demo
阶段2(1个月):Spec提升质量
- 提炼规格文档
- 重写关键代码
- 完善错误处理
- 产出:高质量代码
阶段3(1个月):文档撰写
- 撰写论文
- 整理代码注释
- 准备答辩材料
- 产出:完整毕设材料
时间分配:
- Vibe开发:30%
- Spec优化:40%
- 文档撰写:30%
案例二:工控设备
项目背景:
- 项目:工业温度控制器
- 要求:量产1000台
- 环境:工业现场,电磁干扰大
- 认证:CE认证
决策分析:
Q1:是否需要量产?
- 答:是(量产1000台)
- 推导:倾向Spec
Q2:是否安全关键?
- 答:是(工业现场,失效危险)
- 推导:倾向Spec(SIL1/SIL2)
Q3:是否需要长期维护?
- 答:是(工业设备长期使用)
- 推导:倾向Spec
最终决策:全Spec
实施方案:
阶段1:需求分析(1周)
- 详细需求文档
- 安全需求分析
- 性能需求分析
阶段2:规格定义(2周)
- 硬件层规格
- 数据层规格
- 函数层规格
- 容错层规格
阶段3:代码实现(4周)
- 按规格生成代码
- 代码审查
- 单元测试
阶段4:集成测试(2周)
- 功能测试
- 性能测试
- 安全测试
- EMC测试
阶段5:认证准备(2周)
- 准备认证材料
- 提交CE认证
- 整改问题
范式使用:100% Spec
案例三:外包项目
项目背景:
- 项目:物联网网关
- 要求:交付源码 + 文档
- 时间:2个月
- 团队:3人协作
决策分析:
Q1:是否需要量产?
- 答:是(客户会量产)
- 推导:倾向Spec
Q2:是否需要长期维护?
- 答:是(客户长期使用)
- 推导:倾向Spec
Q3:是否有团队协作?
- 答:是(3人协作)
- 推导:倾向Spec(统一规范)
最终决策:Vibe验证 + Spec交付
实施方案:
阶段1(2周):Vibe快速验证
- 验证硬件设计
- 验证关键技术
- 风险评估
- 产出:可行性报告
阶段2(1周):Spec规格定义
- 统一规格模板
- 团队评审规格
- 确定接口规范
- 产出:规格文档
阶段3(4周):Spec代码开发
- 按规格生成代码
- 团队代码审查
- 持续集成测试
- 产出:可交付代码
阶段4(1周):文档整理
- 技术文档
- 使用手册
- 维护手册
- 产出:完整交付包
范式使用:
- 验证阶段:Vibe(10%)
- 开发阶段:Spec(90%)
五、决策树使用技巧
5.1 快速决策技巧
三问法:
第1问:要量产吗?
- 是 → Spec
- 否 → 继续问
第2问:要长期维护吗?
- 是 → Spec
- 否 → 继续问
第3问:时间紧吗?
- 是 → Vibe
- 否 → Spec
场景速查表:
| 场景 | 推荐范式 |
|---|---|
| 量产 + 安全关键 | Spec(严格) |
| 量产 + 长期维护 | Spec(规范) |
| 量产 + 时间紧张 | Vibe→Spec(混合) |
| 非量产 + 实验 | Vibe(快速) |
| 非量产 + 毕设 | Vibe+Spec(平衡) |
5.2 避免常见错误
错误1:全部用Vibe
后果:
- 代码质量差
- 无法量产
- 难以维护
- 团队混乱
正确做法:
- 至少核心模块用Spec
- 关键功能用Spec
- 外部接口用Spec
错误2:全部用Spec
后果:
- 开发速度慢
- 效率低下
- 过度设计
- 成本高
正确做法:
- 验证阶段用Vibe
- 测试代码用Vibe
- 临时功能用Vibe
错误3:随意混用
后果:
- 代码风格混乱
- 难以维护
- 团队困惑
- 质量不稳定
正确做法:
- 明确使用规则
- 按模块/阶段划分
- 团队统一认识
5.3 团队决策规范
团队决策流程:
-
项目启动会
- 明确项目类型
- 确定范式策略
- 制定开发规范
-
模块分配
- 按模块确定范式
- 明确交付标准
- 确定审查标准
-
开发过程
- 按范式编写代码
- 代码审查
- 持续改进
-
项目总结
- 总结范式使用经验
- 优化决策树
- 更新团队规范
六、决策树工具
6.1 决策检查清单
markdown
## 范式决策检查清单
### 项目信息
- 项目名称:
- 项目类型:[ ]量产 [ ]原型 [ ]实验 [ ]毕设 [ ]外包
- 团队规模:[ ]个人 [ ]小团队 [ ]大团队
- 开发周期:
### 决策问题
1. 是否需要量产?
[ ] 是 → 倾向Spec
[ ] 否 → 倾向Vibe
2. 是否安全关键?
[ ] 是 → 必须Spec
[ ] 否 → 继续判断
3. 是否长期维护?
[ ] 是 → 倾向Spec
[ ] 否 → 继续判断
4. 是否团队协作?
[ ] 是 → 倾向Spec
[ ] 否 → 继续判断
5. 开发时间是否紧张?
[ ] 是 → 倾向Vibe
[ ] 否 → 倾向Spec
### 最终决策
- 推荐范式:[ ]Vibe [ ]Spec [ ]Vibe→Spec
- 使用比例:Vibe ___% Spec ___%
- 注意事项:
6.2 决策记录模板
markdown
## 范式决策记录
**项目**:XXX
**日期**:2024-XX-XX
**决策人**:XXX
### 决策依据
1. 项目类型:量产产品
2. 安全要求:SIL2等级
3. 维护要求:长期维护
4. 团队协作:3人团队
### 决策结果
- 主范式:Spec
- 辅助范式:Vibe(验证阶段)
- 使用比例:Vibe 10% + Spec 90%
### 实施计划
1. 阶段1:Vibe快速验证(1周)
2. 阶段2:Spec规格定义(1周)
3. 阶段3:Spec代码开发(4周)
4. 阶段4:测试验证(1周)
### 注意事项
- 驱动层必须用Spec
- 测试代码可用Vibe
- 文档必须完整
七、总结:决策树的核心要点
7.1 核心观点
决策树作用:
- 指导范式选择
- 避免随意决策
- 提升开发效率
决策树原则:
- 量产 → Spec
- 安全 → Spec
- 维护 → Spec
- 验证 → Vibe
- 紧急 → Vibe
混合策略:
- Vibe探路 + Spec定型
- 分模块使用
- 分阶段使用
7.2 使用建议
何时使用决策树:
- 项目启动时
- 模块开发前
- 团队协作时
如何使用决策树:
- 明确项目类型
- 逐层回答问题
- 确定范式策略
- 制定实施计划
注意事项:
- 不要教条主义
- 根据实际情况调整
- 团队统一认识
八、下讲预告
第6讲:嵌入式代码腐烂根源:无约束AI生成导致的时序BUG、资源冲突
内容预告:
- 代码腐烂的定义
- AI代码腐烂的根源
- 典型腐烂案例
- 如何避免腐烂
敬请期待!