其他
AI生成代码后如何审计隐藏债务:失败模式、孤儿资源…
在AI生成代码后或合并AI写的PR前,对AI特有的债务模式做一次针对性审计。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 47/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 51/100 ×0.15
适用场景
AI生成代码后如何审计隐藏债务:失败模式通用
解决思路
- 扫描 FAILURE MODES(失败模式):思考网络超时、磁盘满、权限拒绝、空输入时会发生什么;检查是否有 try/catch;确认它捕获的是具体错误还是吞掉一切;确认失败时资源是否被清理(流关闭、连接归还、临时文件删除)。
- 扫描 ORPHANS(孤儿资源):检查临时文件、事件监听器、定时器、订阅、连接等被创建但从未清理的对象;确认每个 open/create 都有对应的 cleanup/dispose/close 调用;在 React 中确认每个 addEventListener 在 cleanup 中都有 removeEventListener。
- 扫描 EDGE CASES(边界情况):测试空数组/空字符串、null/undefined、多 MB 输入、Unicode、并发调用等输入是否会破坏代码;警惕代码默认假设 happy path(AI 几乎总是如此)。
- 扫描 HALLUCINATED DEPS(幻觉依赖):确认每个 import 都真实存在;确认每个包都在 package.json/requirements.txt 中;确认 API 方法是真实存在的(AI 会编造听起来合理但不存在的方法);确认该库的最新版本是否仍导出该函数。
- 扫描 ARCHITECTURAL DRIFT(架构漂移):确认错误处理风格与现有代码一致;确认使用了项目既有工具类而非重新造轮子;确认遵循了文件结构约定。
- 遇到红旗立即停下修复:`catch (e) {}` 或 `catch (e) { console.log(e) }` 这类吞掉错误;打开资源却没有 `finally` 块;`// TODO: handle error` 这种 AI 推卸责任;import 了项目中不存在的路径;设置了 timeout 但没有 abort/cleanup;数据库连接打开后从未归还连接池。
- 避免常见错误:不要相信能编译就等于正确(编译只检查语法不检查逻辑);不要只看 diff 而不检查 AI 没有生成什么(缺失的错误路径);不要假设 AI 用了正确的库版本(它常用已废弃 API);不要因为觉得垃圾回收会处理就跳过孤儿检查(对连接、监听器、定时器并不适用)。
适用边界 · 注意事项
- 代码量很小(少于20行)或纯配置/文档改动时,审计成本高于收益
- 已经有人工严格 review 且项目有完善测试覆盖时,可简化流程