博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二次作业(WordCount)重制版
阅读量:5291 次
发布时间:2019-06-14

本文共 3243 字,大约阅读时间需要 10 分钟。

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。

测试文件:

1489541-20180930193627604-1744646136.png

1489541-20180930193644129-1244805160.png

测试均可通过,表示基本功能没有问题,不一一列举了。

总结:本次作业较为仓促,有多个功能聚集在主函数内部,比较杂乱,没有比较好的代码优化。算法的性能还有待提高和优化,对问题的考虑可以更全面。但是加强了编程能力,让我对时间安排有了更充分的理解,理解了上课所学习的基本内容,初步理解的测试的相关方法,希望能在今后的学习中对软件测试有更加深刻的理解和学习。

参考文献

【1】

【2】
【3】
【4】

转载于:https://www.cnblogs.com/Damonblogs/p/9733083.html

你可能感兴趣的文章
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
吐医疗器械研发可配置性需求的槽点
查看>>
UVA - 1592 Database
查看>>
机器翻译评价指标 — BLEU算法
查看>>
机器学习基石(9)--Linear Regression
查看>>
Min Stack
查看>>
从LazyPhp说起
查看>>
Fine Uploader文件上传组件
查看>>
Spring Boot与Spring的区别
查看>>
查看linux 之mysql 是否安装的几种方法
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
软件测试(基础理论一)摘
查看>>
CF327E Axis Walking
查看>>
关于eclipse maven引入第三方jar包后如何下载源代码
查看>>