这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 结对项目 |
这个作业的目标 | 与同学一起完成结对项目(四则运算自动生成程序)并进行测试 |
项目成员
本次结对项目由
- 艾彬 学号 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函数,主要的原因是一旦在计算过程中生成负数字,程序就需要调用自身以生成新的算式,极大提高了这部分的消耗。
设计实现过程
- Main类 主类,负责接收并分析命令行参数与调用其他模块
- ReadFile类 读取文件类,根据路径读取文件的文本内容并返回
- OutputFile类 写入文件类,根据路径将数组数据写入文件
- ProblemAnalysis类 算式生成类,储存有各类符号常类,负责循环生成算式并判断算式是否正确重新生成等功能
- ProblemCheck类 算式检查类,负责对比算式与算式,答案与答案是否重复,决定是否重新生成算式
- ResultComputation类 结果计算类,负责整理算式、真假分数化简转换,并以假分数先乘除后加减计算
- ResultCheck类 结果检查类,负责调用读写文件类和结果计算类,判断结果是否正确
- BaseException类 异常类,作为异常的基类
- InsufficientParametersException类 异常类,继承基类的命令行参数缺失异常
代码说明
本部分是生成算式的代码部分,随机循环1到3次,生成1到3个运算符的算式,其中也有随机生成括号的功能,利用flag把控左右括号的统一生成,避免括号嵌套和无意义的括号生成。
本部分是结果计算类的计算部分,由于真分数的分割、计算、再拼接过于繁琐,因此我们采用将算式的真分数部分转换为假分数部分,再通过分子分母分离的计算方式进行计算,在最终结果时提供一个化简为真分数的函数返回算式结果。
测试运行
我们通过测试不断生成10000条算式并积极寻找异常,其中大有 7/0/2、0'1/2、6'0/5 等各种错式,我们不断分析各种情况改进化简函数和计算函数,将其一一排除
异常处理说明
- 异常处理基类:BaseException
- 命令行参数缺失异常处理类:InsufficientParametersException
项目小结
- 艾彬:这是我首次尝试与他人一同完成编程作业,起初些许紧张与不安。但我的队友展现的出色代码能力消解了我的紧张,在他身上我看到了许多值得学习的地方,这是一次愉快的合作。
- 陆宇星:与队友的代码思路讨论让我受益很多,一起写代码时,他总能及时校验复查到我的思维盲区,给我带来了很好的合作体验。我们在项目中不仅相互分工,还经常分享各自的经验和技巧,这种互动让我在代码质量和效率上有了显著提升。通过深入的交流和问题讨论,我也学到了许多新的编程模式和优化方法。更重要的是,合作过程中培养了彼此的信任与默契,让我们在面对复杂任务时能够更快速地达成共识,解决问题的过程更加高效、顺畅。