精华内容
下载资源
问答
  • 冗余代码检测与分析

    2021-01-27 16:23:42
    代码冗余的原因多种多样,从未使用的...为了检测冗余代码,作者开发了一个工具,使用Roslyn创建C#源码抽象语法树。作者使用包括Roslyn和MSBuild在内的多个GitHub项目对这个工具进行了训练; 检测到冗余代码可以手动删
  • 本文件对SIFT特征检测进行了详尽的代码分析,包括常量介绍,数据结构说明,函数说明,函数调用关系,SIFT特征检测各步骤对应代码,参数设置以及参数影响分析,代码运行结构。可供学习SIFT算子参考。
  • 各种边缘检测算子代码分析,含有C++源程序,其中程序含有详细的代码分析
  • 代码静态检测分析技术浅析

    千次阅读 2019-06-06 10:34:38
    目前,基于源代码静态检测分析技术,运用越来越广,那么源代码安全检测的技术主要有哪些呢?下面我结合源代码静态分析的发展,技术特点,来分析四种相关技术: 数据流和模式匹配技术 符号执行的分析技术 抽象解释...

           目前,基于源代码静态检测分析技术,运用越来越广,那么源代码安全检测的技术主要有哪些呢?下面我结合源代码静态分析的发展,技术特点,来分析四种相关技术:

    1. 数据流和模式匹配技术
    2. 符号执行的分析技术
    3. 抽象解释的分析方法
    4. 值流分析为主的分析方法

           数据流和模式匹配分析技术早期静态分析工具经常采用的技术,包括达到定值分析、支配分析、活跃变量分析、静态单赋值技术等,这类分析技术的优点是效率高、算法复杂度低。但是这种分析技术最大的缺点是路径不敏感,无法实现跨函数分析,往往需要再借助函数内联、摘要技术等补充分析,导致复杂度增加。采用数据流分析的精度偏低,市场上Fortify SCA、Testbed、C++ test主要采用这种分析技术。

           符号执行是将软件源代码中的变量的值采用抽象化符号形式表示,并模拟执行,分析中是基于路径敏感的。符号执行算法的复杂度会非常高,对于代码量比较大的软件会发生状态爆炸。为了做到精度与效率的折中,研究领域提出了很多改进,采用较多是Saturn,采用布尔可满足性的方式对缺陷进行计算求解,函数内是路径敏感分析,函数间采用摘要的方式分析。缺点是函数内检测精度还可以,但是跨函数分析精度较差。分析效率上,基本上可以实现10-100万行/小时。国外代码检测工具中Klocwork Insight、Coverity Prevent采用了符号执行技术。

           以抽象解释为主的分析方法,会将被检测代码中的每一条语句的影响简单模型化为一个抽象及其的状态变化,使分析更简易,但是代价是丧失了一定程度上分析完备性。抽象解释本质上是在计算效率与精度之间取得平衡,通过损失部分计算精度以保证计算可行性,再通过多次迭代计算以增强计算精度的一种抽象逼近方法。抽象解释通过多面体、区间分析以及八面体技术实现。抽象解释为主的分析方法,主要缺陷是效率较低。代表性工具是Polyspace,虽然基本上不会出现漏报,但是对于1000行/小时的检测效率来说,很难在工程实践中运用。

           以值流分析为主的分析方法,值流分析模型结合了控制流分析、数据流分析中的定值使用以及调用关系分析构建值流图。通过点与点之间的连线表达变量的定值使用关系,每个值流子图表达了某个变量到其值发生改变之前的生命周期。在值流模型基础上衍生出值依赖分析模型,通过结合指向分析、区间分析等方法,使程序模型能够更加精确地表达变量值之间的依赖关系,为缺陷检测提供了更为精化的模型,但是精度与效率还有提高的余地。FastCheck采用值流分析进行内存泄露检测。Saber采用全稀疏值流模型,在FastCheck基础上进行了改进,通过引入指向分析和修改影响分析技术,提高检测精度。国内有一款工具采用值依赖分析方法是北大博士团队主导研发CoBOT。

    (完)

     

    展开全文
  • 基于统计与代码特征分析的网页木马检测模型,花钱从别人的网站下载下来的,,分烹绐大家。
  • 第七章 恶意代码分析与防治 6内容提要 恶意代码的发展史和恶意代码长期存在的原因 恶意代码实现机理定义以及攻击方法 恶意代码生存技术隐藏技术介绍网络蠕虫的定义以及结构 恶意代码防范方法基于主机的检测方法和...
  • 面向硬件瞬时故障的Linux设备驱动敏感代码的自动分析与检测.pdf
  • 程序静态分析(Program static analysis)是指在不执行代码情况下, 通过词法分析、语法分析、语义分析、控制流、数据流分析等技术对源代码进行扫描。


    1 前言

      对于大型C/C++项目,一般是以团队分模块开发的方式,代码量数十万或者更多。由于代码量的激增以及开发人员众多,代码出现bug的概率也随之增加。——这是一个数学上概率论的问题,而不是程序员的编码技术问题。其中一部分问题是非执行过程引起的静态问题,如内存泄露、内存越界、野指针、逻辑模糊、死锁等等,在发布代码前可以借助一些检测工具进行代码分析,以排除静态bug。除了检查代码静态bug外,还可以判断代码复杂度、代码质量、代码执行效率等等,作为提高代码质量的依据。


    2 什么是静态分析

       程序静态分析(Program static analysis)是指在不执行代码情况下, 通过词法分析、语法分析、语义分析、控制流、数据流分析等技术对源代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。 通过对代码进行审查分析,检查代码的功能、性能,提升代码质量。静态分析有两种方式,分别是人工审查和软件工具分析。


    • 人工审查,依赖于人,适合于小型项目或者代码量不大的场景;效率低、易遗漏

    • 软件工具分析,理想的方式, 准确率、可靠性、效率都远高于人工审查


    3 静态分析方法

    • 词法分析,依次对代码的字符流进行扫描,通过正则表达式方法将源码转换为等价符号,并生成符号列表。

    • 语法分析,该方法主要分析源代码结构的正确性,将上下文无关联语法的符号整理成语法树。

    • 抽象语法树分析,将源代码组织生成树形结构,关联代码以树的节点表示。

    • 语义分析,主要审查结构上正确的源代码,分析代码上下文相关联的性质。

    • 控制流分析,该方法反映函数的嵌套关系,可以生成函数调用关系图;通过分析源代码,生成有向控制流图,节点表示基本代码块,节点间的有向边表示流控路径,反向边表示可能存在的循环。

    • 数据流分析,对“控制流分析”生成的控制流图进行遍历分析,记录变量初始化点和引用点,并保存为切片相关的数据信息,生成数据流图。

    • 污点分析,对“数据流分析”生成的数据流图反推断出源代码中可能受“攻击”的变量,识别代码中可能存在的缺陷。

    • 无效代码分析,“控制流分析”生成的控制流图中,无边向的孤立节点即为无效代码,通过该方法,可以检测代码逻辑问题。


    4 静态分析内容

      大多数情况下,静态分析的对象都是程序源代码,少数情况会使用编译后的目标代码(可执行文件)。静态分析的内容,根据具体分析的对象,大致可以归为三类:

    【1】致命类(内存相关)

    【2】逻辑类

    【3】编码规范与其他类


    4.1 内存相关

      由于C/C++支持指针,通常有程序员来动态管理内存,这就可能导致内存泄露问题的产生。典型内存相关问题如下:

    • 访问没有申请内存的空指针(空指针)
    • 访问已释放内存的指针(野指针)
    • 内存越界访问
    • 内存泄露,申请了内存没有释放
    • 重复释放内存
    • 文件描述符泄漏(未释放)
    • 格式化字符串不安全(内存越界)

      关于内存问题的检查,也常常使用Valgrind工具检查,可参考文章如何使用Valgrind检测内存泄漏


    4.2 逻辑类

    • 逻辑错误,重复代码分支、缺少分支语句(如switch缺少break)、变量比较类型不一致、常true或false
    • 运算错误,除0运算、无符号数小于0、bool类型自加
    • 可疑检查,死循环、死锁、if语句“=”问题、返回局部变量、变量溢出

    4.3 编程风格与其他

    • 编程风格,命名、规范性、可读性、可移植和复用性
    • 执行问题,函数未使用、变量未使用、代码不可到达(提前return
    • 隐患问题,语法问题、逻辑模糊问题、类型强制转换、编译警告、volatile问题
    • 效率问题,时间复杂度、空间复杂度、逻辑循环、
    • 标准行业规范,如MISRA C

    5 常用静态分析工具


    工具支持语言支持平台权 授说明
    AdLintCLinux、Windows、Mac OS开源代码质量评估可视化,支持多种软体品质测量
    Coverity PreventC/C++、C#、JAVALinux、Windows、Mac OS付费提供多种辅助工具,专长于最准确的找到最严重和最难检测的缺陷
    FlawfinderC/C++Linux、Windows开源使用用Python编写的c/c++程序安全审查工具;词法扫描和分析,内嵌了一些漏洞数据库,如缓冲区溢出、格式化串漏洞等,扫描快,按照代码中漏洞的风险等级对漏洞进行划分,可以快速找到存在的问题
    KlocworkC/C++、C#、JAVALinux、Windows付费国内使用较广泛的分析工具
    RatsC/C++、Python、Perl、 PHPLinux、Windows开源扫描规则比较粗糙
    PC-LintC/C++Windows付费一个由Gimpel Software公司提供的支持C/C++的商用静态分析器
    CppcheckC/C++Linux、Windows开源支持图形界面和命令行
    SplintCLinux开源静态检测针对C语言的安全工具和漏洞检测;Splint支持多种常规检查
    cqualC/C++Linux开源轻量级的静态分析器,可在类Linux系统下运行
    BLASTCLinux开源采用反例驱动的自动抽象精细化方法,构建了一个抽象模型,并对模型的安全性能进行了验证的C语言分析器
    Frama-CCLinux、Windows、Mac OS开源针对C语言的静态分析器
    ITS4C/C++Linux、Windows开源Cigital公司开发的自动化源码审查工具;但它不能理解程序上下文意思,存在很大的误报
    CoBotC/C++Linux、Windows开源北京大学开发,中国首家通过CWE认证的软件安全检测工具
    TscanCodeC/C++、C#、LuaLinux、Windows、Mac OS开源腾讯开发的静态分析工具

    推荐使用:

    CoBot、TscanCode、Cppcheck、Flawfinder

      个人使用首选开源工具;付费的功能很强大,但费用都比较昂贵,适合于公司使用。


      实质上,不论是人工审查还软件分析,都可能存在一定的误报率,甚至漏报。因此,提高代码质量的根本途径在于编码过程,形成良好编码习惯,是保证代码质量的最可靠方式。


    6 参考文章

    【1】【代码质量】C++代码质量扫描主流工具深度比较
    【2】国内外主流静态分析类工具汇总

    展开全文
  • C/C++代码分析检测工具-附件资源
  • SD卡插拔卡检测过程的代码分析,SD驱动注册流程。
  • Android源代码的静态检测分析技术
  • 恶意代码检测升级记录和分析报告 检测日期 主机名称 检测方法 结果分析 处理结果 备注 检测人员 审核人员
  • 入侵检测系统IDS,配套源代码分析 网络安全超经典的资源
  • C/C++代码分析检测工具

    千次阅读 2014-12-12 11:04:16
    C/C++代码分析检测工具推荐

    本文由 @lonelyrains 出品,转载请注明出处。 
    文章链接: http://blog.csdn.net/lonelyrains/article/details/41891187


           偶尔发现代码中有一些低级错误,比如拷贝内存越界或者变量未初始化就调用等,导致debug版本可用但是release版本异常等现象,也不方便调试。
           因此在网上找了一些代码分析工具,cppcheck(开源免费)、understand(需要付费)、pvs studio(免费)。以前也用过cpptest,但是cpptest太重了,而且使用学习曲线的路程有点长。

    1、cppcheck安装出现问题:
    据说是可以和vs集成使用的,参考链接: http://www.codeproject.com/Tips/472065/Poor-Man-s-Visual-Studio-Cppcheck-Integration  如果有人装上了,也请告知一下。

    2、安装使用pvs studio:
    操作非常方便易用,与VS自动集成,安装也没有出现什么问题,可以找出明显的错误、分等级警告,安装包20MB左右,推荐大家使用。
    使用方法:PVS-Studio->Check Solution即可


    展开全文
  • 研究了常见的SQL注入检测和源代码静态分析扫描的原理,提出Java源代码SQL注入检测算法,该算法通过对Java源代码词法分析和语法分析、建立抽象语法树、定义规则、遍历语法树和跟踪等,检测Java源代码中可能的SQL注入...
  • 常用Java静态代码分析工具的分析比较

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    简介

          本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,希望能够帮助Java软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。

     

    引言

          在Java软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。Java静态代码分析(static code analysis)工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成本。目前市场上的Java静态代码分析工具种类繁多且各有千秋,因此本文将分别介绍现有4种主流Java静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),并从功能、特性等方面对它们进行分析和比较,希望能够帮助Java软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。

     

    静态代码分析工具简介

    什么是静态代码分析

          静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。

          在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。

          但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。

    静态代码分析工具的优势

          1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。

          2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。

          3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。

    Java 静态代码分析理论基础和主要技术

    • 缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
    • 类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。
    • 模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。
    • 数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的数据域特性。

    现有主流Java静态分析工具

     Checkstyle

          Checkstyle 是SourceForge的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。

          Checkstyle 提供了支持大多数常见IDE的插件,文本主要使用Eclipse中的Checkstyle插件。如下图1所示,Checkstyle 对代码进行编码风格检查,并将检查结果显示在 Problems 视图中。图中,代码编辑器中每个放大镜图标表示一个 Checkstyle 找到的代码缺陷。开发人员可通过在 Problems 视图中查看错误或警告详细信息。

    图1. 使用Checkstyle进行编码风格检查
    图 1. 使用 Checkstyle 进行编码风格检查

          此外,Checkstyle支持用户根据需求自定义代码检查规范,在下图2中的配置面板中,用户可以在已有检查规范如命名约定,Javadoc,块,类设计等方面的基础上添加或删除自定义检查规范。

    图2. 使用Checkstyle添加自定义代码检查规范
    图 2. 使用 Checkstyle 添加自定义代码检查规范

    FindBugs

          FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具。FindBugs 通过检查类文件或 JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs 既提供可视化 UI 界面,同时也可以作为 Eclipse 插件使用。文本将主要使用将 FindBugs 作为 Eclipse 插件。在安装成功后会在 eclipse 中增加 FindBugs perspective,用户可以对指定 Java 类或 JAR 文件运行 FindBugs,此时 FindBugs 会遍历指定文件,进行静态代码分析,并将代码分析结果显示在 FindBugs perspective 的 bugs explorer 中,如下图 3 所示:

    图3. 使用FindBugs进行静态代码分析
    图 3. 使用 FindBugs 进行静态代码分析

          图中Bug Explorer中的灰色图标处为 Bug 类型,每种分类下红色图标表示bug较为严重,黄色的图标表示bug为警告程度。Propreties 列出了 bug 的描述信息及修改方案。

          此外,FindBugs 还为用户提供定制 Bug Pattern 的功能。用户可以根据需求自定义 FindBugs 的代码检查条件,如下图 4 所示:

    图4. 使用 FindBugs 添加自定义代码检查规范
    图 4. 使用 FindBugs 添加自定义代码检查规范

    PMD

          PMD 是由 DARPA 在 SourceForge 上发布的开源 Java 代码静态分析工具。PMD 通过其内置的编码规则对 Java 代码进行静态检查,主要包括对潜在的 bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。PMD 提供了和多种 Java IDE 的集成,例如 Eclipse,IDEA,NetBean 等。本文主要使用 PMD 以插件方式与 Eclipse 集成。如下图 5 所示:在 Violations Overview 视图中,按照代码缺陷严重性集中显示了 PMD 静态代码分析的结果。

    图5. 使用PMD进行静态代码分析
    图 5. 使用 PMD 进行静态代码分析

          PMD 同样也支持开发人员对代码检查规范进行自定义配置。开发人员可以在下图 6 中的面板中添加、删除、导入、导出代码检查规范。

    图6. 使用PMD添加自定义代码检查规范
    图 6. 使用 PMD 添加自定义代码检查规范

    Jtest

          Jtest 是Parasoft 公司推出的一款针对Java语言的自动化代码优化和测试工具,Jtest 的静态代码分析功能能够按照其内置的超过800条的 Java 编码规范自动检查并纠正这些隐蔽且难以修复的编码错误。同时,还支持用户自定义编码规则,帮助用户预防一些特殊用法的错误。Jtest 提供了基于 Eclipse 的插件安装。Jtest支持开发人员对Java代码进行编码规范检查,并在 Jtesk 窗口中集中显示检查结果,如下图7所示:

    图7. 使用Jtest进行静态代码分析
    图 7. 使用 Jtest 进行静态代码分析

          同时,Jtest 还提供了对用户定制代码检查配置甚至自定义编码规则的支持,这一功能使得开发人员可以基于不同场景定制所需要的编码规范,如图 8 所示:

    图8. 使用Jtest添加自定义代码检查规范
    图 8. 使用 Jtest 添加自定义代码检查规范

     

    Java静态分析工具对比

          本章节将从以下几个方面对上述 Java 静态分析工具进行比较:

    应用技术及分析对象

          下表 1 列出了不同工具的分析对象及应用技术对比:

    表1. 不同工具的分析对象及应用技术对比

    Java 静态分析工具分析对象应用技术
    Checkstyle Java 源文件缺陷模式匹配
    FindBugs 字节码缺陷模式匹配;数据流分析
    PMD Java 源代码缺陷模式匹配
    Jtest Java 源代码缺陷模式匹配;数据流分析

    内置编程规范

    Checkstyle:

    • Javadoc 注释:检查类及方法的 Javadoc 注释
    • 命名约定:检查命名是否符合命名规范
    • 标题:检查文件是否以某些行开头
    • Import 语句:检查 Import 语句是否符合定义规范
    • 代码块大小,即检查类、方法等代码块的行数
    • 空白:检查空白符,如 tab,回车符等
    • 修饰符:修饰符号的检查,如修饰符的定义顺序
    • 块:检查是否有空块或无效块
    • 代码问题:检查重复代码,条件判断,魔数等问题
    • 类设计:检查类的定义是否符合规范,如构造函数的定义等问题

    FindBugs:

    • Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
    • Correctness 可能导致错误的代码,如空指针引用等
    • 国际化相关问题:如错误的字符串转换
    • 可能受到的恶意攻击,如访问权限修饰符的定义等
    • 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
    • 运行时性能问题:如由变量定义,方法调用导致的代码低效问题。

    PMD:

    • 可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
    • 未使用代码(Dead code):检查未使用的变量,参数,方法
    • 复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
    • 重复的代码:检查重复的代码
    • 循环体创建新对象:检查在循环体内实例化新对象
    • 资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉

    Jtest

    • 可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
    • 未使用代码:检查未使用的变量,参数,方法
    • 初始化错误:内存分配错误、变量初始化错误、变量定义冲突
    • 命名约定:检查命名是否符合命名规范
    • Javadoc 注释:检查类及方法的 Javadoc 注释
    • 线程和同步:检验多线程编程时常见的同步,线程调度问题
    • 国际化问题:
    • 垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患

    错误检查能力

          为比较上述 Java 静态分析工具的代码缺陷检测能力,本文将使用一段示例代码进行试验,示例代码中将涵盖我们开发中的几类常见错误,如引用操作、对象操作、表达式复杂化、数 组使用、未使用变量或代码段、资源回收、方法调用及代码设计几个方面。最后本文将分别记录在默认检查规范设置下,不同工具对该示例代码的分析结果。以下为 示例代码 Test.java。其中,代码的注释部分列举了代码中可能存在的缺陷。

    清单1. Test.java 示例代码

    package Test;import java.io.*;public class Test /**  * Write the bytes from input stream to output stream.  * The input stream and output stream are not closed.  * @param is  * @param os  * @throws IOException  */ public  boolean copy(InputStream is, OutputStream os) throws IOException {        int count = 0;        //缺少空指针判断        byte[] buffer = new byte[1024];  while ((count = is.read(buffer)) >= 0) {   os.write(buffer, 0, count);  }  //未关闭I/O流  return true; } /**  *   * @param a  * @param b  * @param ending  * @return copy the elements from a to b, and stop when meet element ending  */ public void copy(String[] a, String[] b, String ending) {  int index;  String temp = null;  //空指针错误  System.out.println(temp.length());  //未使用变量  int length=a.length;  for(index=0; index < a.length; index++)  {   //多余的if语句   if(true)   {    //对象比较 应使用equals    if(temp==ending)    {     break;    }    //缺少 数组下标越界检查    b[index]=temp;   }  } } /**  *   * @param file  * @return file contents as string; null if file does not exist  */ public  void  readFile(File file) {  InputStream is = null;  OutputStream os = null;   try {    is = new BufferedInputStream(new FileInputStream(file));    os = new ByteArrayOutputStream();    //未使用方法返回值    copy(is,os);    is.close();    os.close();   } catch (IOException e) {    //可能造成I/O流未关闭    e.printStackTrace();   }    finally   {    //空的try/catch/finally块   } }}

          通过以上测试代码,我们对已有 Java 静态代码分析工具的检验结果做了如下比较,如下表2所示。

    表2. Java 静态代码分析工具对比

    代码缺陷分类 示例 Checkstyle FindBugs PMD Jtest
    引用操作空指针引用
    对象操作对象比较(使用 == 而不是 equals)
    表达式复杂化多余的 if 语句
    数组使用数组下标越界
    未使用变量或代码段未使用变量
    资源回收I/O 未关闭
    方法调用未使用方法返回值
    代码设计空的 try/catch/finally 块

         

          由表中可以看出几种工具对于代码检查各有侧重。其中,Checkstyle 更偏重于代码编写格式,及是否符合编码规范的检验,对代码 bug 的发现功能较弱;而 FindBugs,PMD,Jtest 着重于发现代码缺陷。在对代码缺陷检查中,这三种工具在针对的代码缺陷类别也各有不同,且类别之间有重叠。

     

    总结

          本文分别从功能、特性和内置编程规范等方面详细介绍了包括Checkstyle,FindBugs,PMD,Jtest在内的四种主流 Java 静态代码分析工具,并通过一段Java代码示例对这四种工具的代码分析能力进行比较。由于这四种工具内置编程规范各有不同,因此它们对不同种类的代码问题的发现能力也有所不同。其中 Checkstyle 更加偏重于代码编写格式检查,而 FindBugs,PMD,Jtest 着重于发现代码缺陷。最后,希望本文能够帮助 Java 软件开发和测试人员进一步了解以上四种主流 Java 静态分析工具,并帮助他们根据需求选择合适的工具。 

     

          本文转自http://www.oschina.net/question/129540_23043,特此说明!

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 常用 Java 静态代码分析工具的分析比较 http://simpleframework.net/blog/v/41049.html 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。Java 静态代码分析...
  • 静态代码分析工具

    2012-07-20 08:05:58
    PVS-Studio静态代码分析工具作为一种工具来检测代码中的缺陷和商业代码分析对比。越来越多的领域依赖计算机,代码的质量就成了关键。比如航天、国防、工业控制、金融等对安全性,稳定性要求很高的领域。PVS-Studio ...
  • 网络行为分析相关论文,硕士学位论文 基于网络行为分析的未知恶意代码检测系统的研究实现
  • Android 静态代码分析

    千次阅读 2017-04-07 22:39:41
    Android 静态代码分析 在一些大型项目中,静态代码分析是必不可少的,通过静态代码分析可以避免一些低级的问题,与此同时可以规范代码书写、提高代码质量。本文主要介绍4种分析工具(CheckStyle、Findbugs、PMD、...
  • 思多普(SDAP)软件检测分析平台,为软件源代码的安全性、可靠性和合规性自动化检测提供一个公共检测平台。具备登录及权限管理、组织机构管理、项目信息管理、检测项目管理、检测任务执行及管理、缺陷审计、缺陷统计...
  • PLSTA2.6代码分析工具

    2018-01-02 16:21:13
    PLSTA2.6代码分析工具,专业的代码分析工具,可用于系统分析、单元测试、语句检测
  • 使用开源代码的好处很多,但也会带来风险,为了更好的使用开源软件,发挥开源软件的价值的同时又避免其带来的风险,就要对使用的开源软件进行管理。...本文主要对比分析了两种主要开源代码检测技术。
  • C语言代码检测分析和研究.pdf
  • 我们先来看代码: /*  * drivers\hid\usbhid\usbmouse.c  */ #include #include .../* 关于这个结构体我们在注释1里面会有分析 */ static struct usb_device_id usb_mouse_id_table [] = {
  • TimepixAnalysis:包含基于Timepix的检测器的校准和分析有关的代码+ CAST相关代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 474,190
精华内容 189,676
关键字:

关于代码的分析与检测