软工作业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

程序结构

image

代码细节

MyApp类接收输入,选择功能。

image

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

LCM细节

image

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

image
image

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

image

FormulaBuilder类具体执行运算式子的生成和修饰。

运算式子创建:循环调用Formula();

image

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

image
image

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

image

运行结果

题目生成

image

Exercises.txt文件

image

Answers.txt文件

image

检查答案:输出至Grade.txt

image

正确情况

image

输入错误答案

image

性能分析

式子生成--代码覆盖率

image

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

image

答案检查--代码覆盖率

image

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

image

对于代码的性能分析,需要考虑几个关键点:
1、生成式子功能下,为节省内存生成一个式子便直接存入文件,致使BufferedWirter的调用频率和所耗时间均过高。改进措施:平衡内存使用和时间消耗上的矛盾,在生成一定量的式子后再考虑写入文件,减少时间消耗。
2、在答案检查功能下,除Formula类外代码覆盖率良好,其中Formula类的主要功能是随机生成运算式子。不必生成运算式,故代码覆盖率为零。
3、表达式计算性能: 代码中使用了 UtilClass.getResult 方法来计算表达式的结果。在本次实验中,表达式复杂度有限,性能主要取决于Stack类和String类的操作速度。

项目总结、心得

1、项目完成情况:
完成作业要求,实现了生成题目的功能,并且能够根据指定的参数控制题目的数量和操作数的范围。代码中使用了类来封装不同的功能,提高了代码的可维护性。利用第三方软件对代码进行分析,提高了代码的覆盖率,识别出程序瓶颈并能做出一定改进。
2、结对经验总结:
在结对编程中,两个人可以一起讨论和解决问题,通常能够更快地找到解决方案;结对编程可以减少错误,因为两个人可以互相监督和校对彼此的工作,在编程过程中往往能提出更高效的实现方法。但结对编程方式也有不足:如合作伙伴之间的沟通不畅,或对问题的理解不同,容易导致争论、分歧;在编程中过多的讨论,容易使人分心从而降低编程效率。

posted @ 2023-09-28 21:27  娜娜别跑啦  阅读(28)  评论(0)    收藏  举报