第二周作业:wordCount

                                                                                                                                                                               第二周作业:WordCount

注:(代码借用1504班成建伟)

1.Github地址:https://github.com/woloveyi/ruance

 

2.PSP2.1表格:

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30

 20

· Estimate

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

 25

 35

Development

开发

 450

 760

· Analysis

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

 60

 100

· Design Spec

· 生成设计文档

 60

 60

· Design Review

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

 30

 30

· Coding Standard

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

 25

 10

· Design

· 具体设计

 70

 60

· Coding

· 具体编码

 320

 410

· Code Review

· 代码复审

 40

 100

· Test

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

 60

 80

Reporting

报告

 120

 110

· Test Report

· 测试报告

 60

 100

· Size Measurement

· 计算工作量

 20

 30

· Postmortem & Process Improvement Plan

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

 40

 45

 

合计

 1420

 1950

       

3.设计思路

      由于对Java了解的很少,作业的时间又很紧,所以借用了其他同学的代码,根据他的讲解对代码进行了一定的了解。

本次编程的需要是统计文件的字符数。单词数和行数,以及进行一系列的测试根据命令输出相应结果。

      大概的思路是分为主函数和调用函数,根据调用函数来读行,在读行的过程中进行对字符还有单词的判断。然后在依次执行参数的功能,并输出到文件中。

4.代码说明

  1.文件中字符数,单词数,行数计算的代码

package wordcount;

//基本功能

import java.io.*;

import java.util.Set;

import java.util.TreeMap;

public class basecount {

         //字符数、单词数和行数

 

                                   while((line=br.readLine())!=null)

                                   {

                                           

                                            linecount++;

                                            sb.append(line);

                                            charcount+=line.length();

                                 String[] split = line.split("\\s++|\\.|,|\\;|\\(|\\)|\\[|\\]|\\<|\\>|\\=|\\-|\\+|\\*|\\/|\\{|\\}|\\_"); 

                                 for (int i = 0; i < split.length; i++) {

//                                获取到每一个单词 

                                     Integer integer = map.get(split[i]); 

//                                如果这个单词在map中没有,赋值1 

                                     if(null==integer){ 

                                         map.put(split[i], 1); 

                                     }else{ 

//                                    如果有,在原来的个数上加上一 

                                         map.put(split[i], ++integer); 

                                     } 

                                 } 

                                  }

                                  

//                   遍历,根据key获取所对应的value 

                        Set<String> keySet = map.keySet(); 

                        for (String string : keySet)

                                if(!(string.equals("")))//{

                                wordcount+=map.get(string);

                     

2扩展功能

 

          while ((line = br.readLine()) != null) { 

              line = line.trim(); 

              if (line.matches("^[//s&&[^//n]]*$")||line.equals("{")||line.equals("}")) { 

                  // 空行 :本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”

                  whiteLines++;     

              }

             /* 本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

              *  }//注释

              */

              else if (line.startsWith("/*") && !line.endsWith("*/")||((line.startsWith("{/*")||line.startsWith("}/*"))&&!line.endsWith("*/"))){

                  // 判断此行为"/*"开头的注释行 

                  commentLines++; 

                  comment = true; 

              } else if (comment == true && !line.endsWith("*/")&&!line.startsWith("*/")) { 

                  // 为多行注释中的一行(不是开头和结尾)

                  notLine++;

                  commentLines++; 

              } else if (comment == true && (line.endsWith("*/")||line.startsWith("*/"))) { 

                  // 为多行注释的结束行 

                  commentLines++; 

                  comment = false; 

              } else if (line.startsWith("//")|| line.startsWith("}//")||line.startsWith("{//")||

                              ((line.startsWith("{/*") ||line.startsWith("}/*")||line.startsWith("/*")) && line.endsWith("*/"))) { 

                  // 单行注释行 

                  commentLines++; 

              } else { 

                  // 正常代码行 

                  //System.out.println(line);

                  normalLines++; 

              } 

          }     

      }

                 

           

5.测试过程

本次测试采用白盒测试的方法,白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。

测试用例:

(1)测试 -l    wc.exe -l file.c -o output.txt                                   
(2)测试 -c-w    wc.exe -c -w test.c                                       

(3)测试 - a   wc.exe – a file.c -o output.txt,                                 

(4)测试-c    wc.exe – c test. c                                     
(5)测试-a -l    wc.exe – a -l . file c                                       
(6)测试 -l -w -c  wc.exe -l -w -c file.c                               

(7)测试 -c -l -w  wc.exe -c -l -w file c                                  

(8)测试-s -c -w -l  wc.exe -s -a -w -l file.c                                   
(9)测试-s -c -w -l   wc.exe -s -l -w –c file.c -o output.txt,                        
(10)测试-s -c -w -l  wc.exe -s -l -w –c file.c -e stoplist.txt -o output.txt                   

6.心得体会

     通过这次程序的测试使我对软件测试的知识有了更好的理解,通过对以学知识的运用及对未学知识的学习和应用,使得我学习的知识更加系统化,并且能够很好的融会贯通。这次测试培养了我设计的能力,并大大增加了我对测试的兴趣。以后要更加努力学习软件测试,争取把它学的更好

7.需要改善

 加强对其他一些语言的学习,由于自己知识的局限性让我知道自己不能自由的发挥,有很多需要改进的地方,希望能够有所提高。

 8.参考文献  

     https://baike.so.com/doc/135642-143276.html

http://blog.csdn.net/sunkun2013/article/details/13167099

posted on 2018-03-21 22:19  foreverlln  阅读(154)  评论(2)    收藏  举报