
功能性测试的测试方法一 2
1.1软件故障模型 2
1.1.1软件故障框架 2
1.2方法1:输入非法数据 2
1.2.1分析缺陷产生的原因 3
1.2.2如何发现这类问题 3
1.2.3测试方法小结 3
1.3方法2:输入默认值 4
1.3.1分析缺陷产生的原因 4
1.3.2如何发现这类问题 4
1.3.3测试方法小结 5
1.4方法3:输入特殊字符集(或数据类型的合法输入) 5
1.4.1分析缺陷产生的原因 5
1.4.2如何发现这类的问题 6
1.4.3测试方法小结 6
功能性测试的测试方法二 11
1.1方法8:输出属性修改后的结果 11
1.1.1分析缺陷产生的原因 12
1.1.2如何发现这类问题 12
1.1.3测试方法小结 12
1.2方法9:屏幕刷新显示 12
1.2.1分析缺陷产生的原因 12
1.2.2如何发现这类问题 12
1.2.3测试方法小结 13
功能性测试的测试方法三 17
1.1方法16:文件系统加载 17
1.1.1分析缺陷产生的原因 17
1.1.2如何发现这类问题 18
1.1.3测试方法小结 18
1.2方法17:介质忙或不可用 18
1.2.1分析缺陷产生的原因 18
1.2.2如何发现这类问题 19
1.2.3测试方法小结 19
1.3方法18:介质损坏 19
1.3.1分析缺陷产生的原因 19
1.3.2如何发现这类问题 19
1.3.3测试方法小结 20
1.4方法19:文件名不合法 20
1.4.1分析缺陷产生的原因 20
1.4.2如何发现这类的问题 20
1.4.3测试方法小结 21
1.5方法20:更改文件访问权限 21
1.5.1分析缺陷产生的原因 21
1.5.2如何发现这类的问题 21
1.4.3测试方法小结 22
1.6方法21:文件内容受损 22
1.6.1分析缺陷产生的原因 22
1.6.2如何发现这类问题 22
1.6.3测试方法小结 23
功能性测试的测试方法一
----------------------------------------------------------------------------------
1.1软件故障模型
优秀的软件测试人员可以很快找到解决办法.虽然测试时有很多单个输入变量,多个输入变量的组合,但是优秀的软件测试人员不会依靠运气,他们有着丰富的确验和直觉,可以从中找到哪些是要进行测试的,哪些不需要测试,哪些操作可能会引起软件失效.把这些测试人员的经验和直觉尽量归纳和固化,以形成一些故障模型(fault model).如同在PowerPoint中做演示文稿通常会利用模板一样,故障模型也是这样的一些模板,它指明了故障是如何以及为什么在软件执行时引起软件失效的.在测试过程中,可以按照这些故障模型所提供的缺陷类型和寻找该类缺陷的办法找到尽量多的缺陷.
---------------------------------------------------------------------------------------------
1.1.1软件故障框架
对测试人员来说最重要的是能够建立一个准确的故障模型,并使用该模型决定测试策略,设计和运行测试用例.建立故障模型是要针对具体的软件类型,应用环境,甚至开发工具的.
---------------------------------------------------------------------------------------------
1.2方法1:输入非法数据
凡是在有需要输入数据的地方,输入与需求说明不符的数据.
---------------------------------------------------------------------------------------------
1.2.1分析缺陷产生的原因
开发人员通常用以下3种技术来处理非法输入:
1).防止不正确的输入进入被测试软件.过滤掉不正确的输入,只允许合法输入通过界面.
2.)输入了不正确的数据后,软件提示错误信息,拒绝不正确的输入.例如,开发人员可以加入IF语句来保证输入的合法性,IF输入合法THEN处理输入,ELSE显示错误信息.在测试时,要确保可以看到这样的信息.
3).允许不正确的输入进入系统并进行处理,软件失效时调用异常处理程序,它通常包括重新设置内部变量,并闭文件,存储软件等代码.一般还要显示一些错误信息.
---------------------------------------------------------------------------------------------
1.2.2如何发现这类问题
软件应该能够拒绝非法的输入或对非法的输入做出反应.我们可以给出一组不正确的输入来测试软件的这个能力.无论测试的是GUI的输入还是API调用的参数,在进行测试时,都必须从输入的属性出发,一般要考虑的属性有以下3点.
1).输入类型:输入无效的数据类型常会产生错误信息.
2.)输入长度:对于字符型,输入太多的字符常会引出错误信息.
3.)边界值:输入边界值或超过边界值的数据.
---------------------------------------------------------------------------------------------
1.2.3测试方法小结
1.应用场合:GUI的输入
2.测试方法:分别从输入数据的类型,输入数据的长度,输入数据的边界值等方面进行考虑, 设计有效的测试用例.
3.测试信息的检查:除了考虑输入非法数据,还要留意错误信息本身,特别要注意以下几点:
(1) 错误信息和错误要一致,防止A的错误提示显示给了错误B
(2)错误信息的内容为空,用户不知道为什么出错.
(3)显示的错误信息是给开发人员调试使用的.例如"error 5-unknown data用户看不懂.
4.测试知识储备:牢记基本数据类型的边界值.
类型 长度 范围
无符号整型 2字节 0~65535
4字节 0~4294967295
有符号整型 2字节 -32768~32767
4字节 -21474838~21474837
字符型 1字节 256个值
2字节 65536个值
布尔型 1字节 真或假
浮点型 4字节 1.2E-38~3.4E+38
8字节 2.2E-308~1.8E+308
10字节 3.4E-4932~1.1E+4932
---------------------------------------------------------------------------------------------
1.3方法2:输入默认值
输入默认值,看程序的处理结果是否正确.
---------------------------------------------------------------------------------------------
1.3.1分析缺陷产生的原因
一旦软件中使用了变量,就必须赋给初始值,如果在赋值之前就使用了这些变量,软件就会失效,正确地使用变量的顺序是:声明变量~~给变量赋值~~使用变量.通常会由于以下两个原因使变量的默认值不正确:
1).给变量赋值这一步经常会被开发人员不经意地跳过.虽然在编译期间,使用代码分析工具就可以发现这种情况,但是开发人员有可能没有使用这种工具.使用未初始化的变量的一种结果就是会引发一般保护性错误,使应用程序崩溃.另一种情况是内存中的值被随机地赋给了变量,软件不会崩溃,但是会产生错误的结果.测试人员必须仔细分析存在问题的软件的输出,寻找无用字符,显示或返回的错误数据类型(例如,在希望显示数字的地方显示字母)等.
2).开发人员有时不确定到底要赋什么初始值,就随便给了一个值,但用户并不认可该值,这种情况下,软件并不一定会失效.但对用户的使用会带去很多不方便.例如某程序把打印默认输出份数为2份,将给用户造成很大麻烦.测试人员必须认真检查软件显示的每个默认值,以确定是否是用户想要的正确的默认值.
---------------------------------------------------------------------------------------------
1.3.2如何发现这类问题
创建默认值是相当难的程序设计工作.开发人员要确保变量在进入循环或进行函数调用之前就做了初始化.如果没做初始化,使用这样的变量将产生严重的后果.确定应用软件中所使用的数据有以下一些基本原则:
1).查找选项按钮,配置面板,安装屏幕等.这种屏幕上显示的数据常常在应用程序的许多地方用到.
2.)查阅源代码的数据声明部分
3.)确定了要测试的数据,可以通过以下操作来强制使用或不使用默认值:
(1)接受软件显示的黑认值.有时软件需要用户输入一个值,如果没有输入任何值,软件就可能失效.这时可以只是简单地单击"确定"按钮来接受默认值,完成这个功能测试.
(2)键入空值.删掉默认值,使输入框变成空值.
(3)将默认值改为另一个值,这样会使应用程序以不同的值来运行.
(4)将默认值改为另一个值,然后再变为空值.
一个好的软件会这样处理以上情况,将输入的不合法内容默认为合法边界内的某个合理值,或者返回错误提示信息.
---------------------------------------------------------------------------------------------
1.3.3测试方法小结
应用场合: 需要有默认值的地方.
测试方法:分别从选项按钮,配置面板,安装配置,开始界面等方面进行考虑,强制使用或不使用默认值等.
测试知识储备:全面理解需求规格说明书中对默认值的要求;同时深刻理解被测软件的行业背景.
---------------------------------------------------------------------------------------------
1.4方法3:输入特殊字符集(或数据类型的合法输入)
1.4.1分析缺陷产生的原因
应用程序接受字符串输入,如果程序没有针对特殊输入进行特殊编程,那么就有可能导致程序挂起,主要包括以下3种情况:
1.字符集包括普通字符和特殊字符.例如,ASCII字符集包括普通字符和特殊字符.应用程序有时只能处理普通字符,当输入特殊字符时就会出现错误.
2.实现应用程序的程序设计语言有特定的处理一些字符和字符串的方法.例如,C语言把\\n,++,&这样的字符用于特殊目的.如果将这些字符串输入到对话框中,程序必须进行错误处理,否则容易产生错误.
3.应用程序有时也使用设备名称,系统对象和程序的保留字符串集合.只要在程序中使用了这些字符串,就可能导致失效.
---------------------------------------------------------------------------------------------
1.4.2如何发现这类的问题
1.根据被测试软件所处的操作系统,使用的程序设计语言,字符集等信息列出表格,通过测试小组的讨论,标明应用表格中的哪些字符和数据类型作为输入来测试.
2.根据经验,软件很少会因为这种操作而崩溃,通常它会挂起无响应,可以通过任务管理器结束该任务.
---------------------------------------------------------------------------------------------
1.4.3测试方法小结
应用场合:需要接受字符输入的地方.
测试方法:根据被软件的具体情况输入非法字符.
测试知识储备:尽可能多地了解字符集,程序设计语言和操作系统中的保留字符串及其特定含义,可以更好的分辨这类缺陷.以下列出了ASCII字符集及一些可能出问题的字符,以供参考.
字符值:NUL
ASCII值:0
适用范围:windows dos,C语言,C++
用途:1.MS-DOS的系统函数使用NUL终止字符串 2.对所有标准库函数,C用NUL作为终止字符串字符
故障模型:嵌入的空串可能会影响用于系统调用的字符串.NUL可能会使后面的所有字符被忽略
字符值:ETX
ASCII值:3
适用范围:windows dos
用途:MS-DOS 使用ETX作为程序中断符
故障模型:输入ETX程序就会中断
字符值:EOT
ASCII值:4
适用范围:UNIX
用途:UNIX使用EOT作为文本的文件结束符
故障模型:忽略输入EOT以后出现的字符或程序可能终止,或其他预料不到的行为
字符值:BS
ASCII值:8
适用范围:windows
用途:退格
故障模型:在持久数据中嵌入退格.引起退格或没有视觉效果的光标移动
字符值:Tab
ASCII值:9
适用范围:所有
用途:Tab键
故障模型:将Tab键扩展作为持久数据中的空格,或者当应扩展时,仍然作为一个Tab字符
字符值:LF
ASCII值:10
适用范围:windows
用途:换行
故障模型:windows使用CR/LF作为换行字符.多余的LF可能会引起持久数据的问题
字符值:FF
ASCII值:12
适用范围:所有
用途:走纸换页
故障模型:如果嵌入可能会引起持久数据的显示问题,特别是打印问题.
字符值:CR
ASCII值:13
适用范围:所有
用途:回车
故障模型:可能使指定的Ctrl+M不能实现其功能
字符值:CAN
ASCII值:24
适用范围:windows
用途:使以前输入的文本取消,获得重新输入
故障模型:可能会忽略以前的输入
字符值:SUB
ASCII:26
适用范围:windows
用途:文本中的文件结束符
故障模型:输入SUB有很宽的有效范围,输入后的字符会被忽略;输入或程序会终止,或者发生预料不到的行为
字符值:SPACE
ASCII值:32
适用范围:UNIX
用途:在一些程序中SPACE用来分隔参数
故障模型:如果字符串在后面被当成参数对待,嵌入的SPACE串会产生错误的效果
字符值:"
ASCII值:34
适用范围:C语言,VB等语言
用途:引号用来分隔字符串
故障模型:在解释或处理字符串时,不匹配的引号,嵌入的引号等可能会产生意想不到的行为
字符值:%
ASCII值:37
适用范围:windows,C语言和C++
用途:windows用%作为环境扩展符,C语言用%作为参数扩展符
故障模型:1.windows中可能会扩展其外部变量值的表示,例如,10%20%就可扩展为10(变量20的值).
2.C语言中,如果%被解释成字符串的函数扩展,可能会引起崩溃,数据冲突和其它问题
字符值:*
ASCII值:42
适用范围:windows
用途:通配符
故障模型:如果解释,会出现错误
字符值:+
ASCII值:43
适用范围:UNIX
用途:规则运算符
故障模型:如果解释,会出现错误
字符值:?
ASCII值:63
适用范围:UNIX
用途:规则运算符
故障模型:如果解释,会出现错误
字符值:\\
ASCII:92
适用范围:C语言,C++
用途:转义符,用在字符串中嵌入非常规字符
故障模型:如果解释或展开,会产生很多特别的效果;\\000和\\0生成NUL,\\n换行,\\a生成铃声等等.
---------------------------------------------------------------------------------------------
1.5 方法5:输入使缓冲区溢出的数据
输入255个字符
---------------------------------------------------------------------------------------------
1.5.1 分析缺陷产生的原因
引起这种缺陷的原因是开发人员没有考虑传送给内存缓冲区的字符串的大小.如果缓冲区只能保留固定长度的字符串,输入的更长字符串就会改写其他的内存存储单元,引起操作系统强制性地终止应用程序.
键入一长串字符使之溢出缓冲区,也是黑客喜欢的攻击系统的一种方法,因为有时应用程序在崩溃后仍在执行某个进程,如果黑客在输入的长字符串最后加上某个可执行的符字串,那么进程就会执行该字符串.
---------------------------------------------------------------------------------------------
1.5.2 如何发现这类问题
当应用程序允许输入字母,数字时,通过GUI控件(如文本框),或者通过API调用的参数来进行这种测试.
1.首先弄清楚要测试的输入域的长度,输入最大字符串测试.
2.输入一个比最大字符串更长的字符串,应用程序可能出现错误提示信息,提示不允许输入;或者输入了更长的字符串使应用程序崩溃.
---------------------------------------------------------------------------------------------
1.5.3 测试方法小结
应用场合:需要接受字符输入的地方.
测试方法:根据被测软件的具体情况输入最大字符串或输入一个比最大字符串更长的字符串.
测试知识储备:尽可能多的和开发人员讨论,以了解和确定输入域的合理长度.
---------------------------------------------------------------------------------------------
1.6 输入产生错误的合法数据组合
一个软件在各输入值之间往往存在着依赖关系.
---------------------------------------------------------------------------------------------
1.6.1 分析缺陷产生的原因
本测试主要是测试多个输入值的组合,每个输入值已被单独测试过,但是这些值的组合可能会互相影响而引起软件失效.例如,用两个参数作为输入值的某一API,需要在一个参数值的基础上为另一个参数选择某个值,同样面板上有多个输入域的GUI可能包含多个相关输入,这些值包含的逻辑关系很复杂,编程时很容易弄错它们之间的关系.
在编程的时候对某个变量的单个值进行检查相对要简单一些.必须对多个变量进行检查时,就需要更复杂的控制结构.开发人员可能会写出多层嵌套的"IF"语句来检查多个相关的值;由于很难全面考虑这种结构,调试起来也比较困难,很容易出现缺陷.另外,代码修改也会产生许多无法预料的问题影响输入关系,使缺陷更难被调试.
---------------------------------------------------------------------------------------------
1.6.2 如何发现这类问题
首先要确定测试哪些输入组合,并弄清楚它们之间的"依赖关系".如果具备以下任一特性,就可以认为这些变量是有"依赖关系"的.
1.描述的是有关单个内部数据结构的属性和内容.例如,输入面板需要用户键入列表的"行"和"列这时测试人员要输入单个内部数据结构"列表"的属性"行和列".
2.一起用在了一个计算中,也就是将多个输入用做一个内部计算的操作数,因此这些输入变量具有了相互"关系".例如,字处理程序将左,右,上,下边界作为输入,利用这些值来计算页面大小.
一旦确定了哪些输入组合有关系,就要确定使用哪些值进行测试.由于不可能对所有的输入组合都进行详尽的测试,所以必须从可能的组合中挑选出有效的值来测试.我们可以用等价类划分和边界值的方法选择输入数据.如同前面学过的,选择单个值来测试通常是指选择可接受值的极值,例如非常小或非常大的整数.当考虑多个输入域时,可以使用非常大的值作为一人输入,非常小的值作为另一个输入.
---------------------------------------------------------------------------------------------
1.6.3 测试方法小结
应用场合:输入值之间存在依赖关系
测试方法:输入可能是出现问题的组合值
测试知识储备:尽可能多的内部数据结构的属性和内容,并与开发人员多探讨,以确定输入的数据值
---------------------------------------------------------------------------------------------
1.7 方法6:产生同一个输入的各种可能输出
单个输入导致多个输出的产生,这与施加输入的语境有关.例如,如果测试电话接线器,必须测试的输入就是该接线器正确处理特定输入的能力(即用户拿起听筒).因为应用输入时,接线器就会产生两个主要输出,因此,必须两个都进行测试.首先考虑电话空闲且拿起听筒的情况:接线器会产生拔音输出,并传送到电话中.现在考虑电话铃响的情况:接线器会将用户对方的电话用户接通,这样,用户拿起听筒,这就已经进行了两种主要输出(或)行为的测试.
---------------------------------------------------------------------------------------------
1.7.1 分析缺陷产生的原因
单个输入产生多种输出的情况与先前的输入和被测试系统的状态都有关系.对开发人员来说,他们必须先编码实现访问内部变量的函数,确定系统当前的状态,再实现所需的输出.这显然比简单地接收输入,然后产生相应的输出复杂得多,所以实现起来更容易出错.例如,在文字处理程序中单击"关闭"按钮,如果文件被编辑且未被保存,程序提示是否保存文件.如果文件已被保存过,则文件直接被关闭.
---------------------------------------------------------------------------------------------
1.7.2 如何发现这类问题
测试人员必须具有关于被测试软件的业务方面的知识,具备各种程序文档,明确一个输入可以产生何种输出.我们可以据此列出关于程序输入与输出的一个列表,然后进行测试.
---------------------------------------------------------------------------------------------
1.7.3 测试方法小结
应用场合:同一输入对应多个输出的情况
测试方法:测试输入对应的每一个输出
测试知识储备:全面理解需求规格说明书中的内容,找出输入与输出之间的关系
---------------------------------------------------------------------------------------
1.8 方法7:输出不符合业务规则的无效输出
1.8.1 分析缺陷产生的原因
有时,开发人员也可能对业务了解不深刻,因此编写出的软件就会产生不符合业务逻辑的问题.
另外,绝大多数情况下,开发人员会忽略处理没有遵循一般规则的输入,如果不对这些特殊情况进行编程处理,软件就会产生错误的结果.例如,计算按日收费的专线时,2月份没有30天,只能按28或29天计算
---------------------------------------------------------------------------------------------
1.8.2 如何发现这类问题
通过软件的预期目标列举出所有的无效输出,然后逐一测试.例如,测试日历程序并了解了一些函数的受限范围,就可以设计一些输入值以强制函数产生无效输出.如果不了解该函数,甚至会将结果当作正确结果
如同对输入域进行分析以确定测试输入一样,执行该测试需要对输出进行分析的内容如下:
1.测试人员应该多地学习所涉及问题的领域.例如对财务软件进行测试,就要学习财务的相关知识.对计算器进行测试就要学习数学知识
2.有时在列举出无效输出后,也很难知道哪些输入组合能强制这些输出产生.这时,测试人员必须先要确定哪些输入与输出有关,然后用产生意外结果的输入组合进行测试,测试过程中要注意输入执行的顺序,用不同的顺序执行可能得到不同的结果.如果不能强制无效的输出产生,就说明软件没有这方面的缺陷
在验证测试结果时,要重点查看输出结果的正确性,因为这种测试结果MS正确,必须细心验证才行
---------------------------------------------------------------------------------------------
1.8.3 测试方法小结
应用场合:强制产生不符合业务背景的输出
测试方法:列举出所有的无效输出,然后逐一测试
测试知识储备:全面理解需求规格说明书中的内容,熟悉行业背景知识
功能性测试的测试方法二
软件测试基本知识 2008-10-31 19:36:24 阅读61 评论0 字号:大中小 订阅
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 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 测试方法小结 应用场合:一个以上的功能在同一时间处于运行状态 测试方法:以点代面,重点测试某一功能,对可能与这个功能相连的其他功能附带测试. 测试知识储备:全面掌握被测软件的需求,在测试之前对被测功能之间的依赖关联有所掌握,另外还需要对共享数据有所掌握. 功能性测试的测试方法三 软件测试基本知识 2008-10-31 19:37:38 阅读22 评论0 字号:大中小 订阅 1.1方法16:文件系统加载 案例: 按容量填满文件系统会确保应用程序能很好地处理满磁盘的情况.一旦Canned HEAT 模拟了满状态下的磁盘,就应该抓住每个机会试着强制应该程序打开,关闭,读取,写入和修改文件.这样能发现访问文件的位置,但是对满状态下的磁盘,软件无法实施检查. 1.1.1分析缺陷产生的原因 随着时间的推移,文件系统越来越满.许多用户从来不清理回收站,并在有严重碎片的硬盘上操作;另外,用户保存的文件也越来越大,比如几小时的DV摄像内容,因此巨大的硬盘很容易被填满. 大多数开发开人员也习惯于过大的存储器,可能会忘记编写代码处理满状态的文件.他们完全忽略了诸如CreateFile,WriteFile等操作系统API的错误检查代码,没有这样的代码,当显示满状态的文件系统时,API调用就会失效,软件就会在没有任何警告的情况下崩溃 1.1.2如何发现这类问题 分析应用程序,并记录下属于通过输入或输出访问文件系统的操作.如打开,保存,另存为,新建,关闭文件等菜单项,都需要用户操作才能访问文件系统.另一种情况是应用程序自动启动的文件读取和写入,如自动保存文件功能(如在word中设置每隔10分钟自动存储文件),简单的页面交换等不需要用户操作就可以访问文件的操作 创建满容量或近乎满容量的文件系统,然后强制执行各种通过输入或输出访问文件系统的操作;或者打开足够多的文件,打开文件时会强制备份创建的副本,从而占有双倍的存储空间,这种操作达到一定程序时,会达到该系统的容量,于是就能测试应用程序处理超载状态的文件系统的能力 但是执行这种测试所必需的满文件系统的维护很繁琐,如果每次测试都要删除文件并重新生成,就会增加大量的工作量.所以可使用一些测试工具模拟满磁盘的状况 1.1.3测试方法小结 应用场合:系统较大,运行时需要较大的空间 测试方法:强制磁盘系统满容量或容量小于等于被测软件运行时所需容量后,运行被测软件或利用测试工具模拟磁盘状况 测试知识储备:全面掌握被软件的需求,了解被测软件处理超载状态的文件系统的能力 --------------------------------------------------------------------------------------------- 1.2方法17:介质忙或不可用 案例分析: (1)读取文件.测试需求,如果"读文件"按钮被单击两次以上,系统就会给出错误提示信息:文件正在被应用程序读取 (2)运行程序后,实际结果:Run-time error '55': File already open 1.2.1分析缺陷产生的原因 大多数操作系统都能同时运行许多应用程序(多任务),一些应用程序在后台运行,且用户不可见(服务程序);用户应用程序也能同时运行,在windows中,利用alt+tab键在用户启动的前台和后台应用程序之间进行切换 当多个应该程序同时访问硬盘(或其他存储器),操作系统为提供多请求服务会慢下来,并且必须对应用程序进行编程以处理这些延迟,当延迟时间变得很长时,没有对这些错误进行响应的应用程序就会出现错误 1.2.2如何发现这类问题 启动多个应用程序,强制它们打开并保存文件使文件系统处于忙碌状态;或者同时下载大量文件也可以使后台拥挤;或者使用测试工具模拟磁盘的状况,例如,模拟系统打开了太多的文件.检查被测软件能否正确处理这种情况,应用程序应该给出错误信息或等待提示,提示用户正在处理 1.2.3测试方法小结 应用场合:应用程序的运行需要消耗大量内存或运行时需求其他相关软件同时运行 测试方法:启动大量程序或利用测试工具模拟磁盘状况 测试知识储备:全面掌握被测软件的需求,了解被测软件运行时对系统的需求 --------------------------------------------------------------------------------------------- 1.3方法18:介质损坏 案例分析: 强制介质忙或不可用会保证与存在问题的存储设备相关的错误条件得到测试.其思想是,当应用程序访问硬盘驱动,软件盘驱动或其他外部存储设备时,强制错误返回码标明介质存在的问题.如果开发人员无法对这些条件编写适当的错误处理程序,应用程序就会失效 1.3.1分析缺陷产生的原因 1.损坏的介质可能会使操作系统传回错误代码,这些错误代码没有在应用程序中编程处理(无法通知应用程序编程进行处理) 2.操作系统不能检测出所有这样的错误,操作系统自己也有错误或者损坏的介质损坏了部分操作系统 1.3.2如何发现这类问题 使用介质损坏的方法,大多是开发操作系统,设备驱动程序以及以安全性为主的应用程序的公司会采用.确定是否使用该方法,主要要考虑数据对用户的重要性 用该方法时,只能使用实际损坏了的介质,例如,刮伤,灰尘,磁干扰等.检查应用程序对错误的处理能力,应用程序可以对错误进行处理或者将问题告诉用户,并要确保用户数据文件不丢失,不损坏 1.3.3测试方法小结 应用场合:应用程序对安全要求较高,对灾难恢复的要求较高 测试方法:用实际损坏介质的方法测试应用程序 测试知识储备:全面掌握被测软件的需求,了解被测软件运行时对系统的要求 --------------------------------------------------------------------------------------------- 1.4方法19:文件名不合法 案例分析: 在windows 2000中使用word 2000,打开新文件,输入任意文本,然后另存为,输入文件名"test;filename-5.1.2004由于字符在文件名中的组合存在问题,使得文件不能被保存成扩展名为.doc的文件,而得到.2004 1.4.1分析缺陷产生的原因 操作系统本身具有自己的文件命名规范,例如,dos的8.3格式(8个字符的文件和3个字符的扩展名).在windows中,文件名不能超过255个字符,并且文件名不可以含有/\\:<>?*|这8个字符,以及AUX,COM1,COM2,COM3,COM4,CON,LPT1,LPT2,LPT3,LPT4,NUL,PRN这些操作系统的保留字 开发人员在应用程序中使用和操作系统不一致的命名规则时,就会发生问题.例如,应用程序允许命名了一个在操作系统中无效或产生特殊意义的文件名,操作系统会给程序返回一个错误信息,如果应用程序没有编程处理该错误,就会使程序崩溃或出现错误.在word中保存文件时,程序可以自动给出扩展名.doc,但是当把分号符号和圆点符号组合起来使用的时候,就会产生错误,使应用程序把.2004作为扩展名给了文件 1.4.2如何发现这类的问题 1.保存文件为操作系统不允许的文件名,测试应用程序是否不允许输入包含这些字符的文件 2.输入一些应用程序不允许使用的文件,例如,使用过长的,含有特殊字符的,可能相互作用的字符作为文件,检查应用程序能否识别该文件 1.4.3测试方法小结 应用场合:几乎所有涉及需要输入文件名功能的应用程序 测试方法:输和操作系统不允许的文件名和应用程序不允许使用的文件 测试知识储备:全面掌握被测软件的需求,了解操作系统和应用程序对文件名的要求 --------------------------------------------------------------------------------------------- 1.5方法20:更改文件访问权限 案例分析: 1.向c:\\file.txt中写入内容,修改file.txt访问权限为只读,单击"写文件"按钮.测试需求:如果文件的属性为只读,系统给出正确的错误提示:文件属性为只读,无法修改它 2.程序运行后,程序崩溃:Run-time error '75': path/File access error 1.5.1分析缺陷产生的原因 在操作系统中,可以设置不同用户对不同的文件具有不同的访问权限.例如,当以只读方式编辑一个文件时就会出现问题.开发人员必须在访问文件的函数中考虑文件的访问权限,例如在每个文件写入之前检查文件的访问权限.如果没有进行检查,就会导致程序出错.另外,如果文件访问失败,程序必须要有正确处理错误的代码,以保证程序可以正确捕获所产生的错误 1.5.2如何发现这类的问题 1.打开两个应用程序,打开同一个文件.例如,把同一应用程序的不同版本安装在同一机器上,在不同版本的庆用程序中打开和关闭同一文件,或者试着在某个应用程序中打开在另一个程序中已打开的文件,这可能会导致文件访问权限的冲突 2.打开一个文件,在操作系统中修改该文件的访问权限.有些操作系统允许权限高的用户控制一般用户已打开的文件 1.4.3测试方法小结 应用场合:需要对文件进行读写操作的应用程序 测试方法:修改文件访问权限或用低权限的用户访问文件 测试知识储备:全面掌握被测软件的需求,了解读写文件所需的权限 --------------------------------------------------------------------------------------------- 1.6方法21:文件内容受损 案例分析: 在windows xp的excel 2000中新建文件,然后在office字处理软件(word,写字板)中编辑该文件,并再次保存为.xls格式,由于该字处理软件的问题,此时文件内容被破坏,然后在excel中打开并编辑该文件后保存,excel不能处理内容受损的文件,彻底崩溃 1.6.1分析缺陷产生的原因 开发人员编写代码来读取和写入文件,也编写代码来调用系统API得到文件指针,并打开和关闭文件.由于某些原因,这些系统API会失败或传回异常返回值.如果开发人员没有编写代码来处理传回的预期返回值,则应用程序会由于无法处理异常而失效 另外,还必须编写代码验证文件的格式和内容.验证格式包括与二进制相对的文本格式,合适的分隔符以及数据类型正确的字段值.验证内容包括验证用于预期目标的数据是否存在正确的合法范围内.如果这一代码的任何部分发生错误或丢失,软件也会失效.没有确认文件格式或内容意味着受测软件可能要处理非法数据.分隔符不匹配会引起字段读取次序错误,并且常会破坏使用这些值的内部计算 1.6.2如何发现这类问题 1.手工损坏文件.从应用程序已创建的文件对其进行编辑,改文件格式和内容.若是文本文件,使用标准编辑器进行;若是二进制文件,使用如UltraEdit的十六进制编辑器,可以对文件的分隔符和实际字段进行删除,添加和修改 2.使用测试工具.模拟CRC(循环冗余校验)错误,或强制文件API返回无效的返回码 1.6.3测试方法小结 应用场合:需要对文件格式和内容进行校验的应用程序 测试方法:手工损坏文件或利用测试工具模拟CRC错误 测试知识储备:全面掌握被测软件的需求,了解文件读写需要的权限
