结对编程2——单元测试

成员:201421123005 谢晓萍  201421123030 陈宇杰

 代码地址:https://coding.net/u/cococok2/p/TeamWork-2/git

1.需求分析

(1)通过单元测试代码,测试加法是否能正确工作;

(2)通过单元测试代码,测试加减乘除功能。

(3)通过单元测试代码,测试计算类对于各种参数的支持:

a. 输入是有错误的,例如 “1 ++ 2”,

b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,

c. 或者是 “ 248 / 0” 怎么办?

d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?

e. 那么如果真的计算结果是 “-1” 又怎么处理呢?

 

2.设计测试框架, 模拟测试数据

 

加减测试:

 

乘除测试:

 

混合运算测试(带括号):

 

括号的嵌套:

 

括号输入不完整:

 

输入错误:(如输入1++2)

 

0的情况:(结果定义为无穷)

 

以下是运算模块的代码:

 

  1 package package1;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 public class autoCalculate {
  6     
  7     
  8     public List<String> list;
  9      public autoCalculate(String input) {
 10             char[] ins = input.toCharArray();
 11             list = new ArrayList<String>();
 12             String str = "";
 13             
 14             for (int i = 0; i < ins.length; i++) {
 15 
 16                 if (ins[i] == '-' && ins[i + 1] >= '0' && ins[i + 1] <= '9'
 17                         && (i == 0 || ins[i - 1] == '(')) {
 18                     str += ins[i];
 19                     continue;
 20                 }
 21                
 22                 if (ins[i] == '-' && ins[i + 1] == '('&&(i==0||ins[i-1]!=')')) {
 23                     list.add("0");
 24                     list.add("-");
 25                     list.add("1");
 26                     list.add("*");
 27                     continue;
 28                 }
 29                 if (!checkFuhao(ins[i])) {
 30                     str += ins[i];
 31                     if (i == ins.length - 1) {
 32                         list.add(str);
 33                     }
 34                 } else {
 35                     if (!"".equals(str)) {
 36                         list.add(str);
 37                         str = "";
 38                     }
 39                     list.add(ins[i] + "");
 40                 }
 41                 
 42                 if (i>0&&ins[i]=='('&&ins[i-1]>='0'&&ins[i-1]<='9') {
 43                     list.add(list.size()-1,"*");
 44                 }
 45             }
 46 
 47         }
 48     
 49     String yunsuan(List<String> list) {
 50         try {
 51             int zuo = haveZuoKuoHao(list);
 52             if (zuo != -1) {
 53                 int you = lastYouKuohao(list, zuo);
 54                 List<String> l = removeKuohao(list, zuo, you);
 55                 addKuohao(list, yunsuan(l), zuo);
 56                 yunsuan(list);
 57             }
 58             int chengchu = haveChengChu(list);
 59             if (chengchu != -1) {
 60                 chengchuYunsuan(list, chengchu);
 61             } else {
 62                 jiajianYunsuan(list);
 63             }
 64             if (list.size() == 1) {
 65                 return list.get(0);
 66             }
 67         } catch (Exception e) {
 68             System.out.println("error");
 69             System.exit(0);
 70         }
 71         return yunsuan(list);
 72     }
 73     
 74     public void jiajianYunsuan(List<String> list) {
 75         for (int i = 0; i < list.size(); i++) {
 76             if (list.get(i).equals("+")) {
 77                 double last = Double.parseDouble(list.remove(i + 1));
 78                 list.remove(i);
 79                 double first = Double.parseDouble(list.get(i - 1));
 80                 list.set(i - 1, last + first + "");
 81                 i--;
 82             }
 83             if (list.get(i).equals("-")) {
 84                 double last = Double.parseDouble(list.remove(i + 1));
 85                 list.remove(i);
 86                 double first = Double.parseDouble(list.get(i - 1));
 87                 list.set(i - 1, first - last + "");
 88                 i--;
 89             }
 90         }
 91 
 92     }
 93     
 94     public void chengchuYunsuan(List<String> list, int chengchu) {
 95         double last = Double.parseDouble(list.remove(chengchu + 1));
 96         String fuhao = list.remove(chengchu);
 97         double first = Double.parseDouble(list.get(chengchu - 1));
 98         if (fuhao.equals("*")) {
 99             list.set(chengchu - 1, first * last + "");
100         }
101         if (fuhao.equals("/")) {
102             list.set(chengchu - 1, first / last + "");
103         }
104 
105     }
106     public int haveChengChu(List<String> list) {
107         for (int i = 0; i < list.size(); i++) {
108             if (list.get(i).equals("*") || list.get(i).equals("/")) {
109                 return i;
110             }
111         }
112         return -1;
113     }
114     
115     public List<String> removeKuohao(List<String> list, int zuo, int you) {
116         List<String> l = new ArrayList<String>();
117         list.remove(you);
118         list.remove(zuo);
119         for (int i = zuo; i <= you - 2; i++) {
120             l.add(list.remove(i));
121             i--;
122             you--;
123         }
124         return l;
125     }
126     
127     public int haveZuoKuoHao(List<String> list) {
128         for (int i = 0; i < list.size(); i++) {
129             if (list.get(i).equals("(")) {
130                 return i;
131             }
132         }
133         return -1;
134     }
135     public int lastYouKuohao(List<String> list, int zuo) {
136         int zuoIndex = 1;
137         int youIndex = 0;
138         for (int i = zuo + 1; i < list.size(); i++) {
139             if (list.get(i).equals("(")) {
140                 zuoIndex++;
141             }
142             if (list.get(i).equals(")")) {
143                 youIndex++;
144             }
145             if (zuoIndex == youIndex) {
146                 return i;
147             }
148         }
149         return -1;
150     }
151     public boolean checkFuhao(char a) {
152         if (a == '+' || a == '-' || a == '*' || a == '/' || a == '('
153                 || a == ')') {
154             return true;
155         }
156         return false;
157     }
158 
159     public void addKuohao(List<String> list, String yunsuan, int zuo) {
160         list.add(zuo, yunsuan);
161 
162     }
163     
164 }

 

 

代码覆盖率:

 

结队照片:

psp

PSP2.1

Personal Software Process Stages

Estimated timemin

actual timemin

Planning

计划

11

6

· Estimate

估计这个任务需要多少时间

120

125

Development

开发

70

90

· Analysis

需求分析 (包括学习新技术)

20

30

· Design Spec

生成设计文档

4

5

· Design Review

设计复审

10

5

· Coding Standard

代码规范

4

5

· Design

具体设计

20

25

· Coding

具体编码

40

50

· Code Review

代码复审

10

15

· Test

测试(自我测试,修改代码,提交修改)

10

15

Reporting

报告

10

12

·

测试报告

5

5

·

计算工作量

3

5

·

并提出过程改进计划

4

4

 

 小结:

1.谢晓萍同学很耐心,遇到不会的问题会愿意花时间去自己百度并学习(例如,如何在eclipse上安装使用eclemma来测试代码覆盖率)。这点是我所欠缺的,两人结队编程起到了1+1>2的效果。

2.之前的java规范意识太弱,导致这次花了一些时间在重新模块化上,拖慢了整体进度。不过这也增加了我们的契合度,让我们合作更加顺利。

 

posted on 2017-03-29 16:32  杰。  阅读(123)  评论(1编辑  收藏  举报

导航