第二次结对编程作业
1.网页链接
2.分工
前端:林郁昊
后端:郑木平
3.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 80 |
Estimate | 估计这个任务需要多少时间 | 60 | 80 |
Development | 开发 | 2500 | 2680 |
Analysis | 需求分析 (包括学习新技术) | 600 | 400 |
Design Spec | 生成设计文档 | 30 | 40 |
Design Review | 设计复审 | 20 | 20 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
Design | 具体设计 | 50 | 30 |
Coding | 具体编码 | 1650 | 2000 |
Code Review | 代码复审 | 50 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 100 | 120 |
Reporting | 报告 | 100 | 105 |
Test Repor | 测试报告 | 30 | 30 |
Size Measurement | 计算工作量 | 20 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 50 | 60 |
合计 | 2660 | 2865 |
4.解题思路与设计实现
网络接口
- 使用了requests库
- 使用get和post方法中的headers、params和json参数发送请求
- 利用requests自带的json()解析数据
代码组织与内部实现设计(类图)
算法关键与流程图
- divide_cards1遍历第一墩
- is_continue判断是否继续遍历
- divide_cards2遍历第二墩
- 从大到小判断各墩牌型
- 选出平均权值最大的一种情况
5.关键代码解释
运用分治的思想,通过递归实现对牌型组合的遍历。
从大到小判断牌型,找出最大的牌型组合。
6.性能分析与改进
原先的代码是遍历所有的情况(72072种),然后从中选取权值最大的一种。但由于使用的是Python,遍历所有情况耗时太久,可能导致超时。因为对于大多数情况,后墩中墩很多是散牌或一对。于是增加了一个判断函数,对于后墩情况较好的(权值较大),再继续遍历中墩,这样就大大提高了程序的效率。
由图可知,消耗最大的函数是divide_cards1。
7.单元测试
测试函数:
- 测试牌型判断函数能否正确返回权值
- 测试划分函数是否正常遍历所有情况
- 测试网络接口能否正常连接,提交的数据是否正确
思路:
使用Python中的unittest模块,对代码中容易出错但又无法直接根据最终结果进行定位的模块进行测试。
8.贴出Github的代码签入记录
9.遇到的代码模块异常或结对困难及解决方法
- 问题描述
- 结对的两个队员都对python不太熟悉,导致需要先进行知识学习才能开始正式工作,时间浪费较多。
- 由于没有经验,代码规范未做好,在将两人代码组合时出现了许多问题
- 以前没有做过规模这么大的项目,前端设计时按钮、图片组件过多,导致变量命名时偶尔出现重复现象,造成错误的结果
- 做过哪些尝试
- 一边做一边学,利用课余时间恶补python,效果还不错,进度很快
- 发现问题后,我们马上制定了更完善的代码规范,避免冲突
- 用驼峰命名法,在命名时做到名而达意
- 是否解决
- 勉强解决,完成了一半回头再改实在太痛苦了
- 收获
- 让我明白了前期准备的重要性,代码规范、设计文档等等东西虽然看起来比较简单,但是做好了真的能提高效率、避免错误。还有就是对python的各种组件使用更加熟练了吧,第一次做规模这么大的项目,真的让我学到了很多,积累了一些经验,相信对我以后的项目开发有一定的帮助。
10.评价我的队友
- 值得的学习的地方
- 木平的学习效率是真的高,搜索所需资料的速度很快,这点是我需要学习的。做事没有拖延症,而且认真负责,讨论时积极,跟他合作很愉快。
- 需要改进的地方
- 改进?我木平就是大佬,要什么改进。
11.学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 8 | 8 | 通过搜索资源、观看教学视频,基本对于程序实现有了一个大概的思路,完成了原型设计 |
2 | 431 | 431 | 15 | 23 | 通过搜索资源、观看教学视频,掌握的pygame的大部分用法。将基本的前端功能实现了,网络接口还没有弄好,所以细节部分不知道怎么做 |
3 | 210 | 641 | 13 | 36 | 学习了动画精灵,通过pygame动画精灵,简化了扑克牌的载入和显示,将完成度提高,只剩下网络接口部分了 |
4 | 116 | 757 | 7 | 43 | 与后端对接,完成了所有代码工作,学习了网络接口的知识 |