2009-04-28 59 views
28

在学习代码测试的同时,我遇到了“土耳其测试”一词。我不知道这是什么意思。什么是土耳其测试?

什么是土耳其测试?为什么这么叫?

+3

我认为土耳其测试的最好解释不是杰夫的帖子本身,而是帖子下的前两条评论:http://www.codinghorror.com/blog/archives/001075.html#comments – 2009-04-28 10:27:16

回答

16

土耳其问题与软件国际化有关,或者仅仅与其在各种语言文化中的不当行为有关。

在不同的国家,写作日期有不同的标准(2008年4月14日在土耳其和4/14/2008在美国),数字(即波兰123,45和美国123.45)和关于字符大小写的规则(如在土耳其与我,我和我)。

由于Jeff Moser指出的问题是由土耳其用户在ToUpper()函数中首次发现该错误而命名的。下面的评论有更多的细节。

但是,问题不仅限于土耳其和串转换。

在波兰和许多其他国家的日期和数字也写有不同的方式 和相关日期或数字解释上的问题也被称为土耳其问题。从Google搜索土耳其问题的细节

链接已经给出:

+6

我称之为“土耳其测试”是因为土耳其的用户是第一个在我们的代码中发现一个由我在帖子中描述的ToUpper()错误触发的错误。 – 2009-04-28 13:36:07

15

Here is described the turkey test

忘掉土耳其,这甚至不会通过在美国。你需要一个不区分大小写的比较。所以,你试试:

String.Compare(string,string,bool ignoreCase): 

....

做这些通 “土耳其的测试?”

不是一个机会!

原因:您遇到了“土耳其我”问题。

正如很多人所讨论的,土耳其语中的“I”的行为与大多数语言不同。根据Unicode标准,当它移动到大写字母时,我们的小写字母“i”变成“İ”(U + 0130“Latin Top Capital Letter I With Top Above”)。同样,当它移动到小写字母时,我们的大写字母“I”变成“ı”(U + 0131“拉丁小字母无点I”)。

2

@Luixv提供的链接给出了该问题的全面描述。

总结是,如果您只想在一个非英文语言环境上测试您的代码,请在土耳其语上进行测试。

这是因为土耳其语有可能遇到的大多数边缘情况的本地化情况,包括“异常”格式字符串和非标准字符(例如不同的大写字母规则)。

1

杰夫阿特伍德有一篇关于同样的博客文章,这是我自己发现的第一个地方。 总结试图在土耳其语语言环境下运行您的应用程序是您的I18n的优秀测试 。

这里的杰夫斯article

4

所谓的“土耳其测试”是与软件国际化。全球化/国际化的一个问题是,不同文化的日期和时间格式可能在许多层面上有所不同(日/月/年的顺序,日期分隔符等)。

此外,土耳其有一些特殊的大写规则,可能导致问题。例如,土耳其的“我”角色是许多程序以一种错误的方式利用它的常见问题。

8

我们写日期,小到更大的像DD.MM.YYYY: ' '28.10.2010

我们使用十进制分隔符(点),千位分隔符,和','(逗号):4.567,9

我们有O => O,C => C,S => S,G => G,U => U和最重要的是我=>我和我=>我的;换言之,上部I的小写无点,下部i的大写字母加点。

由于上述规则导致的无意义错误,人们可能会有很多压力。

如果你的代码在土耳其正常运行,它可能会在任何地方工作。