如何验证翻译号码?

时间:2018-05-31 14:11:53

标签: python

我在这里有一个很好的软件代码(用Python编写),它将给定的英文数字 - 例如,两千三百四十五 - 翻译成阿拉伯数字 - 2345 - 然后用它的德语等于 - zweitausenddreihundertfünfundvierzig。

德语的一个特点是它“扭曲”数十和单曲,即逐字翻译,2345用德语读取:两千三百五十四。

对于我输入的任何数字,代码都完美无缺。来回,从英语到德语,从德语到英语。

然而:如何系统地测试它对任何数字都能正常工作?

如果代码处理一组有限的值,这很容易,因为我可以简单地针对正确(=预期)答案/结果的表测试所有值。

如何测试 - 至少部分 - 代码?任何想法将不胜感激: - )

2 个答案:

答案 0 :(得分:4)

测试小案例。测试边缘情况。测试两者之间的一些事情。无法测试无限数量的值,但系统地检查所有合理的故障点并在观察到错误时添加测试将确保您的库前进不会降低质量。

特别是,对负片进行一些测试(如果你的库处理那些),对每个0-101的数字进行测试(这些是大多数语言中变化最大的),具有所有重要的断点(999) ,1000,1001,9999,10000,10001等......),介于两者之间。

至于如何系统地实现这一点,unittest是Python附带的测试模块。许多人也喜欢nose.pypy.test进行测试。有很多关于如何使用其中任何一个的深入教程。

正如@FredLarson刚刚提到的那样,使用像coverage.py这样的代码覆盖率工具是确保测试都正常运行的好方法。

答案 1 :(得分:0)

我看到它的方法是在操作之前转换一个分数的类型敏感的情况,所以如果某种语言具有特殊的"措辞"对于特定的十进制集,您可以拥有一个测试用例,该测试用例是无限集的一部分。

由于我所知道的每种生活语言都使用十进制,我们对它有一个很好的规则,100,1000等是发音最稳定的数字,因为它们在形式上总是复数。因此,单数形式通常基于语言障碍基础10(我们有那么多手指),例如在我的母语5号之后所有数字都变成复数,因为5是一整个手,之后每个数字都需要秒针来计算它上。这种复数/单数形式随后转录为语言学,因为4321将被写为4320和1形式。我猜大多数其他语言都有一些类似于他们语言学的元素。因此,您通常需要先检查前2个数字,1个地方和10个地方来验证您的翻译。

所以在 n 的数量中,通过将其转换为int并在该特定翻译器中通过n//10+n//1进行测试,然后对字符串进行简单比较,您就能够生成相当不错的验证对于大多数语言。然后它只是输入不同语言组的例外。

但我必须说这最基于逻辑,我不是语言学家或任何东西。我希望这有帮助。