摘要:
软件测试作为软件开发中的重要环节,其重要程度不言而喻,从需求定制到软件交付,不仅要保证软件在功能上的要求,同时也要满足性能需求。毕竟,客户体验才是软件赖以生存的基石。本篇文章主要讲述了如何使用 SourceMonitor 这款软件完成最基本的静态测试,整个流程比较简单。
一、软件安装
由于本次实验是基于SourceMonitor这款软件完成的,所以需要先下载相应的安装包,网上搜索一下就很容易找得到。
如果懒得找,小编将其上传到了我们的博客平台,里面不仅有软件的安装包,还有一套基于C++的源码,非常划算,这里放一下资源的链接:https://download.csdn.net/download/qq_37372196/11130535。
软件的整个安装过程基本没什么问题,不认识的英文单词查一下即可解决。
二、认识软件
尽管软件的安装比较简单,但是其使用对于初学者来说还是比较迷茫的。
个人觉得有两大原因:其一是软件的界面为全英文,辨识起来比较费力;其二是我们对于软件测试的理解不够深刻,远远没有掌握到软件测试这门技术的本质。
软件的初始界面较空,其创建项目时的界面如下:
三、使用软件
我们依次进行以下步骤即可:选择测试文件类型,设置项目名称和路径,选择我们将要测试的目录,项目保存的格式。
而后我们会到达如下界面,这时我们设置一下 项目名称 和 项目路径 就可以了。
接下来我们需要选择要进行测试的 文件列表 了,既然是文件列表,那自然是可以选择一个或多个文件。(这里我们暂时先将项目目录里所有的文件都选中)
最后点击ok,我们的操作步骤就算是基本完成了。
四、结果分析
前面我们提到过此软件的 两大难点 ,我们既然已经操作完成了,那么也就相当于解决了其一。
那其二怎么解决?我想,答案就在我们对于实验结果的分析和理解了。
在进行完上述操作后,我们看到的应该是如下界面:
这样一个界面,只有一行,因为我们只选择了一个项目目录。我们先简单对这个结果进行分析一下:
第一项为Checkpoint Name,也就是检查点的名称,其值为Baseline,为什么值是这个呢?因为这是我们自己之前设置的,看一下步骤三的第二张图片就清楚了;
第二项为项目创建时间,第三项为项目目录下的文件,比较简单,这里不再展开解释;
第四项为Lines,代表此项目目录下所有文件的行数之和,其值为428,说明我们选择的项目目录下四个文件的行数加起来是428。究竟是不是这样呢,小编计算了一下:329+37+35+27=428,刚好吻合。
后面的指标相对来说更加重要,我们就不分析总的这部分了,因为点进去以后我们可以看到每个文件的详细情况,以进行更加精准的分析。
点进去后我们会看到这样一个界面:
很明显这样一个界面是把测试单位由项目转变为了单个文件,接下来我们逐个进行分析:
(1)Lines,代表此文件代码的行数(包括空行);
(2)Statements,代表此文件所拥有的语句数;
在C++中,语句是以分号结尾的。分支语句if,循环语句for、while,跳转语句goto都被计算在内,预处理语句#include、#define和#undef也被计算在内,对其他的预处理语句则不作计算,在#else和#endif、#elif和#endif之间的语句将被疏忽;
(3)%Branches,完整的写法是Percent Branch Statements,代表分支语句占语句数目的比例。
这里的“分支语句”指的是使程序不顺序履行的语句,包括if、else、for、while、break、continue、goto、switch、case、default和return。需要注意的是,do不被计算在内,由于其对应的while已计算了。另外,异常处理的catch也被作为1个分支计算;
(4)%Comments,完整的写法是Percent Lines with Comments,代表注释的比例。
该值是注释行(包括/*……*/和//……形式的注释)占总行数的比例。一般公司会对每一个文档的header或footer部份进行特殊的声明注释,可以在工程属性中设置过滤,不计算在内;
(5)Class Defs,代表类的个数。
包括class,struct和template在内的个数;
(6)Methods/Class,完整的写法是Methods per Class,代表平均每一个类的方法数。
即包括内联和非内联的,template函数在内的类方法数除以所有类的个数;
(7)Avg Stmts/Method,完整的写法是Average Statements per Method,代表平均每一个函数包括的语句数目。
由总的函数语句数目除以函数数目得到该值;
(8)Max Complexity,代表最大圈复杂度。
圈复杂度是1个函数可履行路径的数目,以下语句为圈复杂度的值贡献1:if/else/for/while语句,3元运算符语句,if/for/while判断条件中的"&&"或“||”,switch语句,后接break/goto/return/throw/continue语句的case语句,catch/except语句等。对应有最大圈复杂度(Max Complexity)和平均圈复杂度(Avg Complexity);
(9)后面的几个指标:Max Depth、Avg Depth、Avg Complexity、Functions,依次代表:最大函数深度、平均函数深度、平均圈复杂度、函数数目。
这几个指标看名字基本就知道意思,这里不再赘述。
(10)其实接下来还有更详细的内容,我们双击“Main.cpp”文件,会看到如下窗口:
这里的指标我们很多都已经分析过了,这里的一个亮点就是将相关指标进行了一定程度上的联合分析,并做出了雷达图与三维柱状图,将数据进行可视化,有利于我们更直观的获取数据特征,有时甚至更容易获取潜在的比较有价值的信息,帮助我们提高软件测试的效率(其实主要是静态测试的效率)。
小结:
初次使用一定的工具进行了软件测试相关的实验。个人觉得,不仅是学会了一个工具的使用这么简单,更重要的是,加深了对于软件测试的一个整体的理解和认识。
小编目前只是博客新人,在校生一名,如果读者对小编写的还比较满意,欢迎关注支持!
如果有什么问题,也可以加小编的QQ进行交流,不过记得备注自己的信息。(QQ:1329924827)