一.项目时间规划与实际用时
PSP2.1 |
Personal Software Process Stages |
预计时间/h |
实际时间/h |
Planning |
计划 |
|
|
· Estimate |
· 估计这个任务需要多少时间 |
15 |
20 |
Development |
开发 |
|
|
· Analysis |
· 需求分析 (包括学习新技术) |
2 |
2.5 |
· Design Spec |
· 生成设计文档 |
0.5 |
0.5 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0.5 |
0.5 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0.2 |
0.2 |
· Design |
· 具体设计 |
3 |
4 |
· Coding |
· 具体编码 |
6 |
10 |
· Code Review |
· 代码复审 |
2 |
2 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
2 |
5 |
Reporting |
报告 |
|
|
· Test Report |
· 测试报告 |
1 |
1 |
· Size Measurement |
· 计算工作量 |
0.2 |
0.2 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
1 |
1 |
合计 |
16.4 |
26.9 |
这次写代码我觉得我收获还是很大的,从不熟悉一个语言到感觉可以顺畅使用,是一件很棒的事情,从以前的编代码的经历来说 ,这应该是我编过比较顺利并且很有成就感的程序啦,第一是因为我这次作业很认真的并且独立思考的连贯编写,以及我后续的认真调试都是一步步走出来的,感觉以前老是交给我们的东西,真正成为了成果留在了我们的脑海里,也让我们在编程的过程中更加得心应手。不过这次作业遗憾的就是我还是没能实现所有的功能,而且有些地方的算法其实还是蛮复杂很浪费空间时间的,如果有机会的话,我会加善我的程序,并且更认真的反思我的代码编写的问题。
二.改进程序性能
在程序改进的过程中,我大致用了四个小时吧,首先要从思路上进行优化,由于我自己的思路有时候总是会绕个弯子,要了可能性就丢失了很多效率,但是有时候可能性自己也不能够很好的处理好,另外就是改代码的过程总是会出很多问题,编译器在编译的时候丢了个大括号总是不报警!所以这也是我从VS 2012的使用中得出的教训,写代码一定要有一个良好的架构。其次比较花时间的就是调试了,毕竟我写的代码总会有一定漏洞,在调试的过程中真的花费了很多很多的时间。
我的程序思路就是通过随机数的生成,然后去判断我需要多少符号,根据符号去判断我需要多少个数字,然后依次生成我要的东西,拼凑成一个前缀表达式,并且最后将前缀表达式转化为中缀表达式进行输出。
优化思路的时候我主要想到了三点:
第一:我们在运算中出现问题的时候都是出现了负数,首先我先从数字的排序上进行了规定,在一定程度上可以避免负数的出现,其次如果在运算中还是出现了负数,那么我们将减号替换为加号或者是其他符号,这样子可以剔除了出现负数的情况,也让四则运算符合了题目的要求。
第二:当我们式子中出现了除以0的情况,这个情况也是类比上一条,我们生成一个随机数,并且是符合题目要求的随机数,然后替换,再进行运算。
第三:题目中还有另一个要求就是我们不能够生成重复的表达式,那么我们其实可以直接就生成不会出现重复的表达式,从而避开繁杂的检查判重操作。我为生成的数字和符号的前缀序列规定了数字降序的排列,同时利用表达式的哈希值来去除完全相同的表达式,因为表达式中的运算数遵从有序性,所以程序不会同时产生3+2+1,1+3+2这两个表达式,只会生成3+2+1,这一点可以完全排除表达式重复的情况。
三.发现的bug
其实我发现在运算的过程中我们使用的int类型完全不够支撑我们r比较大的时候的运算,所以我转而使用了long类型,不过其实用无符号int64会更好~但是我当时好像有点蠢,就没有修改。
四.个人总结
这次软件工程的开发让我切身实际感受到了现在作为一个计算机学院大三学生的一个非常有趣的地方, 就是自己可以写一写比较高难度的程序,对我个人能力的提高有很大的帮助,例如思路的建立呀,代码的优化呀,这些都会给我很大的帮助。
参与软工工程的过程中,我觉得自己也在语言的汇编上得到了很大的提高,觉得自己可以很快在短时间内运用一个新的语言,对我来说真的是很棒的一件事,也让我觉得自己有很大的成长和收获。