结对编程(JavaScript实现)
结对成员:金文涛 3117004613 石竞贤 3117004628
一、Github地址:https://github.com/Gvonte/arithmetic
演示地址:https://gvonte.github.io/arithmetic/
二、PSP表格:
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
30 |
30 |
Development |
开发 |
810 |
830 |
· Analysis |
· 需求分析 (包括学习新技术) |
100 |
100 |
· Design Spec |
· 生成设计文档 |
30 |
40 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
40 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
20 |
· Design |
· 具体设计 |
60 |
60 |
· Coding |
· 具体编码 |
500 |
500 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
40 |
40 |
Reporting |
报告 |
100 |
90 |
· Test Report |
· 测试报告 |
50 |
40 |
· Size Measurement |
· 计算工作量 |
30 |
30 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
20 |
合计 |
|
940 |
950 |
三、效能分析:
尽量将相类似的操作进行封装,提高代码复用率
1. 一个生成题目集的函数我分为以下几个子函数实现:
2. 获取一道题目运算流程和答案的函数我分为以下几个子函数实现:
3. 检查两道题目重复性的函数我分为以下几个子函数实现:
4. 将一些重复操作编写成函数:
四、设计实现过程:
五、代码说明:
1.定义运算规则(因为包含分数的运算,所以重新定义运算规则)
将加减乘除和自然数与自然数、自然数与真分数、真分数与真分数3种情况分别讨论
且运算过程中产生的分数不用处理,最后统一将分数进行约分以及真分数的格式化
2. 获取题目的运算过程
先封装了一个函数fn,求无括号的算式运算过程,原理是:先存乘除的运算过程再存加减的运算过程
然后获取题目的运算过程,原理是:先判断有无括号,无括号的话直接调用fn,有括号的话利用栈处理,遇到左括号压栈,右括号弹出,括号内的利用函数fn处理
3. 判断两题是否相同
首先从两题的答案上初步筛选,然后从两题的运算过程比较,如果完全一致则两题相同(如果运算过程有3项,需要考虑一种运算过程相似的情况,例如:["3×1", "2×6", "3+12"]和["2×6", "3×1", "12+3"]不完全相同,但这两道题是相同的)
六、测试运行:
1. r传参不能小于1
2. 每次生成的题目不重复且答案准确
3. 运算过程准确
4. 核对用户答案正确、错误数目准确
5. 保存答案至本地准确
6. 上传题目准确
7.上传答案准确
七、项目小结:
1. 可以在构思的过程,更好的让代码构建更简洁,从而减少优化代码的时间
2. 两人合作编程需要提前规范好代码,不然复查看起来很麻烦
3. 双人分工,模块化编程让一个复杂的工程变得比较简洁明