第二次结对编程作业

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 学习了Python的基本语法
2 319 319 18 26 实现了算法部分,学习了网络编程
3 100 419 12 38 学习了网络爬虫的基本知识
4 125 544 10 48 完成了网络接口,学习了Python的单元测试
posted @ 2019-10-15 21:49  annahme  阅读(170)  评论(3编辑  收藏  举报