WorldCount代码检查与优化——软件测试第三次作业
合作者:201631062222,201631062232
代码地址:https://gitee.com/biubiubiuLYQ/ceshi_secend
本次作业链接地址:https://edu.cnblogs.com/campus/xnsy/2018softwaretest2398/homework/2187
一.互审代码情况:
1.高级功能测试:
发现的问题:无法打开result.txt,output.txt(存储输出结果)等文件,经判断这些文件都是gbk编码,原程序未指定编码格式。


修改:指定为utf-8编码,并忽略读取特殊字符的编码错误。


2.待发现
二.静态代码检查情况
1.使用的静态代码工具:Pyflakes
1.1安装:pip installpyflakes
1.2使用:pyflakes *.py
1.3简单介绍:
封装了PyFlakes,Pep8,NedBatchelder’s McCabe script三个工具。Flake8通过启动单独的flake8脚本运行所有工具,它在一个Per文件中显示告警,合并到输出中。也增加一些特征:
1)包含这行文件将被忽略:#flake8: noqa
2)结尾包含#noqa注释的行将不发布告警
3)GIT和Mercurial钩子
4)McCabe复杂度检查器
5)可以通过flake8.extension入口点扩展
2.检查结果及改正方法(只能指定某个py文件)
2.1检查结果:
提示从tkinter这个库中导入了所有的文件,无法检测到未定义的名称(*)【此为正常提示,*是导入该库所有文件】,但是'tkinter.filedialog.askdirectory没有使用,然后其他都是正常提示。提示某个变量没有定义或是从tkinter中导入。

2.2改正方法:
可以忽略,或者不全导入,而是把需要的文件导入(文件太多,不建议)。
三.单元测试
1.设计测试用例方法:等价类划分法
2.测试的模块及思路:
2.1测试基本功能模块:
2.1.2测试思路
等价类划分
| 输入 | 有效等价类 | 无效等价类 |
|
读取文件命令参数 |
①-l ②-w ③-c ④-c -w ⑤-l -c ⑥-w -c ⑦-l -w -c ⑧空 |
⑨非-l -w -o的任意其他参数 |
|
结果写入文件命令参数 |
⑩-o |
⑪非-o的其他命令 |
| 文件名 | ⑫文件名 | ⑬非文件名 |
共设计四个测试用例:
1.wc.exe -l -w -c test.txt -o output.txt,覆盖①②③④⑤⑥⑦⑧⑩⑫;
2.wc.exe -f -t test.txt,测试⑨;
3.wc.exe -l -w -c test.txt -h output.txt,测试⑪;
4.wc.exe -l -w -c test_dir,测试⑬
2.1.2覆盖情况:语句覆盖,判定覆盖,条件覆盖
2.2测试扩展功能模块:
2.1.2测试思路
等价类划分
| 输入 | 有效等价类 | 无效等价类 |
|
遍历文件夹命令参数 |
①-s |
②非-s的任意其他参数 |
|
停用次参数 |
③-e |
④非-e的其他命令 |
| 文件匹配格式 | ⑤正规匹配 | ⑥非常规符匹配 |
| 文件名 | ⑦文件名 | ⑧非文件名 |
共设计五个测试用例:
1wc.exe -s -a –c -w -l *.c –e stop.txt –o output.txt,覆盖①③⑤⑦;
2.wc.exe -s *.c,测试②;
3.wc.exe -l -w -c test.txt -t stop.txt,测试④;
4.wc.exe -s -l -w -c ☣☣,测试⑥;
5.wc.exe -s -a *.c -e test_dir,测试⑧
2.1.2覆盖情况:语句覆盖,判定覆盖,条件覆盖
2.3测试高级功能模块:
2.1.2测试思路
等价类划分
| 输入 | 有效等价类 | 无效等价类 |
|
调用界面命令参数 |
①-x |
②非-x的任意其他参数 |
共设计两个测试用例:
1wc.exe -x,测试①;
2.wc.exe -t,测试②
2.1.2覆盖情况:语句覆盖,判定覆盖,条件覆盖,路劲覆盖
四.性能测试和优化
1.选择的性能测试工具:cProfile
1.1cProfile介绍:
(1)Profile自python2.5以来就是标准版Python解释器默认的性能分析器。
(2)其他版本的python,比如PyPy里没有cProfile的。
(3)cProfile是一种确定性分析器,只测量CPU时间,并不关心内存消耗和其他与内存相关联的信息。
1.2cProfile的使用:
python -m cProfile -o 输出参数 测试脚本 输入参数1 参数2......,如python -m cProfile -o result.txt test.py 1 2 3
2.测试和优化:
2.1测试数据集思路:
选用所有单元测试中的等价类和无效等价类进行进行测试,然后将各模块进行联合测试。
2.2优化前后性能指标:
2.2.1优化前:系统是否满足预期的性能需求。
2.2.2优化后:判断系统是否满足预期的性能需求;寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题; 判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能。(是否满足上线性能要求?系统极限承载如何?系统稳定性如何?)
2.3优化的设计思路:
减少了库的引用,定位到某个要用的模块,而不是整个引用,优化判断分支,减少了判断次数,提高效率,同时减小重复性。
五.参考文章:
1.Python静态检查工具:https://blog.csdn.net/fan_hai_ping/article/details/41733817
2.cProfile的使用:https://blog.csdn.net/u010453363/article/details/78415553?utm_source=blogxgwz4
WorldCount代码检查与优化——软件测试第三次作业的更多相关文章
- 软件测试第三次作业——7.使用下面方法printPrimes()完成后面的问题(a)~(f)
(a)控制流图如下: (b)令MAXPRIMES=4,会出现越界错误. (c)令n=1,不会经过while循环体. (d)节点覆盖:{1,2,3,4,5,6,7,8,9,10,11,12,13,14, ...
- python实现WordCount(第三次作业)
0x00 注明 合作者:201631062315 201631062310 代码地址:https://gitee.com/c1e4r/word-count2 作业地址:https://edu.cnbl ...
- C高级第三次作业
C高级第三次作业(1) 6-1 输出月份英文名 1.设计思路 (1)算法: 第一步:定义整型变量n,字符指针s,输入一个数赋给n. 第二步:调用函数getmonth将值赋给s. 第三步:在函数getm ...
- Java初学者最近三次作业的心得体会
作为一个初学者,简单的谈一下自己的作业心得体会.如果你是完全没有接触过Java的学习,本篇博文可能会有些收获,如果你已经学习Java有一段时间了,那么可以放弃这篇文章了,因为这篇文章讲解的是基本的东西 ...
- Android ------ 美团的Lint代码检查实践
概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...
- FindBugs:Java 静态代码检查
在使用 Jenkins 构建 Java Web 项目时候,有一项叫做静态代码检查,是用内置的 findBugs 插件,对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查. 安全缺陷检测 ...
- 移动开发:美团外卖Android Lint代码检查实践
概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...
- iOS开发UI篇—从代码的逐步优化看MVC
iOS开发UI篇—从代码的逐步优化看MVC 一.要求 要求完成下面一个小的应用程序. 二.一步步对代码进行优化 注意:在开发过程中,优化的过程是一步一步进行的.(如果一个人要吃五个包子才能吃饱,那么他 ...
- java 命名代码检查-注解处理器
命名代码检查 根据 <Java 语言规范( 第 3 版 ) > 中第6.8节的要求, Java 程序命名应当符合下列格式的书写规范: 类 ( 或接口 ) : 符合驼式命名法, 首字母大写. ...
随机推荐
- leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- AI caffe
caffe,是一个深度学习框架. Blob 存储数据. 批量图像数据(n, k, h, w):图像数量,图像通道,图像高度,图像宽度. data:值 diff:梯度 Layer data_layers ...
- 在Ubuntu上快速搭建基于Beego的RESTful API
最近在研究Go,打算基于Go做点Web API,于是经过初步调研,打算用Beego这个框架,然后再结合其中提供的ORM以及Swagger的集成,可以快速搭建一个RESTful API的网站. 下面是具 ...
- Linux下配置mysql远程访问
1 编辑mysql的配置文件 mysqld.cnf root@iZwz99xkrnh5xye3zgi4btZ:~# vi /etc/mysql/mysql.conf.d/mysqld.cnf 2 把 ...
- mysql中添加索引
创建普通索引 alter table xxxxxx add index index_name(xxxxxxx) 表名↑ 列 ...
- 深入理解Redis Cluster
Redis Cluster采用虚拟槽分区,所有的key根据哈希函数映射到0~16383槽内,计算公式: slot = CRC16(key) & 16383 每个节点负责维护一部分槽以及槽所映射 ...
- Python股票分析系列——数据整合.p7
欢迎来到Python for Finance教程系列的第7部分. 在之前的教程中,我们为整个标准普尔500强公司抓取了雅虎财经数据. 在本教程中,我们将把这些数据组合到一个DataFrame中. 到此 ...
- koa-router
为了处理URL,我们需要引入koa-router这个middleware,让它负责处理URL映射. 我们把上一节的hello-koa工程复制一份,重命名为url-koa. 先在package.json ...
- 割顶树 BZOJ1123 BLO
无向图中,求去掉点x[1,n]后每个联通块的大小. 考虑tarjan求bcc的dfs树,对于每个点u及其儿子v,若low[v]<prv[u],则v对u的父亲联通块有贡献,否则对u的子树有贡献.每 ...