CN103927179B - 一种基于WordNet的程序可读性分析方法 - Google Patents
一种基于WordNet的程序可读性分析方法 Download PDFInfo
- Publication number
- CN103927179B CN103927179B CN201410157340.5A CN201410157340A CN103927179B CN 103927179 B CN103927179 B CN 103927179B CN 201410157340 A CN201410157340 A CN 201410157340A CN 103927179 B CN103927179 B CN 103927179B
- Authority
- CN
- China
- Prior art keywords
- annotation
- wordnet
- name
- class
- code
- 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
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了软件工程领域内的一种基于WordNet的程序可读性分析方法,包括如下步骤:1)按照包名‑类名‑方法名的项目结构遍历出每个方法体,并且以包名_类名_方法名的形式标注;2)去除警示注释(通常出现在测试用例中,用于警告程序员会出现某种严重后果),TODO注释(是一种程序员认为应该做,而由于某些原因目前还没有做的工作);3)将注释分为短注释和长注释;4)对长注释进行预处理,并且用WordNet提取出注释的主题词;5)对注释映射的代码段用WordNet提取代码的主题词;6)对整个项目生成程序可读性分析树,并形成最终的分析数据,本发明有利于后期维护人员对陌生项目的理解,可用于软件的维护开发中。
Description
技术领域
本发明涉及一种程序分析方法,特别涉及一种程序可读性分析方法,属于软件工程领域。
背景技术
程序可读性分析是软件开发和维护中用于评估软件易维护性和易修改性的一个重要指标,方便开发人员修改代码和注释必不可少的环节。现有的程序可读性分析一般利用开发语言所提供的开发文档和API对项目中不理解的代码段进行脱离实际情景的解释,或者是在开发前由开发团队拟定的代码编写规范性进行编码的代码书写规范方面的可读性分析。而在实际编程实践中,注释和开发文档才是程序员理解项目的主要突破口。真正难以理解的是不同人员对同一段代码的注释和分析。整个项目不同模块的转移和改变,小段代码的修改和变更,开发人员变动都会造成开发人员难以理解原有代码。这也就使得程序的可读性分析成为了一个项目是否有利于开发人员开发维护和理解的重要环节。所以本发明从注释能否描述代码的真正意图进行程序的可读性分析。
随着软件的不断演化,代码的不断修改和迁移,原有的注释是否能帮助开发人员准确理解一个项目是一个项目能否进行顺利修改的关键因素。传统的主题模型方法很难对细小的方法体和类文件进行局部的准确性分析,而WordNet所提供的本体库和优秀的同义词匹配和主题词提取技术则为研究程序的可读性分析带来的巨大的好处。WordNet是一种传统的词典信息与现代计算机技术以及心理语言学研究成果有效结合的一个产物。它是由Princeton大学的Miller等心理学家,语言学家和计算机工程师联合于1985年开始设计的一种基于认知语言学的英语词典。它不同于一般的语言词典,而是由25个独立起始概念,其它名词通过上下位关系与这25个独立起始概念构成的25个独立的层次结构,具有强大的根据人类语义进行同义词匹配的能力。本发明就是充分利用WordNet根据同义词语义匹配能力找出程序中语义描述不正确以及推荐不应该加注释的地方,并对整个程序进行分析,生成程序可读性分析树。
发明内容
本发明的目的是提供一种基于WordNet的程序可读性分析方法,以解决程序可读性分析问题,有利于后期维护人员对陌生项目的理解。
本发明的目的是这样实现的:一种基于WordNet的程序可读性分析方法,包括以下步骤:
步骤1) 按项目结构遍历出每个方法体,以包名_类名_方法名的形式标注,标注分为对注释的标注和对代码的标注;
步骤2)去除警示注释和TODO注释;
步骤3)将注释分为短注释和长注释;
步骤4)对长注释进行预处理,并且用WordNet提取出注释的主题词;
步骤5)对长注释映射的代码段用WordNet提取代码的主题词;
步骤6)对整个项目生成程序可读性分析树,并形成最终的分析数据。
作为本发明的进一步限定,步骤3)中的分类方法如下:短注释提取条件为:无“.”结尾的短语或者词数少于8个words的短句,并且代码长度控制在1到6行;除此之外的注释则为长注释;标记符合短注释条件的代码段及其注释,作为找出的不推荐加注释部分,对于不符合短注释条件的,放入步骤4和长注释一起分析。
作为本发明的进一步限定,步骤4)的具体方法如下:
a)分类:按照方法函数是否有返回值对长注释进行分类,有返回值的称为描述代码意图的注释(vn类),无返回值的称为提供描述信息的注释(v类);
b)预处理:对vn类和v类注释进行预处理,分为三个步骤:
注释语句处理(Tokenization),去除if条件句,过去时态的语句,vn类注释用WordNet分析时要添加方法体中return的注释段;
去除停用词(Stop-word Removal),去除注释关键字,如常用的定冠词the、an等;
分词(Stemming),将注释语句拆分成单词块,利用WordNet接口将单词转换形态;
c)提词:用WordNet对两种类型的注释提取主题词,Vn类注释提取动词和名词,v类注释提取动词。
作为本发明的进一步限定,步骤5)的具体方法如下:
a)Vn类注释映射的代码段抽取方法函数名,参数名,变量名,常数名和返回值名字,利用WordNet和代码书写的驼峰写法进行分词,去除常用定冠词,最后利用wordNet提取出动词和名词;
b)V类注释映射的代码段抽取方法的函数名,参数名,变量名,常数名和返回值名字,利用WordNet和代码书写的驼峰写法进行分词,去除常用定冠词,最后利用wordNet提取出动词。
作为本发明的进一步限定,步骤6)的具体方法如下:按照项目目录,用WordNet对所有的注释-代码进行主题词匹配,匹配成功则为-1型,不成功则为1型或者2型,缺少匹配项的为0型;其中1型注释是针对于v类生成的必须修改的注释,2型注释是针对于vn类生成的必须修改的注释,0型注释归纳为需要注意的注释,并且生成程序可读性分析树,标注包,类下的注释准确率。
与现有技术相比,本发明的有益效果在于:本方法是基于WordNet的程序可读性分析,可以对整个项目的局部注释-代码可读性以及全局注释-代码可读性进行分析,列举出无法有效描述程序功能的注释-代码段,并且可以以程序可读性分析树的形式,对包、类下的可读性进行数值描述分析,可以有效帮助开发人员了解代码编写中有哪些意图不准确的模块和注释不清的地方;而且该方法不受编程语言,开发架构和开发平台的限制,并且有利于后期维护人员对于陌生项目的理解。
附图说明
图1是本发明总体流程图。
图2是分析项目转换类型流程图。
图3是方法遍历和注释分类提取流程图。
图4是长注释分析前预处理和分类流程图。
图5是图4流程中注释语句处理过程的流程图。
图6是图4流程中去除停用词过程的流程图。
图7是图4流程中分词过程的流程图。
图8是利用WordNet生成最终的程序可读性分析树流程。
图9是代码预处理流程图。
图10是处理的jEdit项目生成的部分程序可读性分析树。
具体实施方式
下面结合附图对发明的技术方案进行详细说明:
本发明的方法是利用WordNet来支持主题词匹配技术的实现,采用详细的文本预处理和项目整体分析计算分析程序的可读性,如图1所示。
方法流程
利用基于WordNet的程序可读性分析主要分为三个步骤:注释内容提取主题词,代码内容提取主题词,WordNet匹配技术生成最终的项目分析树。
步骤一)注释内容中提取主题词
(1)注释中提取出主题词会有多方面的影响,所以要先去除没有意义的注释段,这些注释通常是编译工具自动生成的javadoc注释或者是作为提醒作用的注释,如图3前两个流程所示,这里将javadoc注释关键词(如@param等)封装到DocBean类中,逐行匹配注释中出现的javadoc注释关键词,遇到就删除注释;
(2)在实际编写过程中,并不是所有的代码都要写注释,有时候明明可以用方法名表示的代码语义却要用冗余的没有用的注释来解释实在是画蛇添足,这里主要是针对短注释和长注释分析中结果为0的注释_代码进行分析;对此,需要将注释进行长注释和短注释的分类,短注释提取条件为:无”.”结尾的短语或者词数少于8个words的短句,并且代码长度控制在1到6行;具体为根据每个目录节点下的注释进行逐一匹配,标注出符合条件的短注释到ShortMap集合中,其映射的代码段中的方法名放入CodeShortMap集合中;将ShortMap和CodeShortMap集合中的内容分别做分词处理,按照映射关系依次比对,如果发现相同单词,则列为情况0,列举出没有必要写注释的一些方法,如图3后半段所示;
(3)将经过第(2)步后剩下的短注释和长注释放入LongMap集合,用于分析出结果为1,2型的注释_代码的注释预料集合;需要对其更加细分,因为有返回值和没有返回值的方法往往表示着与之相对应的上下文关系,所以可以将其分类为提供描述信息的注释(v类)和描述代码意图的注释(vn类);这就要遍历LongMap中标注节点是否有return返回值,有返回值则将注释内容封装到vn类,没有则封装到v类,如图4中前半段两个处理路径;
(4)注释作为文本信息要对其进行文本预处理,具体流程有3个,分别是Tokenization,Stop-word Removal,Stemming,如图4中段所示。具体方法如下所示:
(a)Tokenization时要做的工作有3个部分,分别是:遍历v类,vn类的if条件分句(逗号前);去除v类,vh类的过去时态从句和五大定语从句;将过去时态词库封装为OldWords类,在OldWords类中创建OldSearch(String sen)方法用于过滤过去时态语句,创建FiveOdd(String sen)方法用于过滤where,when等五大定语从句; vn类用WordNet分析时要添加方法内部return的注释段;具体工作如图5所示;
(b)Stop-word时要做的工作有两个部分,分别是:1)去除注释关键字以及常用的定冠词the,an等,2)提供扩展停用词库,为后续研究做准备;具体工作如图6所示;
(c)Stemming要做的工作也有两个部分,分别是:1)将注释语句拆分成单词块,2)利用WordNet接口将单词转换形态;比如将带有ing的词语变为原型时态;具体工作如图7所示;
(5)做完上述的步骤,就可以将注释的数据暂存在数据库中,这些数据元素在数据库中的主键为一开始封装到DocBean中的项目节点目录信息,即项目组织结构包名_类名_方法名。
步骤二)代码内容中提取主题词
(1)原有的方法名不一定能准确分析代码的意图,所以要对代码语料库进行扩充,这里要做的就是根据v类和vn类,添加不同的语料,v类主要添加变量名和参数名,把根据注释数据库中的主键信息去匹配注释相对应的方法;vn类在v类的基础上还要添加返回参数名,即对于有return方法的注释要把return返回的值去除停用词之后补充到数据库中;如图9前段所示;
(2)程序的命名一般都是采取拼接原则和驼峰原则,所以要先对步骤二)-(1)中提取的代码语料进行分词;主要按照的是驼峰原则进行分词;具体地,根据单词大写分词,将分离的词语封装回各自v类和vn类目录下的以目录名命名的相关内部类中,以便步骤三)处理;如图9中段所示;
(3)分词之后还需去除干扰词,除了预先设定的定冠词,常用词组,还预留了接口,便于扩充干扰词的语料库;这里采用的是和注释信息处理一样的方法,去除定冠词the,a,an以及常用词;如图9后段所示;
(4)完成上述内容之后,提取出的代码就可以放入代码数据库中备用,为了寻求与注释的映射关系,目录名作为主键。
步骤三)WordNet匹配技术生成最终的程序可读性分析树
(1)数据库中存放的注释-代码的映射内容分别通过WordNet进行分析,对于vn类,所要匹配的是动词和名词的词库;对于v类只需要匹配动词词库即可。根据匹配的成功与否,将匹配程度按照如上定义分为-1,0,1,2,分别表示:-1,有效注释;0,此处不推荐写注释,最好用方法名正确描述代码意图即可;1,此段注释无法正确描述代码意图;2,此段代码无法正确描述代码的行为;
(2)将生成的四种结果用不同颜色表示出来,生成一个XML文档的程序可读性分析树,不同颜色的标注代表严重等级。如图10所示,这是根据jEdit初步分析出的一个局部结果;
(3)如图10所示,XML树中还标注出了类,包,总体程序的可读性比例。即<P_math></P_math>和<C_math></C_math>。
本发明并不局限于上述实施例,在本发明公开的技术方案的基础上,本领域的技术人员根据所公开的技术内容,不需要创造性的劳动就可以对其中的一些技术特征作出一些替换和变形,这些替换和变形均在本发明的保护范围内。
Claims (1)
1.一种基于WordNet的程序可读性分析方法,其特征在于,包括以下步骤:
步骤1) 按项目结构遍历出每个方法体,以包名_类名_方法名的形式标注,标注分为对注释的标注和对代码的标注;
步骤2)去除警示注释和TODO注释;
步骤3)将注释分为短注释和长注释,分类方法如下:短注释提取条件为:无“.”结尾的短语或者词数少于8个words的短句,并且代码长度控制在1到6行;除此之外的注释则为长注释;标记符合短注释条件的代码段及其注释,作为找出的不推荐加注释部分,对于不符合短注释条件的,放入步骤4和长注释一起分析;
步骤4)对长注释进行预处理,并且用WordNet提取出注释的主题词,具体方法如下:
a)分类:按照方法函数是否有返回值对长注释进行分类,有返回值的称为描述代码意图的注释Vn类,无返回值的称为提供描述信息的注释V类;
b)预处理:对Vn类和V类注释进行预处理,分为三个步骤:
注释语句处理(Tokenization),去除if条件句,过去时态的语句,Vn类注释用WordNet分析时要添加方法体中return的注释段;
去除停用词(Stop-word Removal),去除注释关键字,注释关键字为常用的定冠词the、an;
分词(Stemming),将注释语句拆分成单词块,利用WordNet接口将单词转换形态;
c)提词:用WordNet对两种类型的注释提取主题词,Vn类注释提取动词和名词,v类注释提取动词;
步骤5)对长注释映射的代码段用WordNet提取代码的主题词,具体方法如下:a)Vn类注释映射的代码段抽取方法函数名,参数名,变量名,常数名和返回值名字,利用WordNet和代码书写的驼峰写法进行分词,去除常用定冠词,最后利用wordNet提取出动词和名词;b)V类注释映射的代码段抽取方法的函数名,参数名,变量名,常数名和返回值名字,利用WordNet和代码书写的驼峰写法进行分词,去除常用定冠词,最后利用wordNet提取出动词;
步骤6)对整个项目生成程序可读性分析树,并形成最终的分析数据;具体方法如下:按照项目目录,用WordNet对所有的注释-代码进行主题词匹配,匹配成功则为-1型,不成功则为1型或者2型,缺少匹配项的为0型;其中1型注释是针对于v类生成的必须修改的注释,2型注释是针对于vn类生成的必须修改的注释,0型注释归纳为需要注意的注释,并且生成程序可读性分析树,标注包,类下的注释准确率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410157340.5A CN103927179B (zh) | 2014-04-18 | 2014-04-18 | 一种基于WordNet的程序可读性分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410157340.5A CN103927179B (zh) | 2014-04-18 | 2014-04-18 | 一种基于WordNet的程序可读性分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103927179A CN103927179A (zh) | 2014-07-16 |
CN103927179B true CN103927179B (zh) | 2017-02-15 |
Family
ID=51145411
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410157340.5A Active CN103927179B (zh) | 2014-04-18 | 2014-04-18 | 一种基于WordNet的程序可读性分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103927179B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572111B (zh) * | 2015-01-20 | 2017-12-01 | 扬州大学 | 一种基于相关主题模型的程序理解和特征定位方法 |
CN106325969B (zh) * | 2016-08-23 | 2019-03-12 | 上海创景信息科技有限公司 | 需求变更的逆向追踪系统 |
CN107463662B (zh) * | 2017-07-31 | 2019-12-10 | 拉卡拉支付股份有限公司 | 一种动态Sql查询方法、装置 |
CN109271392B (zh) * | 2018-10-30 | 2022-07-26 | 长威信息科技发展股份有限公司 | 快速判别和抽取关系型数据库实体及属性的方法及设备 |
CN110308931B (zh) * | 2019-06-20 | 2024-06-07 | 平安科技(深圳)有限公司 | 一种数据处理方法及相关装置 |
CN111897719B (zh) * | 2020-07-04 | 2023-08-04 | 毛澄映 | 基于代码文本和调用关系的程序变更影响分析方法 |
CN113741964B (zh) * | 2021-08-01 | 2024-08-20 | 北京工业大学 | 一种面向代码可读性评估的数据增强方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398758A (zh) * | 2008-10-30 | 2009-04-01 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
CN101807239A (zh) * | 2010-03-29 | 2010-08-18 | 山东高效能服务器和存储研究院 | 一种防止源代码反编译的方法 |
CN102339218A (zh) * | 2010-07-21 | 2012-02-01 | 阳振庭 | 一种程序代码注释的管理方法及装置 |
-
2014
- 2014-04-18 CN CN201410157340.5A patent/CN103927179B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398758A (zh) * | 2008-10-30 | 2009-04-01 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
CN101807239A (zh) * | 2010-03-29 | 2010-08-18 | 山东高效能服务器和存储研究院 | 一种防止源代码反编译的方法 |
CN102339218A (zh) * | 2010-07-21 | 2012-02-01 | 阳振庭 | 一种程序代码注释的管理方法及装置 |
Non-Patent Citations (3)
Title |
---|
"基于WordNet的XML文档标记语义消歧研究";潘有能等;《情报科学》;20140331;第32卷(第3期);全文 * |
"基于语义模型的文档特征提取";李开荣等;《计算机工程与应用》;20050930(第17期);第3段 * |
"程序代码相似度度量研究";程金宏;《中国优秀硕士学位论文全文数据库》;20080815(第8期);第2-4节 * |
Also Published As
Publication number | Publication date |
---|---|
CN103927179A (zh) | 2014-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103927179B (zh) | 一种基于WordNet的程序可读性分析方法 | |
CN108665141B (zh) | 一种从突发事件预案中自动抽取应急响应流程模型的方法 | |
Abdelnabi et al. | Generating uml class diagram from natural language requirements: A survey of approaches and techniques | |
CN105630770A (zh) | 一种基于sc文法的分词标音连写方法及装置 | |
Wang et al. | Transition-based Chinese AMR parsing | |
Bajwa et al. | NL2 Alloy: A Tool to Generate Alloy from NL Constraints. | |
Sateli et al. | Automatic construction of a semantic knowledge base from CEUR workshop proceedings | |
Ngo et al. | Building an English-Vietnamese bilingual corpus for machine translation | |
Wisniewski | Errator: a tool to help detect annotation errors in the universal dependencies project | |
Ibrahim et al. | Bel-Arabi: advanced Arabic grammar analyzer | |
Ko et al. | Syntactic approach to extracting key elements of work modification cause in change-order documents | |
Chammard et al. | Assisted authoring of model-based systems engineering documents | |
Sawant et al. | Deriving requirements model from textual use cases | |
CN105045784A (zh) | 英语词句的存取装置方法和装置 | |
Jyothilakshmi et al. | Domain ontology based class diagram generation from functional requirements | |
Litta et al. | Derivations and Connections: Word Formation in the LiLa Knowledge Base of Linguistic Resources for Latin. | |
Boizou et al. | Syntactic engine for the Lithuanian language | |
Bogatyrev et al. | Application of conceptual structures in requirements modeling | |
Chiarcos et al. | Towards LLOD-based language contact studies: a case study in interoperability | |
Bajwa et al. | OCL usability: a major challenge in adopting UML | |
Hung-Ngo et al. | A visualizing annotation tool for semi-automatically building a bilingual corpus | |
Amdouni et al. | Semantic annotation of requirements for automatic UML class diagram generation | |
Phyue | Unknown word detection via syntax analyzer | |
Zhang et al. | The identification of grammar points in international Chinese language teaching materials based on sentence-based annotation | |
CN112016301B (zh) | 一种融合短语先验知识的依存句法分析方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |