结对项目

这个作业属于哪个课程 软工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.效能分析

image
从 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 不是主要的性能瓶颈。优化方向应集中在减少 canonicalgatherTerms 方法的重复计算,例如使用缓存或优化数据结构,以提升整体执行效率。

3.设计实现过程

设计围绕 四则运算题目生成、解析计算、答案校验及优化 四大核心功能展开。代码组织采用 高内聚、低耦合 的原则,划分为多个独立类:Main 负责程序入口和参数解析,ExerciseGenerator 生成题目,ExpressionParser 解析表达式,Fraction 处理分数计算,Validator 进行答案校验,FileHandler 负责文件读写。

程序执行时,generateExercises() 生成随机四则运算题目并存入 exercises.txt,用户计算后将答案存入 answers.txt,随后 validateAnswers()读取并解析文件内容,使用ExpressionParser 计算正确答案,与用户答案比对,统计正确和错误的索引,并将结果写入Grade.txt。

性能分析发现 canonical() 方法占用较多计算时间,优化方案包括 缓存计算结果 以减少重复计算,此外,gatherTerms()方法可优化算法减少冗余计算,FileHandler 采用 BufferedReader 提高 I/O 读取效率。最终优化后,程序性能得到提升,能更高效地处理大量数学运算任务。
image

4.代码说明

主要实现了 四则运算题目生成、表达式解析、答案计算与校验,并通过文件读写管理数据存储。题目生成 (generateExercises) 采用随机数与 ExpressionGenerator 生成符合数学规则的题目,并存入 exercises.txt;表达式解析与计算 (ExpressionParser 与 Fraction) 采用 树结构解析分数运算,避免浮点误差;答案校验 validateAnswers) 通过 文件读取 逐行比对用户答案,统计正确与错误索引,并写入Grade.txt。文件操作 (FileHandler) 统一管理 题目、答案及评分文件 的读写,提高代码复用性。整体采用 模块化设计,通过 封装与优化 I/O 提升效率,同时减少冗余计算,确保程序能高效处理大规模四则运算题目。

5.测试运行

测试图
image

效果图
image

6.项目小结

在本次结对项目中,我们共同开发了一个支持四则运算题目生成、答案计算、答案验证以及文件读写功能的工具。通过密切合作,我们不仅顺利完成了目标,还在技术上取得了很大的进步。项目成功的关键在于有效的沟通与协作,确保任务分配明确,问题及时解决。双方的技能互补,使得任务分配更为高效

从结对编程的角度来看,彼此的合作使我们在技术和思维方式上都得到了提升。在未来的合作中,我们希望能够在前期设计上进行更多的讨论与沟通,以便更好地预见潜在的问题,避免后期的不必要调整。

总的来说,这次结对编程是一次非常有价值的经历,不仅提升了我们的技术能力,也让我们学到了如何在合作中更好地发挥各自的优势,提升工作效率。未来,我们将继续总结经验,改进不足,进一步提高团队合作的效率与质量。

posted @ 2025-03-15 11:40  BoscoXTJ  阅读(53)  评论(0)    收藏  举报