2015个人项目——四则运算题目生成程序
2015个人项目——四则运算题目生成程序
性能测试
生成表达式
首先我们来看一组图:
生成500算式
生成1000算式
生成3000算式
生成6000算式
生成10000算式
由这一组图可以明显的看出,我的程序主要用时点是calc()、find()这两个函数,其实原因很简单:
生成运算表达式是完全随机的方式,而且是用标准文法的方式生成,所以运算式很容易产生,因而占用时间不是很多;
calc是对运算式进行运算,运算时有用到迭代,有用到多次判断,很复杂,所以会花费很多时间;
find是查找函数,为了查重,会不断对先前产生的运算式进行查重,这个运算量是(1+2+……+n)=n(n+1)/2,所以会随着算式量的增加而快速上升。
答案中的对错并进行数量统计
我们仍然看一组图片:
检查1000算式
检查6000算式
检查10000算式
由这一组图可以明显的看出,我的程序主要用时点是calc()、getline()这两个函数,其实原因很简单:
calc是对运算式进行运算,运算时有用到迭代,有用到多次判断,很复杂,所以会花费很多时间;
getline是每个循环中必然会出现的函数,当算式多了,循环量级也会增加,所以花费时间也会增加。但这间接说明程序运算速度很快。
测试样例
1.测试速度,是否能生成超过10000的题,表示形式是否正确,是否出现超过3个运算符的算式
(1)输入:Myapp.exe -n 10000 -r 10
测试:看Exercises.txt, Answers.txt是否有10000项;看Exercise.txt中算式是否符合要求;看Answers.txt是否正确形式的答案
(2)输入:Myapp.exe -e Exercises.txt -a Answers.txt
测试:看Grade.txt的Correct项是否包含所有的序号,Wrong项包含的0个序号
2.测试-n的参数小于等于0,或者-r的参数小于等于0的特殊情况
(1)输入:Myapp.exe -n 0 -r 10
输出:“command is not correct!”
(2)输入:Myapp.exe -n -5 -r 10
输出:“command is not correct!”
(3)输入:Myapp.exe -n 10 -r 0
输出:“command is not correct!”
(4)输入:Myapp.exe -n 10 -r -5
输出:“command is not correct!”
3.测试是否产生相同的题目,是否有运算式中间产生负数,测试-n,-r调换顺序的情况
(1)输入:Myapp.exe -n 100 -r 10
测试:看这100个运算式是否存在相同的题目,当然也要看中间是否产生了负数的算式
(2)输入:Myapp.exe -r 10 -n 100
测试:首先看这是否能生成符合形式的算式和答案,再看这100个运算式是否存在相同的题目,当然也要看中间是否产生了负数的算式
4.测试是否能够正确地判断答案是否正确。
(1)对于评测的输入问题,我们要求的是输入的题目和答案都是从1开始顺序编号的,不能缺也不能多;否则,请提示输入有错误。
(2)由于我们的题目都是按规范生成的,为简单起见,可以认为输入的题目都是按照顺序编号的符合规范的题目。
(3)(但是答案缺少的话请报错并给出提示。)我把这一条忽略,如果缺少的话就算它是错的。
(4)所有题号必须是按照顺序递增的,而且题数一致。
为了比较这个,我把总共10个算式的正确答案中的部分改错,删掉其中一个答案(题号不删除),最后得到的答案符合要求。
5.为了符合题目要求,我需要测试cmd数据不对的情况。
(1)输入:Myapp.exe -n 10
输出:“command is not correct!”
(2)输入:Myapp.exe -n 10 -e Exercises.txt
输出:“command is not correct!”
6.测试超大数据。
(1)输入:Myapp.exe -n 100000 -r 15
输出:能正常产生,但是时间确实非常大259.234s
(2) 输入:Myapp.exe -n 100 -r 50
输出:虽然能正常产生,答案也是对的,但是我的算法无法保证对大型的数值进行运算都能生成正确数值,所以最终可能会导致越界的后果。
6.测试超小数据。
(1)输入:Myapp.exe -n 100 -r 3
输出:r limit is too tight
(2) 输入:Myapp.exe -n 5 -r 2
输出:r limit is too tight,这是我的算法无法保证的,由于运算式是完全随机化的产生,所以很有可能会产生相同算式,虽然对此有一定的次数限制,但是无法完全去掉这种不符合的情况。这里面其实是是可以得到5个算式的,但是我的随机化让过程变得无迹可寻,最终得不到理想的结果。
8.测试是否是真分数结果
(1)输入:Myapp.exe -n 100 -r 10
输出:得到正确的结果,而且能够完整的正确的表示出所有的值。
(2)输入:Myapp.exe -n 10 -r 4
输出:得到正确的结果,而且能够完整的正确的表示出所有的值。
9.测试测试-r,-n调换顺序的情况
(1)输入:Myapp.exe -a Answers.txt -e Exercises.txt
测试:看Grade.txt的Correct项是否包含所有的序号,Wrong项包含的0个序号
(2)非规范的测试文件也有输入,最后结果符合
10.测试每个算式的正确性,测试每个答案的正确性
这是一个十分繁杂的工作,在多个样例中不断查找;从同学那儿要不同的数据;自己拼凑出无法满足的数据等等。最终可以得到令人满意的答案。