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%,大于设定的阈值,可以判定冒泡排序和快速排序为相似程
   71   72   73   74   75   76   77   78   79   80   81