结对项目

这个作业属于哪个课程 软件工程
这个作业要求在哪里 结对项目
这个作业的目标 与同学一起完成结对项目(四则运算自动生成程序)并进行测试

项目成员

本次结对项目由

  • 艾彬 学号 3122004730
  • 陆宇星 学号 3122004491

共同完成

正文

github地址

本次作业的代码已上传github,地址: 结对项目

PSP表格

根据作业要求,我们使用PSP表格预测并记录下队伍完成各部分的时间

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 30 30
Development 开发 720 540
· Analysis · 需求分析 (包括学习新技术) 60 30
· Design Spec · 生成设计文档 30 30
· Design Review · 设计复审 30 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 60 40
· Coding · 具体编码 300 240
· Code Review · 代码复审 50 60
· Test · 测试(自我测试,修改代码,提交修改) 180 120
Reporting 报告 300 210
· Test Report · 测试报告 210 150
· Size Measurement · 计算工作量 30 30
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 30
· Total · 合计 1050 780

设计实现过程

代码说明

效能分析

初版本效能分析如下:


观察总结得,在重新生成算式的部分有改进的空间

  • 重新审视题目,发现对“计算过程中不能产生负数”这一要求的实现有误,代码中对重新生成算式的依据是算式结果的判负。于是对此进行改进,以下是改进后的效能分析图:

观察得,本程序中消耗最大的部分为com.pair.CreatePromblem.ProblemAnalysis.create函数,主要的原因是一旦在计算过程中生成负数字,程序就需要调用自身以生成新的算式,极大提高了这部分的消耗。

设计实现过程

目录结构

  1. Main类 主类,负责接收并分析命令行参数与调用其他模块
  2. ReadFile类 读取文件类,根据路径读取文件的文本内容并返回
  3. OutputFile类 写入文件类,根据路径将数组数据写入文件
  4. ProblemAnalysis类 算式生成类,储存有各类符号常类,负责循环生成算式并判断算式是否正确重新生成等功能
  5. ProblemCheck类 算式检查类,负责对比算式与算式,答案与答案是否重复,决定是否重新生成算式
  6. ResultComputation类 结果计算类,负责整理算式、真假分数化简转换,并以假分数先乘除后加减计算
  7. ResultCheck类 结果检查类,负责调用读写文件类和结果计算类,判断结果是否正确
  8. BaseException类 异常类,作为异常的基类
  9. InsufficientParametersException类 异常类,继承基类的命令行参数缺失异常

简要流程

代码说明

本部分是生成算式的代码部分,随机循环1到3次,生成1到3个运算符的算式,其中也有随机生成括号的功能,利用flag把控左右括号的统一生成,避免括号嵌套和无意义的括号生成。

生成算式具体代码

本部分是结果计算类的计算部分,由于真分数的分割、计算、再拼接过于繁琐,因此我们采用将算式的真分数部分转换为假分数部分,再通过分子分母分离的计算方式进行计算,在最终结果时提供一个化简为真分数的函数返回算式结果。

计算具体代码

测试运行

我们通过测试不断生成10000条算式并积极寻找异常,其中大有 7/0/2、0'1/2、6'0/5 等各种错式,我们不断分析各种情况改进化简函数和计算函数,将其一一排除

测试代码

覆盖率

异常处理说明

  • 异常处理基类:BaseException
  • 命令行参数缺失异常处理类:InsufficientParametersException

项目小结

  • 艾彬:这是我首次尝试与他人一同完成编程作业,起初些许紧张与不安。但我的队友展现的出色代码能力消解了我的紧张,在他身上我看到了许多值得学习的地方,这是一次愉快的合作。
  • 陆宇星:与队友的代码思路讨论让我受益很多,一起写代码时,他总能及时校验复查到我的思维盲区,给我带来了很好的合作体验。我们在项目中不仅相互分工,还经常分享各自的经验和技巧,这种互动让我在代码质量和效率上有了显著提升。通过深入的交流和问题讨论,我也学到了许多新的编程模式和优化方法。更重要的是,合作过程中培养了彼此的信任与默契,让我们在面对复杂任务时能够更快速地达成共识,解决问题的过程更加高效、顺畅。
posted @ 2024-09-18 09:17  七宫秋  阅读(136)  评论(0编辑  收藏  举报