第四次作业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分)

https://git.coding.net/xushaobin/task_4.git

原文地址:https://www.cnblogs.com/linym762/p/7650093.html