1.预测时间:算法
PSP2.1性能优化 |
Personal Software Process Stages函数 |
Time 性能 |
Planning学习 |
计划测试 |
|
· Estimate优化 |
· 估计这个任务须要多少时间编码 |
10分钟spa |
Development设计 |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
20分钟 |
· Design Spec |
· 生成设计文档 |
30分钟 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20分钟 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20分钟 |
· Design |
· 具体设计 |
40分钟 |
· Coding |
· 具体编码 |
5个小时 |
· Code Review |
· 代码复审 |
30分钟 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1个小时 |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
1小时 |
· Size Measurement |
· 计算工做量 |
40分钟 |
· Postmortem & Process Improvement Plan |
· 过后总结, 并提出过程改进计划 |
30分钟 |
合计 |
11小时 |
2.实际时间:
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务须要多少时间 |
20分钟 |
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
30分钟 |
· Design Spec |
· 生成设计文档 |
10分钟 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10分钟 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20分钟 |
· Design |
· 具体设计 |
40分钟 |
· Coding |
· 具体编码 |
6个小时 |
· Code Review |
· 代码复审 |
20分钟 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1个小时 |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
20分钟 |
· Size Measurement |
· 计算工做量 |
10分钟 |
· Postmortem & Process Improvement Plan |
· 过后总结, 并提出过程改进计划 |
10分钟 |
合计 |
10个小时 |
3.性能优化:
消耗最大的函数是StreamWriter.Flush(),这个函数,每次写入完成用来清空缓冲区,由于在生成10000个左右的式子时极可能缓冲区满而出现写入不完整的状况,因此每次写入一个式子我都会清空缓冲区。这个能够不使用缓冲区而直接写入来解决,然而这样的io操做可能会变慢。因此不进行改变。
优化前:
通过性能测试发现,最占用资源的函数是二元式类Two的toString 函数。跟入此函数发现,该函数会在每次调用时都根据类属性计算其字符串映射。然而此类是一个不可变对象,然而它的实例被构造后可能不会调用toString进行输出。因此,咱们设置一类属性存储其字符串映射。而且,初始值为null,只有当第一次调用toString函数时才会计算其值,之后每次调用toString只要输出该属性就能够。
4.测试样例:
论证正确性:
个人生成算法能够由数学证实在线性生成过程当中不会生成重复的表达式,证实以下:
首先定义元a,元集A。二元式b,二元式集B。运算符f,运算符集F。
A := 知足值域要求的 天然数、真分数 | B;
B := AFA;
F := ‘+’|’-’|’*’|’/’;
若是b1=a1 f1 a2,b2=a3 f2 a4属于B,则:
b1与b2不等价的充分条件是:
f1 != f2 或
f1 == f2 且 f1 == ‘+’ 或 ‘*’ ,(a1,a3) != (a3,a4) && (a1,a3) != (a4,a3)
由以上定义和推理咱们能够概括出不生成重复表达式的线性算法,即用全部一元构造狭义二元式(即两个一元和一个运算符组成),以后用狭义二元式和一元构造足够数目的广义二元式(即二元式自己也可做为元),只要在递归和迭代的生成过程当中,任意二元式知足不重复的充分,则必定没有重复的二元式。
十个测试用例:
(额。。。这个是生成的文件。。。好像无法传文件啊。。。。)