🧩 第九章 建模:填补现实世界和软件之间的沟壑
📄 一句话概括

沟壑有多宽可以数:一件事的 11 个现实事实里,软件只记 5 个,记录率 45%——被丢掉的那 6 个不是漏,是不需要。

📝 本节和前面几节的关系

第八章讲完了【记下来的记号】,这一章讲记什么、怎么决定记什么。沟壑就在现实和软件之间。

一、沟壑不是比喻,是数量差

现实里的一件事带着无穷多的细节:天气、衣服、心情、书放在第几排。 软件只能存有限的东西,所以必然要丢。 沟壑 = 被丢掉的那一部分——它不是缺陷,是软件的定义方式。

二、实测:11 个事实只留 5 个

借书这件事摊开是 11 个事实:谁借的、借的哪本、什么时候借、什么时候还、有没有超期……还有天气、衣服、位置、说了什么话、馆员心情、几点天黑。 必须记录 5 个,直接丢掉 6 个,记录率 45%。 剩下的 55% 不是垃圾——它们是【软件不需要知道】的部分。

三、真正难的是判断哪 5 个

丢掉容易,难的是判断该留哪几个。 判断错了就叫需求错误:留了没用的字段(浪费),漏了要用的(返工)。 9.2 会说明为什么这件事只能人做——计算机不会判断【该不该记】。

四、这一章的走向

9.2~9.5 讲填补沟壑的三个阶段和建模这门技术。 9.6~9.10 讲业务系统怎么写:用例图、概念模型、表结构。 9.11~9.14 讲嵌入式怎么写:它不是记录现实,而是替人干活。 9.15 收口:建模的乐趣在哪。

五、动手 Demo:现实世界和软件之间存在沟壑

把借书这件事的现实事实逐条列出来,标出软件要不要记。 数一数记录率,看沟壑有多宽。

facts = [("谁借的", "要记录"), ("借的哪本", "要记录"),
         ("什么时候借", "要记录"), ("什么时候还", "要记录"),
         ("有没有超期", "要记录"),
         ("那天天气如何", "不记录"), ("读者当时穿什么", "不记录"),
         ("书放在第几排", "不记录"), ("读者说了什么话", "不记录"),
         ("馆员心情如何", "不记录"), ("窗外几点天黑", "不记录")]
need = sum(1 for a, b in facts if b == "要记录")
print(len(facts), need, len(facts) - need, 100 * need // len(facts))
# 11 5 6 45

实跑输出:

--------------------------------------------------------------------
现实世界和软件之间存在沟壑
--------------------------------------------------------------------

  【沟壑】到底有多宽?拿借书这一件事,把现实里的事实逐条列出来:

  现实中的事实       软件要不要
  ------------------------------
  谁借的             要记录
  借的哪本           要记录
  什么时候借         要记录
  什么时候还         要记录
  有没有超期         要记录
  那天天气如何       不记录
  读者当时穿什么     不记录
  书放在第几排       不记录
  读者说了什么话     不记录
  馆员心情如何       不记录
  窗外几点天黑       不记录

      现实里的事实                11 个
      软件必须记录                5 个
      直接丢掉                    6 个
      记录率                      45%

  **沟壑 = 那 6 个被丢掉的事实**——不是遗漏,是【软件不需要】。
  **但要小心**:哪 5 个该记,是【判断】出来的,**判断错了就是需求错误。**
  **建模干的就是这件事**:先把事实摊开,再逐个决定记不记。

实测:11 个事实、记录 5 个、丢掉 6 个,记录率 45%。 沟壑就是那 6 个——不是遗漏,是软件不需要。 真正难的是判断哪 5 个该留,判断错了就是需求错误。

30 秒实验

  1. 拿你熟悉的一个业务,列出 10 个现实事实,标出软件要不要记。
  2. 把【不该记】的那几个各写一句理由。

常见误区

  1. 以为沟壑是软件做得不够好。它是软件的定义方式决定的。
  2. 以为丢掉的是垃圾。它们只是与这次处理无关。
自测三问(点开对答案) 1. 沟壑指什么? —— 现实事实中软件不需要、因而没被记录的那一部分。 2. 实测记录率是多少? —— 11 个事实留 5 个,记录率 45%。 3. 为什么说难的是判断? —— 留错了浪费存储与字段,漏了要用的就要返工——这叫需求错误。

相关笔记