软件测试中,排错(即调试)与成功的测试形影相随。测试成功的标志是发现了错误。根据错误迹象确定错误的原因和准确位置,并加以改正的主要依靠排错技术。

1、排错过程

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

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

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

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

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

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

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

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

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

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

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

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

2、排错方法

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

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

① 原始类(brute force)

② 回溯类(backtracking)

③ 排除类(cause eliminations)

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/yanghj010/p/3860677.html

软件测试中排错的基本方法相关推荐

  1. 软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析

    一.引言 软件质量是制约计算机应用领域进一步发展的关键要素之一,保证软件质量.提高软件可靠性的重要手段是软件测试.软件测试中最关键的问题是测试数据的设计,它主要涉及两个方面,一是测试 数据生成,是测试 ...

  2. 敏捷方法:什么是软件测试中的敏捷模式?

    什么是敏捷方法? 敏捷方法是指在项目的整个软件开发生命周期中,促进开发和测试的持续迭代的一种做法.在软件测试的敏捷模式中,开发和测试活动是同时进行的,这与瀑布模式不同. 什么是敏捷软件开发? 敏捷软件 ...

  3. java handler使用方法_Android中Handler的使用方法及实例(基础回顾)

    Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中. 本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s ...

  4. 【软件测试工程师】关于软件测试术语的定义,软件测试中的分类

    01. 为什么要在一个团队中开展软件测试工作? 因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作.在测 ...

  5. 阿里研究员:软件测试中的18个难题

    简介:对于软件测试来说,怎么样才算测够了?如何评价测试的有效性?那么多测试用例,以后怎么删?在软件测试中会遇到非常多的问题,阿里研究员郑子颖分享了18个他总结出的难题以及相关看法,希望对同学们有所启发 ...

  6. 软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别

    转:软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别 举个例子吧     if   A   and   B   then   Action1     if   C   or   D   then ...

  7. 无法定位程序输入点 except_软件测试中的功能测试点(三)

    testkuaibao|软件测试自学公众号 26.输入法半角全角检查 再输入信息中,输入一个或连串空格,查看系统如何处理,如对于要求输入符点型数据的项中,输入全角的小数点("."或 ...

  8. 心理软件测试自学,软件测试中的心理学

    能做一名软件测试人员不容易,要做一个名合格的软件测试人员更是不容易,因为软件测试人员要运用的知识很广,当然心理学也不例外. 测试执行得差,其中一个主要的原因在于大多数的程序员一开始就把这个术语的定义搞 ...

  9. 什么是软件测试中的黑天鹅

    1,黑天鹅以及软件测试中的黑天鹅 在发现澳大利亚的黑天鹅之前,欧洲人认为天鹅都是白色的.所以说"黑天鹅"代表了一个小概率事件,它罕有发生,但一旦出现,就具有很大的影响力." ...

最新文章

  1. PAT1046 划拳 (15 分)
  2. android eclipse 导入idea项目
  3. mysql添加timestamp有什么用_mysql中timestamp的使用
  4. 构造方法内的多态问题
  5. mysql导入 内存溢出_Solr Dataimporthandler 导入MySQL 内存溢出。
  6. 属性用途_onenote样式系列②:详解11种默认样式,附style属性值
  7. Spring下载链接
  8. 以上是对图像的椒盐噪声处理,在p_temp[j*wide+i]=0;这句程序中为什么要乘以wide,求解,谢谢!
  9. 01 前言/基础设施 - DevOps之路
  10. 模糊综合评价的 matlab,模糊综合评价法代码matlab
  11. 开关量采集模块支持PWM占空比输出无线数据采集模块Modbus TCP协议
  12. python tqdm的用法_【转】Python进度条tqdm的使用
  13. 苹果计算机如何显示错误,科普电脑打开苹果手机视频教程及Apple ID验证失败发生未知错误怎么解决...
  14. super-csv文档的部分翻译及基本使用
  15. 三个月速成Java--一些小建议和感概
  16. miui11开发版升级Android10,小米10 手机 MIUI 11 开发版升级 DXOMARK 相机版本
  17. 有道云笔记 markdown html,你不可不知的有道云笔记Markdown指南【进阶版】
  18. 科技爱好者周刊(第 168 期):游戏《底特律:变人》
  19. 针对电动车组线路布置与检测的线缆测试仪方案
  20. 微信小程序与公众号区别PHP,微信小程序和微信公众号的区别是什么?

热门文章

  1. loadrunner 11 下载地址
  2. BB陆逊高达(3Dmax)
  3. linux日志查看面试题,Linux 运维面试题 三剑客(sed awk grep)整理
  4. 【Groovy】IntelliJ IDEA 中创建 Gradle 工程 ( Gradle 工程目录文件分析 )
  5. 【计算理论】可判定性 ( 计算模型与语言 | 区分 可计算语言 与 可判定语言 | 证明 通用图灵机语言是 可计算语言 | 通用任务图灵机 与 特殊任务图灵机 )
  6. Srinath总结 架构师们遵循的 30 条设计原则
  7. 用WORD2010写博客,并发送至博客园
  8. 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)
  9. 利用php比较精确的统计在线人数的办法
  10. [No0000A6]Visual Studio 2015 中的常用命令的默认键盘快捷键-VS2015 Shortcut