WC程序(python实现)

一、GitHub地址:https://github.com/asswecanfat/WC

二、PSP表格:

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 25 30
· Estimate · 估计这个任务需要多少时间 25 25
Development 开发 1400 1500
· Analysis · 需求分析  130 150
· Design Spec · 生成设计文档 60 50
· Design Review · 设计复审  30 45
· Coding Standard · 代码规范 40 40
· Design · 具体设计 80 90
· Coding · 具体编码 930 965
· Code Review · 代码复审 20 20
· Test · 测试(自我测试,修改代码,提交修改) 150 160
Reporting 报告 130 130
· Test Report · 测试报告 60 70
· Size Measurement · 计算工作量 40 30
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30
合计   1555 1660

三、解题思路

(1)仔细阅读完项目需求后,我发现只需要从命令行中提取出参数进行相应的操作即可。

(2)首先我使用了python的第三方模块:click,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现,加入相应的命令行参数,再写相应的方法,不过缺点是无法执行python xxx.py -l -w -c xxx.py 类似命令(即三个基础命令同时使用或是两个基础命令同时使用)(可能可以实现,但由于本人查看官方文档并没有发现该种例子)

(3)我将基础功能封装在一个叫BaseFunc的类里,便于扩展和维护,里面的c_func,l_func,w_func都是返回一个字典,在最初写好方法时,我原本考虑返回一个字符串,类似‘xx文件有xx字符’,但后来写其他方法时发现并不是一个好的计策。所以,在考虑模块之间的相互调用和美观后,决定返回一个字典,字典的处理封装在调用者里。

(4)而扩展功能-a封装在SeniorFunc类中,-s放在了directory_processing中,便于其他类的调用,-a返回一个字典嵌套着列表,-s用列表存储基础类和扩展类的方法(即-l,-w。-c,-a),便于在递归时继续使用该方法进行处理文件

(4)由于click模块自带一部分错误处理,我直接使用if-else来进行小部分错误的处理,而且由于python自身有很多文件处理的方法输入错误后不会raise一个错误,而是返回False,因此我觉得使用if-else来处理会好一些,但维护时捕捉错误的准确率会所下降。

(5)在Python中,打开文件用的模式是有讲究的,如‘r’与‘rb’,前者一般要在open函数中加入encoding=‘utf-8’字段,后者只是读取字节。因此,为方便文件的打开,我使用了前者,但这会产生一些小问题,如果去读取不是utf-8模式的文件,会直接报错,所以我用chardet模块先检测文件的编码模式,然后再encoding=该文件的编码格式,在不是递归模式下会出现‘无符合条件的文件’的提醒,而且在递归中会除去音频等文件。

(6)通配符的实现,我是使用正则表达式来实现的,将*换成 .+ ,将?换成 . ,即可实现该功能,并将其封装在wildcard_deal方法中。

(7)图形页面一开始我使用的是pyqt5,因为它自带QT designer,可以很快的开发图形页面且美观,但由于本人并没有发现有文件对话框的可拖动模块,而且需要自己手写该部分代码,因此改用python自带的tkinter,不算美观但能用,调用各个类的函数就可以实现了。

四、设计实现过程

wc文件中共有BaseFunc基础功能类,ExpandFunc扩展功能类,SeniorFunc图形页面类,Main中的run方法,通配符处理的wildcard_deal方法,递归处理的deal_directory方法

 

 五、测试运行

测试文件包括:一个空文件、一个只有一个字符的文件、一个只有一个单词的文件、一个标准的python源文件、一个多目录嵌套的文件

5.1 测试非递归的功能(-l、-a、-w 、-c)

5.1.1 测试空文件

5.1.2 测试一个只有一个字符的文件

 5.1.3 测试一个只有一个单词的文件

5.1.4 测试标准python源文件

5.1.5 测试不存在的文件

 5.2 测试非递归的功能(-s -a/-w/-l/-c)

 5.2.1 测试多目录嵌套的文件

 

 

 

  5.2.2 测试多目录嵌套的文件配合通配符?

 

5.3 测试图形化功能(-x)

 

 经过验证所有处理结果与预期结果一致

代码覆盖率:

 由于图形化界面测试生成的.coverage会稀释之前的.coverage,所以覆盖率会有所降低

 六、项目总结

这次项目让我值得思考,如何架构,如何规划各模块间的关系,让我更深的去了解软件工程的背后。总的来说,这次做的不算太好,并没有达到本人的一个期望,代码的冗余度不算太高但也不低,总体来说这是一个比较好的练手项目,让我更深的去了解python的PEP8的代码规范模式,也希望在后面的项目里我能学习到更多。

猜你喜欢

转载自www.cnblogs.com/asswecanfat/p/11575481.html
今日推荐