一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 50 | 100 |
• Design Spec | • 生成设计文档 | 20 | 30 |
• Design Review | • 设计复审 | 20 | 30 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 60 | 100 |
• Design | • 具体设计 | 60 | 100 |
• Coding | • 具体编码1 | 150 | 120 |
• Code Review | • 代码复审 | 60 | 60 |
• Test | • 测试(自我测试,修改代码,提交修改) | 100 | 150 |
Reporting | 报告 | ||
• Test Repor | • 测试报告 | 30 | 30 |
• Size Measurement | • 计算工作量 | 20 | 30 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 720 |
二、需求分析
我通过查询小学教学大纲的方式了解到,小学一年级加减法有如下的几个特点:
- 加法有两种形式:
(1)个位数 + 个位数
(2)个位数 + 整十数 - 减法也有两种形式:
(1)整十数 - 个位数
(2) 个位数 - 个位数 - 结果不能为负数
经过分析,我认为,这个程序应当:
- 结果不能为负数,也不能大于100
- 被减数必须大于减数
- 形如 A + B,A和B都为个位,或其中之一为整十数
- 形如 A - B ,A应该大于等于B
小学二年级乘除法有如下的几个特点:
- 乘法只有表内乘法
- 除法也是表内除法
- 除和商都是个位数
经过分析,我认为,这个程序应当:
- 除数不能为0
- 被除数应该大于或等于除数
- 积不能大于100
- 除和商都是个位数
三、设计
1. 设计思路
说明你如何设计这个程序
比如:
- 关键函数的流程图是怎样的?
算法的关键的关键是什么?
- 需要注意对用户的“错误输入”进行提醒,并结束程序
- 随机数生成时,需要根据不同的运算符制定不同的随机数生成规则
2. 实现方案
写出具体实现的步骤
比如:
- 准备工作:先在Github上创建仓库,克隆到本地,在本地新建PSP1302文件夹
- 技术关键点:
- 采用哪种设计模式
- 如何输出文本
- 针对不同运算符号,制定不同的随机数生成规则
- 针对用户的”错误输入“,用正则表达式更容易判断
四、编码
请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
比如:
- 由于args数组的长度没有判断,所以当用户输入参数的个数不为2时,出现异常
- 除法运算中,由于生成的除数为0,出现异常
2. 关键代码
运用了“简单工厂”的设计模式,根据运算符号的不同,工厂就实例化出合适的对象,通过多台,返回对应的子类的对象,实现了随机数的生成。
3. 代码规范
请给出本次实验使用的代码规范:
- 第一条:不使用“魔法数字”,都用有意义的英文名进行变量的命名
- 第二条:不使用拼音进行命名
- 第三条:采用驼峰式命名规则,类名以大写字母开头,变量名和方法名以小写字母开头
- 第四条:代码中的命名均不能以下划线或美元符号开始,也不能一下划线或美元符号结束。
- 第五条:左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。
并人工检查代码是否符合规范
五、测试
测试用例 | 预期结果 | 实际结果 |
---|---|---|
dfsfh 1 | 输入有误,程序结束! | 同预期结果 |
103120 1 | 输入有误,程序结束! | 同预期结果 |
-123 2 | 输入有误,程序结束! | 同预期结果 |
001 2 | 输入有误,程序结束! | 同预期结果 |
10 56 | 输入有误,程序结束! | 同预期结果 |
10 -1 | 输入有误,程序结束! | 同预期结果 |
10 xzh | 输入有误,程序结束! | 同预期结果 |
10 2 | 正确文档输出 | 同预期结果 |
六、总结
请总结过程中的教训和经验,思考
是否使用了“软件开发的基本策略:分而治之”,是否需要重构
是采用了分而治之的策略,基本做到了”一个类只实现一个功能“,将各个类的功能细分。
对于重构了解的不多,但如果需要扩展功能的话,可能会比较容易扩展:比如 需要新增形如: A+B +C的运算
“高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
采用了“简单工厂”的设计模式,对于重构方面的知识还要加强