1、排错过程

测试用例的执行是排错过程的开始,若测试结果与期望结果有出入,即出现了错误征兆,排错过程首先要找出错误原因,然后对错误进行修正。因此排错过程有两种可能,一是找到了错误原因并纠正了错误,另一种可能是错误原因不明,排错人员只得做某种推测,然后再设计测试用例证实这种推测,若一次推测失败,再做第二次推测,直到发现并纠正了错误。

排错是一个相当艰苦的过程,究其原因除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误具有下列特殊的性质:

(1)错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构此类现象更为严重;

(2)纠正一个错误造成了另一错误现象(暂时)的消失;

(3)某些错误征兆只是假象;

(4)因操作人员一时疏忽造成的某些错误征兆不易追踪;

(5)错误是由于风时而不是程序引起的;

(6)输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定);

(7)错误征兆时有时无,此现象对嵌入式系统尤其普遍;

(8)错误是由于把任务分布在若干台不同处理机上运行而造的。

在软件排错过程中,可能遇到大大小小、形形色色的问题,随着问题的增多,排错人员的压力也随之增大,过分地紧张致使开发人员在排除一个问题的同时又引入更多的新问题。

尽管排错不是一门好学的技术(有时人们更愿意称之为艺术),但还是有若干行之有效的方法和策略,下面介绍几种排错方法。

2、排错方法

无论采用哪种排错方法,目标只有一个,即发现并排除引起错误的原因,这要求排错人员能把直观想象与系统评估很好的结合起来。

常用的排错策略分为三类:

①原始类(brute force)

②回溯类(backtracking)

③排除类(causeeliminations)

原始类排错方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它,主要思想是“通过计算机找错”。例如输出存储器、寄存器的内容,在程序安排若干输出语句等,凭借大量的现场信息,从中找到出错的线索,虽然最终也能成功,但难免要耗费大量的时间和精力。

回溯法能成功地用于程序的排错。方法是从出现错误征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源,不幸的是程序变大后,可能的回溯路线显着增加,以致人工进行完全回溯到望而不可及。

排除法基于归纳和演绎原理,采用“分治”的概念,首先惧与错误出现有关有所有数据,假想一个错误原因,用这些数据证明或反驳它;或者一次列出所有可能的原因,通过测试一一排除。只要某次测试结果说明某种假设已呈现倪端,则立即精化数据,乘胜追击。

上述每一类方法均可辅以排错工具。目前,调试编译器、动态调试器(“追踪器”)、测试用例自动生成器、存储器映象及交叉访问示图等到一系列工具已广为使用。然而,无论什么工具也替代不了一个开发人员在对完整的设计文档和清晰的源代码进行认真审阅和推敲之后所起的作用。此外,不应荒废排错过程中最有价值的一个资源,那就是开发小组中其他成员的评价和忠告,正所谓“当事者迷,旁观者清”。

前面多次提到,修改一处老问题可能引入几处新问题,有时程序越改越乱,但若能做到每次纠错前都扪心自问三个问题,情况将大为改观:

①导致这个错误的原因在程序其他部分还可能存在吗?

②本次修改可能对程序中相关的逻辑和数据造成什么影响?引起什么问题?

③上次遇到的类似问题是如何排除的?

软件测试三种错误的是,软件测试中的三种排错方法(知识篇)相关推荐

  1. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  2. 简述python中的几种数据类型,简单介绍Python中的几种数据类型

    简单介绍Python中的几种数据类型 python 里面分为 基本数据类型 和 复合数据类型 基本数据类型包括:数值 字符串 布尔 和 none 复合数据类型包括:列表 元组 字典 和集合怎么算是深情 ...

  3. 错误 692:调制解调器中发生硬件故障的解决方法

    原文地址::http://www.dnwx.com/wangluo/moden/200811/112GB32008.html 相关网帖 1.不能上网,调制解调器的问题(自己解决)----http:// ...

  4. 软件测试 | 测试开发 | 音频质量检测模型中标准数据集的构建方法

    背景 音频质量检测模型训练中,纯净高质量的音频数据集比较好获得,但是损伤音频的数据集比较少,而且损伤音频的质量得分也很难评估.我们采用了一种只依靠纯净高质量的语音数据集来制作低质量音频并打分的方法. ...

  5. 简述tcp协议三报文握手过程_TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  6. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  7. c语言const常量用法,C++ const常量在多文件编程中的3种用法

    <C++多文件编程是什么>一节提到,多文件编程中代码的划分原则是:将变量.函数或者类的声明部分存放在 .h 文件,对应的实现部分放在 .cpp 文件中.值得一提得是,此规律适用于大部分场景 ...

  8. JavaScript中的三个点(...)扩展运算符

    三个点的真身 JavaScript中的三个点(-)名叫扩展运算符,是在ES6中新增加的内容,它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开:还可以在构造字面量对象时将对象表达 ...

  9. 在几何画板中切割三棱锥的方法

    很多的老师在使用几何画板的时候发现,几何画板不仅可以画一些静态的图,还可以根据教学需要画出一些动态的图.比如,在对三棱锥的学习过程中,老师就可以利用几何画板实现三棱锥旋转和侧面展开动画过程,这让课程变 ...

最新文章

  1. Linux 中创建 USB 启动盘来拯救 Windows 用户
  2. ios ffmpeg 保存mp4
  3. linux下sudo命令[转]
  4. stl的nth_element
  5. android root 恢复出厂设置,Android系统 免root 卸载预置应用
  6. 10 个平板电脑上的 Python 编辑器
  7. 你......真的了解我吗?
  8. 从JDK源码看关闭钩子
  9. 算计算机一级应用app,计算机一级题库
  10. 物联网技术应用成商业市场盈利关键
  11. word文档怎么批量解除锁定_word文档被锁定,怎么解开?
  12. MySQL之Explain
  13. java文本域添加滚动条实例_java文本域滚动条
  14. 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
  15. DB2数据库常见问题汇总
  16. Docker 磁盘空间使用分析与清理 解决磁盘空间不足
  17. EasyNVR二次开发云台控制接口实例
  18. 参议院和众议院的区别
  19. 戴特科技MES制造执行系统解决方案及生产计划
  20. php翻牌游戏代码,H5响应式网页翻牌小游戏代码

热门文章

  1. android intent actionview,android – 检查Intent.ACTION_VIEW上的用户操作
  2. js中数字直接点方法会报错,如1.toString()
  3. JS判断图片是否加载完毕
  4. iOS的消息机制和消息转发
  5. [CareerCup][Google Interview] 找出最小排序次数
  6. C++友元函数、友元类与类模板
  7. 计算机组成原理2(PCI总线结构框图)
  8. Python用20行代码实现一个验证码的输入与验证(完整源码)
  9. Python+pandas+matplotlib可视化案例一则
  10. Python实现局域网内屏幕广播的技术要点分析