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

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

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




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  软件测试的艺术 



数据沿程序的逻辑结构走一遍。程序的状态(如变量的值)记录在纸张或白板上 



以供监视。 



  当然,这些测试用例必须结构简单、数量较少,因为人脑执行程序的速度比 



计算机执行程序的速度慢上若干量级。因此,这些测试用例本身并不起到关键的 



作用;相反,它们的作用是提供了启动代码走查和质疑程序员逻辑思路及其设想 



的手段。在大多数的代码走查中,很多问题是在向程序员提问的过程中发现的, 



而不是由测试用例本身直接发现的。 



  与代码检查相同,代码走查参与者所持的态度非常关键。提出的建议应针对 



程序本身,而不应针对程序员。换句话说,软件中存在的错误不应被视为编写程 



序的人员自身的弱点。相反,这些错误应被看做是伴随着软件开发的艰难性所固 



有的。 



  与代码检查过程中描述的相似,代码走查应该有一个后续过程。同样,代码 



检查所带来的附带作用(如可以发现易出错的程序区域,通过接触软件错误、编 



程风格和方法来获得教育等)同样也会发生在代码走查过程中。 



3。5   桌面检查 



  人工查找错误的第三种过程是古老的桌面检查方法。桌面检查可视为由单人 



进行的代码检查或代码走查:由一个人阅读程序,对照错误列表检查程序,对程 



序推演测试数据。 



  对于大多数人而言,桌面检查的效率是相当低的。其中的一个原因是,它是 



一个完全没有约束的过程。另一个重要的原因是它违反了本书第2 章提出的测试原 



则,即人们一般不能有效地测试自己编写的程序。因此桌面检查最好由其他人而 



非该程序的编写人员来完成(例如,两个程序员可以相互交换各自的程序,而不 



是检查自己的程序)。但是即使这样,其效果仍然逊色于代码走查或代码检查。原 



因在于代码检查和代码走查小组中存在着互相促进的效应。小组会议培养了良性 



竞争的气氛,人们喜欢通过发现问题来展示自己的能力。而在桌面检查中,由于 



没有向其他人展示的机会,也就缺乏这个显而易见的良好效应。简而言之,桌面 



检查胜过没有检查,但其效果远远逊色于代码检查和代码走查。 


…………………………………………………………Page 43……………………………………………………………

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



3。6    同行评审 



  最后一种人工评审方法与程序测试并无关系(其目标不是为了发现错误),却 



仍在这里谈到,这是因为它与代码阅读的思想有关。 



   同行评审是一种依据程序整体质量、可维护性、可扩展性、易用性和清晰性 



对匿名程序进行评价的技术。该项技术的目的是为程序员提供自我评价的手段。 



  选出一位程序员来担任这个评审过程的管理员,管理员又会挑选出6~20名参 



与者(为保持匿名性,6人是最少数量)。这些参与者都应具备相似的背景(例如, 



不能把Java应用程序员与汇编语言系统程序员编为一组)。要求每名参与者都挑选 



出两个由自己编写的程序以供评审。其中的一个程序应是参与者自认为能代表其 



自身能力的最好作品,而另一个则是参与者自认为质量较差的作品。 



   当所有的程序都收集完毕后,就将这些程序随机分发给参与者。每名参与者 



拿到4个程序进行评审,其中的两个是“最好”的程序,另外两个则是相对“较差” 



的程序,但评审人自己并不知道。每名参与者每评审一个程序得花费30分钟,评 



审完后填写一张评价表。所有4个程序都评审完后,参与者对4个程序的相对质量 



进行分级。评价表要求评审人用1~10的分值(1代表明确的“是”,10代表明确的 



“否”),对诸如下面的问题进行回答: 



  o 程序是否易于理解? 



  o 高层次的设计是否可见且合理? 



  o 低层次的设计是否可
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!