友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
软件测试的艺术(中文清晰版)(PDF格式)-第7部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
2。 是否有混合模式的比较运算,或不同长度的变量间的比较运算?如果有,
应确保程序能正确理解转换规则。
3。 比较运算符是否正确?程序员经常混淆“至多”、“至少”、“大于”、“不小
于”、“小于”和“等于”等比较关系。
4。 每个布尔表达式所叙述的内容是否都正确?在编写涉及“与”、“或”或
“非”的表达式时,程序员经常犯错。
5。 布尔运算符的操作数是否是布尔类型的?比较运算符和布尔运算符是否错
误地混在了一起?这是一类经常会犯的错误,这里我们描述几个典型错误
的例子:
o 如果想判断i是否在2 ~10之间,表达式2y》z,正确的表达式应该是 。
6。 在二进制的计算机上,是否有用二进制表示的小数或浮点数的比较运算?由
于四舍五入,以及用二进制表示十进制数的近似度,这往往是错误的根源。
7。 对于那些包含一个以上布尔运算符的表达式,赋值顺序以及运算符的优先顺
序是否正确?也就是说,如果碰到如同(if((a==2)&&(b==2) || (c==3))
的表达式,程序能否正确理解是“与”运算在先还是“或”运算在先?
8。 编译器计算布尔表达式的方式是否会对程序产生影响?例如,语句
if((x==0 && (x/y)》z)对于有的编译器来说是可接受的,因为其认为
一旦“与”运算符的一侧为FALSE 时,另一侧就不用计算;但是对于其他
编译器来说,却可能引起一个被0 除的错误。
3。3。5 控制流程错误
1。 如果程序包含多条分支路径,比如有计算GO TO语句,索引变量的值是否
会大于可能的分支数量?例如,在语句
…………………………………………………………Page 37……………………………………………………………
第3章 代码检查、走查与评审 25
中,i 的取值是否总是1、2或3 ?
2。 是否所有的循环最终都终止了?应设计一个非正式的证据或论据来证明每
一个循环都会终止。
3。 程序、模块或子程序是否最终都终止了?
4。 由于实际情况没有满足循环的入口条件,循环体是否有可能从未执行过?
如果确实发生这种情况,这里是否是一处疏漏?例如,如果循环以下面的
语句作为开头:
or。。。
当NOTFOUND初始时就为假,或者x大于z时,情况会如何呢?
5。 如果循环同时由迭代变量和一个布尔条件所控制(如一个搜索循环),如果
循环越界(fall…through )了,后果会如何?例如,伪指令循环以
开头,如果NOTFOUND 永不为假,会发生什么结果呢?
6。 是否存在“仅差一个”的错误,如迭代数量恰恰多一次或少一次?这在从0
开始的循环中是常见的错误。我们会经常忘记将“0 ”作为一次计数。举例
来说,如果想编写一段Java代码执行10次循环,下面的语句是错误的,因
为它执行了11次:
正确的应该是执行10次循环:
7。 如果编程语言中有语句组或代码块的概念(例如do…while 或 {…} ),是
否每一组语句都有一个明确的while语句,并且do语句也与其相应的语句
…………………………………………………………Page 38……………………………………………………………
26 软件测试的艺术
组对应?或者,是否每一个左括号都对应有一个右括号?目前的大多数编
译器都能识别出这些不匹配的情况。
8。 是否存在不能穷尽的判断?举例来说,如果一个输入参数的预期值是1,2
或3 ,当参数值不为1或2 时,在逻辑上是否假设了参数必定为3 ?如果是这
样的话,这种假设是否有效?
3。3。6 接口错误
1。 被调用模块接收到的形参(parameter )数量是否等于调用模块发送的实参
(argument )数量?另外,顺序是否正确?
2。 实参的属性(如数据类型和大小)是否与相应形参的属性相匹配?
3。 实参的量纲是否与对应形参的量纲相匹配?举例来说,是否形参以度为单
位而实参以弧度为单位?
4。 此模块传递给彼模块的实参数量,是否等于彼模块期望的形参数量?
5。 此模块传递给彼模块的实参的属性,是否与彼模块相应形参的属性相匹配?
6。 此模块传递给彼模块的实参的量纲,是否与彼模块相应形参的量纲相匹配?
7。 如果调用了内置函数,实参的数量、属性、顺序是否正确?
8。 如果某个模块或类有多个入口点,是否引用了与当前入口点无关的形参?
下面PL/1程序的第二个赋值语句就存在这种错误:
9。 是否有子程序改变了某个原本仅为输入值的形参?
10。 如果存在全局变量,在所有引用它们的模块中,它们的定义和属性是否相同?
11。 常数是否以实参形式传递过?在一些用FORTRAN语言编写的程序中,诸如
的语句是很危险的,因为如果子程序SUBX对其第二个形参进行赋值,常数3
的值将会被改变。
…………………………………………………………Page 39……………………………………………………………
第3章 代码检查、走查与评审 27
3。3。7 输入/输出错误
1。 如果对文件明确声明过,其属性是否正确?
2。 打开文件的语句中各项属性的设置是否正确?
3。 格式规范是否与I/O语句中的信息相吻合?举例来说,在FORTRAN语言中,
是否每个FORMAT语句都与相应的READ或WRITE语句相一致(就各项的数
量和属性而言)?
4。 是否有足够的可用内存空间,来保留程序将读取的文件?
5。 是否所有的文件在使用之前都打开了?
6。 是否所有的文件在使用之后都关闭了?
7。 是否判断文件结束的条件,并正确处理?
8。 对I/O 出错情况处理是否正确?
9。 任何打印或显示的文本信息中是否存在拼写或语法错误?
10。 程序是否正确处理了类似于“File Not Found ”这样的错误?
3。3。8 其他检查
1。 如果编译器建立了一个标识符交叉引用列表,那么对该列表进行检查,查
看是否有变量从未引用过,或仅被引用过一次。
2。 如果编译器建立了一个属性列表,那么对每个变量的属性进行检查,确保
没有赋予过不希望的默认属性值。
3。 如果程序编译通过了,但计算机提供了一个或多个“警告”或“提示”信
息,应对此逐一进行认真检查。“警告”信息指出编译器对程序某些操作的
正确性有所怀疑;所有这些疑问都应进行检查。“提示”信息可能会罗列出
没有声明的变量,或者是不利于代码优化的用法。
4。 程序或模块是否具有足够的鲁棒性?也就是说,它是否对其输入的合法性
进行了检查?
5。 程序是否遗漏了某个功能?
这些检查列表在表3…1和表3…2 中进行了总结。
…………………………………………………………Page 40……………………………………………………………
28 软件测试的艺术
表3…1 代码检查错误列表总结,第一部分
数据引用错误 运算错误
1。 是否有引用的变量未赋值或未初始化? 1。 是否存在非算术变量间的运算?
2。 下标的值是否在范围之内? 2。 是否存在混合模式的运算?
3。 是否存在非整数下标? 3。 是否存在不同字长变量间的运算?
4。 是否存在虚调用? 4。 目标变量的大小是否小于赋值大小?
5。 当使用别名时属性是否正确? 5。 中间结果是否上溢或下溢?
6。 记录和结构的属性是否匹配? 6。 是否存在被0 除?
7。 是否计算位串的地址?是否传递位串参数? 7。 是否存在二进制的不精确度?
8。 基础的存储属性是否正确? 8。变量的值是否超过了有意义的范围?
9。 跨过程的结构定义是否匹配? 9。 操作符的优先顺序是否被正确理解?
10。 索引或下标操作是否有“仅差一个”的错误? 10。 整数除法是否正确?
11。 继承需求是否得到满足?
数据声明错误 比较错误
1。 是否所有的变量都已声明? 1。 是否存在不同类型变量间的比较?
2。 默认的属性是否被正确理解? 2。 是否存在混合模式的比较运算?
3。 数组和字符串的初始化是否正确? 3。 比较运算符是否正确?
4。 变量是否赋予了正确的长度、类型和存储类? 4。 布尔表达式是否正确?
5。 初始化是否与存储类相一致? 5。 比较运算是否与布尔表达式相混合?
6。 是否有相似的变量名? 6。 是否存在二进制小数的比较?
7。 操作符的优先顺序是否被正确理解?
8。 编译器对布尔表达式的计算方式是否
被正确理解?
表3…2 代码检查错误列表总结,第二部分
控制流程错误 输入/输出错误
1。 是否超出了多条分支路径? 1。文件属性是否正确?
2。 是否每个循环都终止了? 2。OPEN语句是否正确?
3。 是否每个程序都终止了? 3。I/O语句是否符合格式规范?
4。 是否存在由于入口条件不满足而跳过循环体? 4。缓冲大小与记录大小是否匹配?
5。 可能的循环越界是否正确? 5。文件在使用前是否打开?
6。 是否存在“仅差一个”的迭代错误? 6。 文件在使用后是否关闭?
7。 DO/END语句是否匹配? 7。 文件结束条件是否被正确处理?
8。 是否存在不能穷尽的判断? 8。 是否处理了I/O错误?
9。 输出信息中是否有文字或语法错误?
接口错误 其他检查
1。 形参的数量是否等于实参的数量? 1。 在交叉引用列表中是否存在未引用过
2。 形参的属性是否与实参的属性相匹配? 的变量?
3。 形参的量纲是否与实参的量纲相匹配? 2。 属性列表是否与预期的相一致?
4。 传递给被调用模块的实参个数是否等于 3。 是否存在“警告”或“提示”信息?
其形参个数? 4。 是否对输入的合法性进行了检查?
…………………………………………………………Page 41……………………………………………………………
第3章 代码检查、走查与评审 29
(续)
接口错误 其他检查
5。 传递给被调用模块的实参属性是否与 5。 是否遗漏了某个功能?
其形参属性匹配?
6。 传递给被调用模块的实参量纲是否与
其形参量纲匹配?
7。 调用内部函数的实参的数量、属性、
顺序是否正确?
8。 是否引用了与当前入口点无关的形参?
9。 是否改变了某个原本仅为输入值的形参?
10。 全局变量的定义在模块间是否一致?
11。 常数是否以实参形式传递过?
3。4 代码走查
代码走查与代码检查很相似,都是以小组为单位进行代码阅读,是一系列规
程和错误检查技术的集合。代码走查的过程与代码检查大体相同,但是规程稍微
有所不同,采用的错误检查技术也不一样。
就像代码检查一样,代码走查也是采用持续一至两个小时的不间断会议的形
式。代码走查小组由三至五人组成,其中一个人扮演类似代码检查过程中“协调
人”的角色,一个人担任秘书(负责记录所有查出的错误)的角色,还有一个人
担任测试人员。关于这三到五个人的组成结构,有各种各样的建议。当然,程序
员应该是其中之一。我们建议另外的参与者应该包括:
o 一位极富经验的程序员;
o 一位程序设计语言专家;
o 一位程序员新手(可以给出新颖、不带偏见的观点);
o 最终维护程序的人员;
o 一位来自其他不同项目的人员;
o 一位来自该软件编程小组的程序员。
开始的过程与代码检查相同:参与者在走查会议的前几天得到材料,这样可
以专心钻研程序。然而走查会议的规程则不相同。不同于仅阅读程序或使用错误
检查列表,代码走查的参与者“使用了计算机”。被指定为测试人员的那个人会带
着一些书面的测试用例(程序或模块具有代表性的输入集及预期的输出集)来参
加会议。在会议期间,每个测试用例都在人们脑中进行推演。也就是说,把测试
…………………………………………………………Page 42……………………………………………………………
30 软件测试的艺术
数据沿程序的逻辑结构走一遍。程序的状态(如变量的值)记录在纸张或白板上
以供监视。
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!