如果发现任何错误,如何测试字数统计程序?

| 我刚刚回顾了经典的C教科书K&R。并阅读练习1-11: 您将如何测试字数统计程序?如果有什么输入,最有可能发现错误? 实际上,我只有一个基本的想法:手动计算现有段落以获取确切的字数,并将其与程序计算的结果字数进行比较。 有什么我想念的吗?测试的诀窍是什么? 编辑 答案摘要: 单词的语义定义,一些特殊情况: 链接词:“ cat-walk \” 小词:a,b,c biiiiiig词:\“一个fooooooooo <40MILLIONLETTERS> ooooooo a \”有3个词 边界条件: 单词之间有多个空格的文本。 大于2GB的文字 包含破折号但不包含空格的单词。 非ASCII字。 采用某些不同编码的文件(如果您的程序支持) 用空格包围但不包含任何单词字符的字符(例如\“ hello-world \”) 没有任何文字的文字 所有单词排成一行的文本     
已邀请:
好吧,这取决于您在语义上定义为单词的内容。 由于编写单词计数程序的是您,因此您应该知道什么是单词。 因此,要测试该程序,您必须考虑一下极端情况:““链接词””算作一个还是两个词?您是否认为“我”是一两个?等等.. 至于K&R练习,我想他们会自愿忘记其中的一些极端情况,他们建议您分析他们的代码后,发现这些警告。     
以下是一些可能会发现错误的文本示例: 单词之间有多个空格的文本。 大于2GB的文字 包含破折号但不包含空格的单词。 非ASCII字。 采用某些不同编码的文件(如果您的程序支持) 用空格包围但不包含任何单词字符的字符(例如\“ hello-world \”) 没有任何文字的文字 所有单词排成一行的文本     
我没有重新阅读练习1-11的答案...(我的书在60公里外) 可能编码错误的内容 小字:
\"a b c d\"
有4个字 biiiiiig词:
\"a fooooooooo<40MILLIONLETTERS>ooooooo a\"
有3个词 使用几个符号:
\",.!? ...
可能无法理解的定义
\"cat-walk\"
1个字? 2个字? 单词中间的
\"under-\\nstood\"
换行符(带连字符)     
要测试算法,您应该创建一组具有众所周知结果的测试用例。 该测试用例应涵盖: 输入的大多数可能组合; \“ border \”案件。在您的情况下,可能是:一个单词,两个带有很多定界符的单词,以定界符开头和结尾的短文本等等。 一些奇怪的文字。只需看一下算法,然后尝试考虑可能破坏它的奇怪输入。通常这是一个很小的文本(3-4)个单词,但它们之间有些奇怪的距离,例如like5ѭ     
其他人已经给出了一些实用的建议。让我添加两件事: 首先,K&R不想让您发现其代码的所有缺陷。练习的目的是使您意识到以下事实:经常存在虚假输入,并且可能希望您有一天会在类似情况下以某种方式进行处理。您如何做完全取决于您。请记住,某些看似简单的问题有时需要认真思考。 以防万一:当我笨拙的iPhone收到一条消息,上面写着“ foo坏,闻起来很香。”时,它将“ bad.it \”识别为URL。似乎很有趣,但是到目前为止,如果不要求更改消息内容本身,就无法修复此错误。 其次,您的标题具有误导性。仅仅通过测试是不可能找到程序中所有错误的。或正如Edsger Dijkstra所说:   测试表明存在缺陷,而不是缺陷。 这是理论计算机科学的基本结果,可以被实际证明。如果您有兴趣,请参阅赖斯定理。 编辑:在撰写此帖子时,我发现了一个与我们的主题相关的错误:StackOverflow解析器无法将\“ http://en.wikipedia.org/wiki/Rice\'s_theorem \”识别为URL 。 :-) EDIT2:在此处提交了有关meta的错误报告。     

要回复问题请先登录注册