繁体   English   中英

如何根据提交的解决方案评估代码是否正确

[英]How to evaluate if a code is correct against a submitted solution

我正在搜索有关如何比较两个代码并确定某人提交的代码是否正确的信息(基于之前定义的解决方案代码)。

我可以比较输出,但是许多代码可能具有相同的输出。 然后我认为我必须以某种方式比较代码并给出相似度的百分比。

有人可以帮助我吗?

(语言代码为C,但我认为这并不重要)

我的一些老师使用了在线自动程序评分系统,例如http://web-cat.org/

在分配中,他们将指定您必须提供的公共api,然后他们将针对您的函数编写测试,就像单元测试一样。 他们会故意选择利用边界条件和其他学生不愿考虑的东西进行测试的测试,并且只是使用许多不同的输入来调用代码,以使代码失败。

有时他们会硬编码期望值,有时他们会允许范围内的值,而有时他们只是自己进行分配并进行分配,因此您自己的代码必须匹配其代码产生的结果。

显然,并非所有程序都可以通过这种方式有效地评分。 这也很容易出错,有时甚至是老师犯了一个错误并溢出了一个int或其他东西,那么正确的学生提交的内容将与老师的错误结果不符。 但是,系统并不一定需要完美无缺才能有用。 但是我认为这提出了一个重要的观点,即通过阅读代码进行手动评分也不一定会揭示所有错误。

另一种可能性是复制提交的代码,去除所有空白并搜索为使代码正确而必须存在的子字符串和/或为使代码正确而必须不存在的子字符串。 麻烦的地方可能是设置为允许一些更棘手的要求,例如[(a或c),((a或b)和c),((a或b)和c)],其中变量是关于与变量相关的子字符串是否存在于代码中的布尔检查结果。

例如,[(“ printf”),(“ for”),(不是“ 1,2,3,4,5,6,7,9,10”)],将要求“ printf”和“ for”是代码中的子字符串,而“ 1,2,3,4,5,6,7,9,10”我不熟悉C,所以我假设这里需要“ printf”能够在不涉及输出流的情况下打印任何内容,这可以由[[“ printf”或“ out”),(“ for”),(不是“ 1,2,3,4,5,6 ,7,9,10“)],其中“ out”是使用输出流所需的C代码的一部分。

可能有可能根据“正确的”代码自动找到所需的子字符串,但是正如其他人提到的那样,还有其他处理方法。 这就是为什么可能需要对“解决方案”进行硬编码的原因。 即使这样,您很有可能会漏掉必需的子字符串,并且会被标记为错误,但这可能是您在一定程度上获得成功的唯一方法。

正则表达式在这里可能很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM