学无止境
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 40 |
• Estimate | • 估计这个任务需要多少时间 | 700 | 1190 |
Development | 开发 | 650 | 1130 |
• Analysis | • 需求分析 (包括学习新技术) | 50 | 300 |
• Design Spec | • 生成设计文档 | 20 | 80 |
• Design Review | • 设计复审 | 10 | 35 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
• Design | • 具体设计 | 60 | 60 |
• Coding | • 具体编码 | 360 | 550 |
• Code Review | • 代码复审 | 30 | 50 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 40 |
Reporting | 报告 | 60 | 60 |
• Test Repor | • 测试报告 | 20 | 20 |
• Size Measurement | • 计算工作量 | 10 | 10 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1190 |
二、需求分析
我通过百度搜索的方式了解到,小学一年级数学有如下的几个特点:
- 特点1 小学1年级的加减法数字一般不会超过20,不会有小数
- 特点2 小学1年级减法不会有小减大出现负数答案
经过分析,我认为,这个程序应当:
- 使用的数字小于21且大于0的整数
- 被减数不能小于减数
三、设计
1. 设计思路
说明你如何设计这个程序
比如:
- 这个程序有1个类,在main方法中直接通过构造函数调用
- Math.random是可以生成随机数的关键
- 要将字符串转换为字节流来存入txt文本
- 找到一些输入错误的bug
2. 实现方案
写出具体实现的步骤
比如:
- 准备工作:先在Github上创建仓库,克隆到本地...
- 技术关键点:Math.random, byte,File的应用
四、编码
-
用args数组来实现从命令行中接收参数,否则不能直接输入参数运行
-
用byte把字符串转换为字节流
-
用Math.random进行随机数的生成
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
比如:
-
字符串无法写入到txt文本,用byte转出字节流写入
-
数组越界,扩大数组
-
无法用命令行直接传参,用args数组解决
2. 关键代码
/*
** Create or reuse a zero-terminated string, first checking in the
** cache (using the string address as a key). The cache can contain
** only zero-terminated strings, so it is safe to use 'strcmp' to
** check hits.
*/
c[0] = Integer.parseInt(args[0]);
c[1] = Integer.parseInt(args[1]);
String[] timu=new String[c[0]+1]; // 创建数组存入题目
String[] daan=new String[c[0]+1];
String huanhang="
"; // windows的换行,在cmd运行方便观看
File file = new File("out.txt");
FileOutputStream u = new FileOutputStream("out.txt");
if(!file.exists()) {
file.createNewFile();
} // 创建out.txt文本
}
if(c[1]==1) {
for(i=1;i<=c[0];i++) {
fuhao=(int)(Math.random()*2);
if(fuhao==0) {
a=(int)(Math.random()*21);
b=(int)(Math.random()*21);
int answer=a+b;
System.out.println("("+i+")"+a+"+"+b+"=");
timu[i-1]="("+i+")"+a+"+"+b+"=";
daan[i-1]="("+i+")"+a+"+"+b+"="+answer;
byte[] ti =timu[i-1].getBytes(); // 将字符串转换为字节流为了写入txt文件
byte[] da =daan[i-1].getBytes();
byte[] h=huanhang.getBytes();
u.write(ti); // 将转换好的字节流写入txt
u.write(h);
}
3. 代码规范
请给出本次实验使用的代码规范:
-
如果有异常进行手动处理,不抛出,并人工检查代码是否符合规范
-
左大括号前不换行。
左大括号后换行。
右大括号前换行。
右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。 -
采用4个空格缩进,禁止使用tab字符
五、测试
测试输入:java MathExam6374 5000 1测试结果:请输入1-400之间的题目数,否则题目重复,请重新输入 预期结果:符合测试
测试输入:java MathExam6374 -1 1 测试结果:输入的题目数请大于1,请重新输入 预期结果:符合测试
测试输入:java MathExam6374 10 3 测试结果:本程序仅支持1年级和2年级,请重新输入 预期结果:符合测试
测试输入:java MathExam6374 100 2 测试结果:请输入1-81之间的题目数,否则题目重复,请重新输入 预期结果:符合测试
六、总结
由于自己大一大二有些混水摸鱼,比较懒惰,现在写代码才感觉到力不从心,大三想改变一点,没放弃不断查资料,向别人求教,去花更多的时间完成别人很快能解决的问题,但我要坚持下去,不懂就问,慢慢进步
-
并没有看“软件开发的基本策略:分而治之”
-
勉强完成代码才看到规范,以后要注意,从规范化做起。