github地址:
https://github.com/inewRichard/WordCount
PSP表格:
PSP2.1 | PSP |
预估耗时 (分钟) |
实际耗时
(分钟) |
Planning | 计划 | 20 | 10 |
Estimate | 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | 30 | 40 |
Analysis | 需求分析 (包括学习新技术) | 60 | 120 |
Design Spec | 生成设计文档 | 30 | 120 |
Design Review | 设计复审 (和同事审核设计文档) | 60 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 60 |
Design | 具体设计 | 30 | 100 |
Coding | 具体编码 | 300 | 450 |
Code Review | 代码复审 | 60 | 120 |
Test | 测试(自我测试,修改代码,提交修改) | 120 | 240 |
Reporting | 报告 | 60 | 120 |
Test Report | 测试报告 | 120 | 120 |
Size Measurement | 计算工作量 | 60 | 60 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 120 |
合计 | 1060 | 1780 |
解题思路:
要想实现字符和字符串统计等功能,可以利用编译技术里有穷状态机转换对输入的字符串进行统计。
程序设计实现过程:
程序包括 主函数,file_name(文件路径获取),f_c()(字符串统计), f_w()(单词统计), f_l()(行数统计),f_o(结果指定输出),getword(获取停用词).
主要的设计过程就是分支判断,根据各参数的有无情况来分情况进行处理,由于函数间存在相互嵌套调用情况,因此参数的输入必须按照一定顺序。
代码说明:
if ‘-s‘ in command: if ‘-o‘ in command: if ‘-e‘ in command:
#获取匹配的文件名 filekind=command[-5] filename=file_name(fileway) filetail=‘.‘ info=0 for i in filekind: if(i==‘.‘): info=1 if(info==1): filetail=filetail+str(i) for f in filename: if filetail in f: signlist=getword(command[-3])#获取停用词表 f_o(command[-1],command,signlist) else: filekind=command[-3] filename=file_name(fileway) filetail=‘.‘ info=0 for i in filekind: if(i==‘.‘): info=1 if(info==1): filetail=filetail+str(i) for f in filename: if filetail in f: signlist=[] f_o(command[-1],command,signlist)
跟据参数输入情况,是否获取递归匹配文件名,是否读取停用词表,然后调用相关函数实现功能
测试设计过程:
1.统计字符数的代码:
def f_c(filename): f=open(filename,‘r‘) count=f.read() count=list(count) num=len(count) return num
由于没有路径分支,只需要一个测试用例:
路径 | 输入 | 预期输出 | 实际输出 |
A->B | test1.txt | 23 | 23 |
2.统计单词数:
def f_w(filename,signlist): f=open(filename,‘r‘) count=f.read() count=list(count) word=‘‘ wordlist=[] for i in count: if(i==‘ ‘): if word in signlist: word=‘‘ else: wordlist.append(word) word=‘‘ elif(i==‘,‘): if word in signlist: word=‘‘ else: wordlist.append(word) word=‘‘ else: word=word+str(i) wordlist.append(word) num=len(wordlist) return num
有多个路径分支
路径 | 输入 | 预期输出 | 实际输出 |
A->B->C->F | while | 0 | 0 |
A->B->C->F | work | 1 | 1 |
A->B->D->H | while, | 0 | 0 |
A->B->D->I | work, | 1 | 1 |
A->B->E | w | 0 | 0 |
3.统计行数:
def f_l(filename): f=open(filename,‘r‘) num=0 s=f.readline() while(s!=‘‘): num=num+1 s=f.readline() return num
路径 | 输入 | 预期输出 | 实际输出 |
A->B->C | this is the test! | 1 | 1 |
A->C | 0 | 0 |
参考文献链接
http://www.cnblogs.com/ningjing-zhiyuan/p/8563562.html
写完后的感想:
由于对程序测试接触的不多,对于测试的过程有些粗糙,有很多地方没考虑周到,包括测试数据的形式等。总而言之,算是开拓我的知识视野,以后继续努力改进吧!