友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

软件测试的艺术(中文清晰版)(PDF格式)-第9章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






  4。 是否每个变量都被赋予了正确的长度和数据类型? 



  5。 变量的初始化是否与其存储空间的类型一致?举例来说,如果Fortran语言 



    子程序中的一个变量在每次调用子程序时都需要重新初始化一次,那么必 



    须使用赋值语句对其初始化,而不应该用DATA语句。 



  6。 是否存在着相似名称的变量(如VOLT和VOLTS)?这种情况不一定是错误, 



    但应被视为警告,这些名称可能会在程序中发生混淆。 


…………………………………………………………Page 35……………………………………………………………

                           第3章 代码检查、走查与评审    23 



3。3。3   运算错误 



   1。 是否存在不一致的数据类型(如非算术类型)的变量间的运算? 



   2。 是否有混合模式的运算?例如,将浮点变量与一个整型变量做加法运算。 



    这种情况并不一定是错误,但应该谨慎使用,确保程序语言的转换规则能 



    够被正确理解。看看下面的Java程序片段,显示了整数运算中可能发生的 



    取整误差: 



   3。 是否有相同数据类型、不同字长变量间的运算? 



   4。 赋值语句的目标变量的数据类型是否小于右边表达式的数据类型或结果? 



   5。 在表达式的运算中是否存在表达式向上或向下溢出的情况?也就是说,最 



    终的结果看起来是个有效值,但中间结果对于编程语言的数据类型可能过 



    大或过小。 



   6。 除法运算中的除数是否可能为0 ? 



   7。 如果计算机表达变量的基本方式是基于二进制的,那么运算结果是否不精 



    确?也就是说,在一个二进制计算机上,10×0。1很少会等于1。0。 



   8。 在特定场合,变量的值是否超出了有意义的范围?例如,对变量 



    PROBABILITY赋值的语句可能需要进行检查,保证赋值始终为正且不大于1。0。 



   9。 对于包含一个以上操作符的表达式,赋值顺序和操作符的优先顺序是否正确? 



   10。 整数的运算是否有使用不当的情况,尤其是除法?举例来说,如果i是一个 



    整型变量,表达式2 * i / 2 = = i 是否成立,取决于i是奇数还是偶数, 



    或是先运算乘法,还是先运算除法。 



3。3。4    比较错误 



   1。 是否有不同数据类型的变量之间的比较运算,例如,将字符串与地址、日期或 



    数字相比较? 


…………………………………………………………Page 36……………………………………………………………

24  软件测试的艺术 



   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
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!