用两个晚上做超简易OpenJudge

Wenxuan Shi /
September 26, 2019
5 min read

大二刚开学,为了服务广大深受数据结构与算法课程折磨的同学。写了一个帮助 debug 的平台。代码一塌糊涂,不过产品思路还是不错的。

以我上周帮助的两位同学为例。小哥哥 A 在第三周 Lab “星火牧” 卡住了,花了三天时间,并没有找出问题所在。之后我们用随机数据生成器对拍了若干遍,他修改了若干次,才终于通过。小姐姐 B 同样在这条题卡住了。但是随机数据生成器跑了几千组,都没有找到错误的点。最后我们手动构造了一些非常极端的样例,她也通过了。

从小哥哥的遭遇来看,你的程序可能少考虑了一些情况,需要用随机数据测试。而从小姐姐的遭遇来看,程序有可能只少考虑了极端情况,这时候随机数据也很难起作用。

我希望这个测试网站能帮助解决这两个问题。

展示

平台地址:http://ac.whexy.com

因平台显著降低了作业难度。按任课教师要求已经关停。

网站使用很直观,选择题目,选择语言,粘贴代码,上传测试。测试完成后,你可以得到反馈。点击可以复制数据,方便调整。

平台怎样做测试

在你上交程序后,平台将会在后台运行数据生成器、标准代码,以及和你的代码。比较代码的运行结果,生成反馈。这不是一个 OJ 系统,由于每次测试都会随机生成数据,你可能每次得到不相同的结果。

这么看来,小哥哥 A 的问题解决了。他只需要在这里粘贴他的 Java 代码,就能得到一些他出错的数据。分析这些数据,他可以找到自己代码的问题所在。

让数据更刁钻

和小哥哥 A 不同的是,小姐姐 B 通过了很多随机数据,只有一些极端情况考虑不周全。出于服务器性能的考量,单次提交只会测试 20 组随机数据,而这根本不够。在平台上,采用了一个新的思路。

** 我们推断,别人出错的数据更有可能让你同样出错。** 如果一段程序在随机生成的数据上出错,这组数据会被加入 “重要数据组”。在 20 次随机测试之前,测试平台会先测试你的程序能否通过重要数据组。

随着提交人数的增多,重要数据组会变得越来越可靠。

此外,你可以通过 “我要贡献数据” 功能提交你构造的极端数据。贡献数据要求你同时提交输入和输出。平台的标准代码会进行审核,如果运行结果和你提供的输出一致,那么这组数据也会直接加入到重要数据组。通过这样的功能,我们希望测试数据更加全面、丰富。

© LICENSED UNDER CC BY-NC-SA 4.0

Subscribe to the blog via RSS