单元测试

211606369 蔺皓雯 211606349 蔡晨旸

预估与实际

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

一.单元测试

需求分析

要求熟悉对插件Junit,eclemma,以及PMD的使用

测试要求

Junit测试代码编写命名规范

Junit自动生成测试类的命名如下:被测试的业务+Test、被测试的接口+Test、被测试的类+Test
类的名字必须由大写字母开头而单词中的其他字母均为小写;
如果类名称由多个单词组成,则每个单词的首字母均应为大写,如TestMobileBind。
如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample。
如需要测试业务MobileBind ,那么命名就是TestMobileBind
如需要测试接口GetMobileBind ,那么命名就是TestGetMobileBind
如需要测试类SetMobileBind.class,那么命名就是TestSetMobileBind

关键代码

private static void Exam2(int range,int grade) {
		//一二年级的题目
		for (int i = 0; i < range; i++) {
			int n1=(int) (Math.random() * 101);
			int n2=(int) (Math.random() * 101);
			// 获取两个随机数num1,num2
			int index=(grade==1)?((int) (Math.random()*10))%2:((int) (Math.random()*10)) %4;
			char fuhao=Operator[index];
			while(index==0 && n1+n2 >= 101) {
				n1 = (int) (Math.random()*101);
				n2 = (int) (Math.random()*101);
				}
			int result = 0;
			int yushu = 0; 
			switch (fuhao) {
			case '+':
				if(grade == 1 && n1<10 && n2<10 && n1%10 != 0 && n2%10 !=0) {
					//小学一年级两数相加时,都小于10且为整数
					n2 = n2/10*10;
					}
				result = n1 + n2;
				//两数相加
				break;
				case '-':
					if (n1 < n2) {
						int temp = n1;
						n1 = n2;
						n2 = temp;
						//一定是大的数-小的数,不能出现负数
						}
				case '×':
					n1=n1%10;
					n2=n2%10;
					//两数都为整数
					result=n1*n2;
					break;
				case '÷':
					while(n2==0) {
						n2=(int)(Math.random() * 101);
					}
					//除数不能为0,若为0,重新选择一个随机数
					if(n2>10) {
						n2 /=10 ; 
					}
					result= n1/n2;
					yushu = n1%n2;
					//求出余数和运算结果
					break;
				}
			Topic[i].append("(" + (i+1) + ") " + n1 + " " + fuhao + " " + n2 + System.lineSeparator());
			if (fuhao == '/') {
				Answer[i].append("(" + (i+1) + ") " + n1 + " " + fuhao + " " + n2 + " = " + result
						+ (yushu != 0 ? ("..." + yushu) : ""));
				} else
				{
					Answer[i].append("(" + (i+1) + ") " + n1 + " " + fuhao + " " + n2 + " = " + result);
				}
		}
	}
private static void Exam(int range,int grade) throws Exception {
		int i,n;
		for( i = 0;i < range;i++) {
			n=5+(int)(Math.random()*3);
			if(n%2 == 0)
				n++;
			Character[] infixExpression = new Character[n];
			char[] str = new char[(n-1)/2];
			//操作符数
			char c ;
			infixExpression[n-1] = c = Operator[(int)(Math.random()*4)];
			for(int j = 1,k = n-2;j<(n-1)/2;j++,k--) {
				infixExpression[k] = Operator[(int)(Math.random()*4)];
				c ^= infixExpression[k].charValue();
				}
				
				if(c == 0) {
					int q = (int)(Math.random()*4);
					infixExpression[n-1] = Operator[q] != infixExpression[n-1].charValue() ? Operator[q] : Operator[(q+1)%4];
				}
		        
		        try {
		        	Topic[i].append("(" + (i+1) + ")");
		        	Answer[i].append("(" + (i+1) + ")");
		        	int result= CalPoland(infixExpression,i,str);
		        	Topic[i].append(System.lineSeparator());
		        	Answer[i].append(" = " + result);
		        	if(i != range - 1){
		        		Answer[i].append(System.lineSeparator());
		        	}
		        }
		        catch (Exception e) {
					// 抛出异常
					Topic[i].setLength(0);
					Answer[i].setLength(0);
					i--;
				}
			}
		}

首先之前代码的很多问题没有得到解决,关于加括号的问题一直没想明白,而这次的测试代码也总是报错。

二、结构优化(重构)

  • 常遇到的几种问题:大量的传参: 一些方法跟另一些方法进行交互,或者调用另一些方法的时候传入大量的参数。
  • 经常会使用一些具有明确含义的常量值,但没有给它们赋予合适的常量变量。
  • 模糊的方法名: 许多时候,以下取的方法名会影响代码的可读性和可理解性;

UML类图

流程图

三、性能调优

看完了视频还是不懂测试代码要怎么写,之前的代码改完之后bug更多了,之后会继续改正代码

总结

感觉现在的状态就是之前的问题解决不了,新的问题又接踵而来,PMD插件一直都没有安好,总是在这种事情上耗费时间
代码找不出bug,基本上总是编译没错但是覆盖率太低,有很多代码没有用到。作业要求完成的内容都没有全部做到,解决一个问题花费好几天也没有进展,看视频打代码感觉没什么帮助,只能继续改自己的代码了
和作业里的还是差蛮多的,自己无法举一反三,只能慢慢加强自己的编程能力了,感觉自己的知识犹如枯井,每次做作业都好绝望。

posted @ 2018-09-30 11:56  cielpupu  阅读(167)  评论(0编辑  收藏  举报