现代软件工程 结对编程总结
作业要求及项目源码
作业要求:https://edu.cnblogs.com/campus/ustc/InnovatingLeadersClass/homework/2231
项目源码:https://github.com/YichongLeng/golden_point
PSP表格估计项目时间和实际时间
PSP各个阶段 | 预计时间(小时) | 实际时间(小时) |
计划:明确需求和其他因素,估计以下的各个任务需要多少时间 | N/A | 0 |
开发:包含下面8项 | N/A | 14 |
需求分析 | N/A | 0.5 |
生成设计文档 | N/A | 0.5 |
设计复审 | N/A | 0.4 |
代码规范 | N/A | 0.3 |
具体设计 | N/A | 0.3 |
具体编码 | N/A | 6 |
代码复审 | N/A | 2 |
测试 | N/A | 4 |
报告 | N/A | 0.3 |
&测试报告 | N/A | 0 |
&计算工作量 | N/A | 0 |
&事后总结,并提出改进计划 | N/A | 2 |
总共花费的时间 | N/A | 16 |
接口设计与实现
整体策略:分析历史数据,找出其他Bot中使用随机数干扰的,用统计学方法对其建模,此外,对其他Bot不含干扰的数据用ARIMA模型建模,进行估计。最后,我们提交的数字,一个为ARIMA模型预测的值结合我们的第二个数,另一个采用scale estimation纠正第一个的结果,或者加噪声干扰。
函数 | 功能 |
LineToNums (line, type=float ) | 读入历史数据 |
data_transfer(history) | 将可能的噪声干扰放在右边那一列 |
my_ARIMA(new_history, aaa) | 根据去除噪声干扰历史黄金点预测下一个黄金点值,aaa是一个数组指示噪声列/非噪声列 |
detect_random(history) | 利用方差检验一列是否包含随机数,并估计出这一列所使用的随机数的概率和均值 |
predict(info_array) | 结合之前ARIMA模型预测的值,此外,找到干扰项最大概率时对应的预测值,反解方程 |
timeout(timeout) | 防止my_ARIMI函数用时过长,超时时输出之前黄金点的均值而非输出0 |
算法的关键在于my_ARIMA函数,是利用统计学ARIMA模型来预测,并且我们精心考虑了干扰项的数据分布,以及干扰项对结果的干扰。
design by contract
契约模型核心思想是软件系统的各个元素如何在相互的义务和利益的基础上相互协作,即分工明确,给定合理的输入,要有合理的输出结果
代码规范,设计规范
我们在初期就讨论决定了数据的数据结构、用到的函数、函数输入的形参以及返回的结果的格式,保证了在之后分开编程实现各部分功能后,最终能容易的整合在一起。
结对过程
10.12-13:讨论算法及代码规范,任务分工
10.14-10.15:各自实现相应的的接口,并进行整合
10.15-10.16:测试,修复bug
合作方式及优缺点
同伴的优点:
- 数理基础扎实,掌握很多统计学模型
- 考虑周到,能从整体出发,设计策略
- 善于测试代码
- 善于分析历史数据
同伴的缺点:
- 编程速度稍慢一些,但代码质量很高
我的优点:
- 写代码较快,实现除ARIMA之外的附属工作
- 擅长代码管理
我的缺点:
- 容易出一些小bug,比如没有考虑数组为空就计算均值及方差
你如何说服你的伙伴改进他/她的缺点?
根据测试结果,出现问题一起解决,同伴进度较慢,我也会即时提醒并帮他完成一些其他工作,加快整体进度。