您将如何测试Google Maps的“获取路线”功能?


13

(我想这将是一个很好的面试问题,但就我而言,这比这更为实际。)

我们有一个庞大而复杂的应用程序,可以对数十种化学成分之间极其漫长而复杂的化学反应过程进行建模。我们正处于为应用程序设计验收测试的阶段,但是对于可能的测试路径数量之多,我们有些畏缩。在我看来,我们的情况非常类似于Google Maps开发团队在其“获取路线”功能中测试路线规划算法时必须面对的情况。显然,他们无法测试(验证和验证)所有可能的路线。那么,他们如何使自己的应用程序在任何情况下都能运行的信心?

而且由于我不希望知道他们是如何做到的,所以让我问您:将如何设计一个具有足够代码覆盖率的测试套件,以使自己确信给定的应用程序是健壮的,而这在实际上是不可能的探索整个系统的每条潜在路径?

我正在寻找的原则是您可以用来将棘手的问题分解成较小的,易处理的部分,这些部分的总和提供了令人满意的整体估计:“我无法测试所有内容,但我可以对此进行测试,这个和这个-就足够了。” 考虑到实际的预算/时间限制,我并不是在寻找一种“证明是正确的”方法,而是一种审慎的方法

(我将Google Maps示例用作箔纸,以寻求尽可能具体的答案。)


过去,Google Maps试图将我引导到仅公交车的街道上,以错误的方式沿单向街道行驶,并在不存在的交叉路口处转弯(例如,只有路旁的天桥)。我相信他们具有“报告不正确的路线”功能,但这可能不适用于您的情况。关于他们测试一切的答案?他们没有,而且他们真的没有必要。
约翰·里昂

与以往一样,我建议您阅读Nassim Nicholas Taleb的书和文章。这是一篇涉及数学的技术文章,但我强烈建议您阅读他的书。
jfrankcarr 2012年

我不认为您可以设计一个涵盖所有案例的测试,以测试足够复杂的内容。如果您知道内部工作原理,则可以针对每条明显的路径进行测试,但总会有没人想到的事情。您只要想想就多了,希望您所思念的问题不会太大。
罗伦·佩希特尔

2
@jozzas:您所描述的只是数据库错误,实际上不是Google的方向算法问题。相当于今天早上我的卫星导航试图将我引导到一条未维护的道路上。另一方面,当它给我关于我要离开的道路的车道关闭建议时,这是一个实际的错误。(该咨询报告显然仅关注您所走的路,而不关注它所遵循的路线。)
Loren Pechtel 2012年

1
称之为“测试版”。做完了 这是Google的方式。
Paystey 2012年

Answers:


10

十多年前,我在汽车导航领域工作。

步骤A)使用参考包装并选择大样本集,运行A / B测试。不寻找准确性,而是寻找离群值-参考集显示“重新布线1234”为10.34公里,而我们计算出123.5公里。

步骤B)-优化我们的软件和参考软件-添加更多样本并降低公差。

步骤C)-使用跨全球数据集的本地知识进行内部测试。

步骤D)UAT ...“用户接受测试”与“出售这些东西,看看客户最抱怨的内容”

如果您曾经在1990年代中期-2000年左右使用过地图产品,那么您就会明白我的意思,我们当中那些仍然每次都会检查转弯路线的产品。

回到您的示例问题。您要问的是如何证明某个软件是正确的。如果您需要数学证明,那么它已经可以实现–对于价格超过任何实际预算的简单软件,对于复杂的软件包,还是值得研究的……。NASA拥有用于编写高度可靠的软件的模型与国防部和航空业一样,在经济上可管理的价格范围内-尽管仍比大多数人愿意支付的价格高得多。最后,取决于您准备支付多少钱.....

编辑:我只是重新阅读了OP。似乎您正在寻找一种快速,廉价的方法来测试复杂软件的质量。您无法进行质量测试。您需要一个健壮的过程,以便您知道所构建的内容正确运行。如果您必须考虑如何证明它是正确的,并且已经有一个“庞大而复杂的应用程序”,那么您来不及了。


5

我们是Google的竞争对手之一。我们的答案?基本上两个。

首先,我们要计算完整的地址到地址解决方案。是的,这是一个很大的矩阵。更糟糕的是,我们在一周中的所有时段,每天的所有时段都这样做。输入域中有足够的相似性来缓存中间结果,这使问题易于解决。不过,请尝试获取硬盘的批量价格。

请注意,此脱机计算是使用其他算法完成的。它使用的内存远远超过我们打算测试的算法,但线性使用的内存并不多(即,计算一千条路由时使用的内存少于1000倍)。

其次,参与的用户为我们提供了真实的结果。我们验证了数以百万计的路线。实际路线是否如预期的那样快?

当然,您确实会以这种方式发现错误。一直以来。例如,一条道路两侧都由“仅限本地流量的区域” *界定。只有一种方法;)在测试中会找到它,那就是您计划到该条特定道路的路线时。

*仅当您在此类区域中开始或结束路线时,才可以使用“仅本地流量区域”。因此,中间的路段与主路网断开。这是分区故障或地图故障。


3

就像Google不会为世界上的每对地址编写单独的代码一样。除了大规模启发式算法外,三段行程的算法与3000段行程的算法完全相同。您彻底测试了较短的路径,并使用归纳法表明测试也适用于较长的路径。

您选择了真实的真实路线样本,并对照人类的想法进行了检查。您在最初的发行版中非常关注最终用户的反馈,并使其易于提供。您可以测试边界条件,例如,最佳路线实际上是否需要离开目的地一段时间,或者最短路线距离有18转,而更直接的路线要稍长一些。您进行负面测试,例如是否要从加利福尼亚开车到夏威夷,并确保准备好聪明的复活节彩蛋。


我相信您建议的所有内容都是准确的,但我不禁感到它仍然不够严格。“选择一条健康的路线样本”听起来更像是我为一个大学学期项目所做的事情,而不是世界一流的开发团队的设计。尽管我同意您对3条腿路线与3000条腿路线的观察,但即使测试很大一部分的3条腿路线,也似乎非常雄心勃勃。我觉得我们在这里仍然缺少基本的东西。
kmote 2012年

@kmote:“但是我不禁要感到它仍然不够严格”。为什么不,它在软件行业工作了一代人,并且没有任何迹象表明它将很快被取代。我们得到报酬是写赚钱的代码,而不是写完美的代码。想一想它是什么在医学,工程学和几乎所有专业中使用的东西,似乎在这些行业中做得很好。
mattnz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.