← 揭开黑盒:理解系统的调查课堂

第 06 课:把“我懂了”变成别人能复核的报告

本课问题:另一个人只看你的记录,能否理解你为何相信这个结论,并指出它的边界?
前置:完成正常保存、环境变化和故障重试的主要实验。
本课交付:可导出的调查报告、一项迁移调查,以及一份可被修改的信任判断。预计 40–60 分钟。

从观察写到结论,中间不能省略推理

比较这两段话:

“D 很可靠,它用了数据库。”

“在相同实验编号与数据目录下,真正重启服务后,D 仍读到 D-第一轮;源码路径显示事务提交先于成功返回。故障乙之后读回了新记录,同编号重试没有增加重复项。因此我暂时接受本机正常重启与这类重试的承诺;没有验证断电、磁盘损坏和访问权限。”

后者并不因为更长就更好。它更容易被追问:条件是什么、观察在哪、哪一步是解释、什么仍没验证。

整理你的调查记录

在记录本分别补齐:

  1. 竞争解释,以及为什么值得考虑它们。
  2. 实验前预测,保留当时猜错的部分。
  3. 实际操作和观察,用唯一文字、请求和条件说明。
  4. 哪些证据支持或排除了哪些解释。
  5. 可能推翻当前解释的反证。
  6. 未知、下一步调查位置或暂时停止的理由。

导出 JSON 留作结构化记录,导出 Markdown 给别人阅读。时间戳只是本地辅助信息,可被修改;本课程不把它当作实验真实性认证。

独立迁移任务:选一个你确实会用的保存功能

可以选本机草稿工具、自己做的卡片应用或课程编辑台。只用不重要的测试数据,并选择一个有明确边界的承诺,例如“刷新后保留”“重新启动后保留”或“失败重试不重复”。

先写两种解释,设计一个能区分它们的实验。若没有权限查看源码,就停在可观察接口和文档;明确这是基于黑盒行为的有限判断。不要为了完成作业去破坏真实服务或测试重要记录。

最终提交一张小型系统图,最多七个节点;每个关键结论标记为“观察”“推断”或“尚未验证”。没有证据的空缺可以保留,不能用流畅叙述补齐。

用一段 AI 解释练习核对

下面是一段供练习的说法,不要求真的调用模型:

刷新后数据还在,说明用了服务器数据库。只要 HTTP 返回失败,数据库就一定没有保存,可以直接再次提交。数据已经在数据库里,所以换设备也能读到,并且不会丢。

请拆出其中至少三条可以分别检查的命题,给每条写支持证据、反例或尚缺的条件。若使用自己的 AI 回答,保留原文,采用同样的方法,不以回答口吻是否自信作为标准。

  1. 做完后展开参考核对。
    看答案

    刷新后仍在:浏览器本地存储也是解释,不能直接推出服务器数据库。
    失败就没保存:故障乙构成反例,提交与成功确认是不同边界。
    数据库就能换设备读取:还取决于服务、访问路径、身份和同步方式。
    数据库就不会丢:还缺备份恢复、存储故障等证据,本组没有验证这些保证。

评价方式

维度权重需要看到的证据
承诺与范围15%输入、使用情境和成功标准明确
竞争解释与预测20%至少两种解释;实验前有不同预测
实验与记录25%控制条件、可复核步骤、真实观察
推理与反证20%观察不冒充原因,结论可被反驳和修正
边界与责任20%未知、停止理由、必要时的恢复与核对办法

不按是否背出 A/B/C/D 的实现给高分,不按代码行数打分。猜错后修正模型有价值;提前看过源码也应说明,再补行为验证。报告没有外部读者复核时,标注“自查完成,待复核”。

这组课结束时,你已经能做什么

你已经把一句模糊的“已保存”变成条件明确的承诺;让几种解释竞争;用行为与源码相互核对;把错误结果和状态事实分开;给信任一个适用范围。

需要进一步改程序时,再按问题进入 Python 工具箱 或 代码课堂技术参考。这组实验本身可作为以后学习接口、数据库、异步与测试的具体经验。

下一组可以追问“为什么两个界面显示不同的结果”。目前这一组的目标已经完整:你不必宣称自己看穿了一切,但要能说——我现在还不知道的部分在哪里,下一步可以怎样查。