Page 76 - 《软件学报》2021年第9期
P. 76
2700 Journal of Software 软件学报 Vol.32, No.9, September 2021
3) 关键字流图的节点代表程序中的基本块,用关键字流图比较程序的相似性比较方便.而不在源代码上
直接比较关键字是否相似,因为从源代码上比较关键字是以行代码为单位,容易造成程序代码的书写
格式不同带来的误差.
例如,图 7 为冒泡排序另一种编写方式的部分代码,由于编程习惯不同,有些程序员会把第 2 行~第 4 行代码
写成“int t, i, j;”,两种书写方式功能完全相同.第 2 行~第 4 行代码的作用是定义整型变量,属于一个基本块,会生
成关键字流图的一个节点.而基于源代码进行关键字比较时,则会因为不同的书写格式造成不同的结果.
1 public void bubbleSort(int array[⋅]) {
2 int t=0;
3 int i=0;
4 int j=0;
5 for (i<array.length−1; i++)
6 for (j<array.length−1−i; j++)
Fig.7 Partial source code of bubble sorting program
图 7 冒泡排序部分源代码
2.6 程序相似性检验插件的原型
插件服务于软件项目主体,有效地扩展和完善了寄主软件的功能 [24] .基于本文第 2.2 节~第 2.4 节程序相似
度比较的方法,开发了一个检测程序相似程度的插件,如图 8 所示.此插件的制作,方便了程序相似性的比较.下
一节探究相似程序间测试用例重用的问题,其前期工作就是需要判断程序之间的相似程度,此插件将减少了判
断程序相似性的工作.
插件的开发选用 Java 作为编辑语言,开发环境为 MyEclipse 2010.计算机配置为 Windows(Intel(R) Core
(TM) CPU i5-6500,3.20GHz,8.00GB RAM,64 位操作系统.图 8 为检测程序相似程度的插件运行界面.
Fig.8 Plug-in for detecting program similarity
图 8 检测程序相似性的插件
按钮“Select program 1”和按钮“Select program 2”是两个选择待测程序的按钮,测试程序的相似度时,分别
点击这两个按钮选择待测程序所在的文件,实验选择的待测程序为冒泡排序与快速排序.点击“Testing”按钮,将
以百分数的形式显示两个待测程序的相似度.
通过检测,冒泡排序与快速排序的相似度为 80%,大于设定的阈值,可以判定冒泡排序和快速排序为相似程