结对作业

Preview

这个作业属于哪个课程
班级链接
这个作业要求在哪里
作业要求链接
这个作业的目标
实现四则运算题目生成+PSP表格+性能分析
成员
潘百林 3119002098 Github链接 徐国涛 3119005436 Github链接

代码连接

小学生快乐生成器

功能实现

本次项目功能的实现可以分成:

  1. 随机数生成函数
  2. 运算符生成函数
  3. 答案生成函数
  4. 规范化函数
  5. 判错函数
  6. 桩函数

下面依次介绍这些模块

随机数生成函数

调用numpy库用于生成所需要的运算数,其中分成随机生成整数和随机生成浮点数两部分。接受两个参数n,r。其中n用于控制生成的题目个数属于必须传入的参数,r用于控制生成随机数的范围(非必需,不传入预设成10)。以下为具体实现,

运算符生成函数

调用numpy库用于生成运算符号的索引,并将索引对应的运算符映射到索引。接受一个参数n,用于控制生成运算符的个数。

答案生成函数

该函数接受以元组形式存储的一道题目,用于生成一道题目的答案。生成的逻辑可以用下图阐述

对应代码如下:

规范化函数

该函数接受一个小数,并转化成分数。根据分子是否大于分母进一步处理真分数的情形。具体代码如下:

判错函数

该函数用于判断传入的答案的对错。接受一个文件作为输入,答案文件存放在默认路径下。
设置变量n用于记录按行读入传入文件和答案文件并且比较两个数是否相等,相等则记下题号并自增n。

桩函数

桩函数用于接收参数、驱动上述函数和异常处理等。
在命令行中直接运行文件并传入参数,便可生成对应的题目和答案文件。
桩函数还设置了异常处理函数。取决于调用函数是用于生成题目还是判错,设置了不同的参数传递方式。

传参部分

函数功能实现

异常处理

性能分析


从上图可以看出,该系统的主要耗时在调用io接口接收参数的函数以及将生成的题目和答案通过调用io写入的过程。
这里如果调用多次io接口进行写入较为耗时,可以改成将需要写入的内容按照一定的格式组合后一次性写入文件当中。这样n次调用io接口便可以只执行一次便可。

单元测试以及测试运行

这里根据编写的函数的边界等情况编写相应的测试用例来验证函数的功能。代码如下

执行完成后的结果如下。从下图中可以看出,对于桩函数可能遇到的所有异常情况都进行了对应的处理(包括抛出错误并返回提示等等)
并且成功测试了生成10000条题目和对答案进行校验的流程。

其中代码的覆盖率如下。从中可以看到uni_test的覆盖率达到97%

需求满足

  • 需求1 生成题目的个数
    该需求只需要在调用的时候指定n的大小即可
  • 需求2 控制数值
    该需求只需要在调用的时候指定r的大小即可
  • 需求3 不能存在负数
    在生成答案的过程中。若计算出答案为负数,则该题不会被写入到生成的题库中。相应处理代码如下:
  • 需求4 真分数处理
    已经满足,可以从生成的答案中看出如下图
  • 需求5 运算符不超过三个
    满足,所有题目运算符个数在2,3之间
  • 需求6
    满足,所有题目存放于该文件下的Exercises.txt文件
  • 需求7 生成的题目应附有答案
    满足,所有答案存放于该文件下的Answers.txt文件且真分数处理完成。
  • 需求8 生成一万道题目
    满足,事实上单元测试中便是生成了一万道题目
  • 需求9 判错函数
    满足,其效果如下图所示

PSP表格

Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)|
Planning 计划 30 30
Estimate 预估时间 800 890
Development 开发 450 480
Analysis 分析 10 20
Design Spec 生成设计文档 50 70
Design Review 设计复审 10 10
Coding Standard 代码规范 5 5
Design 具体设计 20 20
Coding 编程 240 260
Code Review 代码复审 20 20
Test 测试 100 120
Reporting 报告 100 100
Test Report 测试报告 20 20
Size Measurement 工作量计算 5 5
Review 复盘 20 20
合计 1060 1370

个人小结

成员:潘百林
本次项目是我和徐国涛同学第一次合作。个人从这次合作项目中学到了许多。
首先是开始项目前的接口确定。团队项目不同于个人项目,团队中的成员不一定清楚每一个函数返回的数据类型,也不会知晓一个函数中的具体实现。所以事先规定每一个函数的返回的数据类型就十分重要。其次是Git的管理,多人参与项目后Git的管理也至关重要。团队项目不同于个人项目,需要保持成员中的代码的版本一致。通过本次项目学会了通过Git查看各版本的区别,对版本进行控制和管理.最后,最重要的是学会与队友分工合作。徐大佬给我写的烂代码提出了许多宝贵的意见,是一个很强的code reviewer,帮助我提高了我的代码能力。感谢徐神带飞我。
成员:徐国涛
本次项目是我和潘百林同学的第一次合作,从这次项目中学到了许多。
首先是代码能力,每次做项目都会提升自己的代码能力,除了自己写的部分,队友写的代码也要稍微读懂,对自己的代码能力有一定的提升。
其次是Git的管理,多人参与项目后Git的管理也至关重要,学会了通过Git查看各版本的区别,对版本进行控制和管理。
最后,最重要的是学会与队友分工合作,队友潘大佬写的是四则运算项目的核心程序,我写的是一些辅助函数以及代码的规范,合理的分配工作使得效率提高。
最后的最后,感谢潘神对我的不嫌弃和带飞。

posted @ 2021-10-24 15:49  Bring_633  阅读(80)  评论(0编辑  收藏  举报