软工的第一次作业在规定时间内并没有完成所有要求的任务还是比较遗憾,预计还需要2-3天才能完善。
- 实验之前估计耗费时间
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
3-4days |
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
10h |
· Design Spec |
· 生成设计文档 |
2h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
1h |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
2h |
· Design |
· 具体设计 |
12h |
· Coding |
· 具体编码 |
12h |
· Code Review |
· 代码复审 |
4h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
4h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
2h |
· Size Measurement |
· 计算工作量 |
4h |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
3h |
合计 |
- 实际的时间是这样的:
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
4-5days |
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
4h |
· Design Spec |
· 生成设计文档 |
3h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0h |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1h |
· Design |
· 具体设计 |
5h |
· Coding |
· 具体编码 |
20h |
· Code Review |
· 代码复审 |
0h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
2h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
1h |
· Size Measurement |
· 计算工作量 |
0h |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
1h |
合计 |
可以看得出来,整体时间上面差不太多,实际的时间甚至更少一些,这就是我为什么没有完全实现所有功能的主要原因,这也是我自己在之后的收获中要剖析的一部分。
- 改进程序性能
我的程序写得很仓促,实际上我认为自己还没有到改进性能的进度,鉴于我还处于完善功能阶段。所以,并没有性能分析的图。
但是我的程序确实经过了几个过程。
由于开始得仓促,我并没有在纸上或者脑中进行非常详细的模拟,所以经过了C++面向过程-》C++面向对象-》C#面向对象的过程,基本上可以算是返工了2次。
- 测试用例&正确性
我的程序分散性不够,测试用例并没有实际操作过,但是个人想到一些用例:
1.( 9 - 5 ) - ( 1 - 3 ) = //针对过程中不能出现负数
2. 1‘1/2 * 2‘3/5 = //针对带分数的乘法
3. 1‘1/2 / 2‘3/5 = //针对带分数的除法
4. ( 3 ) + 4 =
5. ( 3 + 4 ) * (5 - 6 ) =
6. 1/2 * 3/9 + 6/7 * 2/3 =
7. 1 - 2 - 3 + 9 =
8. 7 / 4 =
9. 1 + 3 + 4 * 5 =
10. 9 =
至于正确性,我还是介绍一下自己程序的目前情况吧
已经实现的有:
·生成规定数目和范围和运算表达式
·生成运算表达式的答案
待实现的有:
·产生不重复的随机数的问题
·将生成的表达式和答案放入.txt 文件中
·对于做出的题进行批改
·更多的样例测试运算答案的准确性
预计还需要的完善时间:2-3天
程序目前的一些特点:
·数字有3中类型:自然数、真分数、带分数,为了方便起见,三者的随机比例为4:2:1
·加括号随机策略:对每一个运算符都进行都进行判断是否加括号,数组计数进行,加一个括号相应位置上数字加1,然后按照单双数决定,单数加括号双数不加括号。
·输入,第一个数是题目的个数,第二个数是题目中数字的范围
- 我的收获
1)不要妄自估计时间
我的个人作业准确地说是从周日开始的,因为我在很早之前报名了周六的TOEFL考试,使得我的开学第一周都在学习英语的过程中而无暇估计其他。而报名考试这一决定现在看来有点草率,因为自己妄自估计时间,认为开学第一周还在调整步入正轨的过程中,然而事实并不是这样。在软件工程中时间更是重要。
2)先收集资料再着手
信息的重要性不是第一次知道,但是在时间紧迫的条件下确实做出了一些冲动的事情。所以,重要的事情说三遍:信息!信息!信息!尽管我真正做作业的时间只有4天左右,但是我认为自己本应该做的更好。这次的不完整很大程度上跟之前的2次返工有很大的关系。我应该先调查清楚,这次的作业适合用什么语言、什么结构,更重要的是详尽的设计,这样可以避免走很多弯路。放到软件工程中,就是在工程进行前一定要做好足够的调研和设计准备工作。
3)模块化思维
这次的作业中还有一点做的不好的地方,就是分块。个人体会软工应该是遵从这种将需求分类、任务分阶段的模式。不要为了整体的全面而放弃牺牲掉单独的需求的独立性。这次的需求,应该是生成表达式+根据表达式算出答案+批改;但是由于我的仓促,误将生成表达式和生成答案放在了一起,这使得单独功能测试异常困难(当然了我也没有时间测试),可是这对于一个工程来说是灾难性的。