Github项目地址:
基本功能:
对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。 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
扩展功能:
wc.exe -s //递归处理目录下符合条件的文件 wc.exe -a file.c //返回更复杂的数据(代码行 / 空行 / 注释行) wc.exe -e stopList.txt // 停用词表,统计文件单词总数时,不统计该表中的单词
基本思路:
由于很久没使用C语言了,导致编写进度进展的很慢。但根据要求进行需求分析,主要要实现的功能有:用户的命令行输入,文件的获取与读写,文件内容遍历,字符串匹配等。该程序代码的结构如下, 从根据argv[]传入的参数,条件语句判断。来决定进行什么功能。
代码设计:
-c 返回文件字符数
int countc(char *file) //返回文件的字符数 { FILE *f; f = fopen(file, "r"); char a; if(NULL==(f=fopen(file,"r"))) { printf("file is NULL"); } else while (!feof(f)) { a=fgetc(f); if (a != ' '&&a != '\n'&&a != '\t') cchar++; } fclose(f);printf("charnum:%d ",cchar);}
-w返回文件单词总数
int countw(char *file)//返回文件词的数目 { FILE *f; f=fopen(file,"r"); char ch; if(NULL==(f=fopen(file,"r"))) { printf("file is NULL"); } else while(!feof(f)) { ch=fgetc(f); if((ch >= 'a'&&ch <= 'z')||(ch>='A'&&ch<='Z')||ch=='_') aword=1; else if (aword) { cword++; aword=0; } } fclose(f); printf("wordnum:%d ",cword);}
-l返回文件总行数
int countl(char *file) //返回文件的行数{ FILE *f; f = fopen(file, "r"); int cline = 0; char a; if(NULL==(f=fopen(file,"r"))) {printf("file is NULL");} else while(!feof(f)) { a=fgetc(f); if(a=='\n'||a=='\t') cline++; } fclose(f);printf("Linenum:%d ",cline); return 1;}
主函数根据argv[]传入的参数,进行条件语句判断。来决定进行什么功能。
int main(int argc, char* argv[]) { FILE *fp; while(1) { if((fp=fopen(argv[2],"r"))==NULL) { printf("FileNull\n\n\n"); scanf("%s%s%s",argv[0],argv[1],argv[2]); continue; } else if(!strcmp(argv[1],"-w")) countw(argv[2]); else if(!strcmp(argv[1],"-c")) countc(argv[2]); else if(!strcmp(argv[1],"-l")) countl(argv[2]); else if(!strcmp(argv[1],"-a")) { count_blankline(argv[2]); count_noteline(argv[2]); count_codeline(argv[2]); } else if(!strcmp(argv[1],"-s")) { searchfile(); } else printf("NullPoint\n"); printf("\n\n"); scanf("%s%s%s",argv[0],argv[1],argv[2]); } return 0;}
测试思路:
采用白盒测试用例设计法覆盖可能出现的左右情况,尽量找到代码中可能蕴含的错误并改正,因此,测试设计应该覆盖判断中的各种边界情况。-c test.txt,-w test.txt,-l test.txt,-c –w test.txt,-c –l test.txt,-w –l test.txt,-c –w –l test.txt,-c test.txt –o output.txt,-w test.txt –o output.txt,-l test.txt –o output.txt,-c –w test.txt –o output.txt,-c –l test.txt –o output.txt,-w –l test.txt –o output.txt,-c –w –l test.txt –o output.txt。
测试文件:
测试均可通过,表示基本功能没有问题,不一一列举了。
总结:本次作业较为仓促,有多个功能聚集在主函数内部,比较杂乱,没有比较好的代码优化。算法的性能还有待提高和优化,对问题的考虑可以更全面。但是加强了编程能力,让我对时间安排有了更充分的理解,理解了上课所学习的基本内容,初步理解的测试的相关方法,希望能在今后的学习中对软件测试有更加深刻的理解和学习。
参考文献
【1】
【2】 【3】 【4】