一、预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 600 650
• Estimate • 估计这个任务需要多少时间 600 650
Development 开发 500 530
• Analysis • 需求分析 (包括学习新技术) 300 300
• Design Spec • 生成设计文档 60 60
• Design Review • 设计复审 30 30
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 30
• Design • 具体设计 90 100
• Coding • 具体编码 400 420
• Code Review • 代码复审 20 20
• Test • 测试(自我测试,修改代码,提交修改) 60 40
Reporting 报告 60 80
• Test Repor • 测试报告 30 60
• Size Measurement • 计算工作量 15 30
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 10 10
合计 750

二、需求分析

我通过上网调查的方式了解到,小学一年级数学有如下的几个特点:

  • 特点1
  • 在数学加减方面加减法必须在100范围以内,减法得出的结果不是能为负数
  • 特点2
  • 在数学乘除方面乘法必须满足乘法口诀表,除法方面除数必须为个位数,而且商也必须为个位数。

经过分析,我认为,这个程序应当:

  • 小学一年级
  • 使用的数字必须小于100
  • 减法方面得出的结果必须为正整数
  • 小学二年级
  • 在乘法方面两个数满足乘法口诀表,小于10
  • 在除法方面,被除数小于90,商和除数还有余数必须为个位数。
  • 乘除法得出的结果为正数

三、设计

1. 设计思路

说明你如何设计这个程序

比如:

-对输入的数进行判断分析是否符合要求以及随机数

  • 根据输入的数判断一年级还是二年级
  • 熟悉加减法在一年级的需求
  • 熟悉乘除法在二年级的需求
  • IO流文件将题目和答案写入

2. 实现方案

写出具体实现的步骤

比如:

  • 准备工作:先在Github上创建仓库,克隆到本地,在本地文件夹中创建psp文件,再用桌面版的github comit传到本地仓库。
  • 技术关键点:
    1根据args[]输入来判断一年级还是二年级
    2用do while语句来判断除法的合理性
    3如何输出out.txt文件

四、编码

  • 随机数的生成 Math.random()
  • 根据args[]的length与正则表达式语句判断输入的符合加减运算还是乘除运算
  • 用IO流写入文本out.txt

1. 调试日志

  • 在为输入判断时防止输入字母和0开头的数字,用正则表达式解决
  • 在如何将args[]如何转换为整型用integer.valueof解决
    -在除法方面忽略了除数不能等于0的问题,以及商不能为两位数。
    -在输入方面忽略了范围的缩小,后来将最大题目数修改为1000以内。

2. 关键代码

for(int i=0;i<num;i++) {
			String j="("+(i+1)+")"+" ";
			d=(int) (Math.random()*10);
			if(d%2==0 ) {
				a=(int) (Math.random()*9+1);
				b=(int) (Math.random()*9+1);
				p="*";
				k=String.valueOf(a*b);
			}else {
				p="/";
				do {
					a=(int) (Math.random()*90+1);
					b=(int) (Math.random()*10+1);
					e=a/b;
					f=a%b;
					if(f!=0) {
					k=e+"..."+f;
					}else {
						k=String.valueOf(e);
					}
				}while(e<=0 || e>=10 || b==0);
					

这是一段乘除法运算的代码,通过随机生成d是否整数2来判断时乘还是除,因为乘法满足惩罚口诀表内的范围,所以将两个数的随机生成范围缩小到1-9,在do while循环里如果除数等于0或者被除数小于除数或者商大于0的时候重新生成随机数再次运算。

3. 代码规范

请给出本次实验使用的代码规范:

  • 在for循环/do while/if等语句必须加括号以及字与括号间的空格
  • 在if里嵌套多个if 要对应好if 与else 防止出错
  • 一般情况下使用空格缩进
  • 在括号方面在结束的时候必须换行,左边大括号后面要换行,右边大括号换行
  • 不能使用未定义的变量

五、测试

|||||
|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|测试输入|输出|是否符合预期效果
|001|输入错误。请重新输入|是
|0|输入错误。请重新输入|是
|0.1|输入错误。请重新输入|是
|-10|输入错误。请重新输入|是
|-10 1|输入错误。请重新输入|是
|-10 2|输入错误。请重新输入|是
|10 -1|输入错误。请重新输入|是
|10 -2|输入错误。请重新输入|是
|a|输入错误。请重新输入|是
|a a|输入错误。请重新输入|是
|1000|输入错误。请重新输入|是
|1000 1|输入错误。请重新输入|是
|1000 2|输入错误。请重新输入|是
|999|正确输出|是
|999 1|正确输出|是
|999 2|正确输出|是

六、总结

  • 是否使用了“软件开发的基本策略:分而治之”,是否需要重构
    • 使用了“软件开发的基本策略:分而治之”,没有明显用到重构方法
  • “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
    • 适当的采用,重构能力弱用的不是很多。

相关文章:

  • 2021-07-01
  • 2022-02-05
  • 2021-11-07
  • 2021-09-20
  • 2021-06-01
猜你喜欢
  • 2021-10-28
  • 2022-02-12
  • 2021-09-19
  • 2021-07-11
  • 2021-06-27
  • 2021-09-13
相关资源
相似解决方案