怎么用C/C++语言设计一个对一个程序进行自动测试的程序?

内容与要求:

一:编写一个函数,这个函数能实现对.txt格式的文件的运行,这个文件其实就是等待测试的源程序代码,也就是.c文件;

二:编写一个函数要求用一个命令行调用第一步中的.txt文件,并编译这个源程序,看是否能成功编译并产生一个可执行文件.exe;

三:若第二步的编译成功,则进行运行,并调用(需要调用多次)盛放测试数据的文件,使每一次运行的结果与相对应的测试数据一一比较,可能需要删除空格换行等字符,以避免因输出格式不同而产生的错误;

四:返回程序的最终结果,第二步编译是否成功,若失败,则返回错误是什么,第三步多组测试数据中对于哪些测试数据是对的,哪些是错的,并各自返回;

五:安全问题:

第一点:是否有木马程序,检测程序有无病毒;有病毒时要阻止程序的编译和运行,以防系统遭到攻击,并返回错误;

第二点:待测试的程序是否有死循环,即限制程序的运行时间,超过这个限制时间则自动跳出循环,返回错误;

就是这五步,其中可能会有些不规范的描述;

第1个回答  推荐于2016-01-17
这是要做OJ吗……以下用Linux角度考虑。
1.第一步和第二步有何不同?
2.首先编译工作可以用system调用make脚本。一般限定只有一个代码文件,所以makefile是固定的,产生的可执行文件也是固定的。通过限定makefile,可以限制编译时对系统库和网络库的调用。
3.用>和<在调用可执行文件时实现输入输出重定向。输出的文件名和标准输出结果都是预定的。
4.将实际输出文件和标准输出文件进行比较。采用类似Special Judge的方式,专门设计一个程序同时读入两个输出文件,逐行比较。
5.为了实现定时功能,可以用子线程方式运行程序,主线程负责检测时间。时间到了看看子线程有没有返回,就知道是否TLE。追问

亲,你说的和我老师说的一般无二,我想请你帮我写一些代码可以吗,你说的比如>和<我都不懂得,O(∩_∩)O谢谢了

追答

比如你一个可执行程序是my_exe,那么在命令行里运行
my_exe 2.txt
就表示在运行my_exe时scanf、gets之类原来从键盘读取的函数改成从文件1.txt读取,而用printf、puts等输出到命令行的函数改成输出到文件2.txt中。
至于makefile的写法,网上搜一下,挺多的。
这里要用到的知识点有点多,如果你还没了解过的话,可以一步一步学。

本回答被提问者采纳
相似回答