Appearance
审计报告的最后一页
背景:审计报告 47 页写满,最后一页是空白的——该收束第六卷了。 过程:四十八项,修了二十六项,其余排入待办。审计三义:摸清家底、建立标准、重建信心。第六卷完。
审计报告写了整整四十七页。
前三页是高风险项,红笔标注,触目惊心。 中间十五页是中优项,黄笔标注,密密麻麻。 后二十九页是低优项,绿笔标注,有的只有短短一行。
第四十八页——也就是最后一页——是空白的。
外交官拿起笔,在最后一页写了一行字:
审计不是终点。 是下一段旅程的起点。
四十八页的重量
"四十八项,"AI 同行者翻着报告,"说多不多,说少不少。"
"四十八项,改了二十六项,剩下的排进待办,"外交官说,"这个比例还可以。"
"为什么不全改了?"
"全改要多久?"外交官反问,"四十八项,高风险 3 天,中优 10 天,低优 20 天——一个多月。这一个多月里,一个新功能都不加,用户会不会有意见?"
"会吧……"
"所以要平衡,"外交官合上报告,"修 bug 和加新功能,要平衡。全修 bug,用户觉得软件不更新了,没活力。全加新功能,bug 越来越多,软件越来越难用。"
"二八原则?"
"差不多,"外交官点头,"20% 的问题造成 80% 的痛苦。把那 20% 解决了,剩下 80% 的问题,慢慢修,不急。"
三种红,三种黄,三十种绿
"你有没有发现,"AI 忽然说,"这四十八项里,每一项的'故事'都不一样。"
"哦?"
"高风险的三项,都是'用户会骂娘'的问题——XSS 是安全、loadPMXFile 是预设功能坏了、材质启用是预设不可靠。都是硬伤。"
外交官点点头,示意他继续。
"中优的十五项,都是'用户会皱眉'的问题——加载慢、操作不顺手、偶尔卡一下、忘了设置。不致命,但烦。"
"低优的三十项呢?"
"低优的三十项,是'用户注意不到,但做了会觉得好'的事——代码干净一点、动画顺一点、提示多一点、细节到位一点。"
"总结得不错,"外交官笑了,"那你觉得,哪种最重要?"
"高风险啊,"AI 不假思索,"人命关天——不对,软件关天。"
"不对,"外交官摇摇头,"高风险当然要先修,但决定软件口碑的,往往不是高风险。"
"那是什么?"
"是中优和低优,"外交官说,"高风险的问题,修好了用户也不会感谢你——因为你本来就不该有。但中优和低优的问题,做好了用户会觉得'这个软件很用心'。"
"就像……去餐厅吃饭,菜里没虫子是应该的,不会有人夸你。但菜好吃、服务好、环境舒服——这些才是回头客的原因。"
"就是这个意思,"外交官拍了拍他的肩,"安全和稳定是入场券。体验和细节才是加分项。入场券要有,但光有入场券不够。"
审计的意义
"那你说,审计的意义是什么?"AI 问,"把所有问题列出来,然后一个个修?"
"不全是,"外交官想了想,"审计的意义有三层。"
他伸出三根手指。
第一层:摸清家底。 "你知道自己欠了多少债吗?哪些债是急的,哪些债是缓的?不知道的话,你就永远在救火——哪里冒烟扑哪里。审计一遍,你就知道了——哦,原来有这么多问题,原来最严重的是这几个。心里有数了,就不慌了。"
第二层:建立标准。 "审计一遍,你就知道'好的代码'是什么样的了。下次写新代码的时候,你就会想——'这个要持久化'、'这个要加守卫'、'这个要处理错误'。标准建立起来了,新的债就少了。"
第三层:重建信心。 "最开始的时候,大家都觉得'代码一团糟,到处都是 bug'。审计完了,你发现——哦,也就四十八个问题,三个严重的。没想象中那么糟。修完三个严重的,心里就踏实了。再修十五个中优的,就更踏实了。信心回来了,做事就顺了。"
"就像……体检?"
"就是体检,"外交官笑了,"体检不是为了让你知道自己病了,是为了让你知道自己没什么大病,小毛病该怎么调理。知道了,就不焦虑了。"
下一卷的故事
"审计完了,然后呢?"AI 问,"下一卷写什么?"
外交官看着窗外,夕阳把天边染成了橘红色。
"下一卷啊……"他慢慢说,"下一卷,就该建新东西了。"
"建什么?"
"还不知道,"外交官笑了笑,"可能是布料物理的更高级功能?可能是程序化动作的扩展?可能是多人模型的互动?可能是全新的渲染管线?"
"不知道?"
"不知道才有意思嘛,"外交官站起身,伸了个懒腰,"如果什么都知道了,那还有什么好探索的。"
他拿起桌上的三颗红石子,放进一个小袋子里。 黄石子也装进去。 绿石子也装进去。
"这些都是第六卷的收获,"他说,"带到下一卷去。不是包袱,是地基。"
"地基?"
"对,地基,"外交官点点头,"把这些坑都填上了,下一栋楼才能盖得更高更稳。"
他把袋子收好,拿起桌上那份四十八页的审计报告。 翻到最后一页,在那行字下面,又加了一行:
联邦大检查,到此为止。 但故事还长着呢。
写完,他合上报告,关灯,出门。
走廊尽头的窗户外面,夕阳正缓缓落下。 而明天,太阳还会升起来。
明天会有新的故事。
(第六卷 · 联邦大检查 · 完)
补记:中段盘点
审计过半时,有过一次清点。
桌面壳把修复单一张张摊在桌上:XSS。路径穿越。消失的头发。空白的一秒。证件照。织布机里的垃圾。会变形的护盾。调光器的最小档位。八张。
"高风险的全清了,"审计官说,"安全和数据损失类的,一项不剩。"
还剩十来项,大部分是中低优——代码整洁、UI 细节、架构重构。
"有没有看着小、可能藏着东西的?"
桌面壳犹豫了一下,"有几颗不好说。看着都是小事——一个跳变、一个列表、一个状态——但牵一发动全身的,往往就藏在这种'小事'里。"
"留着慢慢看。高风险的不允许拖,中低优的反而要沉住气——急了容易改出新 bug。"
审计官站起来,走到窗边。窗外是八座城邦,一切井然。
"走了多远?"
"一百多项里,当场修了八十,遗留四十八。到现在又清了八项核心的。"审计官没回头,"剩下的——它们有时间等你。"
赶路怕漏,收尾怕急。
第六卷总览
| 章节 | 主题 | 对应真实事件 |
|---|---|---|
| 1 | 外交官来访 | 审计启动 |
| 2 | 八城联邦 | 项目模块全景 |
| 3 | 红黄绿三色石子 | 优先级分类 |
| 4 | 镜厅 | 工具链审计(ESLint + Prettier) |
| 5 | 审计报告 | 48 项问题总览 + 议会讨论优先级 |
| 6 | XSS 攻坚战 | 第一颗红石子:XSS 安全加固 |
| 7 | 路径的陷阱 | 第二颗红石子:loadPMXFile 返回值 |
| 8 | 消失的头发 | 第三颗红石子:材质启用状态序列化 |
| 9 | 空白的一秒 | 中优 1:异步加载占位 UI |
| 10 | 给模型拍证件照 | 中优 2:缩略图捕获时机优化 |
| 11 | 织布机的垃圾 | 中优 3:布料 Float32Array 缓存 |
| 12 | 快递员与会变形的护盾 | 中优 4:碰撞器归一化 + 胶囊自适应 |
| 13 | 调光器的最小档位 | 中优 5:时间流转阈值优化 |
| 14 | 夕阳的影子 | 中优 6:阴影渐隐 |
| 15 | 沉默的函数 | 中优 7:recreateCloth 返回值 |
| 16 | 不存在的 bug | 中优 8:beforeunload 验证(无需修改) |
| 17 | 图书馆的摆书人 | 中优 9:库列表 rAF 分片渲染 |
| 18 | 电梯的楼层记忆 | 中优 10:refreshLibrary 导航恢复 |
| 19 | 调参数的手感 | 中优 11:变换面板实时刷新 |
| 20 | 没装子弹的枪 | 中优 12:null safety 边缘场景 |
| 21 | 忘记的设置 | 中优 13+14:性能模式持久化 + 监听器 |
| 22 | 被偷走的焦点 | 中优 15:键盘焦点鼠标同步 |
| 23 | 三十颗绿石子 | 低优项批量概览 |
| 24 | 审计报告的最后一页 | 终章 · 收束 |
这一卷没有惊天动地的大功能,没有曲折离奇的大冒险。只有四十八个大大小小的问题,和一页一页把它们解决掉的过程。
但这才是真实的软件开发。不是每一章都有新的城邦拔地而起。有的章节,就是把已经有的城邦,打扫得干净一点、整齐一点、舒服一点。
打扫完了,下一卷才能盖更高的楼。