友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

软件测试的艺术(中文清晰版)(PDF格式)-第4章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






用户带来意外惊奇。在本书中,我们将讨论多种方法来达到这个目标。 



  好了,在开始阅读本书之前,我们想让读者做一个小测验。我们要求设计一 



组测试用例(特定的数据集合),适当地测试一个相当简单的程序。为此要为该程 



序建立一组测试数据,程序须对数据进行正确处理以证明自身的成功。下面是对 



该程序的描述: 



     这个程序从一个输入对话框中读取三个整数值,这三个整数值代表 



   了三角形三条边的长度。程序显示提示信息,指出该三角形是何种三角 



  形:不规则三角形、等腰三角形还是等边三角形。 



  注意,所谓不规则三角形是指三角形中任意两条边不相等,等腰三角形是指 



有两条边相等,而等边三角形则是指三条边相等。另外,等腰三角形等边的对角 



也相等(即任意三角形等边的对角也相等),等边三角形的所有内角都相等。 



  用你的测试用例集回答下列问题,借以对其进行评价。对每个回答“是”的答 



案,可以得1分: 



   1。 是否有这样的测试用例,代表了一个有效的不规则三角形?(注意,如1、 



    2 、3和2 、5 、10这样的测试用例并不能确保“是”的答案,因为具备这样 



    边长的三角形不存在。) 



  2。 是否有这样的测试用例,代表一个有效的等边三角形? 



  3。 是否有这样的测试用例,代表一个有效的等腰三角形?(注意,如2 、2 、4 



    的测试用例无效,因为这不是一个有效的三角形。) 



  4。 是否至少有三个这样的测试用例,代表有效的等腰三角形,从而可以测试 



    到两等边的所有三种可能情况(如3 、3 、4 ;3 、4 、3 ;4 、3 、3 )? 



  5。 是否有这样的测试用例,某边的长度等于0  ? 


…………………………………………………………Page 15……………………………………………………………

                              第1章 一次自评价测试    3 



  6。 是否有这样的测试用例,某边的长度为负数? 



  7。  是否有这样的测试用例,三个整数皆大于0 ,其中两个整数之和等于第三 



   个?(也就是说,如果程序判断1、2 、3表示一个不规则三角形,它可能就 



   包含一个缺陷。) 



   8。 是否至少有三个第7类的测试用例,列举了一边等于另外两边之和的全部可 



    能情况(如1、2 、3 ;1、3 、2 ;3 、1、2 )? 



  9。 是否有这样的测试用例,三个整数皆大于0 ,其中两个整数之和小于第三个 



    整数(如1、2 、4 ;12、15、30 )? 



   10。 是否至少有三个第9类的测试用例,列举了一边大于另外两边之和的全部 



    可能情况(如1、2 、4 ;1、4 、2 ;4 、1、2 )? 



   11。 是否有这样的测试用例,三边长度皆为0   (0 ,0 ,0 )? 



   12。 是否至少有一个这样的测试用例,输入的边长为非整数值(如2。5、3。5、5。5)? 



   13。 是否至少有一个这样的测试用例,输入的边长个数不对(如仅输入了两 



     个而不是三个整数)? 



   14。 对于每一个测试用例,除了定义输入值之外,是否定义了程序针对该输入值 



的预期输出值? 



   当然,测试用例集即使满足了上述条件,也不能确保能查找出所有可能的错 



误。但是,由于问题1至问题13代表了该程序不同版本中已经实际出现的错误,对 



该程序进行的充分测试至少应该能够暴露这些错误。 



  开始关注自己的得分之前,请考虑以下情况:以我们的经验来看,高水平的 



专业程序员平均得分仅7。8   (满分14)。如果读者的得分更高,那么祝贺你。如果 



没有那么高,我们将尽力帮助你。 



  这个测验说明,即使测试这样一个小的程序,也不是件容易的事。因此,想 



象一下测试一个十万行代码的空中交通管制系统、一个编译器,甚至一个普通的 



工资管理程序的难度。随着面向对象编程语言(如Java 、C++ )的出现,测试也变 



得更加困难。举例来说,为测试这些语言开发出来的应用程序,测试用例必须要 



找出与对象实例或内存管理有关的错误。 



  从上面这个例子来看,完全地测试一个复杂的、实际运行的程序似乎是不太可能 



的。情况并非如此!尽管充分测试的难度令人望而生畏,但这是软件开发中一项非常 



必需的任务,也是可以实现的一部分工作,通过本书我们可以认识到这一点。 


…………………………………………………………Page 16……………………………………………………………

 第2 章 

 Chapter 2 



软件测试的心理学和经济学 



  软件测试是一项技术性工作,但同时也涉及经济学和人类心理学的一些重要因素。 



  在理想情况下,我们会测试程序的所有可能执行情况,而在大多数情况下, 



这几乎是不可能的。即使一个看起来非常简单的程序,其可能的输入与输出组合 



可达到数百种甚至数千种,对所有的可能情况都设计测试用例是不切合实际的。 



对一个复杂的应用程序进行完全的测试,将耗费大量的时间和人力资源,这样在 



经济上是不可行的。 



  另外,要成功地测试一个软件应用程序,测试人员也需要有正确的态度(也 



许用“愿景”(vision )这个词会更好一些)。在某些情况下,测试人员的态度可能 



比实际的测试过程本身还要重要。因此,在深入探讨软件测试的本质之前(指技 



术层面),我们先探讨一下软件测试的心理学和经济学问题。 



2。1   软件测试的心理学 



  测试执行得差,其中一个主要原因在于大多数的程序员一开始就把“测试” 



这个术语的定义搞错了。他们可能会认为: 



  “软件测试就是证明软件不存在错误的过程。” 



  “软件测试的目的在于证明软件能够正确完成其预定的功能。” 



  “软件测试就是建立一个‘软件做了其应该做的’信心的过程。” 



这些定义都是本末倒置的。 



  每当测试一个程序时,应当想到要为程序增加一些价值。通过测试来增加程 



序的价值,是指测试提高了程序的可靠性或质量。提高了程序的可靠性,是指找 



出并最终修改了程序的错误。 


…………………………………………………………Page 17……………………………………………………………

                       第2章 软件测试的心理学和经济学  5 



  因此,不要只是为了证明程序能够正确运行而去测试程序;相反,应该一开 



始就假设程序中隐藏着错误(这种假设对于几乎所有的程序都成立),然后测试程 



序,发现尽可能多的错误。 



  那么,对于测试,更为合适的定义应该是: 



  “测试是为发现错误而执行程序的过程”。 



  虽然这看起来像是个微妙的文字游戏,但确实有重要的区别。理解软件测试 



的真正定义,会对成功地进行软件测试有很大的影响。 



  人类行为总是倾向于具有高度目标性,确立一个正确的目标有着重要的心理 



学影响。如果我们的目的是证明程序中不存在错误,那就会在潜意识中倾向于实 



现这个目标;也就是说,我们会倾向于选择可能较少导致程序失效的测试数据。 



另一方面,如果我们的目标在于证明程序中存在错误,我们设计的测试数据就有 



可能更多地发现问题。与前一种方法相比,后一种方法会更多地增加程序的价值。 



  这种对软件测试的定义,包含着无穷的内蕴,其中的很多都蕴涵在本书各处。 



举例来说,它暗示了软件测试是一个破坏性的过程,甚至是一个“施虐”的过程, 



这就说明为什么大多数人都觉得它困难。这种定义可能是违反我们愿望的;所幸 



的是,我们大多数人总是对生活充满建设性而不是破坏性的愿景。大多数人都本 



能地倾向于创造事物,而不是将事物破坏。这个定义还暗示了对于一个特定的程序, 



应该如何设计测试用例(测试数据)、哪些人应该而哪些人又不应该执行测试。 



  为增进对软件测试正确定义的理解,另一条途径是分析一下对“成功的”和 



“不成功的”这两个词的使用。当项目经理在归纳测试用例的结果时,尤其会用到 



这两个词。大多数的项目经理将没发现错误的测试用例称为一次“成功的测试”, 



而将发现了某个新错误的测试称为“不成功的测试”。 



  这又是一次本末倒置。“不成功的”表示事情不遂人意或令人失望。我们认为, 



如果在测试某段程序时发现了错误,而且这些错误是可以修复的,就将这次合理 



设计并得到有效执行的测试称做是“成功的”。如果本次测试可以最终确定再无其 



他可查出的错误,同样也被称做是“成功的”。所谓“不成功的”测试,仅指未能 



适当地对程序进行检查,在大多数情况下,未能找出错误的测试被认为是“不成 



功的”,这是因为认为软件中不包含错误的观点基本上是不切实际的。 



  能发现新错误的测试用例不太可能被认为是“不成功的”,也就是说,能发现 



错误就证明它是值得设计的。“不成功的”测试用例,会看到程序输出正确的结果 


…………………………………………………………Page 18……………………………………………………………

6  软件测试的艺术 



而没发现任何错误。 



  我们可以类比一下病人看医生的情况,病人因为身体不舒服而去看医生。如 



果医生对病人进行了一些检查和化验,却没有诊断出任何病因,我们就不会认为 



这些检查和化验是“成功的”,因为病人支付了昂贵的检查和化验费用,而病状却 



依然如故。病人会因此而质疑医生的诊断能力。但是,如果医生诊断出病人是胃 



溃疡,那么这次检测就是“成功的”,医生可以开始进行相应的治疗。因此,医疗 



行业会使用“成功的”或“不成功的”来表达诊断结果。我们当然可以类推到软 



件测试中来,当我们开始测试某个程序时,它就好似我们的病人。 



  “软件测试就是证明软件不存在错误的过程”,这个定义会带来第二个问题。对 



于几乎所有的程序而言,甚至是非常小的程序,这个目标实际上也是无法达到的。 



  另外,心理学研究表明,当人们开始一项工作时,如果已经知道它是不可行 



的或无法实
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!