软件工程网络15结对编程作业
成员
201521123060 邹其元 [个人博客地址:(http://www.cnblogs.com/zq1996/)]
201521123075 江鹭涛 [个人博客地址:(http://www.cnblogs.com/tt1104/)]
[码云地址:(https://gitee.com/gg1104/pair_programming)]
[源代码地址:(https://coding.net/u/Belong033/p/java-third/git)]
题目要求:
1.改进现有代码
分析网络14部分现有程序代码(请选择其中一个)
个人博客地址1:http://www.cnblogs.com/weihui-01 ,源代码:https://coding.net/u/weh/p/software-testing/git
个人博客地址2:http://www.cnblogs.com/belong033 ,源代码:https://coding.net/u/Belong033/p/java-third/git
个人博客地址3:http://www.cnblogs.com/zenglijun ,源代码:https://coding.net/u/wjunren/p/TEST/git
个人博客地址4:http://www.cnblogs.com/shizhuangde ,源代码:https://coding.net/u/lhl1212/p/work2/git
个人博客地址5:http://www.cnblogs.com/NianQiFeng ,源代码:https://git.coding.net/qwx_hh/java-szys.git
原题目要求
http://www.cnblogs.com/happyzm/p/6472120.html
http://www.cnblogs.com/happyzm/p/6509116.html
http://www.cnblogs.com/happyzm/p/6558307.html
需求分析
实现基本的四则运算,尽量避免重复题目的出现,判断出最后结果的计算是否正确。
程序设计
代码展示
1.浏览所有代码考虑代码质量和测试覆盖率
(1)计时器:显示用户完成全部答题的所用时间。
(2).计算多个分数
public String calculate(ArrayList<String> postOrder)throws IOException {
Stack stack = new Stack();
//ArrayList<String> stack = postOrder;
String res = "";
FileWriter fm = new FileWriter("answer.txt");
BufferedWriter bufm = new BufferedWriter(fm);
for (int i = 0; i < postOrder.size(); i++) { if (res.equals("")) {
if (Character.isDigit(postOrder.get(i).charAt(0))) {
stack.push(Integer.parseInt(postOrder.get(i)));
} else {
Integer back = (Integer) stack.pop();
Integer front = (Integer) stack.pop();
stack.push(back);
Calculator calculator2 = new Calculator();
switch (postOrder.get(i).charAt(0)) {
case '+':
res = calculator2.compute(front + "/1", "+", back + "/1");
//res = (front + back);
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '-':
res = calculator2.compute(front + "/1", "-", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();> break;
case '*':
res = calculator2.compute(front + "/1", "*", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '/':
res = calculator2.compute(front + "/1", "/", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
}
} }
else {
if (Character.isDigit(postOrder.get(i).charAt(0))) {
stack.push(Integer.parseInt(postOrder.get(i)));
} else {
Integer back = (Integer) stack.pop();
Calculator calculator2 = new Calculator();
switch (postOrder.get(i).charAt(0)) {
case '+':
res = calculator2.compute(res, "+", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '-':
res = calculator2.compute(res, "-", back + "/1");
bufm.write(res);> bufm.flush();
bufm.newLine();
break;
case '*':> res = calculator2.compute(res, "*", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
case '/':
res = calculator2.compute(res, "/", back + "/1");
bufm.write(res);
bufm.flush();
bufm.newLine();
break;
}
}
}
}
return res;
}
程序运行
2.功能改进与扩展
增加一个运算符,程序应该有怎样的改变?不得不扔掉全部重写么,还是可以只改部分模块?基于模块化设计的思想,考虑在现有程序中做什么样的修改,才能让程序更好地实现新的需求
增加括号操作符
减少重复题目
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
小结感受:结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
1+1是可以>2的,一个人的想法是有限的,两个人,会有不同的想法,然后两个人不同的想法相互结合,可以产生1+1>2的效果。
PSP | 个人开发流程 | 预估耗费时间 | 实际耗时 |
Planning | 计划 | 20 | 18 |
Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 10 | 13 |
Development | 开发 | 180 | 240 |
Analysis | 需求分析 | 50 | 33 |
Design Spec | 生成设计文档 | 30 | 27 |
Design Review | 设计复审 | 20 | 10 |
Coding Standard | 代码规范 | 15 | 10 |
Design | 具体设计 | 30 | 50 |
Coding | 具体编码 | 60 | 65 |
Coding Reivew | 代码复审 | 30 | 40 |
Test | 测试 | 30 | 10 |
Reporting | 报告 | 30 | 26 |
测试报告 | 20 | 10 | |
计算工作量 | 10 | 10 | |
并提出过程改进计划 | 10 | 10 |