合作者 :201631062222 ,201631062232
代码地址::https://gitee.com/biubiubiuLYQ/ceshi_secend
作业链接:https://edu.cnblogs.com/campus/xnsy/2018softwaretest2398/homework/2187
一.扩展功能
本次主要是对上次功能的补充和完善,此次新增了以下几点功能
wc.exe -s //递归处理目录下符合条件的文件
wc.exe -a file.c //返回更复杂的数据(代码行 / 空行 / 注释行)
wc.exe -e stopList.txt // 停用词表,统计文件单词总数时,不统计该表中的单词
二.代码互审
审查了一下对方的代码,最开始发现他是用python写的,由于不是很懂,就简单的看了一下python的语法,才开始审查他的代码。发现主要问题就是代码写得不是很规范(主要原因还是不是很了解python,可能有些潜在的问题没能被发现),经过商讨后,还是决定了最后的代码格式规范,这里参考了其他的正规规范格式。中间有些小问题,比如说无法打开result.txt等文件,但最后还是解决了这个问题。
三.静态代码检查
1.使用的静态代码工具:Pyflakes
2.简单介绍:
封装了PyFlakes,Pep8,NedBatchelder’s McCabe script三个工具。Flake8通过启动单独的flake8脚本运行所有工具,它在一个Per文件中显示告警,合并到输出中。也增加一些特征:
1)包含这行文件将被忽略:#flake8: noqa
2)结尾包含#noqa注释的行将不发布告警
3)GIT和Mercurial钩子
4)McCabe复杂度检查器
5)可以通过flake8.extension入口点扩展
3.检查结果
提示从tkinter这个库中导入了所有的文件,无法检测到未定义的名称(*)【此为正常提示,*是导入该库所有文件】,但是'tkinter.filedialog.askdirectory没有使用,然后其他都是正常提示。提示某个变量没有定义或是从tkinter中导入。
四.单元测试
1.设计测试用例方法:等价类划分
2.测试思路
由于是要测试输入是否符合要求,所以可以从输入端入手,即将输入端分为各个等价类。具体的设计如下表所示:
输入 | 有效等价类 | 无效等价类 |
遍历文件夹参数 | 1. -s | 5.不是-s的其他参数 |
停用参数 | 2. -e | 6.非-e的其他参数 |
文件匹配格式 | 3. 正规匹配 | 7.非常规文件名匹配 |
文件名 | 4. 文件名 | 8.非文件名 |
3.覆盖情况
语句覆盖,判定覆盖,条件覆盖
五.性能测试和优化
1.选择测试的工具:cProfile
1.1 cProfile的使用:python -m cProfile -o 输出参数 测试脚本 输入参数1 参数2......,如python -m cProfile -o result.txt test.py 1 2 3
2.测试和优化
2.1测试数据集思路
选用所有单元测试中的等价类和无效等价类进行进行测试,然后将各模块进行联合测试。
2.2 使用该工具的特点:
使用cProfile分析的结果可以输出到指定的文件中,但是文件内容是以二进制的方式保存的,用文本编辑器打开时乱码。所以,Python提供了一个pstats模块,用来分析cProfile输出的文件内容。减少库的引用,定位到某个特定模块。
六.参考文献
python静态代码测试:https://blog.csdn.net/fan_hai_ping/article/details/41733817
python性能优化cProfile:https://blog.csdn.net/asukasmallriver/article/details/74356771
七.个人总结
通过这次作业的实践,学会了如何借助测试工具进行代码审查,在平时编程练习时,难免会遇到自己找不出错误的情况。所以,学会借助测试工具也是很重要的,因为这样会节省自己很多的时间。在这次作业也明了一个浅显的道理,那就是两个人的力量始终要比一个人强。两个人一起编程,看待问题就会更加的透彻,全面。同时,在编程时,两个人也难免会产生分歧,在商讨谁的代码更好时,这种讨论对两个人的思维能力都是有提升的。