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
写完后的感想:
由于对程序测试接触的不多,对于测试的过程有些粗糙,有很多地方没考虑周到,包括测试数据的形式等。总而言之,算是开拓我的知识视野,以后继续努力改进吧!