结对项目
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering/homework/12147 |
这个作业在哪里 | https://github.com/linghuiba/3219005442 |
成员 | 陈浠3219005443、巴灵慧3219005442 |
目录
- PSP表格
- 效能分析
- 设计实现过程
- 代码说明
- 测试运行
- 项目小结
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时 | 实际耗时 |
---|---|---|---|
Planning | 计划 | 5 | 10 |
Estimate | 估计这个任务需要多少时间 | 5 | 5 |
Development | 开发 | 1200 | 1150 |
Analysis | 需求分析(包括学习新技术) | 100 | 80 |
Design Spec | 生成设计文档 | 20 | 10 |
Design Review | 设计复审 | 10 | 5 |
Coding Standard | 代码规范(为目前的开发制定合适的) | 45 | 75 |
Design | 具体设计 | 30 | 25 |
Coding | 具体编码 | 200 | 180 |
Code Review | 代码复审 | 20 | 30 |
Test | 测试(自我测试、修改代码、提交修改) | 100 | 120 |
Reporting | 报告 | 200 | 100 |
Test Repor | 测试报告 | 20 | 30 |
Size Measurement | 计算工作量 | 10 | 5 |
Postmortem&Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 40 |
二、效能分析
通过pycharm自带的性能分析图可以看出来,我们的程序主要在随机产生数字和符号frac_cal()、写入文档write_in()以及interger类上花费的时间较多。因为程序要求能够生成大量式子,因此所耗费的时间主要是在生成、计算以及保存上。由于在生成题目过多的情况下,查重函数会限制程序的实用性以及速度,因此在生成大量式子的过程中我们没有使用查重算法,这方面需要想出一个既能减少资源利用又能实现查重的算法进行改进,可惜的是,我们暂时没有想到更好的方法。
1)性能统计图
2)调用关系图
三、设计实现过程
由于技术限制的原因,我们并没有使用过多的专业算法如:树、波兰表达式等,而是通过各种循环嵌套完成需求。
四、代码说明
1、cal()是确定运算规则,Int_cal()是随机生成数据和符号,其中的参数r是控制随机生成数字的上限
2、从2-4中随机生成一个数,来控制数字个数的生成,确定式子的长度。这里我们选取了n=4的情况进行展示,由于n=4的式子情况有很多种,这时候编写嵌套时就需要特别细心,判断好每个嵌套之间的逻辑关系。特别注意在进行减法运算的时候,一定要判断两个数的大小,根据大小调换顺序,防止出现负数。
3、结果输出转化:若结果为整数,则直接输出。若结果为小数,则转化为分数,其中如果分子比分母大,那么就转化为带分数
4、对给定的题目文件和答案文件,判定答案中的对错并进行数量统计:
4.1、先读取问题文件并计算得出结果后输出到文档中
4.2、其次读取答案文件
4.3、最后判断答案文件中的答案是否与输出结果相同,若相同则将正确的式子号加入到正确的队列中,若错误则加入错误的队列中。
五、测试运行
1、算式为分数
2、算式为整数
3、生成10000道题
4、正确性检验:我们经过多次检验发现,该程序的正确率可以达到87.8%,说明该程序可信度较高,以下是其中一次检验的情况
4.1、题目文件
4.2、答案文件
4.3、输出结果
六、项目小结
成员1小结:在本次结对项目中我主要负责代码的编写,我用的是python语言。在此次作业中我体会到程序的逻辑性非常重要,在计算部分需要把各种有可能的结果都写出来,不能漏掉任何一种可能,if和else的配对不能有错,否则将无法输出正确答案,甚至导致产生各种各样的bug。同时我存在看不懂题意的问题,感谢我的队友大巴帮我解释题目。通过这次作业,我收获颇多。
成员2小结:我在结队工作中是进行性能分析以及博客的编写工作。在这次合作中,我觉得比起一个人完成任务,大家一起合作更能达到事半功倍的效果。一个人的思维可能会比较局限,而两个人讨论就能够发散思维,共同快速解决出现的问题。最后,我也非常感谢我的队友cc同学十分的给力、可靠,在那么多嵌套的情况下,能够分析清楚其中的逻辑关系、独立自主地实现整个程序。