软工作业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、结对经验总结:
在结对编程中,两个人可以一起讨论和解决问题,通常能够更快地找到解决方案;结对编程可以减少错误,因为两个人可以互相监督和校对彼此的工作,在编程过程中往往能提出更高效的实现方法。但结对编程方式也有不足:如合作伙伴之间的沟通不畅,或对问题的理解不同,容易导致争论、分歧;在编程中过多的讨论,容易使人分心从而降低编程效率。