由于之前请假一个星期,没能及时提交作业。。。这个个人项目主要实现一个关于小学四则运算的程序,这个程序有两个功能,一个是自动生成表达式和答案,分别存到两个文件中,另一个是读取两个文件,一个是表达式文件,另外一个是答案文件,并且判断对应条目的答案是否正确,控制台输出正确的个数与错误的个数,还有编号。具体要求详见:http://www.cnblogs.com/jiel/p/4810756.html
个人觉得这个项目有两个关键点,一个是判断表达式是否重复,另外一个是运算。对于查重我采用的方法是,将表达式中的数字抽取出来按照从小到大排序,将他们拼成一个字符串再将运算符按照先后顺序接在其后面,这样就生成了一个伪ID(有可能是不同表达式,但是id相同,这种情况的概率是比较小的),判断是否重复只需判断id是否相等。对于运算,我构建了一个分数类,封装了加减乘除四种操作,再采用调度场算法就能计算了。
项目开始前psp估计
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
|
Development |
开发 |
25小时 |
· Analysis |
· 需求分析 (包括学习新技术) |
1小时 |
· Design Spec |
· 生成设计文档 |
1小时 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0.5小时 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0.5小时 |
· Design |
· 具体设计 |
2小时 |
· Coding |
· 具体编码 |
15小时 |
· Code Review |
· 代码复审 |
1小时 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
4小时 |
Reporting |
报告 |
5小时 |
· Test Report |
· 测试报告 |
1小时 |
· Size Measurement |
· 计算工作量 |
1小时 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
3小时 |
合计 |
30小时 |
项目完成后psp
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
0小时 |
Development |
开发 |
20.5小时 |
· Analysis |
· 需求分析 (包括学习新技术) |
2小时 |
· Design Spec |
· 生成设计文档 |
0小时 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0小时 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0小时 |
· Design |
· 具体设计 |
0.5小时 |
· Coding |
· 具体编码 |
9小时 |
· Code Review |
· 代码复审 |
0小时 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
9小时 |
Reporting |
报告 |
1小时 |
· Test Report |
· 测试报告 |
0.5小时 |
· Size Measurement |
· 计算工作量 |
0小时 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
0.5小时 |
合计 |
21.5小时 |
性能测试
通过vs2015的性能分析工具可以看出,执行生成10000个范围在30以内的表达式耗时6.235秒,其中最耗时的方法是Expression.newInstance()即产生一个表达式。
测试
运行 personal_work.exe -r 30 -n 10 的结果:
exercisefile.txt中的内容为
1. 27 - 17 =
2. 22 - 20 + 14 =
3. 20 / 15 * 14 + 9 =
4. 19 - 16 + 22 =
5. 26 - 10 =
6. 10 / 21 + 25 - 23 =
7. 3 + 16 - 2 - 10 =
8. 29 - 4'3/7 =
9. 3 * 10 - 29 =
10. 28 / 6 =
answerfile.txt中的内容为
1. 10
2. 16
3. 27'2/3
4. 25
5. 16
6. 2'10/21
7. 7
8. 24'4/7
9. 1
10. 4'2/3
e.txt中的内容为
1. 27 - 17 =
2. 22 - 20 + 14 =
3. 20 / 15 * 14 + 9 =
4. 19 - 16 + 22 =
5. 26 - 10 =
6. 10 / 21 + 25 - 23 =
7. 3 + 16 - 2 - 10 =
8. 29 - 4'3/7 =
9. 3 * 10 - 29 =
10. 28 / 6 =
a.txt中的内容为
1. 10
2. 16
3. 27'2/3
4. 25
5. 16
6. 2
7. 6
8. 24'4/7
9. 1
10. 4'2/3
运行 personal_work.exe -a a.txt -e e.txt的结果为
Correct: 8(1,2,3,4,5,8,9,10)
Wrong: 2(6,7)
总结
这个项目是我第一次用c#开发,感觉跟java很像用起来也很顺手,在开发中很多小细节耽误了很长时间,比如随机数的生成、调度场算法中判断符号优先级等,我觉得假如能够在编码过程中仔细认真些,想全所有的可能性,尽量把这些小bug扼杀在摇篮里就不用在测试投入那么多时间和精力了。