GitHub地址
https://github.com/BillCYJ/WordCount
PSP表格
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
20 | 10 |
· Estimate |
· 估计这个任务需要多少时间 |
10 | 10 |
Development |
开发 |
100 | 120 |
· Analysis |
· 需求分析 (包括学习新技术) |
45 | 30 |
· Design Spec |
· 生成设计文档 |
10 | 10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 | 15 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 | 15 |
· Design |
· 具体设计 |
45 | 60 |
· Coding |
· 具体编码 |
400 | 420 |
· Code Review |
· 代码复审 |
60 | 30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 | 60 |
Reporting |
报告 |
60 | 90 |
· Test Report |
· 测试报告 |
30 | 30 |
· Size Measurement |
· 计算工作量 |
10 | 15 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 | 30 |
合计 |
960 | 945 |
解题思路
1. 第一个问题就是如何获取到命令行,我参考了这篇博客http://blog.csdn.net/flyyyri/article/details/5084981。main函数第一个参数argc 代表参数的个数,第二个参数argv数组代表字符串数组。所以,我们可以根据argc和argv数组,来获取每个命令行。
2. 获取到了命令行,就可以用之判断要调用的函数,所以,现在就实现每一个对应的函数就可以了。
3. 完成上一步之后,就开始读取文件,再进行操作,最后输出到result.txt中进行保存。
程序设计实现过程
1. isSpace、isTab、isEndline、isComma、isSep函数:分别判断字符是否是空格、制表符、换行符、逗号、分隔符。
2. CountWord函数:调用上述函数,负责字符、单词、行数等信息的统计。
3. countFunc函数:负责读取命令行、调用CountWord函数,再输出结果并将结果保存在txt文件中。
CountWord函数的流程图:
略(请见下方代码)
代码说明
CountWord函数用于统计单词数、字符数、行数等信息,调用isSpace、isTab、isEndline、isComma、isSep等函数,被countFunc函数调用。用while循环读取字符,再在while中判断所读的字符是不是分隔符。如果不是分隔符,那就是一个单词,就把这个单词读完;如果是分隔符且为换行符,那就行数+1;其他情况不做任何操作。一直读,直到该命令行被读完,最后,由于最后一行没有换行符,所以,应该给行数+1。
1 //统计单词数、字符数、行数等信息 2 void CountWord() 3 { 4 charsCount = 0,wordsCount = 0,linesCount = 0; 5 char c; 6 //fgetc函数:读到文件末尾或者读取出错时返回-1 7 while ((c = fgetc(file)) != -1) //循环读取整个文本里的字符 8 { 9 charsCount++;//字符数+1 10 if (!isSep(c)) //不是分隔符的话,那就是单词的一个字符 11 { 12 wordsCount++;//单词数+1 13 while ((c = fgetc(file)) != -1) //循环读取该单词里的字符 14 { 15 charsCount++;//字符数+1 16 if (isEndline(c))//新行 17 { 18 linesCount++;//行数+1 19 break; 20 } 21 else if (isSpace(c) || isTab(c) || isComma(c)) 22 { 23 break;//该单词结束了 24 } 25 } 26 } 27 else if (isEndline(c))//是分隔符,且为换行符 28 linesCount++;//行数+1 29 } 30 charsCount == 0 ? linesCount=0 : ++linesCount;//最后一行没有换行符,也要算上该行 31 }
测试设计过程
如何设计测试用例
在线学习2.3节对判定的测试中指出“语句覆盖就是要保证设计的测试用例应至少覆盖函数中所有的可执行语句”,为此,我针对countFunc函数,使用语句覆盖指标设计测试用例,共产生10个测试用例。
哪些地方会导致程序高风险
指针的操作和内存的管理这两方面可能会导致程序的高风险。
测试代码如何设计
争取将各个可执行语句和条件判断的分支都考虑到。
编写的测试脚本"wc.bat"包含10条测试用例,具体内容如下:
测试结果如下:
测试全部通过,满足了设计时的期望。
参考文献链接
【1】C语言中的EOF和feof()
http://blog.csdn.net/flyyyri/article/details/5084981
https://www.cnblogs.com/saolv/p/7793379.html
【3】第2周个人作业:WordCount
http://www.cnblogs.com/ningjing-zhiyuan/p/8563562.html
【4】WordCount编码与测试
http://www.cnblogs.com/liuqsw/p/8601344.html
【5】GitHub、Git与TortoiseGit基本操作