排错设计是用来分离并纠正错误的一种技巧性过程。软件错误的外部表现形式与内部原因之间往往没有明显的联系,所出现的差错并非直接就能找出原因。因此,排错既要对错误的性质及程序本身进行系统的研究,在某种程度上也要靠直觉。
软件排错亦称调试,它与软件测试有关,但是所完成的任务并不相同。 软件测试是可以事先计划并可明确检验的一种系统性处理过程。事先可以规定测试技术和工序,指定一系列的测试步骤。测试的目标是发现错误,成功的测试之后,就会出现排错。1
简介排错是隔离、定位、认识和解决问题的一种形式。
排错在系统管理、电子工程和软件工程等领域有广泛应用。排错过程一般要求参与者熟悉系统的正常运作状态及近期的变更历史,并通过系统排除的方法将问题一步步简化。排错设计,就是设计出一种排错程序来解决系统管理等方面的问题。
排错步骤在软件测试过程中暴露出一个错误之后,必须进一步诊断和改正程序中的错误。这种排错过程,一般由以下几个步骤来完成:
(1)从错误的外部表现形式入手,确定程序中出错的位置;
(2)研究有关部分程序,找出错误的内在原因;
(3)修改设计和代码,以便排除这个错误;
(4)重复进行暴露了这个错误的原始测试或某些有关测试,以便确认该错误是否被排除以及是否引进了新的错误;
(5)如果所做的修正无效,则撤消这次改动,重复上述过程,直到找到。一·个有效的解决办法为止。2
排错是软件开发过程中最为艰巨的一种脑力劳动。排错开始,开发人员仅仅面对着错误的外帮表现形式,要想在组成程序的众多元素(语句、数据结构等)中找出错误的根源并加以修正,往往需要绞尽脑汁,有时甚至要凭个人的经验和直觉才行。2
排错方法排错的关键在于推断程序内部的错误位置及原因,为此,一般可以采用以下方法:
(1)试探法
软件开发人员分析错误的外在表现形式,猜想程序内部故障的大概位置,然后想办法获取被怀疑位置附近的信息进行判断。这样一次一次进行试探、分析,直到定位和修正为止。
试探法一般要浪费大量的时间和精力,效率很低。
(2)回溯法
回溯法是从发现错误“症状"的地方开始,人工地沿程序的控制路径向后追溯源程序代码,直到发现错误根源并纠正为止。
回溯法一般对小程序比较有效。随着程序规模的增加,应该回溯的路径数目越来越多,以致无法进行人工的彻底回溯。
(3)归纳法
归纳法是一种从特殊推断一般的系统化思考方法。这种方法适用于排错,开发人员首先要收集并组织与错误有关的测试数据,分析其规律并归纳出错误原因假设。然后再用原始测试数据或新的测试,证明这种假设的正确性。
(4)演绎法
演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论。这种方法用于排错,开发人员必须首先根据已有的测试数据,设想出所有可能产生错误的原因。然后再用原始测试数据或新的测试逐个排除不正确的假设。最后再用测试数据证明余下假设的正确性。
归纳法和演绎法是较为常用的排错方法。2
测试与排错工具目前已有许多测试工具和排错工具(程序)可以提高测试过程的目动化程度,对于这些工具的合理使角能够大大提高测试和排错工作的效率。下面简单介绍几个:
(1)静态分析工具
一般来说,通过运行程序来发现错误的过程叫动态调试。而静态分析不需要运行被检查的程序,只要执行一个检查其它翟序错误的程序,这个程序就是静态流分析工具。它对程序的控制流和数据流进行分析!瓠而发琚常见的错误。运行静态分析工具时,工具程序在它作完静态分析后能够产生一个分析报告,从分析报告中即可发现错误和错误的原因。
(2)监视工具
这类工具在程序的适当位置安插了一些“探测器”,以使对程序进行监视,它们可以产生带有统计数字的报告,以供分析、排错之用。
(3)交互式排错工具
许多分时系统中的工具软件具有一些标准排错功能。例如,允许程序员在终端上显示内存并设置断点,使程序执行到断点处暂停。
应尽量采用排错工具,但测试与排错最积极的因素依然是人。 3
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所