一、结对信息
项目组合 郭炜埕 201521123064 郑晓丽 201521123066
项目地址 (https://gitee.com/vicheng/four_operations/tree/master)
二、结对编程
1、需求分析
原来的代码只实现简单的两位数之间的加减乘除,而我们为需要改进其功能,实现了三位数的计算,并加了括号
改进后界面:
改进前类图:
改进后类图:
2、程序设计
3、代码展示
关键代码展示:
···
double g(double a, double b, String m) {
double v = 0;
switch (m) {
case "+":
v = a + b;
break;
case "-":
v = a - b;
break;
case "×":
v = a * b;
break;
case "÷":
v = a / b;
break;
}
return v;
}
private List<Object> trans(String s) {
Stack<Character> op = new Stack<Character>();
ArrayList<Object> list = new ArrayList<Object>();
Pattern P = Pattern.compile("[0-9]+(\\\\.[0-9]+)?"); // 正则表达式来处理带小数点的数字
int i = 0;
while (i < s.length()) {
char c = s.charAt(i);
if (c >= \'0\' && c <= \'9\') {
String s1 = s.substring(i);
Matcher m = P.matcher(s1);
if (m.find()) { // 取匹配到的第一个数字
s1 = m.group();
list.add(s1);
}
i = i + s1.length();
continue;
} else if (c == \'(\') {
op.push(c);
} else if (c == \')\') {
char p = op.pop();
while (p != \'(\') {
list.add(p);
p = op.pop();
}
} else if (c == \'+\' || c == \'-\') {
while (!op.isEmpty()
&& (op.peek() == \'+\' || op.peek() == \'-\' || op.peek() == \'×\' || op.peek() == \'÷\')) {
list.add(op.pop());
}
op.push(c);
} else if (c == \'×\' || c == \'÷\') {
while (!op.isEmpty() && (op.peek() == \'×\' || op.peek() == \'÷\')) {
list.add(op.pop());
}
op.push(c);
}
i++;
}
while (!op.isEmpty()) {
list.add(op.pop());
}
return list;
}
}
##4、程序运行
输入习题数,有选择语言的功能
简体中文
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325133213321-242584653.png)d
繁体中文
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325133456180-939777441.png)
英文
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325134804968-852022730.png)
开始
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325133550585-585393349.png)
进入运算界面,开始计时
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325134531868-1362324261.png)
输入答案
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325134607765-1839027844.png)
##5、测试
(1)、对原先的代码进行的代码覆盖率的测试
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325152800510-319708184.png)
(2)、对改进后的代码进行单元测试(主要测试算法)
测试代码:
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325153101444-431916334.png)
测试结果:
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325153211391-1913689059.png)
(3)、对改进后的代码进行覆盖率测试
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325155608412-2087370827.png)
解读:类似与于Arithmetic里面switch语句部分执行,选择性语句
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325163730755-720453098.png)
或者检测异常,如果没有异常,里面的语句便不会执行
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325163936819-80896710.png)
诸如此类的会降低覆盖率
##6、PSP表格
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟)| 实际耗费时间(分钟)
- | :-: | -:
Planning | 计划 | 18 | 16
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 10 | 8
· Analysis | 需求分析 (包括学习新技术) | 6 | 10
· Design Review | 设计复审 | 4 | 6
· Coding Standard | 代码规范 | 5 | 5
· Design | 具体设计 | 20 | 30
· Coding | 具体编码 | 36 | 21
· Code Review | 代码复审 | 7 | 9
· Test | 测试(自我测试,修改代码,提交修改)| 22 | 33
· | 并提出过程改进计划 | 10 | 10
##7、码云提交记录
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325170057848-1457953136.png)
##8、小结感受
我们的功能还待完善,在输入答案栏需要输入一位小数,如果答案是无限不循环小数,还没法实现保留几位小数的功能。两个人结对编程相当于合作,
要互相了解,并完成自己的任务。在团队中认识到自己的不足,也能看到队友身上的优点。继续努力学习
附上图片
![](https://images2018.cnblogs.com/blog/1109952/201803/1109952-20180325175552142-1279854880.png)