CN110618926A - 源代码分析方法和源代码分析装置 - Google Patents

源代码分析方法和源代码分析装置 Download PDF

Info

Publication number
CN110618926A
CN110618926A CN201910378645.1A CN201910378645A CN110618926A CN 110618926 A CN110618926 A CN 110618926A CN 201910378645 A CN201910378645 A CN 201910378645A CN 110618926 A CN110618926 A CN 110618926A
Authority
CN
China
Prior art keywords
source code
score
long method
program element
child
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.)
Pending
Application number
CN201910378645.1A
Other languages
English (en)
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.)
Faurecia Clarion Electronics Co Ltd
Original Assignee
Clarion Co 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 Clarion Co Ltd filed Critical Clarion Co Ltd
Publication of CN110618926A publication Critical patent/CN110618926A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供源代码分析方法和源代码分析装置。其提示源代码中包括的应当分割的程序要素。处理器(11)基于源代码(13B)来计算代码度量,基于代码度量来计算Long Method Score,基于代码度量来计算维护性指标,基于Long Method Score来确定应当分割的程序要素,基于子反面模式定义信息,将应当分割的程序要素分类为子反面模式,基于改善类目信息来提示源代码的改善位置。

Description

源代码分析方法和源代码分析装置
技术领域
本发明涉及源代码分析方法和源代码分析装置。
背景技术
在近年来的软件开发中,通过对已开发的母体软件进行扩展或变更而开发新的软件的衍生开发是主流。在软件的衍生开发中,因长年反复进行功能的扩展或变更,软件复杂化,源代码的可读性容易降低。为了解决这样的状况,一般进行软件的重构。重构是指不改***件的动作地变更其内部结构。如果对维护性低的方法、类、文件等程序构成要素(下面称为程序要素)适当地进行重构,则软件会变得容易扩展或变更。
支持重构的技术中有反面模式。反面模式是将维护性低的程序要素具有的特征(下面称为问题特征)与具有该问题特征的程序要素的重构方法的模式组合而成的。在重构对象软件中,如果能够确定具有如反面模式所示的问题特征的程序要素,则能够通过应用反面模式来进行重构。
专利文献1中记载了一种方法,根据源代码、结构管理***或运转日志来计测度量,评价源代码是否与反面模式相符。从而,能够不提取不需要重构的复杂的源代码,而确定真正需要重构的源代码。
现有技术文献
专利文献
专利文献1:日本特开2016-143107号公报
发明内容
发明要解决的技术问题
但是,在专利文献1的方法中,使用对源代码进行程序分析而得到的程序要素的特征量(下面称为代码度量)来判断该程序要素是否与反面模式相符,在相符的情况下将该程序要素与重构流程和优先度一同提示。但是,提示的重构流程是对于每个反面模式预先设定的程序要素全体的修正方针。因此,重构作业者需要自己判断要对程序要素中的哪个位置怎样进行修正,对于重构作业者需要较高的技能。
下面,以Long Method这一反面模式为例进行说明。
Long Method是指用于对具有因为程序要素是过大的方法所以程序要素的可读性低这一问题特征的程序要素进行重构的模式。当程序的可读性低时,程序要素的修正者在修正程序要素时,不仅理解修正对象的程序要素要耗费时间,而且有可能错误地理解修正对象的程序要素的动作而进行了错误的修正。
一般而言,对于与Long Method相符的程序要素存在方法分割这一重构流程。这是通过将过大的方法分割为多个小的方法,以使其与Long Method不相符。
利用专利文献1的方法,能够发现与Long Method相符的程序要素,并将该程序要素与重构流程和优先度一同在画面上提示。但是,关于对Long Method的重构流程,仅限于提示为方法分割,无法提示在方法内的哪个位置进行方法分割即可。因此,重构作业者需要自己判断方法的分割位置,需要较高的技能。
本发明是鉴于上述情况而做出的,其目的在于提供能够提示源代码中包括的应当分割的程序要素的源代码分析方法和源代码分析装置。
用于解决技术问题的手段
为了实现上述目的,本发明第一方面的源代码分析方法的特征在于:代码度量获取部对具有多个程序要素的源代码进行分析而生成关于程序要素的长度和复杂度的代码度量;提交信息获取部获取关于所述程序要素的变更历史的提交信息;评分计算部基于所述代码度量和所述提交信息,计算所述程序要素的评分;维护性指标计算部基于所述代码度量,计算所述程序要素的维护性指标;列表生成部基于所述评分和所述维护性指标,生成作为要分割为多个的候选的所述程序要素的列表。
发明效果
采用本发明,能够提示源代码中包括的应当分割的程序要素。
附图说明
图1是表示第一实施方式的源代码分析装置的硬件结构的框图。
图2是表示图1的源代码分析装置的功能结构的框图。
图3是表示由图2的源代码分析装置获取的代码度量的一个例子的图。
图4是表示对图2的源代码分析装置输入的程序要素变更历史的一个例子的图。
图5是表示由图2的源代码分析装置计算的Long Method Score的一个例子的图。
图6是表示由图2的源代码分析装置计算的维护性指标的一个例子的图。
图7是表示由图2的源代码分析装置生成的Long Method列表的一个例子的图。
图8是表示图2的代码度量获取部的处理的流程图。
图9是表示图2的Long Method Score计算部的处理的流程图。
图10是表示维护性指标计算部的处理的流程图。
图11是表示图2的Long Method条件设定部的处理的流程图。
图12是表示图2的Long Method列表生成部的处理的流程图。
图13是表示由图2的Long Method条件设定部显示的以维护性指标为横轴、以程序要素数为纵轴的直方图的一个例子的图。
图14是表示由图2的Long Method条件设定部显示的以Long Method Score为横轴、以程序要素数为纵轴的直方图的一个例子的图。
图15是表示第二实施方式的源代码分析装置的功能结构的框图。
图16是表示对图15的源代码分析装置输入的错误(bug)历史信息的一个例子的图。
图17是表示图15的Long Method条件设定部的处理的流程图。
图18是表示图15的Long Method列表生成部的处理的流程图。
图19是表示由图15的Long Method条件设定部显示的以维护性指标为横轴、以程序要素数为纵轴的直方图的一个例子的图。
图20是表示由图15的Long Method条件设定部显示的以Long Method Score为横轴、以程序要素数为纵轴的直方图的一个例子的图。
图21是表示由第三实施方式的源代码分析装置生成的Long Method列表的一个例子的图。
图22是表示第四实施方式的源代码分析装置的功能结构的框图。
图23是表示对图22的源代码分析装置输入的子反面模式定义信息的一个例子的图。
图24是表示由图22的源代码分析装置生成的子反面模式列表的一个例子的图。
图25是表示对图22的源代码分析装置输入的改善类目信息的一个例子的图。
图26是表示图22的子反面模式分类部的处理的流程图。
图27是表示图22的改善位置映射部的处理的流程图。
图28是表示从第六实施方式的源代码分析装置输出的表示出了改善位置的源代码的一个例子的图。
图29是表示第八实施方式的源代码分析装置的画面转移的一个例子的图。
图30是表示图22的源代码分析装置的分析对象选择画面的一个例子的图。
图31是表示图22的源代码分析装置的Long Method条件设定画面的一个例子的图。
图32是表示图22的源代码分析装置的Long Method一览画面的一个例子的图。
图33是表示图22的源代码分析装置的改善位置显示画面的一个例子的图。
符号说明
10……源代码分析装置,11……处理器,12……主存储装置,13……辅助存储装置,14……输入装置,15……输出装置,16……通信装置,17……总线。
具体实施方式
参照附图对实施方式进行说明。下面说明的实施方式不是对权利要求书中的发明进行限定,并且在实施方式中说明的各要素及其全部组合对于发明的解决手段并不一定是必需的。
(第一实施方式)
图1是表示第一实施方式的源代码分析装置的硬件结构的框图。
在图1中,源代码分析装置10A包括处理器11、主存储装置12、辅助存储装置13、输入装置14、输出装置15和通信装置16。处理器11、主存储装置12、辅助存储装置13、输入装置14、输出装置15和通信装置16经由总线17等通信单元彼此可通信地连接。
处理器11例如使用CPU(Central Processing Unit:中央处理器)或MPU(MicroProcessing Unit:微处理器)构成。处理器11通过读取并执行主存储装置12中存储的程序,来实现源代码分析装置10A的各种功能。主存储装置12是存储程序和数据的装置,例如是ROM(Read Only Memory:只读存储器)、RAM(Random Access Memory:随机存取存储器)、非易失性半导体存储器(NVRAM(Non Volatile RAM))等。
辅助存储装置13例如是硬盘驱动器、SSD(Solid State Drive:固态驱动器)、光学式存储装置(CD(Compact Disc:光盘)、DVD(Digital Versatile Disc:数字多功能光盘)等)、存储***、IC卡、SD存储卡或光学式记录介质等记录介质的读取/写入装置、云服务器的存储区域等。辅助存储装置13中存储的程序和数据可随时被载入至主存储装置12。
输入装置14例如是键盘、鼠标、触摸面板、读卡器、声音输入装置等。输出装置15是对用户提供处理进度和处理结果等各种信息的用户界面。输出装置15例如是画面显示装置(液晶监视器、有机EL显示器、显卡等)、声音输出装置(扬声器等)、打印装置等。例如也可以采用源代码分析装置10A经由通信装置16与其他装置之间进行信息的输入和输出的结构。
通信装置16是实现经由LAN(Local Area Network:局域网)或互联网等通信手段与其他装置之间的通信的有线方式或无线方式的通信接口。通信装置16例如是NIC(Network Interface Card:网络接口卡)、无线通信模块、USB(Universal SerialInterface:通用串行接口)模块、串行通信模块等。
在此,在辅助存储装置13中,能够存储源代码分析程序13A和源代码13B。然后,处理器11将源代码分析程序13A和源代码13B载入至主存储装置12,通过执行源代码分析程序13A,能够对源代码13B进行分析。
此时,处理器11能够对具有多个程序要素的源代码13B进行分析而生成关于程序要素的长度和复杂度的代码度量,获取关于程序要素的变更历史的提交信息,基于代码度量和提交信息,计算程序要素的评分,基于代码度量,计算程序要素的维护性指标,基于评分和维护性指标,生成作为要分割为多个的候选的程序要素的列表。评分可以是LongMethod Score。
处理器11还能够基于子反面模式定义信息,将应当分割的程序要素分类为子反面模式,基于改善类目信息来提示源代码的改善位置。
代码度量是按源代码的一系列基准将源代码13B数值化而得到的值。例如,作为代码度量,可以使用对源代码13B进行分析而生成的关于程序要素的长度和复杂度的数值。程序要素是程序的构成要素。例如,程序要素是模块、类、文件、方法、字段、函数、变量等。LongMethod Score是用数值来表示因为程序要素是过大的方法所以程序要素的可读性低这一特征而得到的。维护性指标是用数值来表示对关于程序的变更的工作量有影响的特性而得到的。子反面模式是按Long Method的种类对反面模式进行分类而得到的。子反面模式定义信息是定义了子反面模式的信息。改善类目信息是表示对于子反面模式的程序改善方法的信息。
源代码分析程序13A的执行,可以由多个处理器或计算机分担。或者,处理器11也可以经由通信装置16对云计算机等指示执行源代码分析程序13A的全部或一部分,并接收其执行结果。
图2是表示图1的源代码分析装置的功能结构的框图。
在图2中,源代码分析装置10A包括提交信息获取部100、代码度量获取部101、LongMethod Score计算部102、维护性指标计算部103、Long Method条件设定部104A、LongMethod列表生成部105A和信息存储部200。
这些功能例如能够通过处理器11读取并执行主存储装置12和辅助存储装置13中存储的程序来实现。或者,这些功能例如能够通过源代码分析装置10A包括的硬件(ASIC(Application Specific Integrated Circuit:专用集成电路)等)来实现。
在源代码分析时,对源代码分析装置10A输入源代码109、源代码109的程序要素变更历史110、Long Method Score阈值112和维护性指标阈值113。代码度量获取部101接受作为分析对象的源代码109,生成代码度量117,并将其输出至Long Method Score计算部102和维护性指标计算部103。提交信息获取部100接受作为分析对象的源代码109的程序要素变更历史110,生成提交信息108,并将其输出至Long Method Score计算部102。
Long Method Score计算部102接受代码度量101和提交信息108,生成LongMethod Score 118,并将其输出至Long Method条件设定部104A和Long Method列表生成部105A。维护性指标计算部103接受代码度量117,生成维护性指标119,并将其输出至LongMethod条件设定部104A和Long Method列表生成部105A。
Long Method条件设定部104A接受Long Method Score 118和维护性指标119,使得能够设定Long Method Score阈值112和维护性指标阈值113。此时,Long Method条件设定部104A能够显示程序要素数与维护性指标119的关系以及程序要素数与Long MethodScore 118的关系。阈值设定者能够参照这些关系,设定Long Method Score阈值112和维护性指标阈值113。
Long Method Score阈值112和维护性指标阈值113被输入至Long Method列表生成部105A。Long Method列表生成部105A接受Long Method Score 118、维护性指标119、Long Method Score阈值112和维护性指标阈值113,生成Long Method列表120A。LongMethod列表120A是将与Long Method相符的程序要素记录为应当分割的程序要素而得到的。
在此,Long Method列表生成部105A可以将Long Method Score为Long MethodScore阈值112以上并且维护性指标为维护性指标阈值113以下的程序要素判断为LongMethod。或者,也可以是Long Method列表生成部105A将Long Method Score为Long MethodScore阈值112以上的程序要素判断为Long Method。
信息存储部200存储代码度量117、Long Method Score 118和维护性指标119。信息存储部200可以使用图1的辅助存储装置13。信息存储部200除了这些信息以外,还存储代码度量获取部101、Long Method Score计算部102、维护性指标计算部103、Long Method条件设定部104A、Long Method列表生成部105A适当参照或生成的信息等。信息存储部200能够利用例如文件***或DBMS(DataBase Management System:数据库管理***)来管理辅助存储装置13中存储的信息。
在此,源代码分析装置10A基于代码度量117和提交信息108生成Long MethodScore 118,基于Long Method Score 118来判断程序要素是否为Long Method,从而能够提示源代码109中包括的应当分割的程序要素。因此,重构作业者无需自己判断方法的分割位置,就能够得知在方法内的哪个位置进行方法分割即可,能够提高反复进行了功能的扩展或变更的软件的可读性。
图3是表示由图2的源代码分析装置获取的代码度量的一个例子的图。
在图3中,代码度量117是将以作为分析对象的程序的源代码109作为输入由代码度量获取部101计算出的各种度量值记录为代码度量记录303而得到的。代码度量记录303包括:记录了该代码度量记录303的计算对象程序要素的程序要素名301;和表示该程序要素名301的各种度量值的代码度量302。例如,在程序要素1中,记录度量M1=75、度量M2=0.3这样的值。
图4是表示对图2的源代码分析装置输入的程序要素变更历史的一个例子的图。
在图4中,程序要素变更历史110是每当作为分析对象的程序发生变更时,将发生的变更的历史记录为变更历史记录403而得到的。变更历史记录403包括:为了识别该变更历史记录403而唯一附加的提交编号401;和与该变更历史记录403对应的程序变更发生时同时变更的一个以上的变更程序要素名402。例如,与提交编号401为T1的变更历史记录403对应的变更发生时,变更程序要素名402中记载的程序要素1、程序要素2和程序要素3同时被变更。
图5是表示由图2的源代码分析装置计算的Long Method Score的一个例子的图。
在图5中,Long Method Score 118是将以代码度量117和提交信息108作为输入在Long Method Score计算部102中计算出的值记录为Long Method Score记录503而得到的。Long Method Score记录503包括:记录了该Long Method记录503的计算对象程序要素的程序要素名501;和该程序要素名501的Long Method Score 502。例如,在程序要素1中,记录Long Method Score=57这样的值。Long Method Score 502越大,表示该程序要素与LongMethod反面模式的对应性越高。
图6是表示由图2的源代码分析装置计算的维护性指标的一个例子的图。
在图6中,维护性指标119是将以代码度量117作为输入在维护性指标计算部103中计算出的值记录为维护性指标记录603而得到的。维护性指标记录603包括:记录了该维护性指标记录603的计算对象程序要素的程序要素名601;和该程序要素名601的维护性指标602。作为维护性指标602的计算方法,可以使用一般使用的计算式。维护性指标602越大,表示该程序要素的维护性越高。
在图2中,Long Method Score阈值112是记录在Long Method生成部105中判断各程序要素是否为Long Method时使用的Long Method Score 118的阈值而得到的。例如,设定60作为Long Method Score阈值112。维护性指标阈值113是记录在Long Method生成部105中判断各程序要素是否为Long Method时使用的维护性指标119的阈值而得到的。例如,设定30作为维护性指标阈值113。
图7是表示由图2的源代码分析装置生成的Long Method列表的一个例子的图。
在图7中,Long Method列表120A是将由Long Method列表生成部105A判断为与Long Method相符的程序要素记录为Long Method记录702而得到的。Long Method记录702包括与Long Method相符的程序要素名701。例如,程序要素1、2作为与Long Method相符的程序要素被记录在Long Method列表120A中。
图8是表示图2的代码度量获取部的处理的流程图。
在图8中,代码度量获取部101读取分析对象程序的源代码109(801)。接着,代码度量获取部101将源代码109分割为程序要素(802)。接着,代码度量获取部101判断是否已对全部程序要素获取了代码度量117(803)。在尚未对全部程序要素获取代码度量117的情况下,代码度量获取部101获取该程序要素的代码度量117,返回803(804)。作为获取的代码度量117的种类,选择Long Method Score计算部102和维护性指标计算部103中使用的代码度量的种类。当已对全部程序要素获取了代码度量117时,结束处理。
图9是表示图2的Long Method Score计算部的处理的流程图。
在图9中,Long Method Score计算部102判断是否已对全部程序要素计算了LongMethod Score 118(901)。在尚未对全部程序要素计算Long Method Score 118的情况下,Long Method Score计算部102读取该程序要素的提交信息108和代码度量117(902、903)。但是,当在Long Method Score计算(904)中不需要提交信息108的情况下,可省略提交信息108的读取。当在Long Method Score计算(904)中不需要代码度量117的情况下,可省略代码度量117的读取。
此时,Long Method Score 118根据提交信息108和代码度量117中的任一者或两者来计算。Long Method Score的计算方法没有限定。提交信息108的读取(902)和代码度量117的读取(903)的顺序没有限定。
接着,Long Method Score计算部102基于该程序要素的提交信息108和代码度量117计算Long Method Score 118,返回901(904)。当已对全部程序要素计算了Long MethodScore 118时,结束处理。
Long Method Score 118的计算中使用的代码度量117,例如是不含注释的行数、圈复杂度、注释行数和局部变量声明数。Long Method Score 118的计算中使用的提交信息108,例如是每次提交的变更位置数和加权提交次数。
图10是表示维护性指标计算部的处理的流程图。
在图10中,维护性指标计算部103判断是否已对全部程序要素计算了维护性指标119(1001)。在尚未对全部程序要素计算维护性指标119的情况下,维护性指标计算部103读取该程序要素的代码度量117(1002)。接着,维护性指标计算部103基于该程序要素的代码度量117计算维护性指标119,返回1001(1003)。当已对全部程序要素计算了维护性指标119时,结束处理。
维护性指标是表示软件的维护的容易程度的代码度量。作为维护性指标之一,例如有易维护性指数。易维护性指数例如可以用下面的式子计算。
易维护性指数=171-5.2*ln((N1+N2)*log2(n1+n2))-0.23*(G)-16.2*ln(LOC))*100/171
其中,N1=(运算符总数),N2=(运算数总数),n1=(运算符种类数),n2=(运算数种类数),G=(圈数),LOC=(不含注释的行数)。用作维护性指标的并不限于易维护性指数,可以是与程序的维护性有关的任意的指标。
图11是表示图2的Long Method条件设定部的处理的流程图。
在图11中,Long Method条件设定部104A判断是否已对全部程序要素读取了LongMethod Score 118和维护性指标119(1101)。在尚未对全部程序要素读取Long MethodScore 118和维护性指标119的情况下,Long Method条件设定部104A读取该程序要素的Long Method Score 118和维护性指标119(1102、1103)。
当Long Method条件设定部104A已对全部程序要素读取了Long Method Score118和维护性指标119时,对Long Method Score阈值112和维护性指标阈值113设定初始值(1104)。在此,可以选择任意的值作为初始值。
接着,Long Method条件设定部104A显示以维护性指标为横轴、以程序要素数为纵轴的直方图(1105)。该直方图的显示对阈值设定者进行Long Method Score阈值112和维护性指标阈值113的设定进行辅助。
接着,Long Method条件设定部104A显示以Long Method Score为横轴、以程序要素数为纵轴的直方图(1106)。该直方图的显示对阈值设定者进行Long Method Score阈值112和维护性指标阈值113的设定进行辅助。
接着,Long Method条件设定部104A接受阈值设定者否继续进行阈值设定的判断(1107)。在判断为阈值设定者继续阈值设定的情况下,Long Method条件设定部104A接受由阈值设定者进行的Long Method Score阈值112的数值输入,将其设定为Long MethodScore阈值112(1108)。接着,Long Method条件设定部104A接受由阈值设定者进行的维护性指标阈值113的数值输入,将其设定为维护性指标阈值113(1109)。
接着,Long Method条件设定部104A将由阈值设定者输入的数值设定为LongMethod Score阈值112和维护性指标阈值113时,返回1105。Long Method条件设定部104A反复进行1105~1109的处理,直到判断为阈值设定者不继续阈值设定,当判断为阈值设定者不继续阈值设定时,结束处理。
Long Method Score 118的读取(1102)和维护性指标119的读取(1103)的顺序没有限定。以维护性指标119为横轴、以程序要素数为纵轴的直方图的显示(1105)和以LongMethod Score 118为横轴、以程序要素数为纵轴的直方图的显示(1106)的顺序没有限定。阈值设定者进行的Long Method Score阈值112的输入(1108)和阈值设定者进行的维护性指标阈值113的输入(1109)的顺序没有限定。
图12是表示图2的Long Method列表生成部的处理的流程图。
在图12中,Long Method列表生成部105A准备空白的Long Method列表120A(1201)。接着,Long Method列表生成部105A读取程序要素的Long Method Score阈值112和维护性指标阈值113(1202、1203)。
接着,Long Method列表生成部105A判断是否已对全部程序要素将Long MethodScore 118和维护性指标119分别与Long Method Score阈值112和维护性指标阈值113进行了比较(1204)。在尚未对全部程序要素将Long Method Score 118和维护性指标119分别与Long Method Score阈值112和维护性指标阈值113进行比较的情况下,Long Method列表生成部105A读取该程序要素的Long Method Score 118和维护性指标119(1205、1206)。
接着,Long Method列表生成部105A判断是否Long Method Score118为LongMethod Score阈值112以上、并且维护性指标119为维护性指标阈值113以下(1207)。在满足1207的条件的情况下,Long Method列表生成部105A将程序要素和其他信息追加到LongMethod列表120A中(1208),返回1204。在不满足1207的条件的情况下,跳过1208,返回1204。当已对全部程序要素将Long Method Score 118和维护性指标119分别与Long MethodScore阈值112和维护性指标阈值113进行了比较时,结束处理。
空白的Long Method列表120A的准备(1201)、Long Method Score阈值112的读取(1202)和维护性指标阈值113的读取(1203)的顺序没有限定。Long Method Score 118的读取(1205)和维护性指标119的读取(1206)的顺序没有限定。
图13是表示由图2的Long Method条件设定部显示的以维护性指标为横轴、以程序要素数为纵轴的直方图的一个例子的图。
在图13的例子中,表示出了设定了60作为Long Method Score阈值112且设定了30作为维护性指标阈值113的情况。直方图包括图例1301、维护性指标阈值轴1302、作为纵轴的程序要素数1303、作为横轴的维护性指标1304。直方图主体1305包括全部程序要素的直方图1306和Long Method Score为阈值以上的程序要素的直方图1307。Long Method Score为阈值以上的程序要素中存在于维护性指标阈值轴1302左侧的程序要素,在Long Method列表生成部105A中被判断为Long Method。阈值设定者能够以该直方图为参考来变更LongMethod Score阈值112和维护性指标阈值113。
图14是表示由图2的Long Method条件设定部显示的以Long Method Score为横轴、以程序要素数为纵轴的直方图的一个例子的图。
在图14的例子中,表示出了设定了60作为Long Method Score阈值112且设定了30作为维护性指标阈值113的情况。直方图包括图例1401、Long Method Score阈值轴1402、作为纵轴的程序要素数1403、作为横轴的Long Method Score 1404。直方图主体1405包括全部程序要素的直方图1406和维护性指标为阈值以下的程序要素的直方图1407。维护性指标为阈值以下的程序要素中存在于Long Method Score阈值轴1402右侧的程序要素,在LongMethod列表生成部105A中被判断为Long Method。阈值设定者能够以该直方图为参考来变更Long Method Score阈值112和维护性指标阈值113。
这样,通过使用Long Method Score 118和维护性指标119,能够发现与作为反面模式之一的Long Method相符的程序要素,并将其作为应当分割的程序要素进行列表。此时,阈值设定者通过以图13或图14的直方图为参考来变更Long Method Score阈值112和维护性指标阈值113,能够使作为Long Method提取的程序要素的个数变化。
(第二实施方式)
第二实施方式表示出了在第一实施方式所示的Long Method条件设定部104A和Long Method列表生成部105A中,除了实施例1所示的输入以外,还将错误历史信息和可读性降低词语条件作为输入使用的情况。
图15是表示第二实施方式的源代码分析装置的功能结构的框图。
在图15中,源代码分析装置10B包括Long Method条件设定部104B和Long Method列表生成部105B代替图2的源代码分析装置10A的Long Method条件设定部104A和LongMethod列表生成部105A。
在源代码分析时,对源代码分析装置10B,除了输入源代码109、源代码109的程序要素变更历史110、Long Method Score阈值112和维护性指标阈值113以外,还输入错误历史信息111和可读性降低词语条件114。错误历史信息111记录有各程序要素过去发生的错误的内容及其原因。可读性降低词语条件114记录有由Long Method生成部105B判断各程序要素是否为Long Method时使用的错误历史信息111中的错误发生原因的判断条件。
Long Method条件设定部104B接受Long Method Score 118、维护性指标119和错误历史信息111,使得能够设定Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114。此时,Long Method条件设定部104B能够按有无可读性降低词语,来显示程序要素数与维护性指标119的关系以及程序要素数与Long Method Score118的关系。阈值设定者能够参照这些关系,设定Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114。
Long Method Score阈值112、维护性指标阈值113、错误历史信息111和可读性降低词语条件114被输入至Long Method列表生成部105B。Long Method列表生成部105B接受Long Method Score 118、维护性指标119、Long Method Score阈值112、维护性指标阈值113、错误历史信息111和可读性降低词语条件114,生成Long Method列表120A。
在此,Long Method列表生成部105B可以将Long Method Score为Long MethodScore阈值112以上并且维护性指标为维护性指标阈值113以下、而且错误发生原因满足可读性降低词语条件114的程序要素判断为Long Method。或者,也可以是Long Method列表生成部105B将Long Method Score为Long Method Score阈值112以上、而且错误发生原因满足可读性降低词语条件114的程序要素判断为Long Method。或者,也可以是Long Method列表生成部105B将维护性指标为维护性指标阈值113以下、而且错误发生原因满足可读性降低词语条件114的程序要素判断为Long Method。
在此,源代码分析装置10B基于代码度量117和提交信息108生成Long MethodScore 118,基于Long Method Score 118和错误发生原因来判断程序要素是否为LongMethod,从而能够提示源代码109中包括的应当分割的程序要素。此时,在错误发生原因满足可读性降低词语条件114的情况下,容易引起程序的误读,该程序要素是Long Method的可能性高。因此,通过除了参照Long Method Score 118和维护性指标119以外,还参照错误历史信息111,来判断源代码109的程序要素是否为Long Method,能够提高Long Method的判断精度。
图16是表示对图15的源代码分析装置输入的错误历史信息的一个例子的图。
在图16中,错误历史信息111按每个程序要素存在。错误历史信息111包括:表示错误历史信息111对应于哪个程序要素的程序要素名1601;和该程序要素的过去的错误信息1602。过去的错误信息1602包括该程序要素的错误记录1605。错误记录1605包括该程序要素的该错误的错误内容1603和错误发生原因1604。例如,在程序要素1的错误历史信息111中,作为错误内容1603,记录有错误内容B1、B2,作为错误发生原因1604,记录有例外处理遗漏和条件分支考虑遗漏。但是,错误内容1603也可以省略。
作为可读性降低词语条件114,例如设定“(理解|认识|考虑|确认|重新审视|研究|修正)*(遗漏|不足|不充分|疏忽|忘记|遗忘)”。在本例中,用正则表达式的形式表示出了可读性降低词语条件114,但是并不限于该方法,可以是能够表达自然语言的匹配条件的任意的方法。关于可读性降低词语条件114中使用的单词及其组合,只要是表示可读性降低的,就可以是任意单词的任意组合。
图17是表示图15的Long Method条件设定部的处理的流程图。
在图17中,Long Method条件设定部104B判断是否已对全部程序要素读取了LongMethod Score 118、维护性指标119和错误历史信息111(1701)。在尚未对全部程序要素读取Long Method Score 118、维护性指标119和错误历史信息111的情况下,Long Method条件设定部104B读取该程序要素的Long Method Score 118、维护性指标119和错误历史信息111(1702、1703、1704)。
Long Method条件设定部104B已对全部程序要素读取了Long Method Score 118、维护性指标119和错误历史信息111时,对Long Method Score阈值112、维护性指标阈值113和错误历史信息111设定初始值(1705)。在此,可以选择任意的值作为初始值。
接着,Long Method条件设定部104B按有无可读性降低词语来显示以维护性指标为横轴、以程序要素数为纵轴的直方图(1706)。该直方图的显示对阈值设定者进行LongMethod Score阈值112、维护性指标阈值113和可读性降低词语条件114的设定进行辅助。
接着,Long Method条件设定部104B按有无可读性降低词语来显示以Long MethodScore为横轴、以程序要素数为纵轴的直方图(1707)。该直方图的显示对阈值设定者进行Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114的设定进行辅助。
接着,Long Method条件设定部104B接受阈值设定者否继续进行阈值设定的判断(1708)。在判断为阈值设定者继续阈值设定的情况下,Long Method条件设定部104B接受由阈值设定者进行的Long Method Score阈值112的数值输入,将其设定为Long MethodScore阈值112(1709)。接着,Long Method条件设定部104B接受由阈值设定者进行的维护性指标阈值113的数值输入,将其设定为维护性指标阈值113(1710)。接着,Long Method条件设定部104B接受由阈值设定者进行的可读性降低词语条件114的文字输入,将其设定为可读性降低词语条件114(1711)。
接着,Long Method条件设定部104B将阈值设定者的输入设定为Long MethodScore阈值112、维护性指标阈值113和可读性降低词语条件114时,返回1706。Long Method条件设定部104B反复进行1706~1711的处理,直到判断为阈值设定者不继续阈值设定,当判断为阈值设定者不继续阈值设定时,结束处理。
Long Method Score 118的读取(1702)、维护性指标119的读取(1703)和错误历史信息111的读取(1704)的顺序没有限定。阈值设定者进行的Long Method Score阈值112的输入(1709)、维护性指标阈值113的输入(1710)和可读性降低词语条件114的输入(1711)的顺序没有限定。
图18是表示图15的Long Method列表生成部的处理的流程图。
在图18中,Long Method列表生成部105B准备空白的Long Method列表120A(1801)。接着,Long Method列表生成部105B读取程序要素的Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114(1802、1803、1804)。
接着,Long Method列表生成部105B判断是否已对全部程序要素将Long MethodScore 118、维护性指标119和错误历史信息111的错误发生原因分别与Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114进行了比较(1805)。在尚未对全部程序要素将Long Method Score 118、维护性指标119和错误历史信息111的错误发生原因分别与Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114进行比较的情况下,Long Method列表生成部105B读取该程序要素的Long Method Score 118、维护性指标119和错误历史信息111(1806、1807、1808)。
接着,Long Method生成部105B判断是否Long Method Score 118为Long MethodScore阈值112以上、并且维护性指标119为维护性指标阈值113以下、并且错误发生原因满足可读性降低词语条件114(1809)。在满足1809的条件的情况下,Long Method列表生成部105B将程序要素追加到Long Method列表120A中(1810),返回1805。在不满足1809的条件的情况下,跳过1810,返回1805。当已对全部程序要素将Long Method Score 118、维护性指标119和错误历史信息111的错误发生原因分别与Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114进行了比较时,结束处理。
空白的Long Method列表的准备(1801)、Long Method Score阈值112的读取(1802)、维护性指标阈值113的读取(1803)和可读性降低词语条件114的读取(1804)的顺序没有限定。Long Method Score 118的读取(1806)、维护性指标119的读取(1807)和错误历史信息111的读取(1808)的顺序没有限定。
图19是表示由图15的Long Method条件设定部显示的以维护性指标为横轴、以程序要素数为纵轴的直方图的一个例子的图。
在图19的例子中,表示出了设定了60作为Long Method Score阈值112且设定了30作为维护性指标阈值113的情况。直方图包括图例1901、维护性指标阈值轴1302、作为纵轴的程序要素数1303、作为横轴的维护性指标1304。直方图主体1905包括全部程序要素的直方图1306、Long Method Score为阈值以上的程序要素的直方图1307和Long Method Score为阈值以上并且包含可读性降低词语的程序要素的直方图1902。Long Method Score为阈值以上并且包含可读性降低词语的程序要素中存在于维护性指标阈值轴1302左侧的程序要素,在Long Method列表生成部105B中被判断为Long Method。阈值设定者能够以该直方图为参考来变更Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114。
图20是表示由图15的Long Method条件设定部显示的以Long Method Score为横轴、以程序要素数为纵轴的直方图的一个例子的图。
在图20的例子中,表示出了设定了60作为Long Method Score阈值112且设定了30作为维护性指标阈值113的情况。直方图包括图例2001、Long Method Score阈值轴1402、作为纵轴的程序要素数1403、作为横轴的Long Method Score 1404。直方图主体2005包括全部程序要素的直方图1406、维护性指标为阈值以下的程序要素的直方图1407和维护性指标为阈值以下并且包含可读性降低词语的程序要素的直方图2002。维护性指标为阈值以下并且包含可读性降低词语的程序要素中存在于Long Method Score阈值轴1402右侧的程序要素,在Long Method列表生成部105B中被判断为Long Method。阈值设定者能够以该直方图为参考来变更Long Method Score阈值112、维护性指标阈值113和可读性降低词语条件114。
这样,通过在使用Long Method Score 118和维护性指标119的同时,判断程序要素是否包含可读性降低词语,能够提高与作为反面模式之一的Long Method相符的程序要素的判断精度。
(第三实施方式)
第三实施方式是,在图7的Long Method列表120A的Long Method记录702中,除了记录与Long Method相符的程序要素名701以外,还记录该程序要素的Long Method Score和维护性指标等。
图21是表示由第三实施方式的源代码分析装置生成的Long Method列表的一个例子的图。
在图21中,Long Method列表120B是将由各Long Method列表生成部105A、105B判断为与Long Method相符的程序要素记录为Long Method记录2104而得到的。Long Method记录2104包括与Long Method相符的程序要素名2101、Long Method Score2102和维护性指标2103等。Long Method记录2104中可以还包括其他信息。
(第四实施方式)
第四实施方式是,在生成图7的Long Method列表120A或图21的Long Method列表120B之后,进而将Long Method列表120A、120B中的各程序要素分类为子反面模式,生成与子反面模式相应地表示出了改善位置的源代码。
图22是表示第四实施方式的源代码分析装置的功能结构的框图。
在图22中,源代码分析装置10C除了图15的源代码分析装置10B的结构以外,还包括子反面模式分类部106和改善位置映射部107。这些功能可与第一实施方式至第三实施方式的情况同样地实现。
在源代码分析时,对源代码分析装置10C,除了输入源代码109、源代码109的程序要素变更历史110、Long Method Score阈值112和维护性指标阈值113、错误历史信息111和可读性降低词语条件114以外,还输入子反面模式定义信息115和改善类目信息116。
子反面模式分类部106接受作为分析对象的源代码109、子反面模式定义信息115、程序要素变更历史110、代码度量117和Long Method列表120B,生成子反面模式列表121。改善位置映射部107接受源代码109和改善类目信息116,生成表示出了改善位置的源代码122。源代码的改善位置能够按程序的行单位或标记(token)单位表示。
Long Method的改善位置例如能够分类为下面的A)~D)。
A)如果是处理的分段处,则是该分段处;
B)如果分支目标中存在共同部分,则将该共同部分提取并函数化的位置;
C)将判断接下来转移至哪个状态的处理和在该状态下执行的处理分割的分段处;
D)在对本来的处理追加了例外处理的情况下,将本来的处理和例外处理分割的分段处。
信息存储部200除了存储代码度量117、Long Method Score 118和维护性指标119以外,还存储Long Method列表120B和子反面模式列表121。信息存储部200除了这些信息以外,还存储代码度量获取部101、Long Method Score计算部102、维护性指标计算部103、Long Method条件设定部104B、Long Method列表生成部105B、子反面模式分类部106、改善位置映射部107适当参照或生成的信息等。信息存储部200能够利用例如文件***或DBMS(DataBase Management System:数据库管理***)来管理辅助存储装置13中存储的信息。
在此,源代码分析装置10C基于子反面模式定义信息115,将应当分割的程序要素分类为子反面模式,基于改善类目信息116提示表示出了改善位置的源代码122,从而,重构作业者无需自己判断方法的分割位置,就能够得知在方法内的哪个位置进行方法分割即可,能够提高反复进行了功能的扩展或变更的软件的可读性。
在图22中,表示出了在图15的源代码分析装置10B的结构中追加子反面模式分类部106和改善位置映射部107而得到的结构,但是也可以是在图2的源代码分析装置10A的结构中追加子反面模式分类部106和改善位置映射部107。
图23是表示对图22的源代码分析装置输入的子反面模式定义信息的一个例子的图。
在图23中,子反面模式定义信息115是将定义信息记录为子反面模式定义记录2303而得到的,其中,上述定义信息用于将作为反面模式之一的Long Method进一步分类为子反面模式。子反面模式记录2303包括该子反面模式的名称2301和该子反面模式的定义2302。
在子反面模式定义2302中,也可以为1个程序要素对应于多个子反面模式那样的定义。子反面模式定义2302的描述方法没有限定,可以用源代码109、代码度量117和程序要素变更历史110的组合来定义。作为子反面模式,例如可以举出“分条书写”。这是将多个处理块记述为一系列处理的子反面模式。除此以外,还可以举出:“大量条件语句”,其为由大量条件语句构成的子反面模式;和“状态转移”,其为在进行状态转移的代码中混同地记述了该状态下的处理主体和用于状态转移的处理的子反面模式。进而,还可以举出“搁置”,其为在本来的处理中追加了例外处理的子反面模式。
图24是表示由图22的源代码分析装置生成的子反面模式列表的一个例子的图。
在图24中,子反面模式列表121包括对图21的Long Method列表120B的各LongMethod记录2104追加记录了被分类为Long Method的子反面模式的名称2301而得到的子反面模式分类记录2402。
例如,当程序要素1与由图23的子反面模式定义2302定义的子反面模式A1相符时,在程序要素1的子反面模式分类记录2402中追加记录子反面模式A1这样的名称2301。当程序要素2与由图23的子反面模式定义2302定义的子反面模式A2相符时,在程序要素2的子反面模式分类记录2402中追加记录子反面模式A2这样的名称2301。
在该程序要素对应于多个子反面模式的情况下,也可以存在程序要素名相同但是子反面模式不同的多个子反面模式分类记录2405。
在图24中,表示出了对图21的Long Method列表120B的各Long Method记录2104追加记录了被分类为Long Method的子反面模式的名称2301的例子,但是也可以是对图7的Long Method列表120A的各Long Method记录702追加记录被分类为Long Method的子反面模式的名称2301。
图25是表示对图22的源代码分析装置输入的改善类目信息的一个例子的图。
在图25中,改善类目信息116是将对子反面模式定义信息115所定义的各子反面模式的程序改善方法记录为改善方法记录2503而得到的。改善方法记录2503包括该子反面模式的名称2501和该子反面模式的改善方法2502。改善方法2502的描述方法没有限定。
图26是表示图22的子反面模式分类部的处理的流程图。
在图26中,子反面模式分类部106准备空白的子反面模式列表121(2601)。接着,子反面模式分类部106读取分析对象程序的源代码109、子反面模式定义信息115和LongMethod列表120B(2602、2603、2604)。
接着,子反面模式分类部106判断是否已对Long Method列表120B中的全部程序要素读取了代码度量117和程序要素变更历史110(2605)。在尚未对Long Method列表120B中的全部程序要素读取代码度量117和程序要素变更历史110的情况下,子反面模式分类部106读取代码度量117和程序要素变更历史110(2606、2607)。作为获取的代码度量的种类,选择子反面模式定义信息115中记载的。
接着,子反面模式分类部106判断是否已对全部子反面模式定义信息115实施了Long Method列表120B中的程序要素的源代码模式、代码度量117和程序要素变更历史110是否满足子反面模式定义的判断(2608)。在尚未对全部子反面模式定义信息115实施LongMethod列表120B中的程序要素的源代码模式、代码度量117和程序要素变更历史110是否满足子反面模式定义的判断的情况下,子反面模式分类部106判断程序要素的源代码模式、代码度量117和程序要素变更历史110是否满足子反面模式定义(2609)。
在满足2609的条件的情况下,子反面模式分类部106将程序要素和子反面模式追加到子反面模式列表121中(2610),返回2608。在不满足2609的条件的情况下,跳过2610,返回2608。当已对全部子反面模式定义信息115实施了Long Method列表120B中的程序要素的源代码模式、代码度量117和程序要素变更历史110是否满足子反面模式定义的判断时,返回2605。当已对Long Method列表120B中的全部程序要素执行了2606~2610的处理时,结束处理。
空白的子反面模式列表121的准备(2601)、源代码109的读取(2602)、子反面模式定义信息115的读取(2603)和Long Method列表120B的读取(2604)的顺序没有限定。代码度量117的读取(2606)和程序要素变更历史110的读取(2607)的顺序没有限定。
图27是表示图22的改善位置映射部的处理的流程图。
在图27中,改善位置映射部107读取分析对象程序的源代码109、改善类目信息116和子反面模式列表121(2701、2702、2703)。接着,改善位置映射部107判断是否已对子反面模式列表121中的全部程序要素生成了表示出了改善位置的源代码122(2704)。在尚未对子反面模式列表121中的全部程序要素生成表示出了改善位置的源代码122的情况下,改善位置映射部107按照改善类目信息116,对程序要素的源代码映射应当分割的位置,生成表示出了改善位置的源代码122,返回2704(2705)。改善位置的表示方式没有限定。当已对子反面模式列表121中的全部程序要素生成了表示出了改善位置的源代码122时,结束处理。
源代码109的读取(2701)、改善类目信息116的读取(2702)和子反面模式列表121的读取(2703)的顺序没有限定。这样,通过在生成Long Method列表之后,表示出LongMethod的改善位置,能够对程序修正者的程序修正进行辅助。
(第五实施方式)
Long Method Score计算部102使用可读性评分和变更发生评分作为Long MethodScore的计算方法。在上述第一实施方式中,用图9的流程图表示Long Method Score计算部102的处理时,对Long Method Score 118的计算方法(904)没有限定,但是在本实施方式中,作为其计算方法,使用可读性评分和变更发生评分。可读性评分是将该程序要素的可读性数值化而得到的评分,其计算方法没有限定。变更发生评分是将对该程序要素的变更发生的程度数值化而得到的评分,其计算方法没有限定。对于如何使用可读性评分和变更发生评分来计算Long Method Score 118也没有限定。
(第六实施方式)
图28是表示从第六实施方式的源代码分析装置输出的表示出了改善位置的源代码的一个例子的图。
在图28中,表示出了改善位置的源代码122包括该程序要素的源代码2801、该程序要素的源代码2801中的改善对象位置2802、和表示改善方法的源代码2803。
在图28的例子中,程序要素的源代码2801被作为Long Method提取。此时,LongMethod列表生成部105B将该程序要素的源代码2801登记在Long Method列表120B中。
该源代码2801是在本来的处理中追加了例外处理R1、R2的子反面模式。此时,子反面模式分类部106将该程序要素的源代码2801作为在本来的处理中追加了例外处理R1、R2的子反面模式登记在子反面模式列表121中。
改善位置映射部107将例外处理R1、R2确定为该程序要素的源代码2801中的改善对象位置2802。于是,改善位置映射部107提示将例外处理R1、R2函数化而得到的代码作为表示改善方法的源代码2803。
从而,重构作业者无需自己判断方法的分割位置,就能够从该程序要素的源代码2801中分割例外处理R1、R2,能够提高在本来的处理中追加了例外处理R1、R2的软件的可读性。
(第七实施方式)
Long Method Score计算部102使用可读性评分和变更发生评分的调和平均作为Long Method Score的计算方法。在上述第五实施方式中,对于如何使用可读性评分和变更发生评分来计算Long Method Score118没有限定,但是在本实施方式中,使其计算方法为可读性评分和变更发生评分的调和平均。但是,可读性评分和变更发生评分的计算方法没有限定。调和平均定义为倒数的算术平均的倒数。即,本实施例中计算用某种方法求出的可读性评分的倒数与用某种方法求出的变更发生评分的倒数的算术平均,将其倒数作为LongMethod Score 118。
例如,可读性降低评分可以采用将不含注释的行数、圈复杂度、注释行数和局部变量声明数归一化而得到的4个值的调和平均值。变更发生评分可以采用将每次提交的变更位置数和加权提交次数归一化而得到的2个值的调和平均值。Long Method Score 118可以采用可读性降低评分和变更发生评分的调和平均值。
(第八实施方式)
图29是表示第八实施方式的源代码分析装置的画面转移的一个例子的图。
在图29中,源代码分析装置10C的画面包括分析对象选择画面2901、Long Method条件设定画面2902、Long Method一览画面2903和改善位置显示画面2904。分析对象选择画面2901与Long Method条件设定画面2902之间能够双向地转移。Long Method条件设定画面2902与Long Method一览画面2903之间能够双向地转移。Long Method一览画面2903与改善位置显示画面2904之间能够双向地转移。从改善位置显示画面2904能够转移至分析对象选择画面2901。
图30是表示图22的源代码分析装置的分析对象选择画面的一个例子的图。
在图30中,分析对象选择画面2901包括分析选项卡3001和设定选项卡3002。分析选项卡3001包括:用于选择分析对象源代码109的分析对象源代码选择部3003;用于选择错误历史信息111的错误历史信息选择部3004;用于选择程序要素变更历史110的程序要素变更历史选择部3005;和分析开始按钮3006。
源代码分析装置10C的使用者在每次分析时使用分析对象源代码选择部3003、错误历史信息选择部3004和程序要素变更历史选择部3005来选择各数据,按下分析按钮3006,使分析开始。当源代码分析装置10C的使用者按下分析按钮3006时,源代码分析装置10内的代码度量计算部101、Long Method Score计算部102、维护性指标计算部103和LongMethod条件设定部104B工作,源代码分析装置10C的画面转移至Long Method条件设定画面2902。
设定选项卡3002包括:用于选择改善类目信息116的改善类目信息选择部3007;和用于选择子反面模式定义信息115的子反面模式定义信息选择部3008。源代码分析装置10C的使用者在初次使用源代码分析装置10C时使用改善类目信息选择部3007和子反面模式定义信息选择部3008来选择各数据。即使是第二次以后的使用,在需要变更改善类目信息116和子反面模式定义信息115的情况下,也使用改善类目信息选择部3007和子反面模式定义信息选择部3008来选择各数据。
图31是表示图22的源代码分析装置的Long Method条件设定画面的一个例子的图。
在图31中,Long Method条件设定画面2902包括阈值设定选项卡3101、直方图选项卡3102、返回分析对象选择按钮3113和设定完成按钮3114。
阈值设定选项卡3101包括:用于设定Long Method Score阈值112的Long MethodScore阈值选择部3105;用于选择维护性指标阈值113的维护性指标阈值选择部3106;和用于选择可读性降低词语条件114的可读性降低词语条件选择部3107。
当源代码分析装置10C的使用者变更Long Method Score阈值选择部3105、维护性指标阈值选择部3106和可读性降低词语选择部3107的值和条件时,直方图选项卡3102内的维护性指标直方图选项卡3103和Long Method Score直方图选项卡3104的内容与其相应地变更。
直方图选项卡3102包括维护性指标直方图选项卡3103和Long Method Score直方图选项卡3104。在维护性指标直方图选项卡3103内描绘有图19所示的内容,在Long MethodScore直方图选项卡3104内描绘有图20所示的内容。
源代码分析装置10C的使用者以维护性指标直方图选项卡3103和Long MethodScore直方图选项卡3104的内容为参考,设定Long Method Score阈值选择部3105、维护性指标阈值选择部3106和可读性降低词语选择部3107的值和条件。源代码分析装置10C的使用者完成设定之后,按下设定完成按钮3114时,源代码分析装置10C内的Long Method列表生成部105B和子反面模式分类部106工作,画面转移至Long Method一览画面2903。另一方面,当源代码分析装置10C的使用者按下返回分析对象选择按钮3113时,画面转移至分析对象选择画面2901。
图32是表示图22的源代码分析装置的Long Method一览画面的一个例子的图。
在图32中,Long Method一览的画面2903包括子反面模式列表显示部3201和返回Long Method条件设定按钮3202。子反面模式列表显示部3201显示子反面模式列表121。当源代码分析装置10C的使用者按下子反面模式列表121中的各子反面模式分类记录2401的Long Method的程序要素时,改善位置映射部107工作,画面转移至改善位置显示画面2904。另一方面,当源代码分析装置10C的使用者按下返回Long Method条件设定按钮3202时,画面转移至Long Method条件设定画面2902。
图33是表示图22的源代码分析装置的改善位置显示画面的一个例子的图。
在图33中,改善位置显示画面2904包括表示出了改善位置的源代码显示部3301、返回分析对象选择按钮3302和返回Long Method一览按钮3303。表示出了改善位置的源代码显示部3301显示表示出了改善位置的源代码122。源代码分析装置10C的使用者通过阅览改善位置显示画面2904,能够得知源代码的改善位置和改善方法。
当源代码分析装置10C的使用者按下返回分析对象选择按钮3302时,画面转移至分析对象选择画面2901。另一方面,当源代码分析装置10C的使用者按下返回Long Method一览按钮3303时,画面转移至Long Method一览画面2903。

Claims (10)

1.一种源代码分析方法,其特征在于:
代码度量获取部对具有多个程序要素的源代码进行分析而生成关于程序要素的长度和复杂度的代码度量;
提交信息获取部获取关于所述程序要素的变更历史的提交信息;
评分计算部基于所述代码度量和所述提交信息,计算所述程序要素的评分;
维护性指标计算部基于所述代码度量,计算所述程序要素的维护性指标;
列表生成部基于所述评分和所述维护性指标,生成作为要分割为多个的候选的所述程序要素的列表。
2.如权利要求1所述的源代码分析方法,其特征在于:
所述评分是Long method Score。
3.如权利要求1所述的源代码分析方法,其特征在于:
所述列表生成部使用评分阈值或/和维护性指标阈值,生成所述列表。
4.如权利要求3所述的源代码分析方法,其特征在于:
条件设定部输出具有所述评分或维护性指标的轴和与所述评分或维护性指标相符的程序要素数的轴的图,从用户处接受所述评分阈值或/和维护性指标阈值的设定。
5.如权利要求4所述的源代码分析方法,其特征在于:
所述图是能够辨认所述评分和所述维护性指标两者的图。
6.如权利要求1所述的源代码分析方法,其特征在于:
所述评分计算部进而使用关于各程序要素的错误发生的错误历史信息,计算所述程序要素的评分。
7.如权利要求6所述的源代码分析方法,其特征在于:
所述错误历史信息中包括错误的原因,
所述评分计算部进而使用规定了所述错误原因中可能包括的特定的词语的可读性降低词语条件,计算所述程序要素的评分。
8.如权利要求1所述的源代码分析方法,其特征在于:
具有定义了子反面模式的子反面模式定义信息,
子反面模式分类部基于所述评分、所述源代码、所述代码度量,生成将所述评分中记载的程序要素分类为子反面模式的子反面模式列表。
9.如权利要求8所述的源代码分析方法,其特征在于:
改善位置映射部基于所述子反面模式列表和改善类目,生成表示出了改善位置的源代码。
10.一种源代码分析装置,其特征在于,包括:
代码度量获取部,其对具有多个程序要素的源代码进行分析而生成关于程序要素的长度和复杂度的代码度量;
提交信息获取部,其获取关于所述程序要素的变更历史的提交信息;
评分计算部,其基于所述代码度量和所述提交信息,计算所述程序要素的评分;
维护性指标计算部,其基于所述代码度量,计算所述程序要素的维护性指标;和
列表生成部,其基于所述评分和所述维护性指标,生成作为要分割为多个的候选的所述程序要素的列表。
CN201910378645.1A 2018-06-19 2019-05-08 源代码分析方法和源代码分析装置 Pending CN110618926A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2018116066A JP2019219848A (ja) 2018-06-19 2018-06-19 ソースコード解析方法およびソースコード解析装置
JP2018-116066 2018-06-19

Publications (1)

Publication Number Publication Date
CN110618926A true CN110618926A (zh) 2019-12-27

Family

ID=68921164

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910378645.1A Pending CN110618926A (zh) 2018-06-19 2019-05-08 源代码分析方法和源代码分析装置

Country Status (2)

Country Link
JP (1) JP2019219848A (zh)
CN (1) CN110618926A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115113921A (zh) * 2022-08-29 2022-09-27 云账户技术(天津)有限公司 代码重构价值的评估方法、装置、电子设备及存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112506563A (zh) * 2020-12-24 2021-03-16 ***通信集团江苏有限公司 用户故事工时计算的方法、装置、设备及计算机存储介质
JP2022186541A (ja) 2021-06-04 2022-12-15 株式会社日立製作所 ソースコード解析装置およびソースコード解析方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101261604A (zh) * 2008-04-09 2008-09-10 中兴通讯股份有限公司 一种软件质量评价装置及软件质量评价的定量分析方法
US20090144698A1 (en) * 2007-11-29 2009-06-04 Microsoft Corporation Prioritizing quality improvements to source code
CN103019666A (zh) * 2011-09-20 2013-04-03 日本电气株式会社 源代码比较设备、源代码比较方法和源代码比较程序
JP2016143107A (ja) * 2015-01-30 2016-08-08 株式会社日立製作所 ソースコード評価システム及び方法
CN107239396A (zh) * 2017-05-11 2017-10-10 东南大学 一种基于代码圈复杂度度量的软件演化评估方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090144698A1 (en) * 2007-11-29 2009-06-04 Microsoft Corporation Prioritizing quality improvements to source code
CN101261604A (zh) * 2008-04-09 2008-09-10 中兴通讯股份有限公司 一种软件质量评价装置及软件质量评价的定量分析方法
CN103019666A (zh) * 2011-09-20 2013-04-03 日本电气株式会社 源代码比较设备、源代码比较方法和源代码比较程序
JP2016143107A (ja) * 2015-01-30 2016-08-08 株式会社日立製作所 ソースコード評価システム及び方法
CN107239396A (zh) * 2017-05-11 2017-10-10 东南大学 一种基于代码圈复杂度度量的软件演化评估方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115113921A (zh) * 2022-08-29 2022-09-27 云账户技术(天津)有限公司 代码重构价值的评估方法、装置、电子设备及存储介质
CN115113921B (zh) * 2022-08-29 2022-11-08 云账户技术(天津)有限公司 代码重构价值的评估方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
JP2019219848A (ja) 2019-12-26

Similar Documents

Publication Publication Date Title
CN108228861B (zh) 用于执行机器学习的特征工程的方法及***
US20110154117A1 (en) Methods and apparatus to perform log file analyses
CN111090641B (zh) 数据处理方法及装置、电子设备、存储介质
CN110618926A (zh) 源代码分析方法和源代码分析装置
US9940215B2 (en) Automatic correlation accelerator
EP3418889A1 (en) Software analysis apparatus and software analysis method
EP3531285A2 (en) Ace: assurance, composed and explained
US7624124B2 (en) System and method for assisting generation of business specification
CN114610286A (zh) 开发文档的生成方法、装置、计算机设备及存储介质
CN114201615B (zh) 基于数据快照的科研数据变动回顾方法及服务器
US10782942B1 (en) Rapid onboarding of data from diverse data sources into standardized objects with parser and unit test generation
CN110209902B (zh) 对机器学习过程中的特征生成过程可视化的方法和***
JP2004252881A (ja) テキストデータ修正方法
US8782626B2 (en) Search suggestions for static code analysis
US20100030732A1 (en) System and method to create process reference maps from links described in a business process model
JP7015320B2 (ja) データ分析支援装置、データ分析支援方法およびデータ分析支援プログラム
CN113051262B (zh) 一种数据质检方法、装置、设备及存储介质
US7844627B2 (en) Program analysis method and apparatus
US11392371B2 (en) Identification of a partial code to be refactored within a source code
JP2017224185A (ja) バグ混入確率計算プログラム及びバグ混入確率計算方法
JPWO2023037399A5 (zh)
CN112416727A (zh) 批处理作业的检核方法、装置、设备及介质
Weber et al. Detecting inconsistencies in multi-view uml models
JP6609216B2 (ja) ソースコードの静的解析結果の分析装置及び分析方法
US20180081780A1 (en) Trace-information management system, trace-information management method, and trace-information management program product

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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20191227

WD01 Invention patent application deemed withdrawn after publication