软件测试悖论之Braess 悖论[2] 软件测试
现在汽车 3 准备离开了,他的选择是:
A-B-D cost = [4(3) + 1] + [1 + 16] = 30
A-C-D cost = [1 + 16] + [4(3) + 1] = 30
A-B-C-D cost = [4(3) + 1] + 1 + [4(3) + 1] = 27
A-C-B-D cost = [1 + 16] + 1 + [1 + 16] = 35
再次,这个快捷路径 A-B-C-D 是最好的选择。汽车 4 准备离开城镇 A ,观察了钱三个司机的决定,算出了他自己的成本:
A-B-D cost = [4(4) + 1] + [1 + 16] = 34
A-C-D cost = [1 + 16] + [4(4) + 1] = 34
A-B-C-D cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
A-C-B-D cost = [1 + 16] + 1 + [1 + 16] = 35
快捷路径上目前的交通使得 A-B-C-D 比路径 A-B-D 和 A-C-D 的成本要高。假设汽车 4 选择了路径 A-B-C (如果汽车 4 选择了 A-C-D ,细节会有一点不同,但是总的结果是一样的)。
汽车 5 现在准备离开了,他分析了他的选择:
A-B-D cost = [4(5) + 1] + [2 + 16] = 39
A-C-D cost = [1 + 16] + [4(4) + 1] = 34
A-B-C-D cost = [4(5) + 1] + 1 + [4(4) + 1] = 39
A-C-B-D cost = [1 + 16] + 1 + [2 + 16] = 36
因此汽车 5 决定选择路径 A-C-D 。最后一辆车,汽车 6 ,现在准备离开了,他观察了前面 5 个司机的决定,做出了他自己的分析:
A-B-D cost = [4(5) + 1] + [2 + 16] = 39
A-C-D cost = [2 + 16] + [4(5) + 1] = 39
A-B-C-D cost = [4(5) + 1] + 1 + [4(5) + 1] = 43
A-C-B-D cost = [2 + 16] + 1 + [2 + 16] = 37
汽车 6 选择了路径 A-C-B-D ,因为这是成本最低的。现在 6 辆车都在路上了,你可以算出每辆车的成本。
Car 1 route A-B-C-D, cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
Car 2 route A-B-C-D, cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
Car 3 route A-B-C-D, cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
Car 4 route A-B-D, cost = [4(4) + 1] + [1 + 16] = 34
Car 5 route A-C-D, cost = [2 + 16] + [4(4) + 1] = 35
Car 6 route A-C-B-D, cost = [2 + 16] + 1 + [1 + 16] = 36
回忆一下,如果没有这条快速路,每辆车的成本是 32 。现在增加了额外公路容量,我们却增加每个司机的成本!
这个例子提供了一个对 Braess 悖论的实际接触。因为这和网络系统上所传输的数据包有明显的关系, Braess 悖论受到了研究人员的深入研究。你能非正式的总结这个悖论:有时候增加节点之间的路径数反而会增加网络拥塞。从软件测试角度来说, Braess 悖论会在进行网络性能测试的时候出现。老实说,你碰到 Braess 悖论的机会很少。但是这个现象确实存在。启示是,你不应该假设增加网络容量就会提高性能。如果你增加了容量但是没有看到你所期望的性能提高, Braess 悖论就是应该去调查的。