2022秋软工实践 第二次结对编程作业
这个作业属于哪个课程 | fzusdn社区 |
---|---|
这个作业要求在哪里 | 2022秋软工实践 第二次结对编程作业 |
这个作业的目标 | 设计一个算法,在最小化向后端发送的请求次数的同时,最大化抓出缺勤同学的数量 |
学号 | 032002530 |
结对成员学号 | 032002342 |
结对成员博客 | 美女队友链接 |
背景
栋哥对大家第一次结对编程作业的原型设计感到很满意,为了尽快让同学们使用上软件,于是栋哥花一晚上时间开发了一个点名小程序。但是在上线运行过后,发现了一些问题:
- 大多数老师习惯在每次上课后或下课前的一小段时间内进行点名。
- 如果采用全点的方式,在这段时间里,后端服务器需要处理大量的请求,拥塞导致响应速度变慢,给点名小程序带来极差的使用体验。
- 采用随机抽点的方式,能够有效减少并发量,但是无法保证点名的质量,难以有效抓出没有到教室的同学。
所以栋哥急需大家设计一个算法来解决这个问题,要求能够最小化向后端发送的请求次数,最大化抓出缺勤同学的数量。
具体要求
定义5门课程,每个课程班级人数为90人,一学期共20次课。每门课程均有5-8位同学缺席了该学期80%的课,此外每次课程均还有0-3位同学由于各种原因缺席。
参数定义:
- 请求次数:定义在一次点名中,获取一位同学是否到达课堂的情况为一次请求。
- 有效点名:一位同学缺席该课程的一次课,算法在这次课上抽点到该同学,视为一次有效点名,一次课可包含多次有效点名。
评价标准
E = 五门课程有效点名次数 总请求次数 \frac {五门课程有效点名次数}{总请求次数} 总请求次数五门课程有效点名次数
重点、难点分析
数据集的生成
算法的输入是五门课程的全部人员的到勤信息,
点名算法的实现
一千个不用机器学习的理由
编程思考
1.生成数据集
五门课的每门课对应一个数据集,每个数据集包含了:学生id(用来唯一识别一名学生)20次课的到勤情况(到为0,没到为1)
其中每门课程均有5-8位同学缺席了该学期80%的课,此外每次课程均还有0-3位同学由于各种原因缺席。
在此基础上,我们认为,绩点低于2、在班级当中没有担任职务且为非党员的同学的逃课概率要比其他同学高
生成的步骤为:
生成的数据集如下:
2. 算法的设计
- 算法分为四个模块:
- 生成符合预期的数据集并生成文件
3. 算法的实现
4. 输出
- 算法执行结束后,在
data
文件夹当中生成了本次实验相对应的五门课每门课的点名名单
5. 测试执行算法得到的E值的稳定性
- E的均值=
0.839796878
,方差=0.0000545242
- 可以看到,E的值具有较强的稳定性,同时E的值维持在相对较高的水平
6. 代码编写规范
- 实现的程序语言:Python,参考了Google Python Style Guide
PSP 和 学习进度条
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | ||
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | ||
· Design Spec | · 生成设计文档 | ||
· Design Review | · 设计复审 (和同事审核设计文档) | ||
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | ||
· Design | · 具体设计 | ||
· Coding | · 具体编码 | ||
· Code Review | · 代码复审 | ||
· Test | · 测试(自我测试,修改代码,提交修改) | ||
Reporting | 报告 | ||
· Test Report | · 测试报告 | ||
· Size Measurement | · 计算工作量 | ||
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | ||
合计 |
学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | |||||
2 |
白天到黑夜
程序模块运行的视频演示
(视频审核中)
GitHub 仓库地址和 commit 记录
GitHub 仓库地址:2022 Second Pairing Assignment in Software Engineering
commit 记录:
两个人的所思所想
帅哥美女有话说
其实我们不难发现,编程耗时最多的方面就是debug。在我们得出设计思路,并将它们初次转化成代码后,编程之路其实才走了一小段。由于个人的疏忽,输入的错误,以及设计思路的偏差,往往会让我们的程序陷入无止尽的BUG泥潭中,难以挣脱,这将会消耗我们大量的时间。
而结对编程的好处就在于此。在编程的过程当中,由于有个领航员角色的存在,在编写代码时,一旦出现输入错误,就会有人及时的提醒。并且,在设计代码时,有个同伴可以一起讨论,融合两个人不同的见解和观点,我们往往可以得出更加准确且更加高效的设计思路。这一切都为我们在完成代码后的debug过程省去了大量的时间。
就我们本次实验的编程而言,有了领航员的存在,我们在完成代码后,花在debug上的时间大大缩减,甚至很多阶段性的代码都是一次通过,这大大提高了我们编程的效率,而且我们两个人一起讨论出来的编程思路,也使得我们的代码功能更全面,效率更高。
我们一致认为,结对编程的优势主要就在于设计思路的共享,和我们互相为对方避免错误。总的来说,自己在编程时犯下的错误,有些尽管很简单,但却难以发现,而这些在另一个人眼中,却会十分明显。
因为结对编程可以很大程度上提高编程效率,而且两人轮流编程,不会太过疲惫,因此十分适合敏捷开发。如果未来我们从事软件开发的工作,我们会十分乐于进行结对编程,因为这会极大的改善我们的编程体验,是编程不再那么枯燥,debug之路也不会那么恐怖。
互相眼中的闪光点
帅哥眼中美女的闪光点:
- 思维敏捷
- 代码高手
- 坚持不懈
- 不怕困难
- 美丽动人
美女眼中帅哥的闪光点:
- xxx
- xxx
- xxx