成员: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 time(min) |
actual time(min) |
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.我们的这次合作很顺利,同伴的耐心欠佳,但是他却有很强的动手能力,以及坚持不懈的习惯。在这次合作中,我们都发挥了自己的优势,起到了1+1>2的效果。
2.在完成这次结队作业的过程中,我们在代码规范和编程思想上有了进一步的磨合,除了在学习新内容上花费了一些时间,总体上还是很顺利的。