第四次作业2
结对人:徐劭斌
要求1 对每个功能,先给出测试用例,然后再编码功能。请注意把测试用例视为功能需求完成的检验指标。 (40分)
首先是对三个功能的测试。对于整体的功能,因为可以使用控制台与程序进行输入输出的交互,故没有使用TDD测试工具进行,具体的测试用例如下
功能1 测试用例
编号 | 测试用例 | 预期结果 |
1 | 用户输入正确结果 | 提示:“答对啦,你真是个天才!”并给出下一题 |
2 | 用户输入错误结果 | 提示:“再想想吧,答案似乎是12喔!”并给出下一题 |
3 | 用户共答对3题 | 提示:“你一共答对3道题,共20道题” |
功能2
功能二的输入与功能一相同,只是添加了括号的功能,测试用例没有变化。
编号 | 测试用例 | 预期结果 |
4 | 用户输入正确结果 | 提示:“答对啦,你真是个天才!”并给出下一题 |
5 | 用户输入错误结果 | 提示:“再想想吧,答案似乎是12喔!”并给出下一题 |
6 | 用户共答对3题 | 提示:“你一共答对3道题,共20道题” |
功能3 测试用例
编号 | 测试用例 | 预期结果 |
7 | 输入 f4 -c -200 | 输出“题目数量必须是 正整数。” |
8 | 输入 f4 -c 3.5 | 输出“题目数量必须是 正整数。” |
9 | 输入 f4 -c 3 | 输出三道题目,并保存到txt中 |
接下来是对三个功能都会使用的重要函数进行测试。本次是一个四则运算的程序,按照我们编程的思路,会将计算过程中出现异常(如除数为零或除不尽等)的题目舍弃掉重新出题,所以出题的正确性是由计算的正确性来保证的。本次主要测试了计算相关函数
函数 public static double Compute(double leftNum, double rightNum, char op) 输入是在逆波兰后弹出的两个数和运算符,输出为运算结果。这里将会考虑异常情况,即除数为0,除不尽等,处理的方式是让返回值为0,并用一个变量控制系统重新出题。
测试用例
编号 | 测试用例 | 预期结果 |
10 | num1=1,num2=3,op='/' | 0 |
11 | num1=4,num2=0,op='/' | 0 |
12 | num1=2,num2=5,op='/' | 0.4 |
函数 public static double Calucate(string expression) 输入是随机生成的字符串即题目,输出返回值为最终计算结果,这个函数用来做计算,其中具体的计算是在逆波兰后调用Compute进行的两个数的计算,所以对于除法的处理这里不再考虑。
编号 | 测试用例 | 预期结果 |
13 | “3+1” | 4 |
14 | “4/5” | 0.8 |
15 | “1+(2-3)/2” | 0.5 |
16 | "1*2/(2+8)" | 0.2 |
要求2 在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码。(40分)
功能一
编号 | 测试用例 | 预期结果 | 测试结果 |
1 | 用户输入正确结果 | 提示:“答对啦,你真是个天才!”并给出下一题 | 通过 |
2 | 用户输入错误结果 | 提示:“再想想吧,答案似乎是12喔!”并给出下一题 | 通过 |
3 | 用户共答对3题 | 提示:“你一共答对3道题,共20道题” | 通过 |
功能二
编号 | 测试用例 | 预期结果 | 测试结果 |
4 | 用户输入正确结果 | 提示:“答对啦,你真是个天才!”并给出下一题 | 通过 |
5 | 用户输入错误结果 | 提示:“再想想吧,答案似乎是12喔!”并给出下一题 | 通过 |
6 | 用户共答对3题 | 提示:“你一共答对3道题,共20道题” |
通过 |
功能三
编号 | 测试用例 | 预期结果 | 测试结果 |
7 | 输入 f4 -c -200 | 输出“题目数量必须是 正整数。” | 通过 |
8 | 输入 f4 -c 3.5 | 输出“题目数量必须是 正整数。” | 通过 |
9 | 输入 f4 -c 3 | 输出三道题目,并保存到txt中 | 通过 |
函数 public static double Compute(double leftNum, double rightNum, char op)
经过测试,测试结果全部通过,上面给出了一个测试用例的截图
编号 | 测试用例 | 预期结果 | 测试结果 |
10 | num1=1,num2=3,op='/' | 0 | 通过 |
11 | num1=4,num2=0,op='/' | 0 | 通过 |
12 | num1=2,num2=5,op='/' | 0.4 |
通过 |
函数 public static double Calucate(string expression)
经测试,测试用例全部通过。
编号 | 测试用例 | 预期结果 | 测试结果 |
13 | “3+1” | 4 | 通过 |
14 | “4/5” | 0.8 | 通过 |
15 | “1+(2-3)/2” | 0.5 |
通过 |
16 | "1*2/(2+8)" | 0.2 | 通过 |
相关程序代码如下:
1 //计算两两之间操作后的数值 2 public static double Compute(double leftNum, double rightNum, char op) 3 { 4 5 switch (op) 6 { 7 case '+': return leftNum + rightNum; 8 case '-': return leftNum - rightNum; 9 case '*': return leftNum * rightNum; 10 case '/': 11 12 double m = leftNum / rightNum; 13 string s = m.ToString(); 14 if (s.Length > 9) 15 { 16 go = 1; 17 } 18 19 return leftNum / rightNum; 20 case '%': return leftNum % rightNum; 21 case '^': return Math.Pow(leftNum, rightNum); 22 default: return 0; 23 } 24 25 }
1 public static double Calucate(string expression) 2 { 3 try 4 { 5 var rpn = MidOrderToPostOrder(expression); 6 var operandStack = new Stack<double>(); 7 double left, right; 8 object cur; 9 while (rpn.Count > 0) 10 { 11 cur = rpn.Dequeue(); 12 if (cur is char) 13 { 14 right = operandStack.Pop(); 15 left = operandStack.Pop(); 16 operandStack.Push(Compute(left, right, (char)cur)); 17 } 18 else 19 { 20 operandStack.Push(double.Parse(cur.ToString())); 21 } 22 } 23 return operandStack.Pop(); 24 } 25 catch 26 { 27 throw new Exception("表达式格式不正确!"); 28 } 29 }
要求4 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(5分)