技术领域
[0001] 本发明涉及计算机软件分析系统、客户端计算机、控制客户端计算机的操作的方法以及用于操作客户端计算机的程序。
相关背景技术
[0002] 近年来,用于分析软件的技术已日趋成熟。例如,典型的技术涉及从源代码输出质量相关数据以及在提高质量的活动中利用该数据。这样的技术是普遍适用的,以及鉴于最近趋势走向是注重软件的内部质量,据预测,将开发各种各样这样的技术和服务。 [0003] 在软件分析技术中,对于软件分析本身需要大量的计算机资源,但是没有使这些资源关于特定软件持续操作。此外,在软件被传送的情况下,所传送的数据本身遵守源代码(文本数据),以及与图像数据和移动图像数据相比,所涉及的数据量很小。鉴于这些特征,软件分析非常有助于朝向云计算(基于网络的计算机资源的有效利用)的最近趋势。出于这个原因,所认为的是,使用基于云的软件分析系统来分析源代码的应用将在未来得到广泛使用。
[0004] 这样的软件分析包括:一个布置,其中客户端将源代码传送给服务器,以及服务器执行分析并且将分析结果发送回客户端(参见专利文献1);以及另一个布置,其中客户端生成质量测量数据并且将该数据传送给服务器,以及服务器基于该质量测量数据来生成评估数据并且将该评估数据发送回客户端(参见专利文献2)。
[0005] 另一方面,混淆(obfuscation)被认为是维护源代码的安全性的手 段。出于阻碍第三方软件分析的目的,混淆通常将加扰形式应用到软件代码到将不会改变其行为的程度。例如,反向利用易于理解的名称附加到源代码描述中的实践来用难以理解的名称替代这些名称,从而使分析复杂化(参见专利文献3)。
[0006] 此外,存在用于以下的技术:阻止包括在程序中的技术保密的泄漏(参见专利文献4);在软件开发期间对协议的遵守进行监视(参见专利文献5);识别程序问题等(参见专利文献6)以及在对象级实现隐藏(参见专利文献7)。
[0007] [专利文献1]日本专利申请特开No.2004-240477
[0008] [专利文献2]日本专利申请特开No.2001-75928
[0009] [专利文献3]USP 6,102,966
[0010] [专利文献4]日本专利申请特开No.2004-133793
[0011] [专利文献5]日本专利申请特开No.2003-131875
[0012] [专利文献6]日本专利申请特开No.2003-114813
[0013] [专利文献7]日本专利申请特开No.2003-280754
[0014] 然而,将源代码传送给基于云的服务器意味着通过公共网络传送源代码。尽管对源代码进行加密是可想到的,但是分析服务器对源代码进行解密的事实意味着服务器将得知源代码的内容。在专利文献1中描述的现有技术将不确保源代码的安全性。在专利文献2中阐述的系统具有多个问题。例如,要求客户端具有质量测量功能,以及必须对在客户端和服务器之间的特定交换数据格式达成协议。另外,没有考虑已从服务器被发送回的数据与原始源代码的详细核对。此外,在期望添加分析所需的软件信息的情况下,必须修改客户端。在分析所需的软件信息已被添加的情况下,源代码的安全性受到影响。在专利文献3中描述的布置具有某些问题,即没有考虑与服务器/客户端型分析系统的联接的事实以及没有考虑混淆名称的恢复的事实。此外,专利文献4至7中描述的布置,没有考虑能够维护源代码的安全性的服 务器/客户端型分析系统。
具体实施方式
[0070] 现将参考附图详细描述本发明的实施例。
[0071] 图1图示根据本发明的实施例的计算机软件分析系统。
[0072] 计算机软件分析系统包括能够经由诸如因特网的网络(但是网络不限于因特网)相互通信的客户端计算机1和服务器计算机20。
[0073] 图2是图示客户端计算机1的电气配置的框图。服务器计算机20的电气配置与客户端计算机1的电气配置基本上相同。
[0074] 客户端计算机1的总体操作由CPU 2控制。
[0075] 客户端计算机1包括:显示单元3;用于存储规定的数据的存储器4;用于与服务器计算机20通信的通信单元5;输入单元6,诸如键盘;CD-ROM驱动器7;硬盘10;以及用于访问硬盘10的硬盘驱动器9。
[0076] 通过将CD-ROM 8插入CD-ROM驱动器7,读取已被存储在CD-ROM 8上的数据和计算机软件。稍后描述的用于控制操作的控制程序已被存储在CD-ROM 8上。通过将该控制程序安装在客户端计算机1中,执行稍后描述的操作。当然,控制程序可以被记录在另一个记录介质上,而不是被存储在CD-ROM 8上。已经由因特网传送的控制程序可以使用通信单元5来接收并且被安装在客户端计算机1中。
[0077] 图3是图示客户端计算机1所执行的处理的流程图,以及图4是图示服务器计算机20所执行的处理的流程图。
[0078] 本实施例对计算机软件(源代码)质量进行分析,诸如代码行数、内聚力、复杂性和连通性,以及在服务器计算机20中执行对这样的质量的分析。在客户端计算机1中以在服务器计算机20中不能查明分析的结果这样的方式,执行对计算机软件的混淆,以及将混淆的计算机软件从客户端计算机1传送给服务器计算机20。
[0079] 首先,将待经受分析的原始计算机软件(源代码)输入到客户端计算机1(图3中的步骤31)。如上所述,待分析的计算机软件已被存储在CD-ROM 8上,并且可以通过从CD-ROM8对其进行读取来输入到客户端计算机1。经由因特网传送的计算机软件可以使用通信单元5来接收,并且然后被输入到客户端计算机1。
[0080] 图5是原始计算机软件的示例。
[0081] 图5中的计算机软件的第一行表明类,以及第二行是函数的示例。
[0082] 当将经受分析的原始计算机软件被输入到客户端计算机1时,使计算机软件混淆(图3中的步骤32)。混淆可以利用众所周知的方法,诸如用随机字符串替换在计算机软件中使用的标识符。还生成用于将混淆的计算机软件恢复成在混淆之前占优的计算机软件的恢复表(图3 中的步骤32)。
[0083] 图6是混淆的计算机软件的示例。
[0084] 图5中所示的原始计算机软件与图6中所示的混淆的计算机软件的比较清晰示出图5中所示的原始计算机软件的第一行的名称“Shape(形状)”已被转换成图6中所示的混淆的计算机软件中的字符串“Zall2ay”。类似地,图5中的原始计算机软件的第二行的函数“Result Movepoint(int x,int y)”已被转换成图6中的字符串“kop89 S5df5f41(int sdfj,int js11)”。
[0085] 图7是恢复表的示例。
[0086] 恢复表可以通过将图5中所示的原始软件和图6中所示的混淆的计算机软件进行比较来生成。
[0087] 恢复表的左边的列指示包含在图5中所示的原始计算机软件中的程序元素。恢复表的右边的列指示包含在图6中所示的混淆的计算机软件中的程序元素。在混淆之前和之后的程序元素可以通过将恢复表的左边的列中的字符串与右边的列中的字符串进行比较来查明。将理解的是,可以通过使用恢复表,将混淆的计算机软件恢复成在混淆之前占优的原始计算机软件。
[0088] 当原始计算机软件被混淆时,在显示单元3的显示屏上显示图6中所示的混淆的计算机软件(图3中的步骤33)。当检查在显示屏上显示的混淆的计算机软件时,用户从输入单元6输入传送命令。作为响应,将混淆的计算机软件从客户端计算机1传送给服务器计算机20(图3中的步骤34)。在用户确认计算机软件已被混淆之后,可以将混淆的计算机软件传送给服务器计算机20。
[0089] 当接收了从客户端计算机1传送的混淆的计算机软件(图4中的步骤41)时,服务器计算机20执行用于对已被接收的混淆的计算机软件的质量进行分析的处理(图4中的步骤42)。质量分析处理可以采用众所周知的方法。作为质量分析处理的结果,获取表示例如混淆的计算机软件的复杂性的分析结果数据。由于关于混淆的计算机软件执行质量分析处理,所以分析结果数据也将具有混淆的形式。
[0090] 图8是混淆的分析结果数据的表的示例。
[0091] 混淆的分析结果数据表的左边的列指示混淆的计算机软件的程序元素。表的右边的列指示分析结果(复杂性)。根据混淆的分析结果数据的表,将理解的是,程序元素“Za112ay”的复杂性是24,以及程序元素“kop89 S5df5f41(int sdfj,intjs11)”的复杂性是7。
[0092] 由于已关于混淆的计算机软件执行了质量分析,所以关于分析结果与哪种类型的程序元素有关不能查明,因此,确保了计算机软件的安全性。
[0093] 将混淆的分析结果数据从服务器计算机20传送给客户端计算机1(图4中的步骤43)。
[0094] 当客户端计算机1接收到从服务器计算机20传送的混淆的分析结果数据(图3中的步骤36)时,使用恢复表(参见图7)来恢复混淆的分析结果数据中的至少一部分(图3中的步骤37)。
[0095] 图9是指示恢复的分析结果数据的分析结果数据表的示例。
[0096] 恢复的程序元素被包含在分析结果数据表的左列中。作为分析结果的复杂性被包含在该表的与程序元素相关联的右列中。由于程序元素已被恢复,所以每一个程序元素的复杂性可以被辨识。
[0097] 客户端计算机1如通过在显示屏上显示所恢复的分析结果数据来输出所恢复的分析结果数据(图3中的步骤38)。
[0098] 图10至19图示本发明的另一个实施例。在本实施例中,将用于在服务器计算机20中控制计算机软件的质量分析的分析控制数据从客户端计算机1传送给服务器计算机
20,以及由服务器计算机20基于该分析控制数据来控制计算机软件的质量分析。 [0099] 图10是图示客户端计算机1所执行的处理的流程图,以及图11是图示服务器计算机20所执行的处理的流程图。
[0100] 将原始计算机软件输入到客户端计算机(图10中的步骤51)。
[0101] 图12是原始计算机软件的示例。将这样的原始计算机软件输入到客户端计算机1。不用说,图12中所示的原始计算机软件是部分缩略的。
[0102] 接着,客户端计算机1的用户将分析控制数据输入到客户端计算机1(图10中的步骤52)。分析控制数据控制在服务器计算机20中执行的质量分析。分析控制数据包括分析项,诸如包含在计算机软件中的程序元素行数以及程序元素的分组。接着,关于已被输入的分析控制数据执行用于识别混淆是否是必要的处理(图10中的步骤53)。 [0103] 用于识别分析控制数据的混淆是否是必要的处理使用分析控制数据混淆识别表。 [0104] 图13是分析控制数据混淆识别表的示例。
[0105] 分析控制数据混淆识别表的左边的列包含分析控制数据的名称, 以及该表的右边的列包含混淆的必要性。尽管在左边的列中指示了“分析项(ANALYTICAL ITEM)”、“分析组(ANALYTICAL GROUP)”和“分析组组分(ANALYTICAL GROUP COMPOSITION)”,但是不用说,该表也包含关于除这些数据项外的分析控制数据,混淆是否是必要的。“分析项”指定分析的目标,以及“分析组”以“分析组组分”的程序元素将被组成“分析组”这样的方式来控制计算机软件。
[0106] 图14是在混淆之前的分析控制数据的表的示例。
[0107] 假设“行数(NUMBER OF LINES)”已被指派为“分析项”,“ConcreteShape”已被指派为“分析组”,以及“Circle(圆形)”和“Rectangle(矩形)”每一个已被指派为“分析组组分”。当参考图13中所示的分析控制数据混淆识别表时,可以确定“行数”的混淆是不必的,以及“Circle”和“Rectangle”的混淆是必要的,因为“分析项”的混淆是不必的,以及“分析组”和“分析组组分”的混淆是必要的。
[0108] 当执行用于识别分析控制数据的混淆是否是必要的处理时,执行原始计算机软件的混淆,以及通过相同处理,同样执行被识别为需要混淆的分析控制数据的混淆(图10中的步骤54)。不用说,也生成了恢复表。
[0109] 图15是混淆的计算机软件的示例。
[0110] 由于图12中所示的原始计算机软件的混淆,原始计算机软件的“Shape”、“Circle”和“Rectangle”被改变成图15中所示的混淆的计算机软件的“Za112ay”、“jkidLL”和“654skJI”。
[0111] 图16是已被部分混淆的混淆的分析控制数据的表的示例。
[0112] 由于分析控制数据已被混淆,所以即使分析控制数据经由因特网 从客户端计算机1被传送给服务器计算机20并且由第三方拦截,也能够维护分析控制数据的安全性。 [0113] 图17是恢复表的示例。
[0114] 以上述方式,通过将图12中所示的原始软件和图15中所示的混淆的计算机软件进行比较,以及将在图14中所示的在混淆之前的分析控制数据表中的控制数据的内容和图16中所示的混淆的分析控制数据表的控制数据的内容进行比较来生成恢复表。 [0115] 图17的恢复表的左边的列指示原始计算机软件的程序元素或分析控制数据,以及图17的恢复表的右边的列指示混淆的计算机软件的程序元素或混淆的分析控制数据。 [0116] 通过利用图17中所示的恢复表,可以将已被混淆的计算机软件和已被混淆的分析控制数据恢复成在混淆之前占优的数据。
[0117] 接着,在显示单元3的显示屏上显示混淆的计算机软件和分析控制数据(包括已被混淆和尚未被混淆的分析控制数据)(图10中的步骤55),以及按照来自用户的传送命令,将混淆的计算机软件和分析控制数据从客户端计算机1传送给服务器计算机20(图10中,步骤56处的“是”和步骤57)。
[0118] 当接收了从客户端计算机1传送的混淆的计算机软件和分析控制数据(图11中的步骤61)时,服务器计算机20基于分析控制数据来对混淆的计算机软件的质量进行分析(图11中的步骤62)。
[0119] 通过对混淆的计算机软件的质量进行分析,以上述方式获取已被混淆的分析结果数据。将混淆的分析结果数据从服务器计算机20传送给客户端计算机1(步骤63)。 [0120] 图18是已被混淆的分析结果数据的示例。
[0121] 图18中的左边的列指示程序元素或部分混淆的分析控制数据,以及右边的列指示分析结果。使用上述恢复表来恢复如此混淆的分析结果数据。
[0122] 图19是恢复的分析结果数据的示例。
[0123] 图19的左边的列指示从混淆状态恢复的程序元素和分析控制数据,以及右边的列指示分析结果。
[0124] 因此,可以从客户端计算机1控制在服务器计算机20中的对计算机软件的分析。此外,由于从客户端计算机1传送给服务器计算机20的分析控制数据已被混淆,所以可以关于第三方维护更大的安全性。
[0125] 图20至34图示本发明的进一步实施例。
[0126] 图20和21是图示客户端计算机1所执行的处理的流程图。
[0127] 以与上述相似的方式将原始计算机软件输入到客户端计算机1(图20中的步骤71)。
[0128] 图22是原始计算机软件的示例。
[0129] 由于图22中所示的原始计算机软件尚未被混淆,所以能够查明其内容。图22中所示的原始计算机软件也是部分缩略的。
[0130] 客户端计算机1从分析项列表选择分析项(图20中的步骤72),并且从混淆方法列表选择混淆方法(步骤73)。
[0131] 图23是分析项列表的示例。
[0132] 通过列出待在服务器计算机20中经受质量分析的项来获取分析项列表。分析项列表包含代码的行数和复杂性。
[0133] 图24是混淆方法列表的示例。
[0134] 混淆方法列表将下述包含为混淆方法:“名称转换”、“名称转换+过程清空”(执行用于名称转换和过程清空两者的处理)以及“名称转换+过程删除”(执行用于名称转换和过程删除两者的处理)。
[0135] 利用分析项列表和混淆方法列表来决定混淆方法。将在下面描述细节。 [0136] 当决定了混淆方法时,按照所决定的混淆方法使已被输入的原始计算机软件混淆(图20中的步骤74)。在这种情况下,也生成恢复表。
[0137] 图25至27是混淆的计算机软件的示例。
[0138] 图25是通过名称转换混淆的计算机软件的示例。
[0139] 在此,原始计算机软件的“Shape”、“Result Movepoint(int x,int,y)”、“int r2=x*x*+y*y”和“if(r2==0)”已被转换成“Za112ay”、“kop89 S5df5f41(int sdfj,int js11)”、“int jkio99=sdfj*sdfj+js11*js11”和“if(jkio99==0)”。
[0140] 图26是通过名称转换和过程清空混淆的计算机软件的示例。
[0141] 在此,原始计算机软件的“Shape”和“Result Movepoint(int x,int, y)”已被转换成“Za112ay”和“kop89 S5df5f41(int sdfj,intjs11)”。此外,“int r2=x*x*+y*y”和“if(r2==0)”中的每一个的处理内容已被清空。尽管由于清空,处理内容已被消除,但是行数未改变。通过清空添加了分号“;”。然而,混淆可以通过将诸如“if(false);”的无关软件添加到处理,而不是分号来实现。
[0142] 图27是通过姓名转换和过程删除混淆的计算机软件的示例。
[0143] 在此,原始计算机软件的“Shape”和“Result Movepoint(int x,int,y)”已被转换成“Za112ay”和“kop89 S5df5f41(int sdfj,intjs11)”。此外,“int r2=x*x*+y*y”和“if(r2==0)”中的每一个的处理内容已被删除。
[0144] 当将混淆的计算机软件从客户端计算机1传送给服务器计算机20时,在服务器计算机20中,以上述方式对混淆的计算机软件的质量进行分析,并且获取混淆的分析结果数据。将所获取的混淆的分析结果数据从服务器计算机20传送给客户端计算机1。 [0145] 当接收了从服务器计算机20传送的混淆的分析结果数据(图21中的步骤78)时,客户端计算机1对混淆的分析结果数据进行恢复来获取分析结果数据。
[0146] 图28是恢复的分析结果数据的示例。
[0147] 该数据包含代码的行数和复杂性作为分析项,以便被包括在分析项列表中,并且已关于这些分析项对质量进行了分析。例如,代码的行数是37,以及复杂性是5。 [0148] 接着,从分析数据删除尚未由如上所述的分析项选择处理(图20中的步骤72)选择的分析项数据(图21中的步骤80)。
[0149] 图29是分析结果数据的示例,其中与为尚未被选择的项的代码的行数有关的数据已被删除。
[0150] 因此,当复杂性已被选择为分析项,以及代码的行数尚未被选择时,从分析数据删除代码的行数数据。
[0151] 图30是图示用于决定混淆方法的处理(在图20中的步骤73处执行的处理)的流程图的示例。
[0152] 如上所述,读取图24中所示的混淆方法列表(步骤91),并且这后面是读取混淆方法/删除项指定表(步骤92)。
[0153] 图31是混淆方法/删除项指定表的示例。
[0154] 通过与混淆方法关联地存储计算机软件的将被移除和不被移除的程序元素来获取混淆方法/删除项指定表。例如,如果混淆方法是“名称转换”,则将移除程序元素的名称,但是不会移除条件语句和过程数。如果混淆方法是“名称转换+过程清除”,则将移除程序元素的名称和条件语句,但是不会移除步骤数。如果混淆方法是“名称转换+过程删除”,则将移除程序元素的名称和过程数,但是不会移除条件语句。
[0155] 当读取混淆方法/删除项指定表时,读取分析项/可移除项指定表(图30中的步骤93)。
[0156] 图32是分析项/可移除项指定表的示例。
[0157] 通过与分析项关联地存储计算机软件的将被移除和不被移除的程序元素来获取分析项/可移除项指定表。例如,如果分析项是代码的行数,则将移除程序元素的名称和条件语句,但是将不会移除步骤数。 如果分析项是复杂性,则将移除程序元素的名称和过程数,但是将不会移除条件语句。
[0158] 因此,当读取表时,可以从图32中所示的分析项/可移除项指定表查明与所选择的分析项(图20中的步骤72)相对应的可移除程序元素,以及从图31中所示的混淆方法/删除项指定表决定与可移除程序元素相对应的混淆方法。例如,如果“行数”被选择为分析项,则基于图32,名称和条件语句是可移除的,因此,从图31将“姓名转换+过程清除”决定为针对其这些程序元素是可移除的混淆方法。
[0159] 图33是图示用于决定混淆方法的其他处理的流程图。
[0160] 以与上述类似的方式,读取图24中所示的混淆方法列表(步骤101)。接着,读取分析项/混淆方法选择表(步骤102)。
[0161] 图34是分析项/混淆方法选择表的示例。
[0162] 分析项/混淆方法选择表与分析项关联地包含混淆方法。例如,如果分析项是代码的行数,则“名称转换+过程清空”和“名称转换”相互关联地被存储。如果分析项是复杂性,则“名称转换+过程删除”和“名称转换”相互关联地被存储。
[0163] 当读取分析项/混淆方法选择表时,根据读取的表决定混淆方法(步骤103)。例如,如果代码的行数被选择为分析项,则将“名称转换+过程清空”和“名称转换”决定为混淆方法。如果复杂性被选择为分析项,则将“名称转换+过程删除”和“名称转换”决定为混淆方法。如果代码的行数和复杂性被选择为分析项,则将“名称转换”决定为混淆方法。 [0164] 图35至39图示进一步实施例。该实施例利用过去历史来决定混 淆方法等。 [0165] 图35是图示客户端计算机1所执行的处理的流程图,以及图36是图示服务器计算机20所执行的处理的流程图。
[0166] 首先,客户端计算机1确定表示过去的软件分析设置的历史的数据是否已被存储在计算机中(图35中的步骤111)。
[0167] 图37是包含表示软件分析设置的历史的数据的表的示例。
[0168] 表示软件分析设置的历史的数据指示过去设置的状态,诸如上述有关混淆方法的决定。第一、第二和第三列分别包含源代码(软件)的名称、混淆方法模式和分析项。通过检查这些数据项,可能的是,查明在过去关于特定软件,哪些混淆方法被执行,以及在过去质量分析关于哪些分析项被执行。例如,基于第一行,关于名称“ClassA”的源代码,能够查明关于代码的行数,模式II(“名称转换+过程清空”)的混淆方法被执行。可以执行与在过去使用的混淆处理相同的混淆处理。
[0169] 如果表示软件分析设置的历史的数据尚未被存储在客户端计算机1中(图35中的步骤111处的“否”),则客户端计算机1的用户执行用于设置软件分析的处理(图35中的步骤112)。以上述方式来设置分析项和混淆方法。当这个完成时,存储设置信息作为表示软件分析设置的历史的数据(图35中的步骤113)。如果表示软件分析设置的历史的数据已被存储在客户端计算机1中(图35中的步骤111处的“是”),则跳过步骤112和113的处理。 [0170] 接着,用户选择待分析的原始计算机软件(图35中的步骤114),以及将所选择的原始计算机软件输入到客户端计算机1(图35中的步骤115)。
[0171] 以上述方式,使已被输入到客户端计算机1的原始计算机软件混淆,并且生成恢复表(图35中的步骤116)。基于图37中所示的表示软件分析设置的历史的数据来决定执行哪个混淆方法。假设输入的源代码(原始计算机软件)是“ClassA”,如上所述,使用模式II(“姓名转换+过程清空”)的混淆方法来执行混淆处理。
[0172] 通过显示混淆的计算机软件(图35中的步骤117)并且将传送命令应用到客户端计算机1,将混淆的计算机软件从客户端计算机1传送到服务器计算机20(图35中的步骤118处的“是”和步骤119)。
[0173] 当接收了从客户端计算机1传送的混淆的计算机软件(图36中的步骤121)时,服务器计算机20对过去的软件历史数据进行搜索(图36中的步骤122)。过去的软件历史数据表示服务器计算机20在过去执行的质量分析的结果。
[0174] 图38是包含过去的软件历史数据的表的示例。
[0175] 该表与源代码名称关联地包含行数和复杂性,它们是过去的质量分析的结果。如上所述,由于计算机软件已被混淆,所以其名称(源代码名称)被混淆。例如,通过使其源代码名称是“ClassA”的计算机软件混淆,源代码名称被改变成“nrBCZ12”。在图38中,行数和复杂性已与混淆的源代码名称关联地被存储在表中。
[0176] 接着,对混淆的计算机软件的质量进行分析(图36中的步骤123)。将通过质量分析获取的分析结果数据存储在包含过去的软件历史数据的表中(图36中的步骤124)。在与已经受质量分析的混淆的计算机软件有关的分析结果数据已被存储在过去的软件历史数据表中的情况下,该分析结果数据被重写。因此,过去的软件历史数据被更新。自然,其可以被布置,使得分析结果数据按照时间序列被存储,而不用 重写。通过将通过过去执行的分析获取的分析结果数据和通过重新执行的分析获取的分析结果数据进行比较,可以查明分析结果已改变的程度。
[0177] 图39是包含比较数据的比较数据表的示例,该比较数据表示通过在过去执行的分析获取的分析结果数据和通过重新执行的分析获取的分析结果数据之间的比较。 [0178] 如上所述,通过将通过在过去执行的分析获取的分析结果数据和通过重新执行的分析获取的分析结果数据进行比较,可以查明分析结果已改变的程度。图39中的表包含指示以下的数据:在过去执行的行数的分析的结果和重新执行的行数的分析的结果之间的波动;以及在过去执行的复杂性的分析的结果和重新执行的复杂性的分析的结果之间的波动。因此,可以获取与过去的分析结果的比较的结果。
[0179] 将混淆的分析结果数据项和表示与过去的分析结果的比较的结果的数据项从服务器计算机20传送给客户端计算机1(图36中的步骤125)。
[0180] 因为在不背离本发明的精神和范围的情况下,可以作出本发明的许多显然大不相同的实施例,所以应当理解的是,除在所附权利要求中限定的外,本发明并不限于本发明的特定实施例。