钩住编译器/钩住方法的输出(C#-C+;+;)

钩住编译器/钩住方法的输出(C#-C+;+;),c#,c++,compiler-construction,hook,compare,C#,C++,Compiler Construction,Hook,Compare,好的,开始吧,我告诉你我必须做什么 我必须编写一个程序,这样学生就可以从练习中上传一些C++代码。上传的代码需要与那个练习中的“最佳代码”进行比较。通过这些比较,如果学生上传了好的或坏的代码,服务器会给出一些反馈。 这个练习是制作一个从1到10的数组列表,这样学生就可以上传他的代码了。然后服务器将其与其他代码进行比较并给出反馈 这是easyer说的然后做的,因为它不能仅仅是一个文件比较器,因为用户可以编写不同的变量。这就是为什么我正在修补使用外部编译器来获得一些输出,并将此输出与“最佳代码”的输

好的,开始吧,我告诉你我必须做什么

我必须编写一个程序,这样学生就可以从练习中上传一些C++代码。上传的代码需要与那个练习中的“最佳代码”进行比较。通过这些比较,如果学生上传了好的或坏的代码,服务器会给出一些反馈。 这个练习是制作一个从1到10的数组列表,这样学生就可以上传他的代码了。然后服务器将其与其他代码进行比较并给出反馈

这是easyer说的然后做的,因为它不能仅仅是一个文件比较器,因为用户可以编写不同的变量。这就是为什么我正在修补使用外部编译器来获得一些输出,并将此输出与“最佳代码”的输出进行比较。或者更详细地在编译器中获得一个钩子,这样我就可以检查每个方法和每个变量

或者我如何检查或比较的其他想法? 或者已经存在一个程序了

非常感谢,
Michael

有一些系统可以评估整个程序的输出(比如,它被用作竞赛系统),在我看来,使用它们更容易,因为在程序代码上指定条件本身并不是一项简单的任务(如果你的学生正在编写非简单的程序)。
您可以使用正式的规范语言(如ACSL)来设置输入和输出条件,并证明程序工作正常。

通过对一些自动测试(如边界测试套件,甚至是突变测试,如果您想让事情变得激动人心的话)测试行为来评估代码可能更为实际,然后要寻找奇怪的实现或有趣的架构,请查看代码度量,如函数数量、代码行数、编译大小等

这种方法将更加具有可扩展性,并且有很多免费工具,特别是对于C++和java,这将很容易建立一个自动化测试系统。


比较代码以确定正确性并不一定是正确的方法,这取决于它是如何完成的,而且很难扩展。

玩得开心。你可能没有意识到你说的“说起来容易做起来难”是多么正确。无论如何,请看一下Clang-a C/C++/ObjC编译器,它被明确设计为可黑客攻击的,并且可以在其他项目中作为库重用!这些练习有多简单?如果只是一两行,简单地将其与名义上最好的示例进行比较是没有用的。试着将其自动化,许多学生会出现,并在办公时间内展示被列为坏的好解决方案。坚持下去,教授就会在学生中得到一个当之无愧的坏名声,而如今,这些坏名声常常被公开发表,让所有人都能看到。