基于NRefactory的冗余检测与缺陷研究
![](/assets/7a34688/images/icon/s-doc.png)
VIP免费
基于 NRefactory 的冗余检测与缺陷研
究
摘 要
随着 IT 技术在各个行业的迅猛发展,各类软件已成为人们工作中不可或缺
的有效工具。随之而来,软件缺陷所导致的问题也越来越多,其中有些软件缺
陷导致的后果十分严重。然而长期以来,开发者对于软件中的冗余代码重视程
度不高,认为它们不会对程序造成太大的危害。但研究证明,冗余代码和软件
缺陷有很紧密的关系,通过寻找冗余代码,可以有效排除软件缺陷。
综合国内外研究,本文将冗余分为七类:类冗余、方法冗余、变量冗余、
传参冗余、幂等隐幂等代码冗余、死代码冗余和条件冗余,同时,分析了这七
类冗余和对应的软件缺陷。本文主要做了如下四个方面的工作 1)研究每种冗
余产生的原因,同时给出了每种冗余的代码示例,并根据示例中的代码特征对
冗余进一步分类。2)基于上述研究,使用第三方库 NRefactory 来分析 C#源代
码,生成抽象语法树,给出基于 NRefactory 的冗余代码检测算法 3)设计一个
冗余与软件缺陷关联的检测器 OORC-DD (Object Oriented Redundant Code –
Defects Detector)4)使用 OORC-DD 对两个项目进行冗余检测,实证本文提出的
冗余与软件缺陷的关联关系。
最后,本文使用 OORC-DD 对项目中的冗余代码进行了人工审阅,分析后
证明:冗余和软件缺陷之间存在关联,通过检测冗余可以追踪软件缺陷;使用
OORC-DD 可以有效排除软件中隐藏的部分缺陷。因此,OORC-DD 对于提高软
件可靠性和排除软件缺陷有一定的指导意义。
关键字:软件缺陷,冗余代码,NRefactory,OORC-DD
ABSTRACT
With the rapid development of IT technology in various industries, various types
of software has become an effective tool in daily life.Concomitantly, software defects
caused more and more problems, which lead to some software defects with very
serious consequences. But for a long time, the developer for the redundant code in
software attention degree is not high because they do not cause too much damage to
the program. But the research proves that there’s very close relationship to redundant
codes and software defects.We can effectively eliminate software defects by finding
redundant code.
This paper synthesizes the domestic and foreign research, divides redundancy
into seven categories: redundant class, redundant method, redundant variable,
redundant parameter, redundant idempotent and hidden idempotent code, dead code
redundancy and condition redundancy. At the same time, the paper analyzes
the defects of the seven kinds of software redundancy and the corresponding. This
article has mainly done the following four aspects of work: 1) Studying the causes of
each redundancy, giving each redundant code examples and extracting redundant code
characteristics according to the classification of defects. 2) Analyzing the C# source
code by using third party library NRefactory based on the above research, generating
an abstract syntax tree and giving redundant code detection algorithms based on
NRefactory. 3) Developing OORC-DD (Object Oriented Redundant Code - Defects
Detector) to find out redundancy and software defect correlation. 4) Using OORC-DD
redundancy detection on the two projects, proving the correlation relationship
between redundancy and software defects in the paper.
Finally, this paper uses RC-Detector to artificial review for redundant code in
several projects, after analysis, we prove that: there is a correlation between
redundancy and software defect; through the detector can effectively find the part of
hidden bugs in the software system. Therefore, RC-Detector for improving software
reliability and troubleshoot software defects have certain guiding significance.
Keywords: Software defect, Redundant code, NRefactory, OORC-DD
目 录
中文摘要
ABSTRACT
第一章 绪论......................................................1
1.1 课题研究的目的及意义.......................................1
1.2 国内外研究现状.............................................2
1.2.1 国外研究现状..........................................2
1.2.2 国内研究现状..........................................2
1.3 本文研究的主要内容.........................................3
1.4 章节安排...................................................4
第二章 NRefacorty 技术介绍........................................5
2.1 NRefactory 简介.............................................5
2.1.1 使用 NRefactory 构造抽象语法树..........................6
2.1.2 使用 NRefactory 构造类型系统............................8
2.1.3 使用 NRefactory 进行语义分析............................9
第三章 冗余代码缺陷关联分类.....................................11
3.1 类冗余缺陷关联分类........................................11
3.2 方法冗余缺陷关联分类......................................12
3.3 变量冗余缺陷关联分类......................................14
3.4 传参冗余缺陷关联分类......................................16
3.5 幂等和隐幂等冗余缺陷关联分类..............................17
3.6 死代码冗余缺陷关联分类....................................19
3.7 条件冗余缺陷关联分类......................................21
第四章 OORC-DD 模块设计与实现.................................24
4.1 OORC-DD 模块设计........................................24
4.1.1 读入模块.............................................24
4.1.2 冗余检测模块.........................................28
4.1.3 处理展示模块.........................................29
4.1.4 冗余结果展示模块.....................................31
4.2 OORC-DD 数据库设计......................................32
第五章 冗余检测算法研究.........................................36
5.1 类冗余检测算法............................................36
5.2 方法冗余检测算法..........................................36
5.3 变量冗余检测算法..........................................39
5.4 传参冗余检测算法..........................................40
5.5 幂等和隐幂等冗余检测算法..................................41
5.6 死代码冗余检测算法........................................42
5.7 条件冗余检测算法..........................................46
第六章 实验结果与分析...........................................48
6.1 OORC-DD 的设计与实现....................................48
6.2 冗余检测与缺陷实证........................................49
6.3 冗余注入实验及分析........................................52
6.4 对检测出的坏味级冗余的分析................................53
3
第一章 绪论
第一章 绪论
1.1 课题研究的目的及意义
随着 IT 技术在各个行业的迅猛发展,各类软件已成为人们工作中不可或缺的
有效工具。随之而来,软件缺陷所导致的问题也越来越多,其中有些问题导致的
后果十分严重,比如阿丽亚娜 5型火箭由于代码重用导致的发射失败[1],Therac-
25 辐射治疗设备由于代码缺陷导致的辐射超标致死案件[2]。2002 年,美国国家标
准与技术研究所的一项研究表明,软件缺陷给美国每年造成的损失高达595 亿美
元,而超过1/3 的损失经过软件检测的改进即可避免[3]。
软件检测对于提高代码质量具有非常重要的意义[4]。通常情况下,软件缺陷
和代码缺陷的探测和优化由开发人员手工来完成,效率较低,而且很大程度上依
赖于开发人员的经验,如果之前没有相关的经验很有可能会导致代码更加混乱
[5]。
但是随着软件规模和复杂度的不断增加,人工检测由于工作量巨大和思维本
身的局限而难以保证其可靠性。因此,软件缺陷检测工具逐渐盛行起来,人们普
遍意识到,这些缺陷检测工具的使用不仅仅方便快捷,而且能高效地帮助开发人
员排 除 某些缺陷。下面是一些比较著名的软件缺陷检测工具,如
PMD[6] 、CheckStyle[7] 和FindBugs [8] 等。其中,PMD 可以检测 Java,JavaScript,
XML, XSL 源代码中潜在的诸如无用变量、重复性代码、空的switch-case 语句等;
CheckStyle 可以帮助 Java 开发人员遵循编码规范,如命名约定、类设计、空白代
码块等,同时可以检测诸如过长参数列、过大类、过长函数等代码缺陷;
FindBugs 可 以 检 查class 文 件 和 JAR 文 件 , 将 字 节 码 与 一 组缺 陷 模 式 ( bug
patterns)进行对比来发现代码缺陷[9]。
总结后发现,虽然这些工具都很强大,然而这些检测器对代码冗余类型的缺
陷检测并不完善,除了变量冗余外,其余类型的冗余都不能检测。
冗余代码是指从未被使用的代码,从表面上看,冗余代码的确只影响了程序
的可读性,对于运行本身不产生影响。但是,软件中的每行代码都应该是为了完
成某个目的而存在的,因此,冗余代码的出现本身可能暗示着蕴含软件缺陷。因
为冗余代码很有可能是以下原因导致:1.开发者逻辑的考虑有失偏颇 2.用户需求
的不断改变3.开发维护不到位。这些问题的出现,都严重影响了软件的可靠性,
因为某些潜在BUG 极有可能出现在存在冗余的代码块中。
由上可见,冗余代码块中极有可能存在代码缺陷。通过冗余我们可以追踪一
些比基本语法更高层次的错误,诸如算法设计问题、判断逻辑缺陷等,所以冗余
的检测从很大程度上来说也可以保证软件的可靠性。一个可靠的、成熟的软件不
应该有许多冗余代码的存在,只有一个疏于管理的软件,开发人员逻辑混乱,才
会导致冗余代码的大量产生。
课题将寻找特定冗余与软件缺陷之间的存在关系,并根据这些关系,设计冗
余检测工具追踪潜在的软件缺陷,从而进一步改善软件的质量,增加软件的可靠
性。
1
上海理工大学硕士学位论文
1.2 国内外研究现状
目前,国内外针对代码缺陷的研究很大一部分着重于代码克隆、代码坏味,
对于软件开发中的冗余代码检测仅仅停留在简单的变量冗余,冗余声明之类,并
没有很深入、很全面的对冗余代码进行分类和细致检测。
1.2.1 国外研究现状
国外学者Brenda S. Baker 在1995 年设计研发了 The Dup system 来检查软件中
的冗余代码,他主要采取的是文本分析法[10],原理为逐字逐句的比较所有源代码
字符,找出相似的重复性代码。Verco 和Wise 在1996 年采取了一种基于度量的方
法[11]来寻找冗余代码,其主要原理是将源代码分类定量后进行数学分析,进而找
到冗余代码。Ira D.Baxter 等在 1998 年研发了 Clone Doctor,采取了语法分析法
[12],其主要原理是将源代码解析为抽象语法树,对语法树每个子树进行比较来检
测冗余代码。Krinke, J.在2001 年使用了基于语义的分析法[13],其主要原理是利用
抽象的程序语义来对代码进行检查。LeiTao 在04 年运用结合语义和语法的分析法
[14]对C语言中的冗余进行了检测,本课题使用 NRefactory 结合语义和语法对 C#
语言中的冗余进行了检测。
在研究如何检测冗余的同时,国外学者也将冗余和代码缺陷、软件错误联系
在了一起。学者Yichen Xie 和Dawson Engler 于2003 中提出,冗余代码块中极有
可能隐藏着代码错误和软件缺陷[15],他们通过查找linux 源代码中的冗余代码分析
其中是否蕴含了软件缺陷,最后用大量冗余和缺陷关联的数据证明了代码中冗余
和缺陷存在必然联系。因此如何高效地检测冗余,理清冗余和某些软件缺陷的关
系十分有必要,对于软件可靠性本身有着很大的意义。
近年来,冗余的检测消除越来越受到国外学者重视,如文献[16-18]中提及,
将冗余代码检测逐步深入各个领域,如在鉴定软件的专利方面,通过冗余的重复
率进行判定专利是否重复[16];在 PHP 开发中,通过消除死代码(冗余的其中一种
分类)来提高网站的稳定性 [17];在系统优化方面,通过消除死代码来提高性能[18]
等。人们越来越重视软件冗余,究其根本原因是:冗余背后隐藏着更多的软件问
题值得我们去重视。从这个趋势看,冗余检测在软件检测方面将不可或缺。
1.2.2 国内研究现状
哈尔滨工业大学在研究冗余代码检测[19]上有突出成果,但其代码只针对C语
言,其最新研究成果显示,利用RC-Finder 自动检测工具可以针对C语言编程中
的以下六种情况进行冗余代码检测。分别是:幂等、冗余声明、死亡代码、冗余
条件分支、隐幂等和冗余传参。采取的方法主要是:(1)将源代码通过词法分
析生成 TOKEN 流(2)按照指定的某些规则,将代码标准化(3)进行六种冗余
检测。
由于哈尔滨工业大学所研究的冗余代码检测是国防基础科研课题的一部分,
源代码无法获得,但从哈工大学者们的论文[20]看,他们研究的方面更多是逻辑冗
余部分,即在特殊情况下,人为思维上的冗余。由此可见,这六部分检测研究尚
有很大的拓展空间。
2009 年左右重庆大学计算机学院的沈刚、罗军两位学者提出了基于函数依赖
的XML 冗余检测算法[22],其主要原理是:定义基于 schema 的XML 函数依赖形
式模型,并基于此模型设计一种新的XAP 算法,其研究成果可有效发现 XML 文
档中的函数依赖和冗余,并对算法的复杂性进行分析。
2
摘要:
展开>>
收起<<
基于NRefactory的冗余检测与缺陷研究摘要随着IT技术在各个行业的迅猛发展,各类软件已成为人们工作中不可或缺的有效工具。随之而来,软件缺陷所导致的问题也越来越多,其中有些软件缺陷导致的后果十分严重。然而长期以来,开发者对于软件中的冗余代码重视程度不高,认为它们不会对程序造成太大的危害。但研究证明,冗余代码和软件缺陷有很紧密的关系,通过寻找冗余代码,可以有效排除软件缺陷。综合国内外研究,本文将冗余分为七类:类冗余、方法冗余、变量冗余、传参冗余、幂等隐幂等代码冗余、死代码冗余和条件冗余,同时,分析了这七类冗余和对应的软件缺陷。本文主要做了如下四个方面的工作1)研究每种冗余产生的原因,同时给出...
相关推荐
-
VIP免费2024-10-15 6
-
VIP免费2024-10-15 8
-
VIP免费2024-10-15 6
-
VIP免费2024-10-15 6
-
VIP免费2024-10-15 6
-
VIP免费2024-10-15 6
-
VIP免费2024-10-15 7
-
VIP免费2024-10-15 6
-
VIP免费2024-10-15 10
-
VIP免费2024-10-15 11
作者:侯斌
分类:高等教育资料
价格:15积分
属性:65 页
大小:1.14MB
格式:DOC
时间:2024-11-19