结对项目
这个作业属于哪个课程 | 软工23级 |
---|---|
这个作业要求在哪里 | 结对项目 |
成员 | 3123004289薛东旗、3123004291杨洋 |
Github链接 | Github |
这个作业的目标 | 锻炼合作完成项目的能力 |
1.PSP表格
PSP2.1 | Personal Software Process stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 90 |
- Estimate | - 估计这个任务需要多少时间 | 30 | 45 |
Development | 开发 | 300 | 360 |
- Analysis | - 需求分析(包括学习新技术) | 60 | 90 |
- Design Spec | - 生成设计文档 | 45 | 60 |
- Design Review | - 设计复审(和同事审核设计文档) | 30 | 45 |
- Coding Standard | - 代码规范(为目前的开发制定合适的规范) | 30 | 40 |
- Design | - 具体设计 | 60 | 75 |
- Coding | - 具体编码 | 120 | 150 |
- Code Review | - 代码复审 | 30 | 40 |
- Test | - 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | 90 | 120 |
- Test Report | - 测试报告 | 30 | 45 |
- Size Measurement | - 计算工作量 | 30 | 40 |
- Postmortem & Process Improvement Plan | - 事后总结,并提出过程改进计划 | 30 | 45 |
合计 | 720 | 900 |
2.效能分析
从 JProfiler 的性能分析图来看,程序的主要性能瓶颈集中在 Main.generateExercises()
方法,该方法占据了 99.9% 的执行时间。其中,Main$BinaryExpression.canonical
(61.6%)和 Main$BinaryExpression.gatherTerms
(58.7%)是消耗最多时间的部分,表明表达式的标准化和项合并过程是主要的计算开销。此外,Collections.sort
也占用了 1.5%,可能影响了表达式生成的效率。相比之下,文件写入操作 (Main.saveToFile
) 仅占 1.1%,说明 I/O 不是主要的性能瓶颈。优化方向应集中在减少 canonical
和 gatherTerms
方法的重复计算,例如使用缓存或优化数据结构,以提升整体执行效率。
3.设计实现过程
设计围绕 四则运算题目生成、解析计算、答案校验及优化 四大核心功能展开。代码组织采用 高内聚、低耦合 的原则,划分为多个独立类:Main 负责程序入口和参数解析,ExerciseGenerator 生成题目,ExpressionParser 解析表达式,Fraction 处理分数计算,Validator 进行答案校验,FileHandler 负责文件读写。
程序执行时,generateExercises() 生成随机四则运算题目并存入 exercises.txt,用户计算后将答案存入 answers.txt,随后 validateAnswers()读取并解析文件内容,使用ExpressionParser 计算正确答案,与用户答案比对,统计正确和错误的索引,并将结果写入Grade.txt。
性能分析发现 canonical() 方法占用较多计算时间,优化方案包括 缓存计算结果 以减少重复计算,此外,gatherTerms()方法可优化算法减少冗余计算,FileHandler 采用 BufferedReader 提高 I/O 读取效率。最终优化后,程序性能得到提升,能更高效地处理大量数学运算任务。
4.代码说明
主要实现了 四则运算题目生成、表达式解析、答案计算与校验,并通过文件读写管理数据存储。题目生成 (generateExercises) 采用随机数与 ExpressionGenerator 生成符合数学规则的题目,并存入 exercises.txt;表达式解析与计算 (ExpressionParser 与 Fraction) 采用 树结构解析 和 分数运算,避免浮点误差;答案校验 validateAnswers) 通过 文件读取 逐行比对用户答案,统计正确与错误索引,并写入Grade.txt。文件操作 (FileHandler) 统一管理 题目、答案及评分文件 的读写,提高代码复用性。整体采用 模块化设计,通过 封装与优化 I/O 提升效率,同时减少冗余计算,确保程序能高效处理大规模四则运算题目。
5.测试运行
测试图
效果图
6.项目小结
在本次结对项目中,我们共同开发了一个支持四则运算题目生成、答案计算、答案验证以及文件读写功能的工具。通过密切合作,我们不仅顺利完成了目标,还在技术上取得了很大的进步。项目成功的关键在于有效的沟通与协作,确保任务分配明确,问题及时解决。双方的技能互补,使得任务分配更为高效
从结对编程的角度来看,彼此的合作使我们在技术和思维方式上都得到了提升。在未来的合作中,我们希望能够在前期设计上进行更多的讨论与沟通,以便更好地预见潜在的问题,避免后期的不必要调整。
总的来说,这次结对编程是一次非常有价值的经历,不仅提升了我们的技术能力,也让我们学到了如何在合作中更好地发挥各自的优势,提升工作效率。未来,我们将继续总结经验,改进不足,进一步提高团队合作的效率与质量。