WordCount优化

一、github项目地址
github

二、PSP表格

PSP2.1表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

   

· Estimate

· 估计这个任务需要多少时间

 400 430 

Development

开发

   

· Analysis

· 需求分析 (包括学习新技术)

 20 30 

· Design Spec

· 生成设计文档

 45 60 

· Design Review

· 设计复审 (和同事审核设计文档)

 30 20 

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 30 30 

· Design

· 具体设计

 30 30 

· Coding

· 具体编码

 45 40 

· Code Review

· 代码复审

 30 50 

· Test

· 测试(自我测试,修改代码,提交修改)

 60 75 

Reporting

报告

   

· Test Report

· 测试报告

 60 45 

· Size Measurement

· 计算工作量

 20 20 

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30 30 
 

合计

 400 430 

三、接口实现

我的任务是进行单词的分割,我根据上一次第二周的个人作业,使用了pattern进行正交法则的分割,很快的就完成了主要的核心任务,具体方法是先以除-以外的所有符号并包括数字读取的内容进行分割,得到的数组中全是所需的单词,但可能会出现类似于a--或者--a的单词出现,再对这个数组进行一次遍历并判断就完成单词分割。
while ((s = bufferReader.readLine()) != null) {
            String[] word = s.split("[ ,'\"~`!#%^&*_\\(\\)\\[\\]+=:;|<>.?/[0-9]]");
            for (String l : word){
            	if (!Pattern.matches("\\s*",l)&&!Pattern.matches("[-]+",l))   
               	 sing.add(l);
            } 	
            for (int i=0;i < sing.size();i++) {
            	s = sing.get(i);
            	if (Pattern.matches("[a-z]+[-]+",s)){
            		word = s.split("[-]+");
            		sing.remove(i);
            		sing.add(i,word[0] );
            	}
            	else if(Pattern.matches("[-]+[a-z]+",s)){
            		word = s.split("[-]+");
            		System.out.println(word.length);
            		sing.remove(i);
            		sing.add(i,word[1] );
            	}
            }
        }

然后由于负责输入模块的同学只把文件打开了,传输给我的是一个文件,所以我利用了输入流对此文件进行处理,并利用了一个读取缓存来保证一次都取量不至于过大而导致崩溃。

public void readFile(File file) throws FileNotFoundException{
    	inputStreamreader = new InputStreamReader(
    			new FileInputStream(file));
    	bufferReader = new BufferedReader(inputStreamreader);
    }

四、测试用例

设计测试用例的时候,要根据老师上课讲过的测试用例覆盖方法进行测试。
因为负责输入的同学传输给我的是文件,但是我在测试的时候只测试了自己的WordSplit模块,在我的代码大部分都为黑盒测试,只有在对类似于a--和--a的例子中进行处理的时候才采用了白盒测试。
下面是对于模块的白盒测试,用于测试判断覆盖。
@Test
	public void testSplit14(){
		ArrayList<String> result14 = new ArrayList<String>();
		result14.add("d");
		assertEquals(result14,Test1.split(s14));
	}
	
	@Test
	public void testSplit15(){
		ArrayList<String> result15 = new ArrayList<String>();
		result15.add("d");
		assertEquals(result15,Test1.split(s15));
	}
下面是对于基本功能的检测
@Test
	public void testSplit1(){
		ArrayList<String> result1 = new ArrayList<String>();
		result1.add("ab-d");
		result1.add("table");
		assertEquals(result1,Test1.split(s1));
	}
	
	@Test
	public void testSplit2(){
		ArrayList<String> result2 = new ArrayList<String>();
		result2.add("ab");
		result2.add("d");
		result2.add("table");
		assertEquals(result2,Test1.split(s2));
	}
@Test
	public void testSplit13(){
		ArrayList<String> result13 = new ArrayList<String>();
		result13.add("software");
		assertEquals(result13,Test1.split(s13));
	}
下面是对于较复杂的符号分割的检测
@Test
	public void testSplit9(){
		ArrayList<String> result9 = new ArrayList<String>();
		result9.add("see");
		result9.add("Box");
		result9.add("d");
		result9.add("c");
		assertEquals(result9,Test1.split(s9));
	}

五、测试截图和测试质量的分析


测试用例覆盖了全部的代码,有效的检查了被测验的模块;被测模块没有任何的错误。(吐槽一下,20个测试用例或许太多了,20个测试用例中有部分是重复无必要的。)

六、小组贡献

扩展任务

七、规范理解和评价对象

开发文档阿里巴巴java开发手册 评价对象:何思聪 11083 负责的模块:单词统计模块(wordcount)
选择了开发手册的命名风格和代码格式来进行评价。

在这段命名风格中,在编写代码的过程中没有遵守驼峰风格。

在代码格式这部分中,使用的是tab键进行缩进,而不是使用的是4个空格进行缩进。

八、静态代码分析工具

checkstyle

九、分析结果截图

十、小组分析

缺少注释,并且代码使用的是tab缩进。
posted @ 2018-04-08 20:28  17119  阅读(219)  评论(0)    收藏  举报