您的位置:首页 > 编程语言

《高效编程十八式》(10/13)测试

2012-01-10 19:21 267 查看
 

测试

王伟冰

    测试就是指检验程序是否能运行得出正确的结果。“黑盒测试”是指不考虑程序内部如何实现,只检查程序能否对各种不同的输入得出正确的输出结果;“白盒测试”是指深入程序代码内部,测试每一个操作的执行是否正确。测试的方法有很多,而且有专门用来测试的软件,这里都不讲,这里只讲一些测试的原则。

 

    1. 自动化原则:尽量把测试所要做的人工操作减到最少。

    比如你想测试程序对于10种不同的输入的结果是否正确,你可以重复启动10次你的程序,每次输入不同的结果,看结果是否正确,但是这样是不是很麻烦?你可以把10次的输入和结果都先放在数组里,然后在主函数里用一个循环,每一次循环就调用你程序的主计算的代码,自动输入,并检查输出是否与预期的一致。这样只需运行一次,结果对不对就自动都出来了。

    当然,这样做破坏了原来的代码。如果不想破坏原来的代码,可以另外写一个测试程序,或者直接用测试软件来测试。

 

    2. 写到哪就测到哪。

    如果等到整个程序写完再测试,那出了问题上哪找原因?问题可能出在代码的任一个角落,找起来就很麻烦。所以,每写完一个小单元,就要测试一下,确保没有问题了,再写下一个小单元。一个单元就是一个函数或一个类。一般情况下,经过充分测试的小单元存在bug的概率要比没有经过测试的小得多,所以当某次测试结果出错的时候,那么问题很有可能就在最新写进去那个单元里。

    写写测测,是不是太麻烦了?但是,如果不测试,那以后出了问题,找起来那可要麻烦得多。相比之下,写写测测的效率还是高一些。

 

    3. 合理安排测试的顺序。

    一般情况下,先测试核心功能,再测试其它功能;先测试没有把握的代码,再测试有把握的代码。然后,既然是写到哪测到哪,那么测试的顺序也就是写的顺序。

    总之,如果A单元的执行正确性依赖于B单元的正确性,那么B单元应该比A单元先测试。如果彼此不依赖,那次序就无所谓了。

 

    4. 测试不同的平台和环境。

    如果你的程序想在不同的操作系统下都能运行,那么就要确保它在每个操作系统下都正确运行。对于网页上的程序,则要测试它在不同浏览器下的正确性。对于汇编程序,则要测试不同的机器。

    如果你的程序和操作系统的互动比较多,那么不同平台上的测试工作最好早点进行,除非是很有把握。如果一直都在某个平台上测试,等到最后快完工了再测试其它的平台,可能会突然间冒出很多的错误。

 

    5. 测试集尽量多样化。

    测试集就是测试时输入数据的集合。输入数据可能有很多种可以取的值,无法一一测试,所以会找出一些代表,组成测试集。比如测试一个一元函数f(n),n可能取1到100中的整数,要取10个代表,那么找哪些代表好呢?1,2,3,……10,这样都是些小数值,缺乏代表性;10,20,30,……100,这样都是10的倍数,也不太好;还是多样化一些比较好,比如:1,8,31,42,……,85,100。

 

    6. 要测试非法输入和边界值附近的输入。

    还是上面的例子f(n),n可取1到100的整数。除了测试输入1到100的值能否得到正确结果,还要测试输入非法数值会出现什么事,比如说输入-10,输入200,输入4.5,输入abc,看看是什么结果。可能程序会崩溃,可能程序会算出一个莫名其妙的结果,可能程序会死循环,可能程序会输出一条友好的信息提示输入有误请重新输入。不管怎么样,结果要符合你的预期才对。

    还要测试边界值附近的输入,比如上面1和100是边界值,那么一定要特别测试一下0、1、100、101这四个输入会得到的结果,因为有可能程序里检查边界的代码有误,比如<=100被写成<100,那么输入100会被错误地认为是非法输入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息