WC程序(python实现)

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

二、PSP表格:

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2530
· Estimate· 估计这个任务需要多少时间2525
Development开发14001500
· Analysis· 需求分析 130150
· Design Spec· 生成设计文档6050
· Design Review· 设计复审 3045
· Coding Standard· 代码规范4040
· Design· 具体设计8090
· Coding· 具体编码930965
· Code Review· 代码复审2020
· Test· 测试(自我测试,修改代码,提交修改)150160
Reporting报告130130
· Test Report· 测试报告6070
· Size Measurement· 计算工作量4030
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划3030
合计 15551660

三、解题思路

(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的代码规范模式,也希望在后面的项目里我能学习到更多。

 

 

 

转载于:https://www.cnblogs.com/asswecanfat/p/11575481.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值