开篇声名:这是第一次翻译,介于本人英语水平有限,可能部分内容翻译得不太恰当,呵呵,还请各位高抬贵手不要扔砖头啊。附件中是《软件测试艺术》的原文,请参阅。
第一章 自我评估测试<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

在这本书出版的25年来,软件测试已经向着更快捷更复杂化的方向发展。
软件测试工作的复杂化,是由大量编程语言、操作系统以及硬件平台的快速发展所决定的。并且,在相对于少数专业人士使用电脑的20世纪70年代,当今,几乎没有任何企业或者教育机构能够脱离计算机的使用。此外,计算机的功能也要比早期设备强大百倍以上。
因此,我们所编的软件可能会被数以百万计的人所使用,帮助他们更加高效的完成工作,减少工作损失及成本,有效的完成工作任务。这并不代表,如今软件的地位比这本书第一次出版的时候高出很多,确切的说,当今计算机及计算机机软件的采用会影响更多的人或企业。
从某种角度来说软件测试工作是比较轻松的,因为应用软件与操作系统的兼容性得到了改善,无需开发人员的干预便可以稳定的运行在操作系统中处理日常事务。使用图形用户界面(GUI),建立开发语言库,在软件测试工作开始之前储存适用于测试的对象库,这样测试某个应用软件的时候可以减少测试工作量提高测试效率。
软件测试是一个过程,或者说是一系列的过程,按照计划有条不紊的检查代码是否按照预定的目标执行,有没有产生额外的运行结果。对用户而言,软件的运行结果应该是明确的,不应该发生预定目标外的情况。在这本书中,我们将了解到如何达成这个目标。
在我们开始阅读这本书之前,我希望做一个小测试。我希望你能够编写一套测试用例,提供详细而精确的一套数据对下面的小程序做个完全的测试。建立一套测试数据,该数据必须能够被程序成功的执行,以下是程序的描述:
该程序读取对话框中输入三个整数的值,这三个值代表了一个三角形的边长。程序会显示一条消息,显示出该数据得出的是不等边三角形、等腰三角形还是等边三角形。
记住,不等边三角形的任何一边不能与其他两个边的长度相等,等腰三角形有两个边的长度相等,而等边三角形的三条边长度均相等。并且等腰三角形两边长度相等的边的夹角度数相等,等边三角形的三个角的角度均相等,不等边三角形的任何一个夹角不能与其他夹角度数相等。评估你所设定的测试例用它来回答以下的问题,对用例满足的条件记为“yes”。
1.你是否有一个测试用例有效的描述了一个不等边三角形?(请注意,像1232510这样的用例不能够记为“yes”,因为根本不存在这种边长的三角形)
2.你是否有一个用效的用例描述了等边三角形?
3.你是否有一个用例有效的描述了等腰三角形?(清注意,如果用例中包含如224这样的数据,它不能作为有效的用例,因为不存在这种边长的三角形。)
4.你是否有至少三个用例,用来表现等腰三角形两等边的边长相互置换的情况?(例如,3,3,43,4,34,3,3)?
5.你是否有一个用例,用来描述其中一个边长为0的情况?
6.你是否有一个用例,用来描述其中一个边长为负值的情况?
7.你是否有一个用例,用来描述两边之和等于第三边的情况?(比如,程序显示123所表示的三角形,有可能存在错误)
8.你是否有至少三个类别的测试案例,使得7您尝试了所有三个数值的排列,其中一个边长为另外两个边长之和(例如,1,2,31,3,23,1,2)?
9.你是否有这样一个用例,三角形的三个边长都是大于0的整数,其中两边之和小于第三边?
10.你是否有至少三个测试用例,使得9您尝试了所有的3个排列(例如,1,2,4;1,4,24,1,2)?
11.你是否有一个测试用例,描述了三边都为零的情况(0,0,0)?
12.你是否有一个用例,描述了三角形的三边边长为非整数值的情况(如2.5,3.5,5.5)?
13.你是否有至少有一个测试用例,描述了指定无效边长的情况?
14.对于每个测试用例,你是否指定了程序的预期输出结果?
当然,不敢保证一套满足上述所有条件的测试用例能够发现所有可能产生的问题,但从问题113所描述的问题来看,在程序运行的过程中有可能发生这样或那样的错误,对这个程序做个充分的测试应该至少能揭露上述的问题。
现在,在给自己打分之前,先思考下述的问题:根据我们的经验,一个资深的软件工程师的平均分数应该是7.8,得到这个分数是由于缺少第14个条件。如果你比这个成绩做得好,那么祝贺你。如果你还没有达到这个成绩,那么继续努力吧。
面向对象的语言所开发的程序,如JavaC + +,使系统、编译器,甚至是普通的工资统计系统的测试都变成更加复杂。例如,你要测试上述编程语言构建的应用程序,暴露它们的关联问题,那么就得了解对象实例的关联错误和内存的管理等等。
从上述的例子似乎可以看出,完全的测试是不可能实现的。事实绝非如此!制定恰当的测试计划,尝试接触软件程序的开发或者从学习这本书开始吧。