用两个晚上做超简易OpenJudge

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

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

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

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

# 展示

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

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

# 平台怎样做测试

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

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

# 让数据更刁钻

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

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

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

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

# 加入幼儿园一起爆肝

测试平台是两个同学用一个晚上写好的,目前界面、功能都有待完善。如果你对我们的工作有兴趣,并且掌握一定的 Python 或 JavaScript 知识,或对数据库、Docker、并发、异步有了解,请联系我们。

服务上线,希望同学们多多支持。用爱发电,造福人类。支持一杯卡布奇诺,或可否点赞转发评论一套?谢谢大家了~!