排错的基本方法

原创 2002年03月12日 09:54:00

排错的基本方法

(本文转载自软件工程专家网www.21cmm.com
 
   排错(即调试)与成功的测试形影相随。测试成功的标志是发现了错误。根据错误迹象确定错误的原因和准确位置,并加以改正的主要依靠排错技术。

1. 排错过程

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

pc.jpg
   排错是一个相当艰苦的过程,究其原因除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误具有下列特殊的性质:
  (1) 错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构此类现象更为严重;
  (2) 纠正一个错误造成了另一错误现象(暂时)的消失;
  (3) 某些错误征兆只是假象;
  (4) 因操作人员一时疏忽造成的某些错误征兆不易追踪;
  (5) 错误是由于风时而不是程序引起的;
  (6) 输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定);
  (7) 错误征兆时有时无,此现象对嵌入式系统尤其普遍;
  (8) 错误是由于把任务分布在若干台不同处理机上运行而造成的。

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

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

2. 排错方法

  无论采用哪种排错方法,目标只有一个,即发现并排除引起错误的原因,这要求排错人员能把直观想象与系统评估很好的结合起来。
  常用的排错策略分为三类:
  ① 原始类(brute force)
  ② 回溯类(backtracking)
  ③ 排除类(cause eliminations)

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

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

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

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

  前面多次提到,修改一处老问题可能引入几处新问题,有时程序越改越乱,但若能做到每次纠错前都扪心自问三个问题,情况将大为改观:
  ① 导致这个错误的原因在程序其他部分还可能存在吗?
  ② 本次修改可能对程序中相关的逻辑和数据造成什么影响?引起什么问题?
  ③ 上次遇到的类似问题是如何排除的?

samba排错处理总结

samba最初发展的主要目就是要用来沟通Windows 与 Unix Like 这两个不同的作业平台。本文以linux系统为例,介绍linux和windows之间通过samba协议共享文件时遇到的常见...
  • lu_linux
  • lu_linux
  • 2017年01月14日 23:55
  • 227

交换与路由练习(五、rip 排错)

要求: 1.按照拓扑要求配置路由器,沟通路由器上的loopback口。 2.抓包查看运行不同rip版本间路由传递的路由更新,抓取ripv2->ripv2,ripv1->rivp2,ripv2->r...
  • sanganqi_wusuierzi
  • sanganqi_wusuierzi
  • 2017年02月01日 21:40
  • 206

OpenStack排错常用步骤和命令

查看日志 OpenStack的日志系统设计的非常棒。大多数的问题都能从日志中找到原因。 日志路径在/var/log/下。 哪里有问题就去哪里找:去相应的日志文件夹查看日志。 比如上传镜像报错,就去...
  • zhengmx100
  • zhengmx100
  • 2017年02月10日 18:17
  • 1002

网络基础之一OSI七层模型篇(网络故障排错)

最近发现很多朋友对网络的基础知识并不是很了解,我就把我所知道的用尽量通俗的文字写出来,与大家一起探讨学习,希望大家参与、支持,谢谢。 4]    第一篇,先说最基础的东西,就是OSI七层模型。 $jp...
  • jsh13417
  • jsh13417
  • 2014年02月23日 14:14
  • 2535

网管故障处理基本能力 - 网络排错大讲解

首先,真心希望本文可以给需要进行网络排错的朋友带来实际性的帮助, 也希望可以耐心看下去。网络排错对于网络工程师或运维人员甚至对很多人(搞IT的朋友们)都十分重要,因此知道网络排错的一个详细流程以及流程...
  • MentoGDUT
  • MentoGDUT
  • 2016年12月20日 15:17
  • 400

软件调试排错除错工具篇

1、事先说明:如果你软件设计整体架构比较优秀,而且软件本身又比较健全的排错机制,大部分情况都可以通过现象和排错日志快速定位出来,那么恭喜你,减少了很多维护软件bug而产生的多余死人的工作量。2、排错除...
  • fishmai
  • fishmai
  • 2016年09月01日 12:51
  • 415

Web程序的调试与排错

欢迎大家再次来到我的博客看我写的一些小东西,感到非常荣幸哈,今天我要讲的是在使用Web应用出现的一些小bug的调试,那么现在就跟着我来吧。 一、在运行Web程序时,常犯的一些错误有: 1、未启动T...
  • pang_ping
  • pang_ping
  • 2017年03月05日 00:12
  • 292

关于网站排错问题

一、常见排错工具 1.Chrome浏览器——开发者工具: Chrome浏览器自带开发者工具。按F12打开工具,切换至Network标签。可以方便查看页面元素加载情况。2.ping: Windows、...
  • mfsh_1993
  • mfsh_1993
  • 2017年04月19日 09:24
  • 251

Cisco 2960交换机排错

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://369369.blog.51cto.com/319630/790835 ...
  • xlh1991
  • xlh1991
  • 2014年10月18日 14:11
  • 507

Openstack neutron 常见故障分析

1.  节点down了,如图1-12所示    图1-12 刚刚部署完了,一看上去全部是down掉了,down掉了怎么办?我要查整个部署。一查没有部署这个没有部署那个,这时日志很关键...
  • zhongbeida_xue
  • zhongbeida_xue
  • 2017年07月25日 18:12
  • 234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排错的基本方法
举报原因:
原因补充:

(最多只允许输入30个字)