功能性测试的测试方法二

上一篇 / 下一篇  2013-04-10 09:39:15 / 个人分类:转载

1.1 方法8:输出属性修改后的结果 
案例:在word中输入一长串字符并设置成艺术字,程序会按字号大小自动计算出整个文本框的大小. 
再编辑该字符串为单个字符,不改变字体和字号,程序没有再按照字号自动计算出整个文本框的大小,而是变成只对固定大小的文本框的填写. 
这时如果再次编辑为更多的字符串,字符变小,文本框大小依然不变. 
1.1.1 分析缺陷产生的原因 
输出常常具有可修改的属性,如颜色,形状,维数及大小等,用户可以修改这些属性.在这种情况下,开发人员必须编码,设定初始默认属性值,然后编码允许用户编辑这些属性.当用户改变了这些属性值后,内部的相应变量值也随着变化,再次进行处理时,这些值没有被新恢复为默认值,输出的属性就被强制改变了 
1.1.2 如何发现这类问题 
测试方法可以使用在那些输出具有可编辑性,可修改性的功能中.测试人员首先要仔细了解能够产生的输出,特别要注意具有可编辑属性的输出.测试人员的任务就是强制每个输出产生,并编辑其属性,然后再次强制输出产生. 
1.1.3 测试方法小结 
应用场合:输出的结果,可以由用户修改属性得出 
测试方法:强制每个输出产生,并编辑其属性,然后再次强制产生输出 
测试知识储备:全面理解需求规格说明书中的内容,了解能够产生的输出 
--------------------------------------------------------------------------------------------- 
1.2 方法9:屏幕刷新显示 
案例:在PowerPoint2000中,输入内容为"一二三123",字号为24的字符.其中,123是上标,改变其字号大小为44,文本框不会改变大小使它符合字符的大小.这时在屏幕上移动文本框会出现屏幕刷新问题 
1.2.1 分析缺陷产生的原因 
通常GUI软件会产生刷新问题,因为GUI在对窗口进行覆盖,移动和调整大小时,必须刷新屏幕才能使对象重新显示.但是如果经常刷新,容易减慢应用程序的运行速度;如果不刷新,又会影响用户对程序的使用,使用户必须去寻找刷新的方法才可以继续工作.所以开发人员有时候不能很好地确定什么时候需要刷新,需要刷新多大范围的区域 
1.2.2 如何发现这类问题 
测试刷新问题的方法是增加,删除和移动屏幕上的对象,这样会使某些对象重新显示.如果不能正确,及时地进行重新显示,就产生了缺陷.我们可以通过以下几个方法来检验刷新: 
1.从起始位置移动对象.先移动一点,然后增加移动幅度;先移动一次或两次,然后多次移动,确保覆盖了所有区域 
2.从覆盖对象的边界开始一点点覆盖,使其中一个对象遮住另一个对象. 
3.使用不同类型的对象.如果应用程序支持多种类型的对象,如文本对象,图形对象,就把这些不同对象混在一起使用 
注意:如果一个对象包含在另一个对象中,把被包含对象设定在包含对象之外.托运被包含对象,可能出现刷新问题 
1.2.3 测试方法小结 
应用场合:一个对象包含在另一个对象中,托运被包含对象时,可能出现刷新问题 
测试方法:增加,删除和移动屏幕上的对象 
测试知识储备:全面理解需求规格说明书的内容,了解程序中对象之间的关系,例如:包含关系等 
-------------------------------------------------------------------------------------------- 
1.3 方法10:数据结构溢出 
案例:1.启动word 2000,选择:表格,插入命令,在打开的对话框中给"列数"设一小值,将32768设给"行数" 
2.再添加行数让该结构上溢.增加12左右的新行后,将光标移到表的底部. 
注意:在windows底部的状态条上的页数,页数将大约每半秒增加一页,几分钟后,word停止运行 
1.3.1 分析缺陷产生的原因 
所有数据结构的大小都有上限.一些数据结构会逐步增加长度以充满机器内存容量或磁盘空间,其其它数据结构具有固定的上限.例如:一年中月销售平均值可以存储在长度为12的数组中,其中每个数组元素存放这一年中一个月的值. 
    开发人员经常对有关数据结构的内容进行编码,忘记结构本身的物理局限(特别是大小).例如,编写"AddElement"程序用来给数组添加新值,若程序没有对数组的尾端进行说明,最后在试图添加元素时会超过数组的上限,应用程序就会失效. 
1.3.2 如何发现这类问题 
1.确定数据结构的界限,尝试将过多的值输入数据结构.应该特别注意界限为数据类型的边界256,1024,32768等上溢的测试. 
2.对于下溢的测试,可以尝试多删除一个数据,例如,当结构为空的时候,尝试再删除,或者添加一个数据,尝试删除两个元素时的情况 
1.3.3 测试方法小结 
应用场合:程序中存在数组 
测试方法:尝试将过多项的值输入数据结构,测试上溢和下溢 
测试知识储备:全面理解需求规格说明书中的内容,确定数据结构的界限 
--------------------------------------------------------------------------------------------- 
1.4 方法11:数据结构不符合约束 
案例: 
1.激活PowerPoint,并插入25*25的表格来试一下 
2.插入一行或一列就可以使PowerPoint停止运行了 
1.4.1 分析缺陷产生的原因 
在编程过程中,对内部数据结构都有所约束,包括大小,维数,类型,形状,屏幕上的位置等.我们测试的重点就是用户能够设置的属性,这些属性使用了一组参数来约束.例如,"年"取值在1980-2095之间,"撤消"操作最多只能执行20次 
在建产数据项和随后对数据项进行修改的任何时刻都要对数据属性的约束进行检查.创建数据项时,开发人员都会检查这些数据项,可是在修改数据项时却常常忽略这些检查.有的是因为数据对象的建立和后来的修改是由不同的函数完成的,或是同一函数中不同的代码部分完成的.在这两个地方都要包含检查约束的代码,这个问题经常会被一些项目忽略.这些项目由多个开发人员共同完成,这些开发人员对如何编程实现约束又互不交流. 
另一个原因是初始化代码中修改后的代码有错误,在修改错误的时候只修改了初始化部分,而忽略了对其它部分的修改,使得修改不完全,不彻底. 
1.4.2 如何发现问题 
1.确认候选数据,并列出其可修改的属性.对每个属性列出有效有效值的允许范围,约束的条件等 
2.确定所有可修改属性的功能位置 
3.对数据进行初始化,改变每个属性以确定是否正确执行了约束 
如果数据约束遭到破坏,可能导致系统崩溃,或者表现为响应时间延迟,错误信息不正确(软件发现了错误,但不知道是什么错误)以及使用错误数据产生的无效输出 
1.4.3 测试方法小结 
应用场合:应用程序内部的数据结构存在约束 
测试方法:破坏内部数据的约束 
测试知识储备:全面理解需求规格说明书中的内容,确定内部数据结构的所有约束 
--------------------------------------------------------------------------------------------- 
1.5 方法12:操作数与操作符不符 
案例: 
(1)打开windows2000的计算器,进入科学计算模式,输入"2",求平方根(选中Inv复选框,并单击按钮x△2),得到结果1.4142135623730950488016887242097 
(2)再次单击按钮x△2,计算平方数,显示结果为2 
(3)但2仅仅是显示的答案,计算器存储的实际值并不是2,这可以通过减2来验证,减2的结果不是0,而是和零很接近的数值:1.1578739678741186722221088213213E-37,可见,在上面的计算过程中计算器程序从浮点数据转换到整型数据会失去精度 
1.5.1 分析缺陷产生的原因 
几乎每个运算符都有它无效的操作数,对于具体的操作符,开发人员在使用它们时,必须编写错误检查代码.例如,除以零的问题,开发人员应该通过将所有除法运算包含在"IF"语句内,或其他处理方法来避免带有除数为零的操作.如果不这样做,可能就会使应用程序崩溃 
1.5.2 如何发现这类问题 
找到程序中包含的数据或输入(即操作数)的计算(即操作符),数据表达式(操作数和操作符的组合)及对图形的操作,这里面有大量的计算,例如,字处理程序中的文本位置,页边界,页边距,字体大小等.另外,对多个操作数进行组合也更容易发生错误.例如,字符和数字都可以使用"+"操作符.对字符通过"+"把它们连成一串;对数字通过"+"进行加法运算.如果系统尝试把字符和数字相加,即进行相互矛盾的操作,就会引起软件失效 
1.5.3 测试方法小结 
应用场合:需要进行数值计算的程序或图形操作的程序,例如加,减,乘,除等 
测试方法:对于数值计算考虑操作数和操作符之间的限定关系,对于图形计算还要考虑各种输入数据之间的组合关系 
测试知识储备:全面掌握被软件中操作符对操作数的要求.掌握不同的操作符和操作数具有的不同的有效和无效的取值范围 
--------------------------------------------------------------------------------------------- 
1.6 方法13:递归调用自身 
案例: 
(1)在word 2000中插入脚注,脚注标号为1 
(2)再在脚注中插入一段脚注.此时脚注号变为11,第2段脚注的内容添加在了第一段脚注中,但是没有生成新的脚注 
1.6.1 分析缺陷产生的原因 
函数常调用其他函数来完成工作.有时函数调用自身,这就是递归,如果不限制执行次数,递归就会出现问题,它不断地调用自身,很快地占用机器资源,最终产生溢出,使程序崩溃或挂起 
产生这类问题的主要原因是开发人员没有编码来保证循环和递归调用的终止,通常是在循环的开始或结束时缺少检查条件 
1.6.2 如何发现这类问题 
在软件中寻找可以以使用递归调用的功能.这时可以制作一个列表,标明软件中可能嵌入递归的功能列表,然后自己引用自己来检查程序是否能正确处理.例如,在word文档1中链接文档1(自身);在excel单元格中输入=SUM(C7:C11) 
1.6.3 测试方法小结 
应用场合:需要和其他对象进行交互的地方 
测试方法:考虑对象的自我交互或复制 
测试知识储备:全面掌握被测软件的需求 
--------------------------------------------------------------------------------------------- 
1.7 方法14:计算结果溢出 
案例: 
sum=sum+value 
假设value是一数组,其值作为程序的输入,sum是内部存储的结果.以前应用的输入攻击会确保对边界和value的非法值进行测试.同样,应用数据攻击会全面测试sum,将此计算执行多次,就会使sum的数值溢出 
1.7.1 分析缺陷产生的原因 
当所有的输入和数据都有效时,计算的最终结果也可以是无效的.例如,等式x=x+1,多次执行该行代码,留给x内的内存最终会溢出该变量允许的最大值;同样,对于负值,若x=-32768,等式y=x-1就会失效.所有变量都有值域范围,有时开发人员在执行计算时会忘记检查这些上限.在对输入或存储的数据进行校验时,他们可能会记得,但是对计算结果进行校验会更加困难 
1.7.2 如何发现这类问题 
循环地执行计算或使用很大或很小的输入和数据进行计算,重点测试数据类型的初始值或边界值附近的值 
const count 2 
void main() 

   int sum,value[count]; 
   sum=0; 
   for(i=0;i<count;++i) 
   { 
      sum=sum+value
   } 
在输入如下数据时就会使程序崩溃: 
value[0]=32700,value[1]=70 结果32770,比32767大 
count=33000,value[0-32999]=1 结果为33000,也超过了边界 
1.7.3 测试方法小结 
应用场合:应用程序执行能够导出待产生结果并进行内部存储的计算 
测试方法:强制数据产生上溢或下溢 
测试知识储备:全面掌握被测试软件的需求,了解计算变量的上下限 
--------------------------------------------------------------------------------------------- 
1.8 方法15:数据共享或关联功能计算出错 
案例: 
1.在word文档中插入脚注 
2.选择"格式",分栏命令,将栏数改为2列. 
3.再看word文档中的脚注,同一页上有两个脚注.一个是从单列位置引用的,一个是从双列位置引用的,单列脚注把双列脚注挤到了下一页 
1.8.1 分析缺陷产生的原因 
通常对孤立的功能进行测试时不会发生很多的缺陷,而当把单独的功能和同一软件中的其他功能结合时,就可能出现很多软件缺陷.例如,在字处理程序中,可以生成带有脚注(一个功能)以及同一页上两栏(另一个功能)的文档,这两个功能都能单独有效地运行,但彼此交互就可能失效. 
这种缺陷的产生往往是在两个或更多的功能使用了共享数据集,而每个功能允许使用的数据范围不同引起的.例如,一个功能可能会将某数据项设置为特定大小,然而另一个功能却允许该数据项的大小可以超过第一个功能的处理能力.开发人员根本没考虑到该数据项在其他功能处也可以被修改,他们只是编码保证在该功能中数据的合法性,而当使用该数据时,没有再编码来检查可以使用的范围;而此时,另一个功能修改了共享数据,当再使用这些数据时,就产生了缺陷 
1.8.2 如何发现这类问题 
当应用程序在同一时间完成一个以上的功能或当一个以上的功能在同一时间处于运行状态时,就可以使用该方法进行测试.利用一个功能影响输入,输出数据或另一个功能的计算.在测试前要确定哪些功能是相互依赖或共享数据的: 
1.能应用同样输入的每个功能.如果某些功能有相互重叠的输入域,就可能存在交互问题. 
2.有类似的输出产生的功能.如果某些功能结合起来产生单个输出,就说明这些部件之间存在关系,应该被一起测试 
3.一个功能被包含在另一个功能的计算中.例如,要测试鼠标选取对象的功能,不仅要测试鼠标选取屏幕上的文本的功能,还可以把包含超链接文本,粗体,斜体,符号及图形等元素放在一起,测试鼠标选取这些元素的功能 
1.8.3 测试方法小结 
应用场合:一个以上的功能在同一时间处于运行状态 
测试方法:以点代面,重点测试某一功能,对可能与这个功能相连的其他功能附带测试. 
测试知识储备:全面掌握被测软件的需求,在测试之前对被测功能之间的依赖关联有所掌握,另外还需要对共享数据有所掌握. 


TAG:

 

评分:0

我来说两句

日历

« 2024-06-01  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 15812
  • 日志数: 22
  • 建立时间: 2013-04-10
  • 更新时间: 2013-11-20

RSS订阅

Open Toolbar