资源预览内容
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
程序调试中测试数据的设计调试是程序设计中至关重要的一个环节,既考验了程序设计人员纠查错误的能力,更考验其 发现错误、设计测试数据的能力。本文主要从针对性和广泛性两方面谈谈竞赛中的测试数据设计。调试是程序设计中必不可少的环节,甚至比编写程序本身还要花更多的时间和精力。这一点 在历届奥林匹克计算机竞赛上表现得尤为突出。特别是近年来,竞赛评分采取“黑箱操作”制, 即只看结果而不分析程序,这更提高了对选手调试程序能力的要求。然而要调试就离不开测试数 据,没有了测试数据,就像字典没了目录一样无从查起。由此可见,测试数据的设计在编程中扮 演着极为重要的角色。一个好的测试数据不但能准确地发现错误,即具有针对性,还要能发现尽 可能多的错误,即有广泛性。下面,就测试数据设计的针对性和广泛性进行论述。一、针对性测试数据的针对性是显而易见的。首先,它是针对错误本身,是为了发现错误而不是为了让自己增加对程序的“满意度”。例如 用小高斯的方法求1 + 2+3 +n (nW32767)的和,根本无须用大数据来测试它的运行时间, 而是要检验它是否须使用高精度。第二,它必须针对题目,必须对题目中的每一句话每一个要求进行检测。这里必须特别说明 的是,应十分注意题目提供的数值上下限,它不但决定了题目的难度,还决定了程序应采用的算 法及数据结构。而选手通过对上下限的测试,一方面可以发现疏漏的情况(特别是下限),更重要 的是它能为你是否需要继续优化程序提供必要的依据。在一些算法中,通过对上限的测试还能判 断算法的优劣及其可行性。第三,测试数据应针对数据结构。一个好的数据结构能经得起任何数据的测试,而“伪劣假 冒”则会导致数据丢失或是“stake overflow error”。针对数据结构的测试数据,应在上下限上下功 夫:下限有时会导致程序将用作标记的数值输出;上限则很可能出现“错误202”。同时,数据结 构优劣也会在测试中反映出来,例如单词查找树(NOI2000)一题中,选手建立的数据结构一 般有两种:一种是链表排序;一种是直接建立“单词树”。通过测试可以发现,后一种数据结构在 时间和空间上都过不了关。可见,针对数据结构的测试数据,无论在调试中还是在评测中都发挥 着至关重要的作用。第四,测试数据必须针对算法。首先,算法可以避免的错误基本无须调试,例如图论及运筹 学中的算法都是经过严格论证了的,在其正确性上做文章只会是徒劳。其次,应针对重点算法的 缺点作调试:搜索算法应用大数据测定其效率,动态规划应密切注意其空间效率;而贪心算法则 应注重提高其正确率。再次,应多针对易犯的错误设计测试数据。例如算符破译(NOI2000) 一题,通过大数据的测试很快拉开了不同算法的分数差。同时其题目隐含内容之多,搜索结果检 验之复杂。若没有好的测试数据的支持是很难得到高分的。例如,评分时有一个数据就是当其中 有12个算符都可直接确定,那么第13个算符亦可间接确定。像这样的例子没有细心周到的调试 是很难考虑到的。最后,应针对题目设计者的意图,在最后的调试阶段多想一些评测时可能出现的数据,尽可 能使自己的程序面向评委。当某个特殊数据无法通过时,可以对其单独作特殊化处理。因为在以 往评测中,大数据往往是几个特殊的模型再套上一些简单的数据构成。若是抓住了那几个特殊的 数据,岂不妙哉?总之,测试数据的设计应针对程序和评测。针对程序,乃知己也;针对评测者,知彼也。知 己知彼,方能百战不怠。二、广泛性 广泛性是指测试数据应能普遍地发现错误,而不是针对某一个错误反复测试。 首先,广泛性要求测试数据应尽可能多地包含题目内容。这样一方面可以多发现错误,一方 面可以检验各个模块之间协调得是否得当。例如在王伯买鱼一题中,采用搜索法的选手普遍 在程序中带有一个限界剪枝的子程序,但往往因为测试数据过于单一而无法发现限界剪枝模块中 的错误,甚至那个模块压根儿没运行而出现了“致命错误”。其次,在初期的调试中应多设计一些测试数据,通过变换其一部分内容可以针对不同内容进 行测试。这样有利于节省时间,而且在一些较简单的题目中可以发挥事半功倍的效果。测试数据 还应能抓住题目的每一个细节和每一种可能的情况。结论 综上所述,在竞赛中设计测试数据,“专”和“博”应兼顾之,从整体调试上讲,应由专到博, 先逐个检查程序的每个模块,再对程序做整体调试。在单点测试上应由博到专。“博”利于更快地 发现错误。然后再一步步地缩小测试数据的范围,直至最后发现错误。引用政治术语讲“,两者相 辅相承,相互促进,相互制约”。然而,测试只发现程序不足之处,更多地是应在解答题目之前对题目的分析及时间空间复杂 度的估算上,以及尽可能少地出现“笔误”。发现错误固然重要,避免错误更重要。若是在调试中 死也找不出错误,这不是对选手编程能力的最大肯定么?以上是从参赛选手的角度谈了一些个人对竞赛过程中测试数据设计的看法,仅借此抛砖引玉, 期待着大家一齐探讨。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号