• 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.测试每个算式的正确性,测试每个答案的正确性

    这是一个十分繁杂的工作,在多个样例中不断查找;从同学那儿要不同的数据;自己拼凑出无法满足的数据等等。最终可以得到令人满意的答案。

  • 相关阅读:
    python接口自动化33-json解析神器jsonpath
    python测试开发django-79.ORM查询之datetime()格式化(extra )
    python测试开发django-78.ORM查询之extra
    python测试开发django-77.ORM如何添加 DateTimeField 不显示毫秒
    python测试开发django-76.ORM查询之Q查询
    python测试开发django-75.ORM根据日期查询(__range)
    Mysql 跨库数据迁移 -- python 脚本
    Mysql 视图
    mysql update select 从查询结果中更新数据
    Elastic Stack 入门
  • 原文地址:https://www.cnblogs.com/DarkNightEye/p/4830784.html
Copyright © 2020-2023  润新知