- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息学奥林匹克竞赛中得高分的关键环节测试(DEMO)
信息学奥林匹克竞赛中得高分的关键环节——测试
?
Ⅰ、引言
中学生信息学奥林匹克竞赛是中学生奥林匹克竞赛的一个重要组成部分,和其他科目的奥林匹克竞赛相比它在竞赛方式上和评分标准上有着很大不同。竞赛实施的方式完全是上机编程序,实践性很强,评分的唯一标准是看通过测试数据的多少。通常竞赛中编写一个程序可以分为这样几个环节:分析题目—设计算法和数据结构—编码—调试—测试,设计测试数据的能力是竞赛考察的重点之一。但是很多学习信息学奥林匹克竞赛的学生和一些教师常常只重视算法的学习,忽视了“测试”这个环节。有的同学在竞赛中为了赶时间多做完一道题目,没有对已经做过的题目进行充分的测试,认为设计测试数据是浪费时间,所以经常会出现会做的题目不得分或者得不了满分的情况。那么怎么才能提高程序的正确率,在竞赛中取得高分呢?
?
Ⅱ、一些良好的习惯可以帮助提高编程正确率
众所周知,要想提高学生编程的正确率必须要培养学生有一个良好的编程习惯。这些良好的习惯包括:
A、规范地书写程序。我们书写程序时要使用缩进格式,不同层次的语句向后缩进若干格,这样可以保证程序尽量少出语法错误。另外,命名变量名时应尽量有一定意义,增加程序的可读性,调试程序时也方便。但是不要把变量名起得太长,这样会影响编程速度,可以使用一些简短的汉语拼音或英文缩写,只要自己好记就可以了。
B、编程时要使用自顶向下分析的方法和模块化的方法。可以将一些独立的功能例如输入、输出功能模块化,这样在调试的时候可以逐模块地检查排错,将一个大规模问题分解成几个小规模问题。但是也不能盲目地将程序分割成太多模块,信息学奥林匹克竞赛中出的题目往往都不大,所以不必分成太多的模块,分得太多反而会成为累赘。模块化的依据主要在于程序的内在逻辑。
C、使用全局变量时要特别小心。信息学奥林匹克竞赛中的程序规模一般比较小,全局变量的使用会很频繁,有时全局变量可以简化编程复杂度,但是全局变量的使用也会带来危险,特别是在过程或函数中改变全局变量的值可能会带来不可预期的后果。例如,在深度优先搜索中可以设一个全局的“栈”来存储搜索中的状态,但是在递归过程中,进入递归时数据“进栈”,回溯时数据“出栈”。在这个过程中要对全局变量“栈”和“栈的指针”进行操作,在这个过程中非常容易出错,出错后很难检查和调试。所以在教学中一定要给学生讲清楚全局变量和局部变量的区别,全局变量在过程或函数中被修改时对程序的影响,养成学生正确使用全局变量的习惯。
?
Ⅲ、测试是信息学奥林匹克竞赛中得高分的关键
养成良好的习惯能避免编程中的很多错误,但是这还不足以能保证竞赛中编写的程序能通过所有的测试数据,这是因为竞赛评测时给的标准测试数据都是相当苛刻的,如果程序提交前没有经过充分的测试,很有可能不能通过标准测试数据。学生在参加竞赛时经常会遇到这样的情况:竞赛完了以后感觉非常好,觉得题目不难,而且几道题自己都做完了,都通过了样例数据,但是等成绩出来以后却和期望中的相差甚远。使用标准测试数据测试自己的程序后才发现,不是某些特殊情况没有考虑到,就是犯了小错误,例如变量误用,或者数组声明地太小。很多学生不止一次犯过类似这样的错误,常常因为这样的错误而懊悔不已,原本应该能够拿到的分数却没有拿到。大多数人把这种错误归咎于粗心,其实出现错误是很正常的,无论多么擅长编程的人都不可能完全避免出错。那么能不能及时纠正这些由“粗心”引起的错误呢?在竞赛中我们编写完一个题目后自己应该设计多组测试数据来测试自己的程序从而找到程序中隐藏的错误,测试是编程时的“把门将军”,他可以将错误拒之门外,测试进行得越充分,程序的正确率就越高,所以“测试”这一环节是竞赛中得高分的关键。
Ⅳ、学习和掌握系统的测试技术和方法
题目给的样例数据都非常简单,不能只用它来测试程序。我们需要设计出精巧的测试数据,使用的数量既不多,不浪费竞赛中宝贵的时间,又能够找出程序中隐含的错误。要想尽量少使用数据,又能找出程序中尽可能多的错误,设计测试数据时就不能“跟着感觉走”,只有系统学习“软件工程”中的测试技术,并且不断在实践中总结经验,才能找出好的测试数据的设计方法。但是竞赛中编写的程序又区别于“软件工程”中的“软件”,例如竞赛中的程序一般规模不大、有严格的输入输出规定、程序模块逻辑复杂度比较大,所以也不能原样照搬软件工程中的测试技术。下面介绍一些我经常使用的设计测试数据的原则和方法。
?
一、设计测试数据的目的
我们的目标是希望能够设计出这样的测试数据,它们能够系统地揭示不同类型的错误并且耗费最少的时间和工作量。
?
二、设计测试数据的原则
测试是一个为了发现错误而执行程序的过程。有很多人认为,一个成功的测试是指没有找到错误的测试。但是事实和这种观点正好相反,即使非常熟练编程员,也不能完全避免错误和疏漏的发生,一个好的测试应
文档评论(0)