2011-04-26 65 views
1

作为我在C++讲义的一部分,学生将不得不解决任务。每个解决方案应该使用相同的功能和相同的参数(函数名称,返回值,传递参数)来实现相同的功能。只有里面的代码是不同的。多个学生编程解决方案的有效测试

所以我在想一种方法来以有效的方式测试所有解决方案(大约30)。也许最好的方法是编写一个单元测试以及一个shell脚本(或类似的东西),用单元测试编译每个解决方案一次并运行它。

但也许有一个不同的,更好的解决方案来解决这个问题。

回答

1

单元测试是最有效的自动化测试类型之一的原因是因为投资回报相对较小(与其他类型的测试相比),因此,编写验证套件试验。

你甚至可以为学生提供测试套件而不是用散文写成的规范。这可以向他们介绍测试驱动开发的概念(尽管我们通常倾向于迭代地编写测试,而不是批量编写)。

+0

给学生提供测试套件是一个有趣的观点。也许我会这样做,它可以节省很多工作(尽管我不介意为我的学生做很多工作,但它必须有效)。 – 2011-04-26 06:04:13

0

也许我错过了一些显而易见的东西,但仅仅用边界测试参数值多次运行代码就行了?

+0

重点是,我有大约30个解决方案,我认为它会花费太多时间来手动编译它们自己的每一个。或者,也许**我**失去了一些东西? – 2011-04-26 06:01:52

+0

@macs:你为什么要手工编译?我假设每个学生的作品都是通过电子邮件或网站提交的。只需将其内容复制并粘贴到测试框架中,编译并运行即可。 – wallyk 2011-04-26 06:04:20

+0

我想按照原样采取解决方案,在我看来,有时候复制和粘贴容易出错。因此,我想使用一个脚本,收集所有解决方案(来自不同的文件夹),并根据测试框架编译它们中的每一个。但我认为可能有更聪明的解决方案,这就是为什么我问。 – 2011-04-26 06:07:37

1

是的,单元测试是大多数情况下最明显的解决方案。

编译器警告和静态分析也很有用。

给定一组参数的计划执行时间是另一个相当自动化的选择 - 取决于您有兴趣评估的内容。

创建具有良好诊断功能的基类(如果您愿意,可以将实施换为评估)是另一种选择。你也可以提供他们必须使用的接口,并保存两个实现。然后照常使用诊断实施来锻炼程序。这取决于你在找什么。

+1

除了基类/接口的东西。并非所有的程序都是通过类来表达的(实际上,算法是函数,而不是类)。 – 2011-04-26 06:34:01

+0

保护类/接口:它真的取决于OP在寻找什么。例如:如果有一个好的多线程接口可用,并且需要它们使用它,那么测试可以分析创建了多少个线程,活动线程的最大数目等等。如果它是一个集合类型或分配器,则可能会生成复制和/或分配统计量。再次,这取决于什么mac正在寻找,在什么细节。从这个角度来看,有些事情更容易测试。因为他们只需要实现一个接口......它可能不是一个不错的选择 – justin 2011-04-26 07:05:06

+0

我从来没有说过它本身是一个不好的选择。只是它并不总是适合手头的任务。 – 2011-04-26 07:10:00