WeCount软件测试

WeCount软件测试

 

 

github项目地址:https://github.com/inewRichard/WordCountPro

 

 

PSP表格:

 

 

                                PSP2.1   PSP

预估耗时

(分钟)


   实际耗时

(分钟)

 Planning  计划  20  10
 Estimate  估计这个任务需要多少时间  10  20
 Development  开发  20  30
 Analysis  需求分析 (包括学习新技术)  20  10
 Design Spec  生成设计文档  10  10
 Design Review  设计复审 (和同事审核设计文档)  20  30
 Coding Standard  代码规范 (为目前的开发制定合适的规范)  10  10
 Design  具体设计  30  30
 Coding  具体编码 50  50
 Code Review  代码复审  30  30
 Test  测试(自我测试,修改代码,提交修改)  60  60
 Reporting  报告  20  20
 Test Report  测试报告  50  50
 Size Measurement  计算工作量  5  5
 Postmortem & Process Improvement Plan  事后总结, 并提出过程改进计划  5  5
   合计  360  370

 

 

 

 

接口实现:

我主要负责核心处理:

我的设计思想是先获取经过处理后的单词数据,对出现的各个单词分配一个计数值,然后利用排序算法得出单词的频率排序

 

代码如下:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

class doc {
	static String name;
	static String text;
	static String word="";
	static String[] stoplist;
	public static int linecount =1,allwordcount = 0,wordcount =0,symbolcount=0,codeline=0,nullline = 0,balaline =666;
	static boolean[] temp ={};
	public doc(){}
	public doc(String n,String t,boolean[] para){
		name = n;
		text = t;
		temp = para;
		cal();
	}
	public String  mes(){
		String message= "name:"+name+"\n";
		if(temp[2] ==true)
			message +="\tsymbolcount:"+symbolcount;
		
		if(temp[1] == true)
			message +="\twordcount:"+wordcount;
		
		if(temp[0]==true)
			message +="\tlinecount:"+linecount;
		if(temp[3] == true)
			message +="\tcodeline:"+codeline+"\tnullline:"+nullline+"\tbalaline:"+balaline;
		return message;
	}
	public static boolean isChinese(char c) {  
	    return c >= 0x4E00 &&  c <= 0x9FA5;// 根据字节码判断  
	}  	
	public static boolean isword(char c) {   
	    return (c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9');  
	}  
	public static boolean isnum(char c) {  
	    return (c>='0'&&c<='9');  
	}
	public static boolean issymbol(char c){
		return !(isChinese(c)||isword(c));
	}
	private  static boolean isStop(String s){
		word = "";
		boolean isstop = false;
		if(doc.stoplist == null)
			return false;
		for(String sp:doc.stoplist){
			if(isequal(sp,s)){
				isstop = true;
				break;
			}		
		}
		return isstop;
	}
	private static boolean isequal(String sp, String s) {
		// TODO Auto-generated method stub
		if(sp.length() != s.length())
			return false;
		
			for(int i=0;i<sp.length();i++){
				if(sp.charAt(i)!=s.charAt(i))
					return false;
			}
		return true;
	}
	public static void cal(){
		ArrayList linewords = new ArrayList();
		ArrayList<String> line = new ArrayList<String>();
		String ts ="";
		int lineb=0;
		boolean isaword = false;
			//多少行是指的多少回车吗
			//单词数 ,如果是汉语呢,那应该是一个字是一个词咯?
		for(int i =0;i<text.length();++i){
			char temp = text.charAt(i);
			ts+=temp;
			if(temp=='\n'){
				linewords.add(allwordcount-lineb);
				lineb =allwordcount;
				linecount +=1;
				line.add(ts);
				ts="";
			}
			else if(isword(temp)&&!isnum(temp)){
				isaword = true;
			}
			else if(isChinese(temp)){
				allwordcount+=1;
				if(!isStop(""+temp));
					wordcount+=1;
				if(isaword)
					allwordcount +=1;
				if(isaword&&!isStop(word))
					wordcount +=1;
				isaword = false;
			}
			else if(issymbol(temp))
			{
				if(isaword)
					allwordcount +=1;
				if(isaword&&!isStop(word))
					wordcount +=1;
				isaword = false;
				if(issymbol(temp)){
					symbolcount +=1;
				}
			}
			if(isaword)
				word +=temp;
		}
		line.add(ts);
		linewords.add(allwordcount-lineb);
		allwordcount = isaword?allwordcount+1:allwordcount;
		if(isaword&&!isStop(word))
			wordcount++;
		/*for(int i=0;i<line.size();++i){			//solve the line problem
			System.out.println(line.get(i));
		}*/
		for(int i =0;i<linewords.size();i++){			//codeline,line and line you ***
			if((int)linewords.get(i)>1){
				codeline ++;
			}else if(isnullline(line.get(i)))
				nullline ++;
			else if(iszhushi(line.get(i))){
				balaline ++;
			}
				
		}
		
	}
	
	private static boolean iszhushi(String string) {
		// TODO Auto-generated method stub
		return false;
	}
	private static boolean isnullline(String str) {
		// TODO Auto-generated method stub
		boolean flag = false;
		for(int i=0;i<str.length();i++){
			if((!(str.charAt(i)==' '||str.charAt(i) =='\r'||str.charAt(i) =='\t'||str.charAt(i)=='\n'))&&!flag){
				flag = true;
			}else if((!(str.charAt(i)==' '||str.charAt(i) =='\r'||str.charAt(i) =='\t'||str.charAt(i)=='\n'))&&flag){
				return false;
			}
		}
		return true;
	}

}

  

 

测试用例的设计:

 

白盒测试,主要是根据输入的字符串数组的情况进行测试,比如字符之间是否有“-”连接,是否有其他非字母数字符号,以及单词的频率变化对输出结果的印象。

单元测试代码示例如下:

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;




public class NewleiTest {
	static boolean[]  para= {true,true,true,false};
	private static doc Doc=new doc("test.c","this is the test!\r\nthe second line!",para);

	@Before
	public void setUp() throws Exception {
	}
	
	@Test
	public void CalTest(){
		Doc.cal();
	}
	
	@Test
	public void ResultTest(){
		assertEquals(7, Doc.wordcount);
	}

	@Test
	public void test() {
		fail("Not yet implemented");
	}

}

  

黑盒测试:

黑盒测试是在模块封装的情况下对功能模块进行测试,我这里黑盒测试主要是对于输入参数变化的测试,相关的测试用例在我项目的测试清单里。

 

测试用例清单:

 

 

测试脚本运行截图:

 

posted @ 2018-04-08 21:14  iRichard  阅读(281)  评论(1编辑  收藏  举报