OO助教工作总结(个人+数据组)
HugeGun
数据组工作:
数据是测试中相当重要的一部分。数据的设计和作业的训练目标挂钩,不仅涉及到题目、指导书的设计,还设计到评测机、后代等工作。
重点:
-
数据范围(上界)
数据范围设计要合理,要考虑各种数据范围之间的相互限制关系。
-
极限数据
要考虑合法条件下的极限数据是否达到/超过训练目标,以此反馈调节数据范围。否则一旦在互测中出现了标程跑不过的极限数据就会出大问题。
-
中测/弱测设计
中测不宜过强,一是为了限制无效作业的个数,二是为了强测能够足够有区分度来划分互测房间。
-
强测设计
数据要有梯度,对于第二单元一定要提前验好数据,否则没有时间重测。对于数据梯度的把握,可以在强测前对学生代码进行抽样检查。
PRE:
pre2−task1~5 主要采用随机
pre2−task6主要采取利用正则表达式随机和手动构造一部分数据。(xsy)
一单元:
主要采用随机数据生成,生成几百上千个数据并将其分类。同时在随机生成时设置多个不同开关来针对中测、强测设计数据。在随机数据中进行挑选,并针对特殊情况(WF)手动构造数据。同时设置一些容易爆栈、TLE的数据。
通过预先抽样测试挑选性能分要求较高/低的数据并设置合理的数据比例。
数据范围和评测组息息相关,小心错判。
二单元:
二单元评测速度较慢,数据的正确性一定要保证。数据总体分为4种类型:全随机、s/t为一楼的人较多、人群聚集到来,2+3。
三单元:
第三单元特点是不同数据范围之间相互限制,要考虑好算法方面要考察到什么程度,同时在JML里埋坑要在数据上体现。
四单元(xsy):
第四单元的数据构造比较麻烦,目前没有找到一些比较好的自动化生成数据的方式。主要采用的是C++生成Java代码再用starUml转为Uml图和手造。遗憾的是四单元的数据受到题目限制,尽管在出数据时尽可能的涵盖了所有可能的情况,大部分同学也能轻松AC。我的感觉就是出数据极费时间,而题目却不难,三次的递进关系不明显,可以考虑换题或者合并为两次作业。
指导书:
- 帮助完善指导书,包括数据范围
- 设计第二单元的加减电梯
- 设计第三单元
讨论区:
- 回答相应提问
- 针对同学们提出来的问题修锅
- 发现一些比较好的回答并进行鼓励、加精
第三单元作业设计:
作业设计
第三单元设计是一体的,标程、官方包、JML、作业设计同时进行。
第一次作业主要涉及人与人之间的询问。
第二次作业涉及group和group内的查询和信息维护。
第三次作业涉及并查集、搜索、最短路这样的算法。
受到评测输入输出文件大小限制,一些考察点并没有实现。
延伸:朋友圈、微博等
JML
JML的正确性无法进行自动验证,这就像写代码自己无法编译一样,难以保证正确性,即使吴老师和多名助教都进行了检查。openjml也能做到静态类型检查和语法检查,对于JML是否符合设计功能等检查只能肉眼完成。因此设计时我尽量使JML写得简洁。
-
对于不允许执行任何修改操作的JML分支,和吴老师讨论后决定删除,但是在下发的JML-level0说明中明确说了没有说明的分支可以执行任何操作。
-
对于JML不提供具体架构的方案,删掉基本方法或People等类,JML的代码量将会不减反增,代码量至少翻两番,这不仅意味着学生很难看懂JML,而且助教、老师也难以检查JML的正确性。
-
对于算法的考察,这次作业并不难,上限是并查集,这是随便一个学过离散3的同学都能轻松学会的。而搜索、最短路是算法基础中的基础。实际上并查集比最短路简单多了,但是由于DS、程设、离散都没讲过所以列为上限。
如果想减少算法的考察,那应该提升JML的量、社交网络的复杂程度,添加新的功能如朋友圈等,并对边界数据进行挖坑设计,这对助教和老师都是一个考验。
-
对于自行编写JML检查工具,上次讨论结果是能实现简单的检查,但这对第三单元作业的考察帮助不大,可以考虑用于实验。