Review: 调试理论

Review: 调试理论

2024 南京大学《操作系统:设计与实现》
Review: 调试理论

回顾:调试理论

程序 = 物理世界过程在信息世界中的投影

  • Bug = 违反程序员对 “物理世界” 的假设和约束

需求 → 设计 → 代码 (Fault/bug) → 执行 (Error) → 失败 (Failure)

  • 我们只能观测到 failure (可观测的结果错)
  • 我们可以检查状态的正确性 (但非常费时)
  • 无法预知 bug 在哪里 (每一行 “看起来” 都挺对的)

并发 bugs

  • “正确性” 不仅不明确,而且难检查
2024 南京大学《操作系统:设计与实现》
Review: 调试理论

推论

程序 = 物理世界过程在信息世界中的有损投影

  • 只管 “翻译” 代码,不管和实际需求 (规约) 是否匹配

例子:“山寨支付宝” 中的余额 balance

  • (这是一个数据竞争!)
  • 0 → 18446744073709551516
  • “正常人” 都不会认为这个是 “对的”
    • 首先,这是一个 underflow
      • “balance” 自带 no-underflow 的含义
    • 而且,这个数额大幅增加也不对
2024 南京大学《操作系统:设计与实现》
Review: 调试理论

真正的 “软件危机”

Specification Crisis

  • 软件的规约联系了人类世界
  • 我们无法用编程语言写出全部规约
  • 即便能写出的规约,也很难证明

Search-space Curse

  • 特性的交互组合是指数增长的
  • 即便知道 specification,你也很难证明复杂的状态机满足它
  • 猜想:“Complex systems are chaotic.”
2024 南京大学《操作系统:设计与实现》