`
softstone
  • 浏览: 461399 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

排错的基本方法

阅读更多

排错的基本方法

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

1. 排错过程

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

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

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

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

2. 排错方法

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

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

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

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

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

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

分享到:
评论

相关推荐

    思科11种设备和配置的基本排错方法 命令 技巧 汇总

    必会的思科11种设备和配置的基本排错方法 命令 技巧 汇总

    10个调试和排错的小建议

    几乎没有哪个程序员能够写出一个bug都没有的代码,但是解决方法总是比困难多得多。多实践和坚毅的决心是成功的关键,这样才能够写出清洁代码,保证软件系统的可靠性

    突破程序员基本功的16课.part2

    14.2 程序调试的基本方法 14.2.1 借助编译器的代码审查 14.2.2 跟踪程序执行流程 14.2.3 断点调试 14.2.4 隔离调试 14.2.5 错误重现 14.3 记录常见错误 14.3.1 常见异常可能的错误原因 14.3.2 常见运行时...

    Java实验项目A、Java结构化基础和数组编程

    7、掌握程序排错的基本方法和技术、了解程序设计风格。 8、掌握一维数组的使用。 9、掌握二维数组的使用。 二、实验内容和主要步骤 1.准备开发环境 2.使用Eclipse IDE编写第一个Java程序(选做) 3.控制台IO实现程序...

    实验项目A、Java结构化基础和数组编程

    7、掌握程序排错的基本方法和技术、了解程序设计风格。 8、掌握一维数组的使用。 9、掌握二维数组的使用。 二、实验内容和主要步骤 1.准备开发环境 2.使用Eclipse IDE编写第一个Java程序(选做) 3.控制台IO实现...

    网上书店系统设计文档

    2、了解和掌握开发一个实际项目的基本方法和步骤; 3、 培养学生的动手能力、编程能力;鼓励学生的创新思维; 4、掌握基本的程序调试方法和排错方法; 5、培养学生对同样代码的实现,考虑算法优化问题;

    结构化程序设计与面向对象程序设计的简述.docx

    结构化程序中的任意基本结构都具有唯一入口和唯一出口,并且程序不会出现死循环。 在程序的静态形式与动态执行流程之间具有良好的对应关系。 1、优点结构化程序设计方法主要由三种逻辑结构组成,分别为: 顺序结构、...

    [详细完整版]1软件工程.doc

    使软件生产规范化和工程化,而软件工程方法得以实施的 主要保证是(C ) A、硬件环境 B、软件开发的环境 C、软件开发工具和软件开发的环境 D、开发人员的素质 6、软件开发常使用的两种基本方法是结构化和原型化方法,

    计算机网络技术实验1-ipconfig实战

    2.掌握利用 ipconfig 识别网络连接、获取 IP 地址、MAC 地址等网络配置信息的方法,具备基本的检错和排错能力。 实验装置 一台连入本地局域网或互联网的 Microsoft Windows 10 主机。 实验原理 通过控制台应用...

    MIS Testing Method

    系统程序设计与测试 理解系统实施阶段的作用与地位、主要活动内容。 了解主要程序设计语言及工具的特点和结构化程序设计原则。...理解系统测试概念,会使用测试方法对程序进行基本测试。 掌握调试排错方法。

    系统测试是对已经集成好的软件系统进行彻底

    单元测试的主要方法有控制流测试、数据流测试、排错测试、分域测试等等。 集成测试:集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。它根据集成测试计划,一边将模块或...

    软件工程选择题20分.docx

    使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是(C ) A、 硬件环境 B、软件开发的环境 C、软件开发工具和软件开发的环境 D、 开发人员的素质 6、软件开发常使用的两种基本方法

    Huffman编码(二叉树应用)

    一、实验三:Huffman编码(二叉树应用) ...3.熟练掌握计算机系统的基本操作方法,了解如何编辑、编译、链接和运行一个C++程序及二叉树上的基本运算; 4.上机调试程序,掌握查错、排错使程序能正确运行。

    基于动态基本块的测试用例约简 (2012年)

    传统的约简方法大多使用语句覆盖标准,本文提出以动态基本块为覆盖标准,并在此基础上提出2种约简策略来减小测试输入的规模。实验结果证明,新方法可以有效地减少测试输入,并且约简后的错误定位效果几乎不下降。

    《Java语言程序设计》教案设计.doc

    " " "掌握简单调试与排错技术 " "教学重点 "Java程序的框架、开发程序的步骤、掌握简单调试与排错技术 " "教学难点 "Java程序分析、程序的调试和排错技术 " "教学方法 "视听教学法和任务教学法,在多媒体教室实施 " ...

    项目中处理Error Msg的方法

    优点:已经基本上解决了上述所说的弊病; 缺点:跨平台交互不容易,尤其是文件内码不同的情况,比如utf-8环境、ansi char环境、unicode环境........... 2. 写入xml文件里面:(推荐) 这种做法和上述方法类似,...

    《JavaScript学习指南(第2版)》[PDF]

     JavaScript应用程序的结构,包括基本的语句和程序控制结构;  标识JavaScriptqb的不同对象Strin9、Number、Boolean、函数等;  使用浏览器调试工具和排错技术;  事件处理机制、表单事件以及带表单的JavaScript...

Global site tag (gtag.js) - Google Analytics