软工第三次作业
github仓库地址:https://github.com/DanielWen2005/QuestionCreater
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13470 |
| 这个作业的目标 | 实现一个生成小学四则运算题的项目。锻炼实践团队项目能力,需求分析、规划,以及分工合作能力 |
| 姓名 | 学号 |
|---|---|
| 温尚熙 | 3123004671 |
| 李靖华 | 3123004662 |
一、PSP
| Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|
| 计划 | 10 | 10 |
| - 估计这个任务需要多少时间 | 10 | 10 |
| 开发 | 170 | 190 |
| - 需求分析 (包括学习新技术) | 20 | 15 |
| - 生成设计文档 | 10 | 10 |
| - 设计复审 | 5 | 5 |
| - 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
| - 具体设计 | 40 | 60 |
| - 具体编码 | 60 | 55 |
| - 代码复审 | 10 | 20 |
| - 测试(自我测试,修改代码,提交修改) | 20 | 20 |
| 报告 | 45 | 45 |
| - 测试报告 | 20 | 20 |
| - 计算工作量 | 20 | 15 |
| - 事后总结, 并提出过程改进计划 | 5 | 10 |
| - 合计 | 225 | 245 |
二、效能分析
使用cProfile分析这段代码性能得出,函数generate_exercise在整段程序运行时间中占据了绝大部分,约占全部运行时间75%。

经过分析后发现在生成问题以及生成对应答案的功能中耗时较长,讨论以及查阅资料后采用更高效的生成算法,在生成题目的同时计算题目答案,有效地降低了函数运行时间,调高效能。
在经过测试后发现生成的答案正确率与修改前相同,对程序的有效性没有影响。
三、设计实现过程
整个程序分为四个部分,共包含十个函数。
- 输入读取部分:读取命令行输入的关键字和关键参数
- 生成题目部分:随机生成数字,随机组合数字生成题目后验证答案
- 题目与答案输出部分:将符合要求的题目和答案输出到本地文件中
- 答案验证部分:在用户输入答案文件时自动比对后生成正确的题目和错误的题目,并将结果输出到本地文件中
程序根据输入读取部分读取到的关键参数执行不同的函数,完成特定要求题目的生成和输出或者对用户输入答案的验证与输出。
四、代码说明
1、数字生成函数

随机生成组成题目的符合要求的数字
2、题目生成函数

随机生成题目中的数字和运算符号

对生成的题目进行验证

对题目的答案进行计算

在生成有括号的算式时更改计算策略
3、答案计算函数

对于用户给出的题目文件,读取题目后计算答案。将是否携带括号分情况计算解决。

携带括号的计算策略
4、答案对比检查函数

在用户提供的文件内提取题目内容,并化为标准格式

利用答案计算函数计算每道题目的答案并与用户提供的答案文件进行比对,统计正确与错误结果
五、测试运行

随机生成答案文件模拟用户提供的答案文件,将测试程序输出结果与生成的正确错误结果对比,得出程序的正确率

程序生成的题目

程序生成的答案

测试程序生成的随机答案
测试后发现程序生成的答案与题目完全匹配。测试程序生成的答案经过程序对比后成功识别正误,正确率达100%。
六、项目小结
这次结对编程是一次宝贵的经历。与单独开发相比,结对编程让我感受到了"1+1>2"的效果。当我在算法设计中陷入思维定式时,他总能从不同角度提出创新思路。特别是在处理表达式去重问题时,我们经过多次头脑风暴,最终找到了比最初方案更优雅的解决方案。同时,代码审查也帮助我发现了自己平时忽略的编码细节,提高了代码质量。
作为第一次参与结对编程,我最初担心合作中会出现意见分歧影响效率。但实际上,我们的合作非常愉快且高效。他对算法深刻的理解帮助我解决了许多技术难题,而我在用户交互方面的经验也为项目增添了价值。最重要的是,结对编程带来了持续的动力,当一个人遇到困难时,另一个人总能提供支持和鼓励,这种互助氛围极大地提升了开发体验。

浙公网安备 33010602011771号