1.改进现有代码
姓名:郭雅芳 学号:201521123013 博客地址
姓名:李香荣 学号:201521123012 博客地址
参考博客2:http://www.cnblogs.com/belong033 源代码:https://coding.net/u/Belong033/p/java-third/git
- 重构
clone项目,在开发环境中运行该应用程序,修改完毕最后上传至码云,并在博客中给出链接
码云地址检查大部分主要类之间的关系,画出类图
浏览所有代码考虑代码质量和测试覆盖率
确定当前设计的一个弱点,通过重构,确保在这个地方已有测试覆盖并保证重构没有改变已有的功能 ?好的测试是重构的根本。检查已有代码的测试,看测试用例是否足够覆盖原代码,如果不足,请添加测试用例
测试用例里只有整型之间以及分数之间的测试,没有整型和分数的测试
降低代码重复量,找出代码逻辑泥球
对分数和整型的四则运算代码有很多是一样的
修改代码后,检查代码覆盖,看单元测试是否需要修改?测试用例是否需要增加?
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,它们之间不能通过有限次交换变成同一个题目。
对于优先级的处理(伪代码)
private static String infixToPostfix(String exp){
//定义优先级规则priority
priority.put("*", 2);
priority.put("/", 2);
priority.put("+", 1);
priority.put("-", 1);
priority.put("", -1);
...
if (isNum(num_op)) { // 是数字则输出
} else if (")".equals(num_op)) { // 右括号则将左括号之前的内容全弹出
while (!"(".equals(tmp)) {
tmp = stack.pop();
}
} else if ("(".equals(num_op) || priority.get(num_op) >= priority.get(getTopOperator())) {
} else { // 优先级小于栈顶运算符,则弹出
}
}
// 弹出剩余运算符
while (stack.size() > 0) {
postfix.append(stack.pop()).append(" ");
}
return suffix.toString();
}
程序截图
码云提交记录
结对照片
小结感受:结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
对于这次实验的感受,简直是糟心。没有体会到1+1>2的感觉,两人编程水平都不高,编程过程中思路很杂乱,导致浪费太多时间。没有合理的安排时间,以及分配好每个人的工作。
PSP2.1 | 个人开发流程 | 估计耗时 | 实际耗时 |
---|---|---|---|
Planning | 计划 | 15 | 20 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 5 | 5 |
Development | 开发 | 240 | 320 |
· Analysis | 需求分析 | 25 | 50 |
· Design Spec | 生成设计文档 | 15 | 13 |
· Design Review | 设计复审 | 20 | 45 |
· Coding Standard | 代码规范 | 10 | 10 |
· Design | 具体设计 | 50 | 55 |
· Coding | 具体编码 | 80 | 100 |
· Coding Reivew | 代码复审 | 20 | 20 |
· Test | 测试(自我测试、修改代码、提交修改) | 15 | 25 |
Reporting | 报告 | 20 | 20 |
· | 测试报告 | 5 | 4 |
· | 计算工作量 | 5 | 7 |
· | 并提出过程改进计划 | 8 | 10 |