排错的基本方法

排错的基本方法

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

1. 排错过程

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

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

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

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

2. 排错方法

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

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: SWAT模型是一种常用的水文模型,在流域水文中具有广泛的应用。对于模型开发者和模拟者而言,深入了解SWAT模型源代码是必不可少的。这种理解将帮助开发者深入了解模型的内部结构和计算方法,并帮助排错。 为了方便源代码的查看和理解,一份精简的SWAT模型源代码快速查看手册是必要的。这个手册可以整理出重要的程序流程、数据结构和引用的外部库等信息,但并不需要展示所有的细节和信息。 首先,快速查看手册应该包含一份SWAT模型的总体结构图,包含所有主要模块和它们之间的联系。这可以帮助读者找到特定问题的相关代码位置,并确保了解模块之间的信息流动。 第二,快速查看手册应该含有SWAT模型主要的数据结构描述。这包括了结构体、数组、指针等定义,这些定义都是SWAT模型的核心。读者需要熟悉这些数据结构的定义,以更好地理解主要的函数流程。 第三,SWAT模型使用了许多外部库。快速查看手册应该列出SWAT模型所引用的主要外部库,以及它们的主要功能。这可以帮助读者更好地理解函数中所用的变量,以及它们来自哪里。 第四,对于SWAT模型中主要的函数,快速查看手册应该列举其主要功能、输入和输出变量,并通过简洁明了的伪代码展示函数的基本结构。这可以帮助读者快速找到特定功能的函数,并帮助理解运行流程。 综上所述,SWAT模型源代码快速查看手册对于模型开发和模拟非常重要。它可以帮助开发者更深入地了解模型的内部结构和计算方法,同时也是排错的重要工具。 ### 回答2: SWAT模型是一种常见的水资源管理模型,用于模拟流域内水文循环过程,包括降水、蒸发腾发、径流等,对于水资源管理、灾害风险评估等方面具有重要意义。SWAT模型源代码是SWAT模型的实现基础,对于开发和模拟排错非常重要。因此,为方便开发者和模拟研究人员,开发了一份SWAT模型源代码快速查看手册。 该手册涵盖了SWAT模型的常见问题和源代码分析技巧,包括SWAT模型的结构和编译方法、输入数据格式和处理、模拟算法及其参数设置、输出结果格式和处理、常见错误及解决方法等。该手册还给出了SWAT模型实例,通过实例展示了模型的模拟过程和结果分析。 该手册适用于有一定编程基础的专业人员,可以帮助他们更快、更准地理解SWAT模型源代码,提高模型开发和应用效率。此外,对于新手和初学者来说,该手册也可以作为学习和入门参考资料使用,帮助他们更轻松地掌握SWAT模型的基本原理和应用方法。 总之,SWAT模型源代码快速查看手册是一份非常有价值的资料,对于开发和应用SWAT模型的研究人员来说具有重要意义。它不仅方便了开发者和模拟研究人员快速查看和理解SWAT模型源代码,还加快了模型开发和应用的效率,促进了水资源管理和灾害风险评估等方面的研究和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gigix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值