wordCount的实现

wordCount的实现

       合作者学号:201631062605, 201631062405  

一:本文代码

  Github代码下载链接:https://github.com/OuLianhHong00/WordCount 

     本次作业地址:https://edu.cnblogs.com/campus/xnsy/Test/homework/2203

二:功能概述及psp:

2.1.1 基本功能(完成)

wc.exe -c file.c     //返回文件 file.c 的字符数

wc.exe -w file.c     //返回文件 file.c 的单词总数

wc.exe -l file.c     //返回文件 file.c 的总行数

wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

2.1.2 扩展功能(-a完成)

wc.exe -s            //递归处理目录下符合条件的文件

wc.exe -a file.c     //返回更复杂的数据(代码行 / 空行 / 注释行)

wc.exe -e stopList.txt  // 停用词表,统计文件单词总数时,不统计该表中的单词

[file_name]: 文件或目录名,可以处理一般通配符

2.1.3 高级功能(完成)

wc.exe -x  //该参数单独使用,如果命令行有该参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、单词数、行数等全部统计信息。

三:代码设计

 1     //计算单词数
 2     int countWord(char *file)
 3     {
 4         FILE *fp;
 5         int wCount=0;
 6         int is_word=0;
 7         char a;
 8         fp=fopen(file,"r");
 9         if(fp==NULL){
10           printf("文件打开失败\n");
11         }else{
12             while(!feof(fp)){
13                 a=fgetc(fp);
14                 if((a>='a'&&a<='z')||(a>='A'&&a<='Z')||a=='_')
15                     is_word=1;
16                 else if(is_word){
17                      wCount++;
18                      is_word=0;
19                 }
20                 }
21             }
22         fclose(fp);
23         printf("该文件单词数为:%d\n",wCount);
24         return wCount;
25     }

 

 1     //计算字符数
 2     int countChar(char *file)
 3     {
 4         FILE *fp;
 5         fp=fopen(file,"r");
 6         char a;
 7         int cCount=0;
 8         if(NULL==fp)
 9         {
10           printf("文件为空\n");
11         }else{
12             while((a=fgetc(fp))!=EOF){
13                   cCount++;
14             }
15         }
16       fclose(fp);
17        printf("字符数为:%d\n",cCount);
18        return cCount;
19     }
 1 //计算行数
 2     int countLine(char *file)
 3     {
 4         FILE *fp;
 5         fp=fopen(file,"r");
 6         int lCount=0;
 7         char a;
 8         if(NULL==fp)
 9         {
10           printf("文件为空\n");
11         }else{
12             while((a=fgetc(fp))!=EOF){
13               if(a=='\n')
14                   lCount++;
15             }
16         }
17         fclose(fp);
18        printf("文件总行数为:%d\n",lCount); 
19        return lCount;
20     }
 1 //空行
 2     int count_blankLine(char *file)
 3     {
 4        FILE *f;
 5       int blCount= 0;
 6       int ch_num = 0;
 7       char ch;
 8       f = fopen(file, "r");
 9        if(NULL==(f=fopen(file,"r")))
10        {
11        printf("文件为空");
12        }
13        else
14            while (!feof(f))
15            {
16              ch= fgetc(f);
17              if (ch=='\n'){
18                 if (ch_num<= 1)
19                     blCount++;
20                     ch_num = 0;
21              }
22              else if (ch!=' '&&ch!='\t')
23                     ch_num++;
24            }
25        fclose(f);
26        printf("文件空行为:%d\n ",blCount);
27        return blCount;
28     }
29     //代码行
30     int count_codeLine(char *file)
31     {   
32         FILE *fp;
33         fp=fopen(file,"r");
34         int clCount=0;
35         char a;
36         if(NULL==fp)
37         {
38           printf("文件为空\n");
39         }else{
40             while((a=fgetc(fp))!=EOF){
41                  if(a==';')
42                      clCount++;      
43             }
44         }
45         fclose(fp);
46        printf("文件代码行数为:%d\n",clCount);  
47        return clCount;
48     }
49     //注释行
50     int count_noteLine(char *file)
51     {
52         FILE *f;
53         int ch_num = 0;
54         int nlCount=0;
55         char ch;
56         f=fopen(file, "r");
57         if(NULL==(f=fopen(file,"r")))
58         {
59          printf("文件为空\n");
60         }
61       else
62          while (!feof(f))
63          {
64               ch= fgetc(f);
65               if(ch=='\n')
66               {
67                   if(ch_num==2) 
68                       nlCount++;
69                       ch_num=0;
70               }
71              else if(ch=='/') 
72                  ch_num++;
73              else if(ch_num==1)
74              {
75                  if(ch=='/') 
76                      ch_num++;
77              } 
78          } 
79        fclose(f);
80        printf("文件注释行为:%d\n ",nlCount);
81        return nlCount;
82     }
 1     void printFile(char *file,int result,char type){
 2       FILE *wp;
 3       if((wp=fopen("outputFile.txt","a"))==NULL){
 4            printf("文件不存在\n\n");
 5       }else{
 6           switch(type){
 7           case 'c':
 8                   fprintf(wp, "%s文件中字符数有%d", file,result);
 9                     break;
10           case 'w':fscanf(wp, "%s文件中单词数有%d", file,result);
11                    fprintf(wp, "%s文件中单词数有%d", file,result);
12                    break;
13           case 'l':
14                    fprintf(wp, "%s文件中总行数数有%d", file,result);
15                    break;
16           case 'f':
17                    fprintf(wp, "%s文件中代码行数有%d", file,result);
18                    break;
19           case 'e':
20                   fprintf(wp, "%s文件中空行数有%d", file,result);
21                   break;
22           case 'g':
23                    fprintf(wp, "%s文件中注释数有%d", file,result);break;
24           default:; break;
25           }   
26       }
27      fclose(wp);
28     }
 1 #include
 2 #include
 3 #include
 4 #include<string.h>
 5 #include
 6 int main(int argc, char* argv[])
 7 { 
 8     //计算单词数
 9     int countWord(char *file);
10     //计算字符数
11     int countChar(char *file);
12     //计算行数
13     int countLine(char *file);
14     //空行
15     int count_blankLine(char *file);
16     //代码行
17     int count_codeLine(char *file);
18     //注释行
19     int count_noteLine(char *file);
20     //递归找符合条件的文件
21     void Scan(char *file, char type);
22     //将内容输出到outputFile.txt文件中
23     void printFile(char *file,int result,char type);
24     int cw=0,cc=0,cl=0,cb=0,ccl=0,cn=0;
25     FILE *fp;
26     char type='c';
27     while(1==1){
28         //printf("请输入可执行文件名\n");
29         //printf("请输入想要进行的操作(-w表示计算单词数 -c表示计算字符数 -l表示计算行数 -a表示计算空行 代码行 注释行 -s表示符合条件的文件数)\n");
30         //printf("请输入想要操作的文件名\n");
31         printf("进入可视化界面请输入wc.exe -x\n");
32         scanf("%s %s",argv[0],argv[1]);
33         if(!strcmp(argv[1],"-x")){
34              system("D:\\softwaredaima\\c\\WordCount\\wc\\Debug\\wc.exe");
35         }else{
36         scanf("%s %s %s",argv[0],argv[1],argv[2]);//argv[0] 可执行程序的文件名argv[1] 指令,argv[2]文件名
37         if((fp=fopen(argv[2],"r"))==NULL){
38            printf("文件不存在\n\n");
39            //scanf("%s %s %s",argv[0],argv[1],argv[2]);//argv[0] 可执行程序的文件名argv[1] 指令,argv[2]文件名
40            continue;
41         }
42         else 
43         {
44            if(!strcmp(argv[1],"-w"))//判断字符串是否相等
45            {
46              int cw=countWord(argv[2]);
47              
48            }
49            if(!strcmp(argv[1],"-c"))
50            {
51            int cc=countChar(argv[2]);
52            
53            }
54           if(!strcmp(argv[1],"-l"))
55           {
56            int cl=countLine(argv[2]);
57            
58           }
59          if(!strcmp(argv[1],"-a"))//代码、空行、注释
60          {
61           int cb=count_blankLine(argv[2]);
62           int ccl=count_codeLine(argv[2]);
63           int cn=count_noteLine(argv[2]);
64           
65          }
66          if(!strcmp(argv[1],"-s"))//递归目录下符合条件的文件
67          {
68              Scan(argv[2],type);
69          }
70          if(!strcmp(argv[1],"-o"))
71          {
72             printFile(argv[2],cw,'w');
73             printFile(argv[2],cc,'c');
74             printFile(argv[2],cl,'l');
75             printFile(argv[2],cb,'e');
76             printFile(argv[2],ccl,'f');
77             printFile(argv[2],cn,'g');
78          }
79          
80 
81         }
82         
83      fclose(fp);
84         }
85     }
86     return 0;
87 }

四:测试用例

等价类划分

                                                                                                                      


输入  


 

 读取文件的命令

 

 

 

 

 

 

 

 


有效等价类   


 

 

1. -w

 2. -l

3. -c

4.  -w -l -c

5. -w -l

6. -w -c

7 -l -c

8 空


无效等价类


 

9.除了-w -c -l 之外的其余任何输入参数

结果写入参数

 10. -o

11.其他输入
文件名 12.正确文件名 13 非文件名

基于等价类划分的测试用例设计:

测试用例 作用
1  wc.exe  -l -w -c test.txt

测试文件中有多少字符数,行数,单词数

有效测试

2.wc.exe -c outputFile.txt 测试outputFile.txt字符数
3.wc.exe -w test.txt  测试文件单词总数
4.wc.exe -l test.txt  表示返回文件file.c的总行数,并存储在result.txt
5wc.exe -o test.txt  表示返回文件file.c的总行数,并存储在result.txt
6.wc.exe -l -w -c test.txt -o outputFile.txt, 都覆盖
7.wc.exe -s test.txt  遍历文件夹参数
8.wc.exe -l -w  test.txt  遍历文件中的字符数,行数
9.wc.exe -w -c  test.txt  遍历文件中的行数和单词数
10. wc.exe -l -c test.txt  遍历文件中的字符数和单词数
注:-s暂不能使用  

 

五:单元执行结果

 5.1测试的文件内容:

wordCount的实现_第1张图片wordCount的实现_第2张图片

5.2执行结果

wordCount的实现_第3张图片

 wordCount的实现_第4张图片

5.3 静态工具测试  cppCheck

wordCount的实现_第5张图片

 

六:可视化界面

基于MFC所做

wordCount的实现_第6张图片

 

wordCount的实现_第7张图片

 

七:优化

7.1测试数据集思路:

    选用所有单元测试中的等价类和无效等价类进行进行测试,然后将各模块进行联合测试。

  

八:总结与收获

    经过这次wordCount的测试设计与实现,掌握了等价类划分等测试方法,掌握了cmd 的一系列使用命令,通过与小伙伴一起实现wordCount的测试项目。了解了软件测试对于软件开发的重要性,测试的目的是为了发现尽可能多的缺陷,不是为了说明软件中没有缺陷。本次主要是对wordCount的单元测试,利用白盒测试法,在已经知道所测试的文件的内容,以及代码结构的基础上来进行的测试,主要是测试基本功能是否得到了实现以及一些逻辑分支是否正确,面对错误的边界值等,程序的主要处理方式。

你可能感兴趣的:(wordCount的实现)