Return to Video

03-41 实际起因

  • 0:00 - 0:04
    最后说两句,起因这个词呢,我们通常使用的那个概念可能会有一定的误导作用。
  • 0:04 - 0:08
    就拿窗子碎了一地来说吧,我们说这事的起因是那个球,没错。
  • 0:08 - 0:11
    但它也可能是窗子的装修工弄的。
  • 0:11 - 0:15
    如果装修工没有安装这么一扇窗户的话,
  • 0:15 - 0:17
    那它也不可能被打碎了,
  • 0:17 - 0:22
    再扯一点,如果房子的建筑商没建这房子,没这窗子,
  • 0:22 - 0:24
    它也就没事了。
  • 0:24 - 0:27
    一个结果,可能有多个起因,
  • 0:27 - 0:30
    根据前面的定义,这些都是有效的。
  • 0:30 - 0:33
    这就是简明易懂的实际起因的定义了。
  • 0:33 - 0:39
    一个实际起因需要满足:它只改变了一点点,但结果就会大不相同。
  • 0:39 - 0:44
    拿之前讨论的那个来说,一个球砸中窗子,
  • 0:44 - 0:48
    除了窗子以外,不会改变别的什么东东。
  • 0:48 - 0:53
    而装修工不装这扇窗子的话,反而影响更大。
  • 0:53 - 0:57
    因为这就变成一个缺了一扇窗子的房子了,
  • 0:57 - 0:59
    影响可就大多了。
  • 0:59 - 1:02
    比如,房子的某部分就会淋雨,潮湿了。
  • 1:02 - 1:05
    还会随着天气变化,冷啊热的。
  • 1:05 - 1:09
    如果建筑商不建这房子,变化就更大了,哪怕房价还是那么高
  • 1:09 - 1:12
    所以,你想要的只是实际起因,
  • 1:12 - 1:17
    也就是改变尽可能少,这里说的就是那球了。
  • 1:17 - 1:20
    为了调试,你也要找到一个起因,
  • 1:20 - 1:24
    它少量的变动,就会影响最终的结果,
  • 1:24 - 1:29
    这也正是delta调试法所达到的,你从通用的起因开始,
  • 1:29 - 1:34
    这个完整的输入会产生真实起因,也就是输入的一个子集。
  • 1:34 - 1:37
    一切都跟结果息息相关。
  • 1:37 - 1:41
    这有个小测试,我调用了GNU编译器,然后它崩溃了。
  • 1:41 - 1:44
    这个失败的真实起因是什么呢?
  • 1:44 - 1:49
    是我吗?没有我,就没有这个调用,没有程序的崩溃,
  • 1:49 - 1:53
    或是Richard Stallman, GNU项目的创始人?
  • 1:53 - 1:57
    因为没有他,就没有GNU编译器,也就不会有这事了。
  • 1:57 - 2:03
    或是因为氧气?没有氧气,就没Richard Stallman, 没我,没编译器,
  • 2:03 - 2:08
    没有崩溃的程序,可能也没有我们熟悉的世界,没有电脑(智能手机),
  • 2:08 - 2:13
    没有电子技术;最后一项,是这个编译器里的bug吗?
  • 2:13 - 2:17
    因为没bug就没崩溃。请选择所有正确的选项。
タイトル:
03-41 实际起因
Video Language:
English
Team:
Udacity
プロジェクト:
CS259 - Software Debugging
Duration:
02:18

Chinese, Simplified subtitles

改訂 Compare revisions