CN109710306B - 源代码解析装置、源代码解析方法、计算机可读记录介质 - Google Patents

源代码解析装置、源代码解析方法、计算机可读记录介质 Download PDF

Info

Publication number
CN109710306B
CN109710306B CN201811243196.1A CN201811243196A CN109710306B CN 109710306 B CN109710306 B CN 109710306B CN 201811243196 A CN201811243196 A CN 201811243196A CN 109710306 B CN109710306 B CN 109710306B
Authority
CN
China
Prior art keywords
program
information
source code
threshold
relevance
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811243196.1A
Other languages
English (en)
Other versions
CN109710306A (zh
Inventor
市井诚
加藤正恭
利国爱
川上真澄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of CN109710306A publication Critical patent/CN109710306A/zh
Application granted granted Critical
Publication of CN109710306B publication Critical patent/CN109710306B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供一种源代码解析装置、源代码解析方法、计算机可读记录介质,其能够判断程序要素是否具备问题特征。源代码解析装置具备:程序关联性分析部,其解析源代码来对源代码内包含的程序要素彼此的关联性进行分析,生成程序关联性指标信息;逻辑耦合分析部,其使用源代码的变更履历,生成表示容易同时变更的程序要素的组合的信息即逻辑耦合信息;评价部,其至少根据逻辑耦合信息,针对每个程序要素生成包含与源代码的品质有关的评价值的程序要素信息;反模式检测部,其生成反模式信息,该反模式信息用于表示逻辑耦合信息中包含的程序要素中的程序要素信息和程序关联性指标信息分别满足预定条件的程序要素;以及输出部,其输出反模式信息。

Description

源代码解析装置、源代码解析方法、计算机可读记录介质
技术领域
本发明涉及一种源代码解析装置、源代码解析方法、计算机可读记录介质。
背景技术
近年来,在软件开发中,通过扩展或变更已开发的母体软件来开发新软件的衍生开发成为主流。在软件的衍生开发中,由于多年以来反复进行功能扩展或变更,软件变得复杂、源代码的可读性容易下降。为了解决这种状况,通常进行软件的重构。重构是指不改变软件行为而变更其内部结构。如果适当地重构维护性低的函数、类、文件等程序结构要素(以下,称为“程序要素”),则容易扩展或变更软件。在支持重构的技术中存在反模式。反模式是指将维护性低的程序要素所具有的特征(以下,称为“问题特征”)以及具有该问题特征的程序要素的重构方法的模式进行了汇总。在重构对象软件中,如果能够确定具有反模式所示那样的问题特征的程序要素,则可通过应用反模式来进行重构。
在专利文献1中公开了一种源代码评价系统,该源代码评价系统对于在系统中使用的程序进行分析,提取该程序的反模式,该源代码评价系统具有:根据与包含上述系统的源代码的运转有关的信息来测量度量的单元;根据上述测量出的度量,使用表示其复杂性的指标来评价上述源代码是否适合反模式;以及关于上述评价的结果,计算并提示上述源代码的重构优先级。
在专利文献1记载的发明中,难以判断程序要素是否具备问题特征。
专利文献1:日本特开2016-143107号公报
发明内容
本发明的第一方式的源代码解析装置具备:程序关联性分析部,其解析源代码来对上述源代码内包含的程序要素彼此的关联性进行分析,生成程序关联性指标信息;逻辑耦合分析部,其使用上述源代码的变更履历,生成表示容易同时变更的上述程序要素的组合的信息即逻辑耦合信息;评价部,其至少根据上述逻辑耦合信息,针对每个上述程序要素生成包含与上述源代码的品质有关的评价值的程序要素信息;反模式检测部,其生成反模式信息,该反模式信息用于表示上述逻辑耦合信息中包含的上述程序要素中的上述程序要素信息和上述程序关联性指标信息分别满足预定条件的上述程序要素;以及输出部,其输出上述反模式信息。
本发明的第二方式的源代码解析方法包含以下步骤:由计算机解析源代码来分析上述源代码中包含的程序要素彼此的关联性,生成程序关联性指标信息;由计算机使用上述源代码的变更履历,生成表示容易同时变更的上述程序要素的组合的信息即逻辑耦合信息;由计算机至少根据上述逻辑耦合信息,针对每个上述程序要素生成包含与上述源代码的品质有关的评价值的程序要素信息;由计算机生成反模式信息,该反模式信息表示上述逻辑耦合信息中包含的上述程序要素中的上述程序要素信息和上述程序关联性指标信息分别满足预定条件的上述程序要素;以及从计算机输出上述反模式信息。
本发明的第三方式的计算机可读存储介质,其存储了使计算机执行以下步骤的源代码解析程序:解析源代码来分析上述源代码中包含的程序要素彼此的关联性,生成程序关联性指标信息;使用上述源代码的变更履历,生成表示容易同时变更的上述程序要素的组合的信息即逻辑耦合信息;至少根据上述逻辑耦合信息,针对每个上述程序要素生成包含与上述源代码的品质有关的评价值的程序要素信息;生成反模式信息,该反模式信息表示上述逻辑耦合信息中包含的上述程序要素中的上述程序要素信息和上述程序关联性指标信息分别满足预定条件的上述程序要素;以及输出上述反模式信息。
根据本发明,能够判断程序要素是否具备问题特征。
附图说明
图1是源代码解析装置10的硬件结构图。
图2是第一实施方式的源代码解析装置10的功能结构图。
图3是表示程序要素变更履历106的一例的图。
图4是表示购物篮解析阈值107的一例的图。
图5是表示变更依存关系规则114的一例的图。
图6是表示图模式匹配逻辑110的一例的图。
图7是表示逻辑耦合图116的一例的图。
图8是表示反模式图118的一例的图。
图9是表示程序要素信息117的一例的图。
图10是表示图参数阈值112的一例的图。
图11是表示软件度量阈值111的一例的图。
图12是表示参数逻辑式113的一例的图。
图13是表示软件度量取得逻辑109的一例的图。
图14是表示软件度量信息115的一例的图。
图15是表示程序关联性指标取得逻辑125的一例的图。
图16是表示程序关联性指标信息120的一例的图。
图17是表示程序关联性阈值121的一例的图。
图18是表示逻辑耦合分析部101的动作的流程图。
图19是表示程序解析部102的动作的流程图。
图20是表示程序关联性分析部119的动作的流程图。
图21是表示逻辑耦合图生成部103的动作的流程图。
图22是表示图21的S1303的详细的流程图。
图23是表示图21的S1308的详细的流程图。
图24是表示反模式检测部104的动作的流程图。
图25是表示程序关联性阈值121的不同例子的图。图25(a)是表示使用既有的关联属性标识符的一例的图。图25(b)是表示不使用既有的关联属性标识符的一例的图。
图26是第二变形例的源代码解析装置10的功能结构图。
图27是表示输入用户接口2700的一例的图。
图28是表示输入输出用户接口3900的一例的图。
图29是第三实施方式的源代码解析装置10的功能结构图。
图30是表示购物篮解析期待值124的一例的图。
图31是表示购物篮解析阈值导出部123的动作的流程图。
具体实施方式
第一实施方式
以下,参照图1~图24说明源代码解析装置的第一实施方式。
(硬件结构)
图1是表示源代码解析装置10的硬件结构的图。源代码解析装置10为用于软件系统的开发、维护等的信息处理装置,即为计算机。源代码解析装置10也可以像由云系统提供的云服务器等那样虚拟地实现。即,可以通过由多个计算机协同地进行动作来实现其功能。
如图1所示,源代码解析装置10具备处理器11、主存储装置12、辅助存储装置13、输入装置14、输出装置15以及通信装置16。这些装置经由未图示的总线等通信单元可相互通信地进行连接。
处理器11例如使用CPU(Central Processing Unit:中央处理器)、MPU(MicroProcessing Unit:微处理器)构成。处理器11读取并执行存储于主存储装置12、辅助存储装置13的程序,由此实现后述的功能。主存储装置12为存储程序、数据的装置,例如为ROM(Read Only Memory:只读存储器)、RAM(Random Access Memory:随机存取存储器)以及非易失性半导体存储器(Non Volatile Ram)等。
辅助存储装置13例如为硬盘驱动器、SSD(Solid State Drive:固态驱动器)、光学式存储装置(CD(Compact Disc)、DVD(Digital Versatile Disc)等)、存储系统、IC卡、SD存储卡、光学式记录介质等记录介质的读取/写入装置、云服务器的存储区域等。存储于辅助存储装置13的程序、数据随时被读取到主存储装置12。
输入装置14例如为键盘、鼠标、触摸面板、读卡器、声音输入装置等。输出装置15为向用户提供处理经过、处理结果等各种信息的用户接口,例如为画面显示装置(液晶显示器、图形卡等)、声音输出装置(扬声器等)、打印装置等。此外,例如也可以构成为源代码解析装置10经由通信装置16与其它装置之间进行信息的输入、输出。
通信装置16为经由LAN、因特网等通信单元实现与其它装置之间的通信的有线方式或无线方式的通信接口,例如为NIC(Network Interface Card:网络接口卡)、无线通信模块、USB(Universal Serial Interface:通用串行接口)模块、串行通信模块等。
(功能结构)
图2是源代码解析装置10的功能结构图。作为源代码解析装置10的功能,源代码解析装置10具备逻辑耦合分析部101、程序解析部102、逻辑耦合图生成部103、反模式检测部104、信息存储部105以及程序关联性分析部119。这些功能例如通过处理器11读取并执行存储于主存储装置12、辅助存储装置13的程序来实现。另外,这些功能例如也可以通过源代码解析装置10所具备的硬件,例如ASIC等来实现。其中,信息存储部105通过主存储装置12或者辅助存储装置13来实现。另外,在源代码解析装置10中,在后述的处理过程中生成变更依存关系规则114、软件度量信息115、逻辑耦合图116、程序要素信息117以及程序关联性指标信息120。将这些生成的信息存储在信息存储部105。
此外,在图2中,程序关联性指标信息120在源代码解析装置10的内部和外部总共表示了两个,但是两者相同。存在于源代码解析装置10内部的程序关联性指标信息120表示存储在信息存储部105中。存在于源代码解析装置10外部的程序关联性指标信息120表示从输出装置15输出。
为了进行后述的处理,源代码解析装置10读入在辅助存储装置13中存储的信息,即程序要素变更履历106、购物篮解析阈值107、源代码108、软件度量取得逻辑109、图模式匹配逻辑110、软件度量阈值111、图参数阈值112、参数逻辑式113、程序关联性阈值121以及程序关联性指标取得逻辑125。而且,源代码解析装置10从输出装置15输出反模式图118和程序关联性指标信息120。以下,首先,说明源代码解析装置10读入的信息以及源代码解析装置10生成的信息,然后说明源代码解析装置10的动作。
(程序要素变更履历106)
图3是表示程序要素变更履历106的一例的图。程序要素变更履历106由一个以上的记录构成。在程序要素变更履历106的各记录中记录了在作为解析对象的源代码108的程序中产生的变更的履历。该记录在每次产生变更时记录为新的记录。各记录由为了识别记录而唯一地赋予的变更编号301以及存储程序中的全部已变更的要素的变更程序要素名称302构成。例如,附图标记303所示的第一个记录表示变更编号301为“1”,在变更程序要素名称302中记载的程序要素A、程序要素B、程序要素C的程序要素已被同时变更。
在程序要素变更履历106中例如可以使用对作为解析对象的程序进行版本管理的版本管理系统的变更履历信息。在该情况下,在一般的版本管理系统中以文件为单位进行版本管理,因此作为解析对象的程序要素的种类成为文件。另外,在程序要素变更履历106中也可以使用根据程序结构信息将变更履历信息变换为函数单位、类(class)单位或者文件单位的变更履历信息而得到的变更履历信息。在该情况下,作为解析对象的程序要素的种类成为函数、类或文件。
(购物篮解析阈值107)
图4是表示购物篮解析阈值107的一例的图。在购物篮解析阈值107中记录在逻辑耦合分析部101进行购物篮解析时使用的阈值。此外,在此所说的购物篮解析是指解析程序要素变更履历106来提取容易同时变更的程序要素的组合的处理。购物篮解析阈值107由多个记录构成,各记录由规则评价值名称401和阈值402构成。在图4所示的例子中表示了支持度403、置信度404以及提升值405这三个规则评价值。在阈值402中设定0以上且1以下的值。
(变更依存关系规则114)
图5是表示变更依存关系规则114的一例的图。在变更依存关系规则114中存储由逻辑耦合分析部101进行购物篮解析而得到的结果,即容易同时变更的程序要素的顺序对。变更依存关系规则114由一个以上的记录构成,各记录由规则编号501、变更对象程序要素名称502、同时变更程序要素名称503以及程序关联属性505构成。
规则编号501是为了识别各记录而唯一赋予的编号。变更对象程序要素名称502为作为变更对象的程序要素名称。同时变更程序要素名称503为与变更对象程序要素名称502同时变更的程序要素名称。即,表示具有在变更了变更对象程序要素名称502的情况下,同时变更程序要素名称503也同时变更的趋势。此外,不用管是否具有在变更了同时变更程序要素名称503的情况下,将变更对象程序要素名称502变更的趋势。程序关联属性505使用如后所述计算出的程序关联性指标的值和后述的程序关联性阈值121来导出,表示与该程序要素的组合相对的程序关联性指标的值是否满足程序关联性阈值121所示的预定条件。此外,设为在逻辑耦合分析部101进行购物篮解析之前,将变更依存关系规则114初始化为未登记记录的状态。
(图模式匹配逻辑110)
图6是表示图模式匹配逻辑110的一例的图。在图模式匹配逻辑110中记录逻辑,该逻辑用于取得在逻辑耦合图生成部103作出的逻辑耦合图116中,针对图的每个顶点决定值的图参数值。针对所取得的图参数的每个种类作出图模式匹配逻辑110,该图模式匹配逻辑110由图参数名称601和图模式匹配逻辑主体602构成。在图参数名称601中存储图参数的种类,在图6所示的例子中,图参数的种类为“入度”。图参数的种类可以使用有向图的顶点的入度或出度等通常以图论进行定义的种类。图模式匹配逻辑主体602的记述并没有限制,例如可以通过可执行的编程语言、脚本进行记述。
(逻辑耦合图116)
图7是表示逻辑耦合图116的一例的图。逻辑耦合图116为逻辑耦合图生成部103作出的有向图。在逻辑耦合图116中,将程序要素表现为顶点701,将容易同时变更的程序要素的顺序对表现为有向边702、704。在图5例示的变更依存关系规则114中,在程序关联属性505中一个标识符也没有设定的情况下使用线型为虚线的有向边702,当在程序关联属性505中设定了至少一个标识符的情况下使用线型为断续线的有向边704。即,逻辑耦合图116使用有向边702、704,针对容易同时变更的程序要素的每个组合来表示其程序关联性指标的值是否满足以程序关联性阈值121规定的条件。在逻辑耦合图生成部103进行生成逻辑耦合图116的处理之前,将逻辑耦合图116初始化为未登记顶点和有向边的状态。
此外,如上所述,逻辑耦合图116由逻辑耦合图生成部103生成,但是生成逻辑耦合图116所需要的信息由逻辑耦合分析部101生成。即,实质上由逻辑耦合分析部101生成在逻辑耦合图116中表现的信息,逻辑耦合图生成部103只不过是变更了数据的表现。因而,可以说是逻辑耦合分析部101生成了在逻辑耦合图116中表现的信息。此外,为了表现生成上述逻辑耦合图116所需要的信息,逻辑耦合分析部101生成上述变更依存关系规则114。因此,在以下的说明中,还将变更依存关系规则114所表现的信息称为“逻辑耦合信息”。
(反模式图118)
图8是表示反模式图118的一例的图。反模式图118强调显示了逻辑耦合图116的顶点中的特别是具有问题特征的顶点703。使用与该顶点703对应的程序要素的程序要素信息117中记录的参数的值804(参照图9)、软件度量阈值111以及图参数阈值112中的至少一个,通过以参数逻辑式113定义的方法进行评价,根据进行评价而得到的真假值来判断逻辑耦合图116的顶点701是否为具有问题特征的顶点703。在该真假值为真的情况下,该顶点为具有问题特征的顶点703,在该真假值为假的情况下,该顶点为不具有问题特征的顶点701。即,反模式图118与逻辑耦合图116同样地,针对容易同时变更的程序要素的每个组合,表示程序关联性指标的值是否满足以程序关联性阈值121规定的条件。除此以外,表示各程序要素是否满足以参数逻辑式113规定的条件。作为具有问题特征的顶点703的表现方法,可以采用使该顶点着色或者发光或者闪烁或者放大等方法。使用输出装置15向用户输出反模式图118。用户通过观察反模式图118,能够确认在程序要素之间存在怎样的容易同时变更的关系。
(程序要素信息117)
图9是表示程序要素信息117的一例的图。在程序要素信息117中存储与逻辑耦合图生成部103作出的逻辑耦合图116中的顶点701有关的图参数值。针对每个程序要素作出程序要素信息117,该程序要素信息117由程序要素801和参数表802构成。程序要素801为程序要素名称与程序要素的值的组合。
参数表802由一个以上的记录构成,各记录由参数名称803和参数的值804构成。存储在参数表802的参数表示与作为解析对象的源代码108的品质有关的各程序要素的评价值,包含以图模式匹配逻辑110定义的图参数的值以及以软件度量取得逻辑109定义的软件度量的值。例如,在图9所示的例子中,在附图标记805表示的参数表802的初始记录中记载了“维护容易性指数”这样的名称的软件度量的值为“75”。另外,在附图标记806表示的参数表802的第三个记录中记载了“入度”这样的名称的图参数的值为“3”。使用输出装置15将程序要素信息117输出给用户。用户通过观察程序要素信息117,能够确认与程序要素对应的图要素所具有的图参数和软件度量的种类及其值。在逻辑耦合图生成部103进行程序要素信息生成处理之前,将程序要素信息117初始化为未生成状态。
(图参数阈值112)
图10是表示图参数阈值112的一例的图。图参数阈值112由多个记录构成,在各记录中存储阈值,该阈值用于针对在图模式匹配逻辑110中对于每个图参数名称601定义的图参数的逻辑,判断与该逻辑相对应的图参数值是否为异常。具体而言,各记录由以下构成:为了识别各记录而唯一赋予的图参数标识符901、图参数名称902、图参数阈值903、用于判断在图参数值与图参数阈值903相比取怎样的值时被视为异常的图参数判断条件904。在此,在图参数判断条件904中可以记述用于将图参数值与图参数阈值903进行比较的关系运算符。此外,将使用图参数判断条件904和图参数阈值903评价图参数值而得到的结果称为针对该图参数值的判断结果。
(软件度量阈值111)
图11是表示软件度量阈值111的一例的图。软件度量阈值111由多个记录构成,在各记录中存储阈值,该阈值用于针对在软件度量信息115中记录的软件度量值1902(参照图14),判断该软件度量值1902为异常。具体而言,各记录由以下构成:为了识别各记录而唯一赋予的软件度量标识符2101、软件度量名称2102、软件度量阈值2103以及软件度量判定条件2104。
软件度量判定条件2104为用于判断在软件度量值1902与软件度量阈值2103相比取怎样的值时被视为异常的条件。此外,在软件度量判定条件2104中可以记述用于将软件度量值1902与软件度量阈值2103进行比较的关系运算符。此外,将使用软件度量判定条件2104和软件度量阈值2103来评价软件度量值1902而得到的结果称为针对该软件度量值的判定结果。
(参数逻辑式113)
图12是表示参数逻辑式113的一例的图。参数逻辑式113是综合地评价针对多个参数值的判定结果,来判断该参数值的组是否为异常的逻辑式。参数逻辑式113使用在逻辑学中使用的一般的字符、符号来记述,能够按照一般的推理规则来评价其真假值。例如,参数逻辑式113可以使用图参数标识符901、软件度量标识符2101、逻辑运算符(“&”或“|”)、括弧符号(“(”或“)”)等来记述。在此,将图参数标识符901的真假值设为针对该图参数的值804的判定结果。另外,把将图参数标识符901和软件度量标识符2101作为原子逻辑式而使用逻辑运算符得到的逻辑式的真假值设为遵照逻辑学的一般的推理规则的真假值。
(软件度量取得逻辑109)
图13是表示软件度量取得逻辑109的一例的图。在软件度量取得逻辑109中记录逻辑,该逻辑用于取得针对每个程序要素决定值的软件度量值。对于想要取得的软件度量的每个种类作出软件度量取得逻辑109,该软件度量取得逻辑109由软件度量名称1801和软件度量取得逻辑主体1802构成。在软件度量名称1801中存储表示软件度量的种类的信息,在图13所示的例子中,软件度量的种类为“维护容易性指数”。软件度量的种类也可以使用程序要素的规模、复杂度等通过一般的程序解析进行评价的值。软件度量取得逻辑主体1802的记述没有限制,例如可以通过可执行的编程语言、脚本进行记述。
软件度量例如为维护容易性指标、凝聚度以及圈复杂度。维护容易性指标是将行数、圈复杂度等进行组合而成的维护性度量。凝聚度是一种指标,表示程序要素归属的类中的信息要素之间的关联性强度。圈复杂度还被称为循环复杂度,根据线性地独立的路径数来计算。
(软件度量信息115)
图14是表示软件度量信息115的一例的图。软件度量信息115由多个记录构成,对每个程序要素作出各记录。即,在软件度量信息115的各记录中,针对某个程序要素,存储在软件度量取得逻辑109中定义的软件度量的值。软件度量信息115的各记录包含程序要素名称1901以及一个以上的软件度量值1902。例如,使用附图标记1903表示的第一个记录表示了作为程序要素A的软件度量值,维护容易性指数为75,凝聚力为0.3。此外,在程序解析部102中进行程序解析之前,对软件度量信息115进行初始化。
(程序关联性指标取得逻辑125)
图15是表示程序关联性指标取得逻辑125的一例的图。在程序关联性指标取得逻辑125中记录逻辑,该逻辑用于取得针对程序要素的每个对决定值的程序关联性指标的值。针对程序关联性指标的每个种类来作出程序关联性指标取得逻辑125,该程序关联性指标取得逻辑125由程序关联性指标名称2901和程序关联性指标取得逻辑主体2902构成。程序关联性指标名称2901例如为程序要素之间的源代码的类似度、共同参照的其它程序要素数、基于参照关系的程序要素之间的距离等通过一般的程序解析进行评价的指标。程序关联性指标取得逻辑主体2902的记述没有受限制,例如也可以通过可执行的编程语言、脚本进行记述。
程序关联性指标例如为共同参照变量数、代码类似度。共同参照变量数是两个函数共同参照的变量的数。代码类似度是指两个函数中共同出现的符号,即变量参照、函数调用的比例,共同的符号越多越接近“1”,共同的符号越少越接近“0”。
(程序关联性指标信息120)
图16是表示程序关联性指标信息120的一例的图。程序关联性指标信息120由多个记录构成,针对程序要素的每个组合作出各记录。即,在程序关联性指标信息120的各记录中,关于某个程序要素对,存储在程序关联性指标取得逻辑125中定义的程序关联性指标的每个程序要素对的值。程序关联性指标信息120的各记录由成为要素对的起点程序要素名称3002、终点程序要素名称3003以及一个以上的程序关联性指标值3004构成。例如,在图16中使用附图标记3001表示的第一个记录表示了作为以程序要素A为起点并以程序要素B为终点的组合的程序关联性指标值,共同参照变量数为20且代码类似度为0.3。
在程序关联性分析部119进行程序关联性分析之前,将程序关联性指标信息120初始化为没有记录任何记录的状态。使用输出装置15将程序关联性指标信息120输出给用户。用户通过观察程序关联性指标信息120,能够确认程序要素对具有怎样的程序关联性指标。
(程序关联性阈值121)
图17是表示程序关联性阈值121的一例的图。程序关联性阈值121由多个记录构成,在各记录中记录用于判断是否具有关联性属性的阈值,该阈值是针对在程序关联性指标信息120中记录的程序关联性指标值3004的阈值。各记录由以下构成:用于唯一地识别关联性属性的标识符即关联属性标识符3202、程序关联性指标名称3203、程序关联性阈值3204以及程序关联性条件3205。其中,程序关联性阈值3204和程序关联性条件3205还分别被称为阈值3204和条件3205。
条件3205用于判断在图16的程序关联性指标信息120中的程序关联性指标值3004与程序关联性阈值3204相比取怎样的值时被视为具有程序关联性属性。其中,在程序关联性条件3205中可以记述用于将程序关联性指标值3004与程序关联性阈值3204进行比较的关系运算符。此外,将使用条件3205和阈值3204评价程序关联性指标值3004而得到的结果称为针对该程序关联性的判断结果。
(源代码解析装置10的动作)
图18是表示逻辑耦合分析部101的动作的流程图。首先,逻辑耦合分析部101读入程序要素变更履历106(S1201),并读入购物篮解析阈值107(S1202)。然后,逻辑耦合分析部101根据读入的程序要素变更履历106生成程序要素的全部的顺序对,对各顺序对(E1、E2)执行S1204~S1208的处理(S1203)。
在S1204中,逻辑耦合分析部101计算针对顺序对(E1、E2)的支持度。在此,针对顺序对(E1、E2)的支持度是表示程序要素E1和E2的同时变更容易度的0以上且1以下的值,是在变更程序要素名称302中包含E1和E2的变更履历记录303的数量除以全部变更履历记录303的数量而得到的值。在S1205中,逻辑耦合分析部101计算针对顺序对(E1、E2)的置信度。在此,针对顺序对(E1、E2)的置信度是表示变更了程序要素E1时的E2的变更容易度的0以上且1以下的值,是在变更程序要素名称302中包含E1和E2的变更履历记录303的数量除以在变更程序要素名称302中包含E1的变更履历记录303的数量而得到的值。
在S1206中,逻辑耦合分析部101计算针对顺序对(E1、E2)的提升值。在此,针对顺序对(E1、E2)的提升值是关于程序要素E1的变更与程序要素E2的变更之间的相关关系,表示在值为1的情况下无相关,在大于1的情况下具有正的相关,在小于1的情况下具有负的相关的0以上的值。针对顺序对(E1、E2)的提升值是针对顺序对(E1、E2)的置信度除以针对顺序对(E2、E2)的支持度而得到的值。
在后续的S1207中,逻辑耦合分析部101判定针对顺序对(E1、E2)的支持度、置信度以及提升值是否全部超过了从购物篮解析阈值107赋予的各规则评价值名称401的阈值402。逻辑耦合分析部101在判断为支持度、置信度、以及提升值全部超过了阈值的情况下,在变更依存关系规则114中追加赋予了唯一的规则编号501的新的变更依存关系规则记录504,在该变更依存关系规则记录504的变更对象程序要素名称502中记录程序要素E1,在同时变更程序要素名称503中记录程序要素E2(S1208)。逻辑耦合分析部101在判断为支持度、置信度、以及提升值均未超过阈值的情况下,进入到S1209。在S1209中,逻辑耦合分析部101对全部的顺序对(E1、E2)执行S1204~S1208的处理。
在后续的S1210中,逻辑耦合分析部101进行程序关联性指标信息120的评价,将其评价结果写入到变更依存关系规则114后结束图18所示的处理。详细说明S1210,逻辑耦合分析部101首先读入程序关联性阈值121和程序关联性分析部119生成的程序关联性指标信息120。然后,判断存储在程序关联性指标信息120中的程序关联性指标值3004是否满足程序关联性阈值121的条件,在满足条件的情况下将对应的关联属性标识符写入到变更依存关系规则114的程序关联属性505的栏中。例如,在图16的最初的记录中记载的例子中,共同参照变量数为“20”,在图17所示的程序关联性阈值121中在最初的记录中记载的条件为共同参照变量数“小于25”。“20”满足“小于25”的条件,因此如图5的最初的记录所示,在程序关联属性505中记载在图17的最初的记录中在关联属性标识符3202中设定的标识符即“R1”。
(程序解析部102的动作)
图19是表示程序解析部102的动作的流程图。程序解析部102首先读入源代码108(S2401),并读入软件度量取得逻辑109(S2402)。然后,程序解析部102对读入的源代码108中包含的全部程序要素依次变更处理对象的程序要素E来执行S2404~S2407的处理(S2403)。程序解析部102对全部的软件度量取得逻辑109依次变更处理对象的软件度量取得逻辑109来执行S2405的处理(S2404)。其中,在下一S2405中,用附图标记“L”表示处理对象的软件度量取得逻辑109。
程序解析部102使用附图标记L表示的处理对象的软件度量取得逻辑109,取得处理对象的程序要素E的度量(S2405)。在该S2405的处理中,通过上述反复处理,按照全部的软件度量取得逻辑109中的每个软件度量取得逻辑109,对于全部的程序要素E进行计算。当按照全部的软件度量取得逻辑109,对于处理对象的程序要素E完成了度量取得时(S2406),将处理对象的程序要素E的度量值追加到软件度量信息115中(S2407)。程序解析部102在以全部的程序要素E为对象而执行了上述处理时(S2408),结束图19所示的处理。
(程序关联性分析部119的动作)
图20是表示程序关联性分析部119的动作的流程图。程序关联性分析部119首先读入源代码108(S3501),接着,读入全部的程序关联性指标取得逻辑125(S3502)。接着,程序关联性分析部119依次变更源代码108中包含的全部的程序要素彼此的组合即程序要素对P来执行S3504~S3507的处理(S3503)。程序关联性分析部119对于全部的程序关联性指标取得逻辑125依次变更处理对象的程序关联性指标取得逻辑125来执行S3505的处理(S3504)。其中,在下一S3505中,使用附图标记“L”表示处理对象的程序关联性指标取得逻辑125。
程序关联性分析部119使用附图标记L表示的处理对象的程序关联性指标取得逻辑125,取得处理对象的程序要素对P的程序关联性指标(S3505)。在该S3505的处理中,通过上述反复处理,按照全部的程序关联性指标取得逻辑125中的每个程序关联性指标取得逻辑125,对于全部的程序要素对P进行计算。当按照全部的程序关联性指标取得逻辑125对于处理对象的程序要素对P完成了程序关联性指标的取得时(S3506),将处理对象的程序要素对P的程序关联性指标追加到程序关联性指标信息120中(S3507)。程序关联性分析部119当以全部的程序要素对P为对象而执行了上述处理时(S3508),结束图20所示的处理。
此外,S3505的动作可以使用作为商用工具而销售的程序解析工具或通过开放源代码公开的程序解析工具来执行。
(逻辑耦合图生成部103的动作)
图21是表示逻辑耦合图生成部103的动作的流程图。逻辑耦合图生成部103读入软件度量信息115、变更依存关系规则114(S1305)、程序关联性指标信息120(S1306)、程序关联性阈值121(S1307)以及图模式匹配逻辑110(S1308)。接着,如参照图22在后文中说明的那样,逻辑耦合图生成部103生成逻辑耦合图116(S1303)。接着,如参照图23在后文中说明的那样,逻辑耦合图生成部103生成程序要素信息117(S1308),并结束图21所示的处理。
图22是表示图21的S1303的详细的流程图。逻辑耦合图生成部103对全部的程序要素E执行S1402~S1403的处理(S1401)。逻辑耦合图生成部103在逻辑耦合图116追加与程序要素E对应的顶点N(S1402)。逻辑耦合图生成部103生成与在S1402中追加的顶点N对应的程序要素信息117,在其程序要素名称中记录程序要素E(S1403)。其中,在此,未写入各参数的值。逻辑耦合图生成部103当判断为对全部的程序要素E已执行了S1402~S1403的处理时进入到S1405,在判断为存在未处理的程序要素的情况下返回到S1402(S1404)。
逻辑耦合图生成部103对于变更依存关系规则114中记载的程序要素的全部的顺序对(E1、E2)执行S1406的处理(S1405)。逻辑耦合图生成部103在逻辑耦合图116中追加以E1为起点,以E2为终点的有向边(S1406)。其中,此时,将有向边的线型设为与程序关联属性505的值相对应的线型。例如,在未设定任何程序关联属性505的情况下使用虚线,在设定了某个属性的情况下使用断续线。其中,也可以使用一点划线、两点划线以及双重线等各种线型,使得能够识别仅通过线型设定的属性。由此,在逻辑耦合图116中表现图16的程序关联性指标信息120中记载的与该程序要素的组合相对的各程序关联性指标值3004是否满足以图17的程序关联性阈值121规定的条件。接着,逻辑耦合图生成部103当判断为对于程序要素的全部的顺序对(E1、E2)已执行了处理时,结束图22所示的处理,在判断为存在未处理的顺序对的情况下返回到S1406(S1407)。
图23是表示图21的S1308的详细的流程图。逻辑耦合图生成部103对于逻辑耦合图116中的全部的顶点N执行S1507~S1505的处理(S1501)。逻辑耦合图生成部103对全部的程序要素E执行S1508的处理。逻辑耦合图生成部103将与顶点N对应的程序要素E的软件度量值追加到顶点N的程序要素信息117中(S1508)。即,将图14的软件度量信息115中的该程序要素E的各软件度量值1902追加到程序要素信息117的参数表802中。逻辑耦合图生成部103在判断为对全部的程序要素E执行了S1508的处理的情况下进入到S1502,在判断为存在未处理的程序要素的情况下返回到S1508(S1509)。
逻辑耦合图生成部103对于全部的图模式匹配逻辑110执行S1503的处理(S1502)。其中,在S1503中附图标记“L”表示处理对象的图模式匹配逻辑110。逻辑耦合图生成部103使用附图标记L表示的处理对象的图模式匹配逻辑110,取得与处理对象的顶点N对应的图参数值(S1503)。逻辑耦合图生成部103在判断为对全部的图模式匹配逻辑110执行了S1503的处理的情况下进入到S1505,在判断为存在未执行的图模式匹配逻辑110的情况下返回到S1503(S1509)。逻辑耦合图生成部103将处理对象的顶点N的图参数值追加到顶点N的程序要素信息117中(S1505)。逻辑耦合图生成部103在判断为对全部的顶点N执行了S1507~S1505的处理的情况下结束图23所示的处理,在判断为存在未处理的顶点N的情况下返回到S1507(S1506)。
(反模式检测部104的动作)
图24是表示反模式检测部104的动作的流程图。反模式检测部104首先读入逻辑耦合图116、程序要素信息117以及参数逻辑式113(S1601)。接着,反模式检测部104对于在S1601中读入的逻辑耦合图116的全部的顶点N执行S1603~S1605的处理。反模式检测部104根据在S1601中读入的程序要素信息117的各参数值,计算针对作为处理对象的顶点N的参数逻辑式113的真假值(S1603)。此时,根据需要从软件度量阈值111、图参数阈值112分别读出与在参数逻辑式113中指定的图参数标识符901、软件度量标识符2101对应的记录,并与参数值进行比较。结果,反模式检测部104当判断为参数逻辑式113的真假值为真时(S1604:真),将逻辑耦合图116中的处理对象的顶点N进行强调显示(S1605),进入到S1606。反模式检测部104当判断为参数逻辑式113的真假值为假时(S1604:假),直接进入到S1606。反模式检测部104在判断为对于全部的顶点N已执行了S1603~S1605的处理的情况下结束图24所示的处理,在判断为存在未处理的顶点N的情况下返回到S1602(S1606)。通过上述说明的处理,反模式检测部104能够生成反模式图118,该反模式图118通过强调显示的顶点703表示程序要素信息117满足在参数逻辑式113中规定的条件的程序要素,并且通过断续线的有向边704表示程序关联性指标信息120满足以程序关联性阈值121规定的条件的程序要素。
根据上述第一实施方式,得到以下作用效果。
(1)源代码解析装置10具备:程序关联性分析部119,其解析源代码108来分析源代码108内包含的程序要素彼此的关联性,生成程序关联性指标信息120;逻辑耦合分析部101,其使用程序要素变更履历106,生成在表示容易同时变更的程序要素对的信息即逻辑耦合图116中表示的信息;逻辑耦合图生成部103,其至少根据逻辑耦合信息,针对每个程序要素生成作为评价值的程序要素信息117;反模式检测部104,其生成反模式图118,该反模式图118表示逻辑耦合信息中包含的程序要素中的程序要素信息和程序关联性指标信息满足预定条件的程序要素;以及输出装置15,其输出反模式图118。
使用源代码解析装置10的用户得到对程序关联性指标信息120进行了判定的反模式图118,因此能够更高精度地判定程序要素是否具备反模式所示的问题特征。具体地说,在反模式图118中,对具有问题特征的程序要素进行强调显示,在具有某个程序关联属性的情况下使用断续线进行表示,因此能够容易地判别出关注同时具有双方特征的程序要素即可。以下,举例说明作为反模式的散弹式修改(Shotgun surgery)。
散弹式修改是用于对具有以下问题特征的程序要素进行重构的模式,该问题特征为当扩展或者变更该程序要素时,很多的其它程序要素也被同时扩展或者变更。散弹式修改所示的问题特征并非是程序要素本身的特征,而是与程序要素的变更有关的特征,因此难以使用软件度量来确定具有该问题特征的程序要素。
作为散弹式修改的间接性的原因,例如存在程序要素之间的类似关系。类似关系例如是指程序代码的重复。在程序代码重复的情况下,有时对重复的程序代码分别施加了同样的变更,因此有可能成为散弹式修改。其中,可能由于例行处理、有意图地生成衍生功能而存在程序代码的重复,因此原本未施加变更的情况或进行不同变更的情况也很多,其存在并不一定引起散弹式修改。
作为散弹式修改的不同的间接性原因,例如存在程序要素之间的参照关系。参照关系例如是指从多个不同的程序要素读写相同数据的情况。在该情况下,在对数据写入侧的程序要素施加了变更时,读入该数据的其它不同的程序要素有时也需要变更。其中,从多个程序要素读写相同数据为一般的程序结构,该关系并不一定引起散弹式修改。
如上所述,为了判断程序要素是否具备反模式所示的问题特征,希望考虑程序关联性指标信息120和反模式图118,源代码解析装置10能够提供这些信息。
(2)输出装置15还输出程序关联性指标信息120。因此,用户能够阅览程序关联性指标的详细信息来进行详细的判断。
(3)反模式图118为可视地显示容易同时变更的程序要素对以及满足预定条件的程序要素的信息。反模式图118为有向图,因此用户能够容易地掌握信息,与使用字符、表来提示信息相比更有效率。
(4)具备生成软件度量信息115的程序解析部102,该软件度量信息115是针对各个程序要素表示维护性的指标。逻辑耦合图生成部103还考虑软件度量信息115来判断程序要素是否满足预定条件。因此,还考虑软件度量信息115来生成反模式图118,因此用户通过参照该反模式图118和程序关联性指标信息120,能够更加恰当地判断程序要素是否具备反模式所示的问题特征。以下,以作为反模式的胖球(The Blob)为例进行说明。
胖球(The Blob)是对具有以下问题特征的程序要素进行重构的模式,该问题特征为聚在一处安装了多个功能。具有胖球所示的问题特征的程序要素具有大规模化或复杂化的趋势,因此在其确定中,程序要素的规模或复杂度这样的软件度量是有效的。但是,具有在安装了单一功能的程序要素中规模、复杂度也会变大的情况,因此在判断结果中容易出现噪声。另一方面,关于具有胖球所示的问题特征的程序要素,很多时候在每次扩展或者变更程序要素所安装的多个功能时该程序要素一并被扩展或者变更。
如上所述,为了判断程序要素是否具备反模式所示的问题特征,希望还考虑软件度量信息115,源代码分析装置10能够提供还考虑了软件度量信息115的信息。
(第一变形例)
在上述第一实施方式中,根据单一的程序关联性指标设定了关联属性标识符。但是,也可以根据多个程序关联性指标设定关联属性标识符。
图25是表示根据多个程序关联性指标设定关联属性标识符的例子的图。换言之,是表示程序关联性阈值121的不同例子的图。图25(a)是表示使用既有的关联属性标识符的例子的图。图25(b)是表示不使用既有的关联属性标识符的例子的图。图25(a)所示的程序关联性阈值121A与在第一实施方式中所示的程序关联性阈值121一起使用,具备逻辑式3303来代替程序关联性阈值121中的程序关联性指标名称3203、程序关联性阈值3204以及程序关联性条件3205。逻辑式3303是使用程序关联性阈值121中的关联属性标识符3202的逻辑式。例如在图25(a)所示的例子中,第一个记录3301表示了在R1和R2双方为真的情况下具有R3的属性。
图25(b)所示的程序关联性阈值121B即可以与在第一实施方式中所示的程序关联性阈值121一起使用,也可以与程序关联性阈值121合并。图25(b)所示的例子表示与图25(a)所示的例子相同的条件。在图25(b)中不使用关联属性标识符而使用程序关联性指标这一点与图25(a)不同。
(第二变形例)
在上述第一实施方式中,计算软件度量信息115,将计算出的软件度量信息115用于生成程序要素信息117、反模式图118。但是,源代码解析装置10也可以不计算软件度量信息115。
图26是不计算软件度量信息115时的源代码解析装置10的功能结构图。在图26所示的功能结构图中,与图2相比,删除了程序解析部102、软件度量阈值111、软件度量取得逻辑109以及软件度量信息115。另外,还从程序要素信息117、参数逻辑式113中删除与软件度量有关的信息。
(第三变形例)
在上述第一实施方式中,反模式检测部104输出了图8所示的反模式图118。但是,反模式检测部104也可以将反模式图118中表现的信息作为字符、表进行输出,从而来代替反模式图118。在程序要素的数量庞大等情况下,在输出装置15中难以通过可视的大小显示整个反模式图118的情况下是有效的。
(第四变形例)
在上述第一实施方式中,源代码解析装置10从输出装置15输出了反模式图118和程序关联性指标信息120。但是,源代码解析装置10也可以不输出程序关联性指标信息120。这是因为在反模式图118中,作为有向边的线型而包含了根据程序关联性指标信息120设定的程序关联属性的信息。
(第五变形例)
在上述第一实施方式中,源代码解析装置10读入了程序要素变更履历106,但是,源代码解析装置10也可以读入多个源代码108来生成程序要素变更履历106。即,也可以不预先生成程序要素变更履历106。
第二实施方式
参照图27~图28说明源代码解析装置的第二实施方式。在以下的说明中,对于与第一实施方式相同的结构要素赋予相同的附图标记,主要说明不同点。不特别说明的点与第一实施方式相同。在本实施方式中,与第一实施方式的不同点主要在于,在用户接口上交互地进行各种参数的设定。在本实施方式中,以在用户接口上交互地进行软件度量阈值111、图参数阈值112、参数逻辑式113、购物篮解析阈值107以及程序关联性阈值121的输入以及与这些输入值的变化相伴随的反模式图118的输出为例进行说明。
图27是表示在输出装置15中显示的输入用户接口2700的一例的图。输入用户接口2700具备软件度量阈值输入部2701、图参数阈值输入部2702、参数逻辑式输入部2703、购物篮解析阈值输入部2716以及程序关联性阈值输入部2721。
软件度量阈值输入部2701由一个以上的软件度量阈值要素输入部2704构成。软件度量阈值要素输入部2704由以下构成:显示软件度量标识符2101的软件度量标识符显示部2705、显示软件度量名称2102的软件度量名称显示部2706、用于输入软件度量阈值2103的软件度量阈值输入部2707、用于输入软件度量判定条件2104的软件度量判定条件输入部2708以及能够可视地输入软件度量阈值2103的软件度量阈值输入滑块2709。
图参数阈值输入部2702由一个以上的图参数阈值要素输入部2710构成。图参数阈值要素输入部2710由以下构成:显示图参数标识符901的图参数标识符显示部2711、显示图参数名称902的图参数名称显示部2712、用于输入图参数阈值903的图参数阈值输入部2713、用于输入图参数判定条件904的图参数判定条件输入部2714以及能够可视地输入图参数阈值903的图参数阈值输入滑块2715。
购物篮解析阈值输入部2716由一个以上的购物篮解析规则评价值输入部2717构成。购物篮解析规则评价值输入部2717由以下构成:显示购物篮解析的规则评价值名称401的购物篮解析规则评价值名称显示部2718、用于输入购物篮解析的阈值402的购物篮解析阈值输入部2719、以及能够可视地输入购物篮解析的阈值402的购物篮解析阈值输入滑块2720。
程序关联性阈值输入部2721由一个以上的程序关联性阈值要素输入部2722和一个以上的程序关联性逻辑式要素输入部2728构成。程序关联性阈值要素输入部2722由以下构成:显示程序关联属性标识符3202的程序关联属性标识符显示部2723、显示程序关联性指标名称3203的程序关联性指标名称显示部2724、用于输入程序关联性指标阈值3204的程序关联性指标阈值输入部2725、用于输入程序关联性指标判定条件3205的程序关联性指标判定条件输入部2726、以及能够可视地输入程序关联性指标阈值3204的程序关联性指标阈值输入滑块2727。
程序关联性逻辑式要素输入部2728由显示程序关联属性标识符3302的程序关联属性标识符显示部2729、以及用于输入程序关联属性逻辑式3303的程序关联属性逻辑式输入部2730构成。
用户使用软件度量阈值输入部2707、软件度量判定条件输入部2708、软件度量阈值输入滑块2709、图参数阈值输入部2713、图参数判定条件输入部2714、图参数阈值输入滑块2715、参数逻辑式输入部2703、购物篮解析阈值输入部2719、购物篮解析阈值输入滑块2720、程序关联性指标阈值输入部2725、程序关联性指标判定条件输入部2726、程序关联性指标阈值输入滑块2727以及程序关联属性逻辑式输入部2730,来输入软件度量阈值、图参数阈值、参数逻辑式、程序关联性指标阈值以及程序关联属性逻辑式。而且,用户通过确认输出的反模式图118,能够交互地输入软件度量值和程序关联性。
图28是表示输入输出用户接口3900的一例的图。输入输出用户接口3900由输入用户接口2700和详细信息显示部3901构成。与图27的例子同样地,输入用户接口2700由以下构成:软件度量阈值输入部2701、图参数阈值输入部2702、参数逻辑式输入部2703、购物篮解析阈值输入部2716以及程序关联性阈值输入部2721。详细信息显示部3901由反模式图118和详细信息显示部3901构成。反模式图118随着软件度量阈值111、图参数阈值112、参数逻辑式113、购物篮解析阈值107以及程序关联性阈值121的输入值而变化。在详细信息显示部3901中显示变更依存关系规则114、软件度量信息115以及程序关联性指标信息120中的任意一个。根据显示选择部3902的选择来决定显示这三个中的哪一个。
其中,详细信息显示部3901也可以仅输出记录,该记录包含由于用户向输入用户接口2700的输入而发生了变化的反模式图118中包含的程序要素。另外,在详细信息显示部3901中可以显示程序要素信息117、程序关联信息122。
根据上述第二实施方式,得到以下作用效果。
(1)反模式检测部104评价在程序要素信息117中记载的值与在软件度量2701和图参数2702中输入的第一阈值的关系、以及程序关联性指标信息120与在程序关联性指标2721中输入的第二阈值的关系。源代码解析装置10具备用于输入第一阈值和第二阈值的输入用户接口2700。因此,用户能够从输入用户接口2700输入阈值,来交互地取得作为其结果的反模式图118。
(第二实施方式的变形例)
输入用户接口2700可以构成为具备软件度量阈值输入部2701、图参数阈值输入部2702、参数逻辑式输入部2703、购物篮解析阈值输入部2716以及程序关联性阈值输入部2721中的至少一个。
第三实施方式
参照图29~图31说明源代码解析装置的第三实施方式。在以下的说明中,对与第一实施方式相同的结构要素赋予相同的附图标记而主要说明不同点。不特别说明的点与第一实施方式相同。在本实施方式中,与第一实施方式的不同点主要在于,自动地决定购物篮解析阈值。
(功能结构)
图29是第三实施方式的源代码解析装置10的功能结构图。源代码解析装置10的功能结构除了第一实施方式的功能以外还具备购物篮解析阈值导出部123。购物篮解析阈值导出部123通过处理器11读出并执行存储在主存储装置12、辅助存储装置13中的程序来实现。其中,购物篮解析阈值导出部123也可以通过源代码解析装置10所具备的硬件,例如ASIC等来实现。购物篮解析阈值导出部123设定购物篮解析阈值107。购物篮解析阈值导出部123的购物篮解析阈值107的设定方法没有特别限制,例如即可以使以往的阈值以预定的比例增减,也可以以预定的值增减。另外,阈值即可以使支持度、置信度以及提升值联动地变更,也可以一个一个地变更。
在本实施方式中,在辅助存储装置13中还存储购物篮解析期待值124。购物篮解析阈值导出部123根据计算出的购物篮解析阈值107来判断由逻辑耦合分析部101计算出的变更依存关系规则114是否满足购物篮解析期待值124,在判断为未满足的情况下,再次计算购物篮解析阈值107。由购物篮解析阈值导出部123反复计算购物篮解析阈值107,直至变更依存关系规则114满足购物篮解析期待值124为止。
(购物篮解析期待值124)
图30是表示购物篮解析期待值124的一例的图。在购物篮解析期待值124中记录假设为了得到有益的反模式图118而恰当的变更依存关系规则114的生成条件。购物篮解析期待值124由一个以上的记录构成,各记录由规则数等变更依存关系规则的项目4102、与该项目对应的期待值4103、以及用于判断该项目值与期待值4103相比取怎样的值时满足期待值的条件4104构成。在此,在变更依存关系规则的条件4104中可以记述用于将变更依存关系规则的项目4102与变更依存关系规则的期待值4103进行比较的关系运算符。此外,将使用变更依存关系规则的期待值4103和变更依存关系规则的条件4104评价变更依存关系规则的项目4102而得到的结果称为针对变更依存关系规则的判定结果。
(购物篮解析阈值导出部123的动作)
图31是表示购物篮解析阈值导出部123的动作的流程图。购物篮解析阈值导出部123首先读入程序要素变更履历106(S4201)。购物篮解析阈值导出部123设定购物篮解析阈值107(S4203)。购物篮解析阈值导出部123等待由逻辑耦合分析部101生成变更依存关系规则114(S4204)。购物篮解析阈值导出部123判断所生成的变更依存关系规则114是否满足购物篮解析期待值124的条件(S4205)。购物篮解析阈值导出部123在判断为满足条件的情况下,结束图31所示的处理,在判断为未满足条件的情况下返回到S4203。
(购物篮解析阈值导出部123的动作例)
购物篮解析阈值导出部123在设定购物篮解析阈值107时,使支持度403、置信度404以及提升值405中的至少一个值增加或减少。也可以设为以下方法:在设定购物篮解析阈值107时,例如在逻辑耦合分析部101一次也没有执行时,根据程序要素变更履历106的记录数,如果记录数小于3000,则将支持度403的阈值402设为将程序要素变更履历106中包含的程序要素数除以记录数而得到的值再乘以3而得到的值,如果记录数为3000以上,则将支持度403的阈值402设为将程序要素变更履历106中包含的程序要素数除以记录数而得到的值再乘以5而得到的值。
另外,购物篮解析阈值导出部123在设定购物篮解析阈值107时,在变更依存关系规则114中包含的规则数低于由购物篮解析期待值124表示的规则数的下限值的情况下,可以将为了得到该变更依存关系规则114而使用的支持度403的阈值402减去以下的值而得到的值设为新的支持度403的阈值402,其中,上述减去的值为将程序要素变更履历106中包含的程序要素数除以记录数而得到的值再乘以2而得到的值。另外,购物篮解析阈值导出部123在变更依存关系规则114中包含的规则数超过由购物篮解析期待值124表示的规则数的上限值的情况下,可以将为了得到该变更依存关系规则114而使用的支持度403的阈值402与将程序要素变更履历106中包含的程序要素数除以记录数而得到的值再乘以2而得到的值进行相加而得到的值设为新的支持度403的阈值402。
并且,购物篮解析阈值导出部123为了避免无限制地重复进行逻辑耦合分析,即使在变更依存关系规则114未满足购物篮解析期待值124的情况下,可以通过对购物篮解析阈值107的支持度403或置信度404或提升值405设定上限或下限,或者对逻辑耦合分析的执行次数设置上限等方法,中断逻辑耦合分析部101以及购物篮解析阈值导出部123的处理,从而转移到逻辑耦合图生成部103的处理。
根据上述第三实施方式,得到以下作用效果。
(1)逻辑耦合分析部101针对每个程序要素对计算表示同时变更的容易度的指标即图参数,并根据图参数与购物篮解析阈值107的关系来生成逻辑耦合信息,即变更依存关系规则114。源代码解析装置10具备购物篮解析阈值导出部123,该购物篮解析阈值导出部123设定购物篮解析阈值107,使得逻辑耦合信息满足预定条件。因此,用户不需要自己设定购物篮解析阈值107,能够简单地使用源代码解析装置10。
源代码解析装置10具备未图示的输入输出接口,在需要时可以经由输入输出接口以及主存储装置12、辅助存储装置13可使用的介质,从其它装置读入程序。在此,介质例如是指在输入输出接口可装卸的存储介质或通信介质,即有线、无线、光等网络,或者在该网络中传播的载波、数字信号。另外,通过程序实现的功能的一部分或者全部也可以通过硬件电路、FPGA来实现。
上述各实施方式和变形例也可以分别进行组合。如上所述,说明了各种实施方式和变形例,但是本发明并不限于这些内容。在本发明的技术思想范围内考虑的其它方式也包含在本发明的范围内。
附图标记说明
10:源代码解析装置;15:输出装置;101:逻辑耦合分析部;102:程序解析部;103:逻辑耦合图生成部;104:反模式检测部;105:信息存储部;106:程序要素变更履历;107:购物篮解析阈值;108:源代码;109:软件度量取得逻辑;110:图模式匹配逻辑;111:软件度量阈值;112:图参数阈值;113:参数逻辑式;114:变更依存关系规则;115:软件度量信息;116:逻辑耦合图;117:程序要素信息;118:反模式图;119:程序关联性分析部;120:程序关联性指标信息;121、121A、121B:程序关联性阈值;122:程序关联信息;123:购物篮解析阈值导出部;124:购物篮解析期待值;125:程序关联性指标取得逻辑。

Claims (13)

1.一种源代码解析装置,其特征在于,具备:
程序关联性分析部,其针对源代码内包含的全部的程序要素彼此的每个组合即每个程序要素对,取得与包括程序要素之间的源代码的类似度、共同参照的其它程序要素数、基于参照关系的程序要素之间的距离在内的各程序关联性指标对应的值,生成程序关联性指标信息;
逻辑耦合分析部,其使用上述源代码的变更履历,生成表示容易同时变更的上述程序要素的组合的信息即逻辑耦合信息;
评价部,其针对根据上述逻辑耦合信息生成的将上述程序要素表现为顶点的有向图中的每个顶点,生成作为与上述源代码的品质有关的评价值,包含图参数值和软件度量值的程序要素信息;
反模式检测部,其生成反模式信息,该反模式信息用于表示上述逻辑耦合信息中包含的上述程序要素中的上述程序要素信息与图参数阈值以及软件度量阈值的比较结果满足由参数逻辑式规定的条件并且上述程序关联性指标信息满足由程序关联性阈值规定的条件的上述程序要素;以及
输出部,其输出上述反模式信息。
2.根据权利要求1所述的源代码解析装置,其特征在于,
上述输出部还输出上述程序关联性指标信息。
3.根据权利要求1所述的源代码解析装置,其特征在于,
上述反模式信息是用于可视地显示上述容易同时变更的上述程序要素的组合、以及上述程序要素信息和上述程序关联性指标信息分别满足各自条件的上述程序要素的信息。
4.根据权利要求1所述的源代码解析装置,其特征在于,
上述源代码解析装置还具备程序解析部,该程序解析部针对各个上述程序要素生成包含表示维护性的指标的软件度量信息,
上述评价部还考虑上述包含表示维护性的指标的软件度量信息来判断上述程序要素是否满足由上述参数逻辑式规定的条件。
5.根据权利要求1所述的源代码解析装置,其特征在于,
上述反模式检测部评价上述程序要素信息与第一阈值的关系以及上述程序关联性指标信息与第二阈值的关系,
上述源代码解析装置还具备用于输入上述第一阈值和上述第二阈值的接口。
6.根据权利要求1所述的源代码解析装置,其特征在于,
上述源代码解析装置还具备购物篮解析阈值导出部,该购物篮解析阈值导出部设定用于上述逻辑耦合分析部生成与预定的生成条件相对应的上述逻辑耦合信息的购物篮解析阈值,
上述逻辑耦合分析部针对上述程序要素的每个组合计算表示同时变更的容易度的指标即规则评价值,并根据上述规则评价值与上述购物篮解析阈值的关系来生成上述逻辑耦合信息。
7.一种源代码解析方法,其特征在于,包含以下步骤:
由计算机针对源代码内包含的全部的程序要素彼此的每个组合即每个程序要素对,取得与包括程序要素之间的源代码的类似度、共同参照的其它程序要素数、基于参照关系的程序要素之间的距离在内的各程序关联性指标对应的值,生成程序关联性指标信息;
由计算机使用上述源代码的变更履历,生成表示容易同时变更的上述程序要素的组合的信息即逻辑耦合信息;
由计算机针对根据上述逻辑耦合信息生成的将上述程序要素表现为顶点的有向图中的每个顶点,生成作为与上述源代码的品质有关的评价值,包含图参数值和软件度量值的程序要素信息;
由计算机生成反模式信息,该反模式信息表示上述逻辑耦合信息中包含的上述程序要素中的上述程序要素信息与图参数阈值以及软件度量阈值的比较结果满足由参数逻辑式规定的条件并且上述程序关联性指标信息满足由程序关联性阈值规定的条件的上述程序要素;以及
从计算机输出上述反模式信息。
8.根据权利要求7所述的源代码解析方法,其特征在于,
上述源代码解析方法还包含从计算机输出上述程序关联性指标信息的步骤。
9.根据权利要求7所述的源代码解析方法,其特征在于,
上述反模式信息是用于可视地显示上述容易同时变更的上述程序要素的组合、以及上述程序要素信息和上述程序关联性指标信息分别满足各自条件的上述程序要素的信息。
10.根据权利要求7所述的源代码解析方法,其特征在于,
上述源代码解析方法还包含以下步骤:由计算机针对各个上述程序要素生成包含表示维护性的指标的软件度量信息,
在上述反模式信息的生成中,还考虑上述包含表示维护性的指标的软件度量信息来判断上述程序要素是否满足由上述参数逻辑式规定的条件。
11.根据权利要求7所述的源代码解析方法,其特征在于,
在上述反模式信息的生成中,评价上述程序要素信息与第一阈值的关系以及上述程序关联性指标信息与第二阈值的关系,
上述源代码解析方法包含从接口输入上述第一阈值和上述第二阈值的步骤。
12.根据权利要求7所述的源代码解析方法,其特征在于,
上述源代码解析方法还包含以下步骤:
设定用于生成与预定的生成条件相对应的上述逻辑耦合信息的购物篮解析阈值;以及
针对上述程序要素的每个组合计算表示同时变更的容易度的指标即规则评价值,
根据上述规则评价值与上述购物篮解析阈值的关系来生成上述逻辑耦合信息。
13.一种计算机可读记录介质,其特征在于,其存储了使计算机执行以下步骤的源代码解析程序:
针对源代码内包含的全部的程序要素彼此的每个组合即每个程序要素对,取得与包括程序要素之间的源代码的类似度、共同参照的其它程序要素数、基于参照关系的程序要素之间的距离在内的各程序关联性指标对应的值,生成程序关联性指标信息;
使用上述源代码的变更履历,生成表示容易同时变更的上述程序要素的组合的信息即逻辑耦合信息;
针对根据上述逻辑耦合信息生成的将上述程序要素表现为顶点的有向图中的每个顶点,生成作为与上述源代码的品质有关的评价值,包含图参数值和软件度量值的程序要素信息;
生成反模式信息,该反模式信息表示上述逻辑耦合信息中包含的上述程序要素中的上述程序要素信息与图参数阈值以及软件度量阈值的比较结果满足由参数逻辑式规定的条件并且上述程序关联性指标信息满足由程序关联性阈值规定的条件的上述程序要素;以及
输出上述反模式信息。
CN201811243196.1A 2017-10-25 2018-10-24 源代码解析装置、源代码解析方法、计算机可读记录介质 Active CN109710306B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2017206106A JP6996936B2 (ja) 2017-10-25 2017-10-25 ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム
JP2017-206106 2017-10-25

Publications (2)

Publication Number Publication Date
CN109710306A CN109710306A (zh) 2019-05-03
CN109710306B true CN109710306B (zh) 2022-06-07

Family

ID=66254738

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811243196.1A Active CN109710306B (zh) 2017-10-25 2018-10-24 源代码解析装置、源代码解析方法、计算机可读记录介质

Country Status (2)

Country Link
JP (1) JP6996936B2 (zh)
CN (1) CN109710306B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021053783A1 (ja) * 2019-09-19 2021-03-25 三菱電機株式会社 変更影響分析装置、変更影響分析システム、および変更影響分析方法
JP7478011B2 (ja) * 2020-03-31 2024-05-02 株式会社日本総合研究所 プロジェクト管理システムにおける管理サーバ、管理方法及びプログラム
US11487533B2 (en) 2021-01-13 2022-11-01 Tata Consultancy Services Limited Method and system for inferencing logic out of an application source
JP2022186541A (ja) 2021-06-04 2022-12-15 株式会社日立製作所 ソースコード解析装置およびソースコード解析方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012230512A (ja) * 2011-04-26 2012-11-22 Hitachi Ltd ソースコード中の関数ごとの変更回数と複雑度の対応一覧を表示するシステム
US9690553B1 (en) * 2016-09-26 2017-06-27 International Business Machines Corporation Identifying software dependency relationships
CN107562419A (zh) * 2016-06-30 2018-01-09 歌乐株式会社 软件开发支援方法及系统
CN108563555A (zh) * 2018-01-10 2018-09-21 江苏工程职业技术学院 基于四目标优化的故障更改代码预测方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8312415B2 (en) * 2007-04-17 2012-11-13 Microsoft Corporation Using code analysis for requirements management
JP5826099B2 (ja) * 2012-04-04 2015-12-02 三菱電機株式会社 ソフトウェア評価支援装置及びプログラム
JP2016024784A (ja) * 2014-07-24 2016-02-08 日本電信電話株式会社 バグ予測装置及び方法及びプログラム
US10055329B2 (en) * 2015-09-30 2018-08-21 International Business Machines Corporation Detection of antipatterns through statistical analysis

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012230512A (ja) * 2011-04-26 2012-11-22 Hitachi Ltd ソースコード中の関数ごとの変更回数と複雑度の対応一覧を表示するシステム
CN107562419A (zh) * 2016-06-30 2018-01-09 歌乐株式会社 软件开发支援方法及系统
US9690553B1 (en) * 2016-09-26 2017-06-27 International Business Machines Corporation Identifying software dependency relationships
CN108563555A (zh) * 2018-01-10 2018-09-21 江苏工程职业技术学院 基于四目标优化的故障更改代码预测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Similarity of Source Code in the Presence of Pervasive Modifications;Chaiyong Ragkhitwetsagul;《 2016 IEEE 16th International Working Conference on Source Code Analysis and Manipulation (SCAM)》;20161215;第117-126页 *
程序代码相似度检测技术的研究与实现;卫军超 等;《电脑知识与技术》;20170407;第39-40页 *

Also Published As

Publication number Publication date
CN109710306A (zh) 2019-05-03
JP2019079312A (ja) 2019-05-23
JP6996936B2 (ja) 2022-01-17

Similar Documents

Publication Publication Date Title
CN109710306B (zh) 源代码解析装置、源代码解析方法、计算机可读记录介质
US12118439B2 (en) Mixed-initiative machine learning systems and methods for determining segmentations
JP6158623B2 (ja) データベース分析装置及び方法
JP6744882B2 (ja) 行動パターン探索システム、および行動パターン探索方法
US9454466B2 (en) Explaining partially illegal combinations in combinatorial models
CN111401722A (zh) 智能决策方法和智能决策系统
US11354345B2 (en) Clustering topics for data visualization
JP2014085926A (ja) データベース分析装置及びデータベース分析方法
US20090158244A1 (en) Detecting aspectual behavior in unified modeling language artifacts
CN117667702A (zh) 基于知识图谱的软件测试方法、装置、设备和存储介质
CN112416800A (zh) 智能合约的测试方法、装置、设备及存储介质
JPWO2017203672A1 (ja) アイテム推奨方法、アイテム推奨プログラムおよびアイテム推奨装置
JP6800716B2 (ja) データ分析装置、データ分析方法、及びデータ分析プログラム
WO2022067557A1 (zh) 边缘计算方案设计方法、装置和计算机可读介质
JP2017156896A (ja) 分析支援方法、分析支援装置、および分析支援プログラム
JP7029915B2 (ja) ソースコード解析装置およびソースコード解析方法
CN112699642B (zh) 复杂医疗文书的索引提取方法及装置、介质及电子设备
CN115270923A (zh) 一种基于场景的可视化智能决策方法及系统
EP2911107A1 (en) Graph pruning in hipergraph
JP6547436B2 (ja) 情報処理装置、情報処理方法、及び、プログラム
US20230055564A1 (en) Model construction support system and model construction support method
JP2018190219A (ja) ソフトウェア仕様分析装置、及びソフトウェア仕様分析方法
US20240152933A1 (en) Automatic mapping of a question or compliance controls associated with a compliance standard to compliance controls associated with another compliance standard
CN114237600B (zh) 前端页面的代码生成方法、装置、设备以及存储介质
US11334350B2 (en) Program component evaluation system and program component evaluation method

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Saitama Prefecture, Japan

Applicant after: Faurecia Gele Electronics Co.,Ltd.

Address before: Saitama Prefecture, Japan

Applicant before: CLARION Co.,Ltd.

CB02 Change of applicant information
TA01 Transfer of patent application right

Effective date of registration: 20220509

Address after: Tokyo, Japan

Applicant after: Hitachi, Ltd.

Address before: Saitama Prefecture, Japan

Applicant before: Faurecia Gele Electronics Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant