这个作业属于哪个课程 | <班级的链接> |
---|---|
这个作业要求在哪里 | <作业要求的链接> |
这个作业的目标 | <你理解的作业目标具体内容> |
姓名:郭程朗
学号:3123004567
github地址:https://github.com/Ripplling/calculate/tree/master
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | - 估计这个任务需要多少时间 | 三天 | 三天 |
Development | 开发 | ||
- Analysis | - 需求分析(包括学习新技术) | 40 | 30 |
- Design Spec | - 生成设计文档 | 20 | 20 |
- Design Review | - 设计复审(和同事审核设计文档) | 20 | 20 |
- Coding Standard | - 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
- Design | - 具体设计 | 40 | 40 |
- Coding | - 具体编码 | 一天 | 一天 |
- Code Review | - 代码复审 | 40 | 40 |
- Test | - 测试(自我测试,修改代码,提交修改) | 10 | 10 |
Reporting | 报告 | ||
- Test Report | - 测试报告 | 10 | 10 |
- Size Measurement | - 计算工作量 | 10 | 10 |
- Postmortem & Process Improvement Plan | - 事后总结,并提出过程改进计划 | 20 | 20 |
效能分析
1.改进时间投入
需求分析:30分钟-设计高效数据结构和算法
编码阶段:45分钟-实现性能优化策略
总计:75分钟
2.性能改进思路
1.重复检测:HashSet查找和规范字符串生成
优化后:缓存规范化结果
2.表达式检测:递归生成和验证的重复计算
优化后:约束引导生成
3.分数运算:频繁月份和GCD计算
优化后:延迟约分
3.性能消耗
性能分析 - 生成1000道题目 (range=10)
操作类型 | 耗时(ms) | 占比(%) | 调用次数
表达式生成和验证 | 1450 | 58% | ~5000次
重复检测 | 620 | 25% | ~1000次
分数运算 | 280 | 11% | ~15000次
文件IO操作 | 150 | 6% | 2次
函数调用耗时排名:
- calculateExpression() - 35% (递归计算)
- getNormalizedString() - 22% (规范化处理)
- generateExpressionTree() - 18% (表达式生成)
- Fraction.simplify() - 12% (分数约分)
- File.write() - 6% (文件写入)
4.消耗最大函数
calculateExpression()
设计实现过程
测试运行
项目小结
这是一个非常有结构的项目,每个类都充分发挥了不同的作业,因此设计的时候要提前想好很多东西。这对我来说是一次难得的经验