软工作业3--结对项目(李健文、蒋明)
作业要求
| 作业要求 | 实现小学四则运算题目生成器 |
|---|---|
| 作业目标 | 练习结对合作,并设计一个能自动生成小学四则运算题并批改题目的程序 |
| GitHub链接 | https://github.com/VahidLee/formulaCreate |
| 学号 姓名 | 3121005218 李健文 and 3121005216 蒋明 |
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 20 |
| Estimate | 估计这个任务所需时间 | 600 | 960 |
| Development | 开发 | 300 | 400 |
| Analysis | 需求分析 | 30 | 100 |
| Design Spec | 生成设计文档 | 10 | 10 |
| Design Review | 设计复审 | 10 | 10 |
| Coding Standard | 代码规范 | 25 | 45 |
| Design | 具体设计 | 120 | 100 |
| Coding | 具体编码 | 180 | 300 |
| Code Review | 代码复审 | 30 | 20 |
| Test | 测试(自我测试、修改代码、提交修改) | 40 | 20 |
| Reporting | 报告 | 20 | 20 |
| Test Report | 测试报告 | 10 | 5 |
| Size Measuerment | 计算工作量 | 10 | 10 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 40 |
程序结构

代码细节
MyApp类接收输入,选择功能。

UtilClasss类实现文件的读出写入、LCM、中缀表达式的求值
LCM细节

中缀表达式求解细节:中缀->后缀->求值


将答案输出标准化,统一约分、带分数

FormulaBuilder类具体执行运算式子的生成和修饰。
运算式子创建:循环调用Formula();

实现检查答案功能:先计算出式子正确答案->比对待检查的答案->输出成绩


Element类管理分数,提供相应的计算方法

运行结果
题目生成

Exercises.txt文件

Answers.txt文件

检查答案:输出至Grade.txt

正确情况

输入错误答案

性能分析
式子生成--代码覆盖率

式子生成--方法调用频率、内存分配

答案检查--代码覆盖率

答案检查--方法调用频率、内存分配

对于代码的性能分析,需要考虑几个关键点:
1、生成式子功能下,为节省内存生成一个式子便直接存入文件,致使BufferedWirter的调用频率和所耗时间均过高。改进措施:平衡内存使用和时间消耗上的矛盾,在生成一定量的式子后再考虑写入文件,减少时间消耗。
2、在答案检查功能下,除Formula类外代码覆盖率良好,其中Formula类的主要功能是随机生成运算式子。不必生成运算式,故代码覆盖率为零。
3、表达式计算性能: 代码中使用了 UtilClass.getResult 方法来计算表达式的结果。在本次实验中,表达式复杂度有限,性能主要取决于Stack类和String类的操作速度。
项目总结、心得
1、项目完成情况:
完成作业要求,实现了生成题目的功能,并且能够根据指定的参数控制题目的数量和操作数的范围。代码中使用了类来封装不同的功能,提高了代码的可维护性。利用第三方软件对代码进行分析,提高了代码的覆盖率,识别出程序瓶颈并能做出一定改进。
2、结对经验总结:
在结对编程中,两个人可以一起讨论和解决问题,通常能够更快地找到解决方案;结对编程可以减少错误,因为两个人可以互相监督和校对彼此的工作,在编程过程中往往能提出更高效的实现方法。但结对编程方式也有不足:如合作伙伴之间的沟通不畅,或对问题的理解不同,容易导致争论、分歧;在编程中过多的讨论,容易使人分心从而降低编程效率。

浙公网安备 33010602011771号