精华内容
下载资源
问答
  • 2020-12-21 10:28:40

    在这里插入图片描述

    为了从一开始就在您的软件中提高质量,请使用静态分析——软件工程师可以执行的最简单、最有效的方法来防止缺陷并强化代码,同时加快应用程序交付。

    在对任何类型的系统进行工程设计时,尽早(并经常)检查缺陷和修复错误使团队可以显着减少添加到项目中的下游工作量,并且是避免在此过程中出现多头麻烦的可靠方法。

    在软件开发中,不是一开始就设计出更好的软件,而是试图落入一个通用的陷阱中,并试图简单地对软件项目的质量进行测试(通常是在最后)。但是,重要的是要避免采用这种方法的诱惑,这种方法依赖于单元或功能测试来测试产品的质量。为了从一开始就在软件中提高质量,开发人员可以通过采用静态分析来控制软件工程师可以执行的最简单和最有效的方式,以防止缺陷并强化代码,同时加快应用程序交付。

    什么是静态代码分析?

    静态代码分析(或静态分析)是软件开发中的软件测试活动,其中分析源代码以查找已知与软件错误或安全漏洞相关的结构。当检测到高风险构造时,静态分析工具会报告违规行为,以供开发人员查看和修复。

    在我们回顾静态分析的一些主要优点之前,让我们先回顾一下静态分析的不同类型以及它们之间的区别。静态分析有几种主要类型,每种类型都有其优点和缺点。每个项目的条款如下。

    基于模式的静态分析

    静态分析工具以最简单的形式扫描源代码,并根据一组或多组规则对其进行检查。例如,当实际使用空字符“\0”时,工程师有时会错误地使用字符串“\0”。此错误可能导致内存损坏,并导致程序崩溃或执行其他令人讨厌的事情。静态分析工具会在代码中查找这些模式,并将其报告为可能的错误。这种静态分析称为基于模式的静态分析。有些模式是简单的语法检查器,类似于编写时的拼写检查器。其他模式可能更加复杂,可以分析和检测与细微问题相关的完整模式。这种静态分析几乎不会遭受误报。

    现代软件工程标准,例如汽车工业软件可靠性协会(MISRA)和联合打击战斗机(JSF),是基于这样的思想:应避免使用对安全性至关重要的代码中的某些构造,因为此类系统中的代码可能会出现问题。

    通过为“不安全”设施提供“更安全”的替代方案,可以避免已知的低级功能问题。本质上,程序是在超集的“安全”子集中编写的。

    来自联合打击战斗机飞行器C++编码标准–简介

    流分析

    流分析(有时称为控制流分析或数据流分析)有些不同。这种类型的代码分析根据一组规则检查有问题的构造,同时模拟决策路径以更深入地研究应用程序并消除难以发现的缺陷,例如空指针取消引用、缓冲区溢出以及诸如污染数据的安全缺陷。流分析之所以出色,是因为它可以发现真正的错误,但是一定数量的误报始终是此方法的一部分。

    其他分析类型

    还有其他类型的静态分析可以实现不同类型的目标。例如,指标分析工具可测量代码特征,例如代码行和复杂性。覆盖率分析工具跟踪单元和应用程序测试,以更好地了解代码的测试程度。当作为自动化开发测试过程的一部分一起使用时,这些类型的分析可提供对应用程序安全性,保障性和可靠性的明显了解。

    无法进行静态分析的风险

    软件的状态变得越来越复杂。例如,今天,平均每辆汽车可能包含1000多个执行代码的MCU和多达1亿行代码!如此大的电子表面积,尤其是在安全性至关重要的应用中,例如汽车、医疗设备或航空电子设备,要求对软件采取严格的工程方法,以便接近无缺陷的代码。

    好消息是,OWASP,CERT和MITER等组织致力于研究和发布编程最佳实践,以帮助软件工程师在其软件项目中取得成功。也有针对特定行业的标准组织(例如MISRA,专注于汽车软件系统),其发布监管机构通常要求的最佳实践。这些最佳做法可以作为规则编入静态分析工具中,您可以选择将其作为组织策略的一部分实施,以供开发人员遵循。

    使用能够在与开发过程集成的同时实现这些编程标准的静态分析工具至关重要。从业务角度看,如果无法使用至少一个静态分析工具来检查您的工作,则会大大增加部署或发布应用程序的风险。缺陷可能导致恶意黑客可以利用可利用的代码来使系统崩溃,暴露敏感数据等。对于安全性至关重要的软件,软件漏洞的后果可能更加严重。

    自动静态分析的好处

    在桌面上运行静态分析将带来一些好处,并且可能适用于小型团队或项目。但是,在大型组织中,静态分析也应该作为夜间构建和持续集成的一部分进行自动化。当实现为开发过程的组成部分时,使用静态分析来分析代码可带来许多好处,其中包括:

    更快的开发周期

    从项目的早期阶段开始就始终执行静态分析,可以使您在补救成本最低的情况下发现并修复系统缺陷。与不进行分析而快速开发软件相比,该过程最初可能花费更多的时间,但是效率的提高在整个开发生命周期中都呈指数级增长。请记住,在周期的后期可能难以解决一些更危险的错误,因此及早发现它们至关重要。

    好的静态分析工具还包括有关正在实施的编程标准的描述性文档,可扩展软件工程师的编程知识和专业开发。随着时间的流逝,对这些标准的遵守会通过不断的反馈来改善程序员,从而提高了代码的平均质量。如果您的静态分析工具具有更广泛的生态系统,可以自动确定缺陷修复任务的优先级,那么您将能够更快地交付该软件。

    降低缺陷率

    静态分析可帮助您及早发现并修复缺陷,从而可以防止下游出现系统性缺陷。使用早期检测策略,您可以更轻松地实施缺陷预防策略,从而降低了开发生命周期中的缺陷率。(值得一试的工具:Parasoft C/C++test,它不仅报告静态分析违规情况,而且还与非常复杂的分析平台集成,可以使您对报告的缺陷的所有实例及其对缺陷的整体影响有更广泛的了解。代码库的质量。)

    连续的提高

    DevOps术语通常用于描述一系列实践,这些实践有助于跨部门的协作和交流,以帮助组织优化和加速其开发和交付过程。通过在部门之间共享知识和任务,组织可以创建一个有效的流程来加速SDLC,同时改善质量流程。

    但是,为了使该方法有效,必须实施一个自动反馈循环,以使质量策略在需求从创建到生产的过程中始终如一地应用。

    自动化的静态分析不仅是反馈循环的机制,而且还生成其他部门在DevOps模型下有效访问和协作所需的数据。尤其是与单元测试和回归测试一起使用时,静态分析起着一些作用,包括:

    • 确保代码质量
    • 提供改善开发过程所需的大数据
    • 简化DevOps自动反馈回路的设计

    结果,静态分析成为持续、自动化过程改进的媒介。它为开发人员提供了一种理解和检查在发行期间检测到的错误的方法,或为质量检查提供了一种方法,以确定是否有一种方法可以强化代码并消除将来出现这些缺陷的可能性。

    关于Parasoft的静态分析解决方案

    市场上有几种静态分析工具,范围从开源实用程序到完整的开发测试套件。Parasoft的软件测试解决方案提供了一个集成平台,可以自动为多种编码语言提供广泛的软件质量实践,同时提供有意义的、全面的报告以及由Parasoft DTP支持的智能分析选项。

    对于C和C++,除了全面的静态代码分析功能和超过2200条规则(市场上所有工具中的大多数,基于MISRA,MISRA C++,FDA,Scott Meyers的Effective C++,Effective STL的实现),和其他已建立的资源),Parasoft C/C++test为您的开发测试实践提供了统一的解决方案。它生成并执行单元测试;支持多种类型的代码覆盖,包括行、语句、块、路径、决策(分支)、简单条件和MC / DC覆盖;提供运行时分析,并随附符合功能安全标准的工具鉴定套件。

    Parasoft还具有对Java语言(使用Parasoft Jtest)和.NET语言(对Parasoft dotTEST)的完全静态代码分析支持。就像C和C++一样,它们是完全集成的解决方案,不仅提供静态分析,而且还为您提供了全面的解决方案,以提高效率并简化软件测试。用户可以在桌面上使用Parasoft静态分析来分析代码,也可以将其集成到自动构建中,从而使您能够连续自动地防止缺陷。

    为了获得增强协作和效率的自动化工作流,这些静态分析引擎与Parasoft DTP集成在一起,后者提供了将质量集成到SDLC中的工作流,因此您可以定义开发策略,然后自动执行非功能性要求。例如,在构建过程中将自动执行静态分析,将违规情况报告给DTP,并在处理后将结果发送回工程师的IDE,以进行补救。

    DTP还执行智能分析,这些分析使这些工作流能够自动评估软件开发的质量和风险。例如,DTP可以查找与编程过程相关的系统性问题,或者将初级工程师生成的严重违反代码的行为与一组单元测试和覆盖率信息相关联,以确定与模块相关的风险有多大。如果相关性指向高于特定阈值的风险水平,则违规行为可能会触发特定的连续过程改进工作流,除了正常的缺陷修复任务外,还涉及对等代码审查和其他分析。

    结论

    静态代码分析是确保应用程序按预期运行的重要部分。它不仅提高了整个开发团队的速度,而且降低了与发布潜在危险软件有关的风险。虽然某些分析总比没有分析要好,但是应该将静态分析集成到更大的软件测试基础结构中,以最大程度地提高实践的有效性。Parasoft在C/C++test,Jtest和dotTEST中提供了企业级代码分析和测试套件,并在DTP中提供了高级分析和报告系统。结合使用这些技术,软件工程团队可以加快软件交付速度,同时确保其应用程序按预期运行。

    更多相关内容
  • 任何了解Java编程并想在实践中进行静态分析但对理论上的Soot和静态分析一无所知的人。 如果您对静态程序分析有一定的了解,建议您从学习Soot。 设置 简而言之,使用Java 8并运行./gradlew build 。 有关更多信息和...
  • 此前也接触过一些第三方静态分析工具,因为工作原因接触了一款开源移动App安全框架MobileSecurityFramework,经过一番折腾后决定写下一篇博文记录一下心得。本文是基于Windows搭建的AndroidApp静态分析环境,首先是...
  • 此前也接触过一些第三方静态分析工具,因为工作原因接触了一款开源移动App安全框架MobileSecurityFramework,经过一番折腾后决定写下一篇博文记录一下心得。
  • 程序静态分析技术的研制门槛很高,目前国外顶级程序分析工具基本都是由常青藤高校研制,比如美国的Coverity起源于斯坦福大学,英国的Testbed起源于利物浦大学。
  • 安全代码静态分析

    2017-11-28 15:20:12
    现在,本书提供了一份关于静态分析的完整指导:如何进行静态分析,如将其集成到软件开发过程以及如何在代码安全审查期间最大化其功效等。静态分析专家BrianChess和JacobWest探讨了当前最为常见的安全缺陷类型。他们...
  • 本文主要介绍了基本差动放大电路的静态分析
  • Jenkins中FindBugs、PMD、CheckStyle和Violations静态分析工具安装配置详细介绍
  • 电工电子技术:09 放大电路的静态分析.ppt
  • ansys静态分析和模态分析实例教程,ansys几阶变形模态应力分布变化
  • 使用cppcheck进行简单的代码静态分析
  • matlab开发-静态分析问题BridgeAbenchmarkSolution。该MATLAB程序计算悬索桥的静位移。
  • Exakat - PHP的静态分析引擎
  • IKOS - 基于抽象解释理论的C/C 静态分析
  • 用于软件工程实验的报告 实现静态代码的分析 通过静态代码分析实验可以更加熟悉的掌握静态代码分析工具。
  • 代码静态分析工具

    千次阅读 2022-03-10 14:47:54
    随着逐渐增加的系统复杂性和不断加快的产品发布周期,静态代码分析工具在整个产品开发过程中的价值也日益凸显,开发人员在每次提交代码之前都会运行一个静态分析工具,在这些缺陷变成威胁之前找到它们,因为这些威胁...

    随着逐渐增加的系统复杂性和不断加快的产品发布周期,静态代码分析工具在整个产品开发过程中的价值也日益凸显,开发人员在每次提交代码之前都会运行一个静态分析工具,在这些缺陷变成威胁之前找到它们,因为这些威胁会让公司耗费更多的成本和时间。

    下面给大家介绍几款国外的静态分析工具,希望能帮助大家了解各工具的侧重以及查找这些工具的渠道。

    1、HelixQAC
    服务商:http://qa-systems.cn/multi/575.html

    简介:
    Helix QAC是一款静态代码分析工具,它依据C和C++编码规则自动扫描代码对规则的违背。开发团队在开发过程的早期就可以用它来检测缺陷,所以使用这款工具修改代码是最方便也最经济的。Helix QAC能够自动化强制实施代码编程标准,比如MISRA、AUTOSAR、CERT等,保证代码的合规性。
    在这里插入图片描述

    特性

    • 支持多种C和C++编码标准,提供相应的合规性模块,也支持标准的客户化定制。
    • 建立了精确的行为模型,跟踪代码中的变量值,检查更多缺陷,使误报和漏报达到最低。
    • 以风险的严重程度划分编码问题的优先级。
    • 提高代码质量
    • 协同代码审查
    • 适应数百万行代码
    • 重用质量信得过的代码
    • Helix QAC能集成在构建系统和持续集成环境中,尽早且频繁地发现缺陷,从而避免了在开发后期往往需要花费甚巨的错误。它也加速了当前代码的评审,用户甚至可以只让它检查新的代码变化,快速提供反馈。
    • 监视整体代码质量
    • 集成其它工具集
    • Helix QAC仪表盘集中存储分析结果,通过Web浏览器访问。分析结果以“快照”的方式上传,随时间监控代码质量与合规性度量,提供视图与报告的定制化。
    • Helix QAC经过了独立的标准认证,Helix QAC是由Programming Research开发的,现在是Perforce的组成之一。

    2、Klocwork

    产品链接:http://www.softtest.cn/show/232.html

    简介:

    Klocwork SAST分析C、C++、C#、Java、Python和JavaScript语言,识别软件的安全、质量和可靠性问题,确保对编程标准的合规性。适用于企业DevOps和DevSecOps,可扩展到任何规模的项目,集成大型复杂的环境、广泛的开发工具、提供控制、协作与报告。
    在这里插入图片描述

    支持语言;

    C、C++、C#、Python、Java、JavaScript
    支持代码缺陷检测,支持数组问题、内存资源问题、指针问题,数据问题,线程并发问题。安全问题,各类注入问题,易受攻击的代码。兼顾代码度量和合规性性分析,且有架构分析,代码重构功能。

    3、CodeSonar

    产品链接:http://www.softtest.cn/show/42.html

    简介:

    CodeSonar是软件静态缺陷检查和安全性分析工具,帮助团队快速分析和验证代码,识别导致系统故障、可靠性差、系统漏洞或不安全条件的严重漏洞或错误。通过在并发性分析、污染数据流分析和全面检测等技术上的创新,CodeSonar比其他同类型工具发现更为重要的缺陷。CodeSonar可以集成到软件开发环境中,可以悄无声息地陪着开发人员工作,并提供快速反馈。CodeSonar 已通过 IEC 61508、ISO 26262 和 CENELEC EN50128 标准的最高安全等级资格审定。也提供用于 DO-178C/DO-330 合格审定的工件。CodeSonar 提供了全面的代码理解功能,帮助开发人员快速理解和修复问题。
    在这里插入图片描述

    支持语言:

    C、C++、C#、Java

    支持的平台:WindowsLinuxSolaris

    4、Parallelware Analyzer

    产品链接:http://www.softtest.cn/show/264.html

    简介:

    Appentra的Parallelware Analyzer是第一个专门为提高C/C++代码性能而设计的静态代码分析器。早期的源代码分析仅限于bug、编码标准实施或安全性,也可能是这些功能的组合。虽然很重要,但还没有采取任何措施确保代码的编写利用了芯片制造商在低功耗多核处理器中提供的现代硬件的能力。Parallelware Analyzer提供的性能优化报告含有高可读的可操作内容,包括:机会、建议、缺陷和评论。这些信息是在函数和循环上显示的,信息的后面是代码覆盖摘要和性能指标摘要。用户能够控制信息显示的详细程度,同时获得关于下一步操作的建议,无论这些建议是对应于代码更改还是进一步调用 Parallelware Analyzer 以挖掘更多的信息。
    在这里插入图片描述

    支持语言:

    C/C++ 和 Fortran

    5、QA MISRA

    产品链接:http://www.softtest.cn/show/270.html

    简介:

    QA-MISRA检查源代码中的900多个潜在软件错误。通过使用QA-MISRA进行静态分析,可以在早期阶段轻松发现危险结构以及安全、维护和移植问题。QA MISRA自动检查用户的C或C++代码符合MISRA和AUTOSAR规则,以及安全标准:SEI Cert C/C++,CWE,ISO/IEC TS 17961,HIS Metrics等。
    在这里插入图片描述

    6、Embold

    产品链接:http://www.softtest.cn/show/226.html

    Embold 能够一目了然地了解软件质量的状况。Embold 不仅可以检测问题,还可以推荐解决方案,并将代码分析提高到一个新水平,所有这些都由人工智能(AI)支持。Embold 使用专有的“多向量”诊断技术来分析软件组件中的热点,它从多个方面(例如代码质量,代码设计,指标和重复项)分析源代码,以计算 Embold 评分,该评分代表了软件总体质量。
    在这里插入图片描述

    主机:

    云:在位于德国法兰克福的 AWS 数据中心上安全运行。

    本地:Windows(7,8,10,Server 2012、2016),Linux(Ubuntu, Redhat,CentOs),其他(可自定义部署)。

    更多详情:打开链接&

    展开全文
  • Psalm 用于查找PHP应用中错误的静态分析工具
  • apk静态分析

    2015-12-25 15:55:27
    一个演示分析apk文件信息的demo,欢迎看相关博客
  • 软件动态分析喝静态分析 Our team writes a lot about the usefulness of static analysis and the benefits it brings to your projects. We like to run our tool on various open-source projects to find ...

    软件动态分析喝静态分析

    Рисунок 1

    Our team writes a lot about the usefulness of static analysis and the benefits it brings to your projects. We like to run our tool on various open-source projects to find possible bugs, which is our way to popularize the static code analysis method. In its turn, static analysis helps to make programs more high-quality and reliable and reduce the number of potential vulnerabilities. Perhaps everyone who is directly involved in work on source code has that feeling of satisfaction at having bugs fixed. But even if the process of successfully spotting (and fixing) bugs doesn't trigger your endorphins, you surely enjoy the thought of having development expenses reduced thanks to the static analyzer, which has helped your programmers use their time more effectively and efficiently. To find out more about how you can benefit from the use of static analysis in terms of money, see this article. It gives an approximate estimate for PVS-Studio, but those results can be extrapolated to other static analysis tools available on market.

    我们的团队撰写了大量有关静态分析的有用性及其为您的项目带来的好处的文章。 我们喜欢在各种开源项目上运行我们的工具,以发现可能的错误,这是我们推广静态代码分析方法的方式。 反过来,静态分析有助于使程序更优质,更可靠,并减少潜在漏洞的数量。 也许每个直接从事源代码工作的人都对修复错误感到满意。 但是,即使成功发现(和修复)错误的过程没有触发您的内啡肽,您也一定会喜欢使用静态分析器来减少开发费用的想法,这有助于您的程序员更有效地利用他们的时间。 要了解更多有关如何从金钱上使用静态分析的好处,请参阅本文 。 它提供了PVS-Studio的近似估算值,但这些结果可以推断到市场上可用的其他静态分析工具中。

    All said above seems to suggest that the purpose of static analysis is to find bugs in the source code as early as possible, thus reducing the expenses on bug fixing. But why do we need dynamic analysis then, and why sticking only to one of the two techniques may be insufficient? Let's give more formal and clear definitions of static and dynamic analyses and try to answer these questions.

    以上所述似乎暗示了静态分析的目的是尽早发现源代码中的错误,从而减少了错误修复的费用。 但是,为什么我们需要动态分析,为什么仅坚持两种技术之一可能不够用呢? 让我们给出静态和动态分析的更正式,更清晰的定义,并尝试回答这些问题。

    Static code analysis is the process of detecting errors and code smells in software's source code. To analyze a program, you don't need to execute it; the analysis will be performed on the available code base. The closest analogy to static analysis is the so called code review except that static analysis is an automated version of code review (i.e. performed by a bot program).

    静态代码分析是检测软件源代码中的错误和代码味道的过程。 要分析程序,您无需执行它。 分析将在可用代码库上进行。 与静态分析最接近的类比是所谓的代码审查,除了静态分析是代码审查的自动版本(即由bot程序执行)。

    The main pros of static analysis:

    静态分析的主要优点:

    1. Bug detection at the early development stages. This helps to make bug fixing much cheaper because the earlier a defect is detected, the easier — and, therefore, the cheaper — it is to fix.

      在早期开发阶段进行错误检测。 这有助于使错误修复便宜得多,因为发现缺陷的时间越早,修复起来就越容易-因此也就便宜了。
    2. It allows you to precisely locate the potential bug in the source code.

      它使您可以在源代码中精确定位潜在的错误。
    3. Full code coverage. No matter how often one block of code or another gets control while executing, static analysis checks the entire code base.

      完整的代码覆盖率。 无论一个代码块或另一个代码块在执行时获得控制的频率,静态分析都会检查整个代码库。
    4. Easy to use. You don't need to prepare any input data sets to do a check.

      易于使用。 您无需准备任何输入数据集即可进行检查。
    5. Static analyzers detect typos and copy-paste related mistakes fairly quickly and easily.

      静态分析仪可以相当快速,轻松地检测到打字错误和与复制粘贴相关的错误。

    The objective cons of static analysis:

    静态分析的客观缺点:

    1. Inevitable false positives. A static analyzer can get angry about code fragments that actually don't have any bugs in them. Only the programmer can solve this problem and mark a warning as a false positive, which means it will take some of their working time.

      不可避免的误报。 静态分析器可能会对实际上没有任何错误的代码片段感到生气。 只有程序员才能解决此问题,并将警告标记为误报,这意味着这将花费他们一些工作时间。
    2. Static analysis is generally bad at detecting memory leaks and concurrency related errors. To detect such errors, you'd in fact have to execute some part of the program in virtual mode, which is an extremely difficult task. Besides, such algorithms would require too much memory and CPU time. Static analyzers typically don't go any farther than analyzing some simple cases. Dynamic analyzers are more fit to diagnose memory leaks and concurrency related errors.

      静态分析通常不利于检测内存泄漏和与并发相关的错误。 要检测此类错误,实际上您必须在虚拟模式下执行程序的某些部分,这是一项极其困难的任务。 此外,此类算法将需要过多的内存和CPU时间。 静态分析器通常不会比分析一些简单的情况更复杂。 动态分析器更适合于诊断内存泄漏和并发相关的错误。

    It should be noted that static analyzers don't focus exclusively on bug catching. For instance, they can provide recommendations on code formatting. Some tools allow you to check your code for compliance with the coding standard your company sticks to. This includes indentation of various constructs, the use of space/tabulation characters, and so on. In addition, static analysis can be helpful for measuring metrics. A software metric is a quantitative measure of the degree to which a program or its specifications possess some property. See this article to learn about other uses of static analysis.

    应该注意的是,静态分析器并不仅专注于错误捕获。 例如,他们可以提供有关代码格式的建议。 一些工具使您可以检查代码是否符合公司所遵循的编码标准。 这包括各种结构的缩进,空格/制表符的使用等。 此外,静态分析可能有助于度量指标。 软件度量标准是对程序或其规范具有某种属性的程度的定量度量。 请参阅本文以了解静态分析的其他用途。

    Dynamic code analysis is the analysis performed on a program at execution time. This means you must have your source code converted into an executable file first. In other words, code containing compilation or build errors can't be checked by this type of analysis. The check is done with a set of input data fed to the program under analysis. That's why the effectiveness of dynamic analysis directly depends on the quality and quantity of the test input data. It is this data that determines the extent of code coverage at the end of the test.

    动态代码分析是在执行时对程序执行的分析。 这意味着您必须先将源代码转换为可执行文件。 换句话说,这种类型的分析无法检查包含编译或生成错误的代码。 该检查是通过将一组输入数据馈送到要分析的程序来完成的。 因此,动态分析的有效性直接取决于测试输入数据的质量和数量。 正是这些数据确定了测试结束时代码覆盖的程度。

    With dynamic testing, you can get the following metrics and warnings:

    通过动态测试,您可以获得以下指标和警告:

    1. Resources used: execution time of the entire program or its individual parts, the number of external queries (for instance, to a database), the amount of RAM and other resources used by the program.

      使用的资源:整个程序或其各个部分的执行时间,外部查询的数量(例如,对数据库的查询),RAM的数量以及程序使用的其他资源。
    2. The extent of code coverage by tests and other metrics.

      测试和其他指标的代码覆盖范围。
    3. Software bugs: division by zero, null dereference, memory leaks, race conditions.

      软件错误:被零除,空取消引用,内存泄漏,竞争条件。
    4. Some security vulnerabilities.

      一些安全漏洞。

    The main pros of dynamic analysis:

    动态分析的主要优点:

    1. You don't have to have access to the program's source code to analyze it. It should be noted, however, that dynamic analysis tools are differentiated by the way they interact with the program under analysis (this is discussed in more detail here). For example, one quite common dynamic analysis technique involves code instrumentation before the check, i.e. the addition of special code fragments to the application's source code for the analyzer to be able to diagnose errors. In that case, you do need to have the source code of the program at hand.

      您不必访问程序的源代码即可对其进行分析。 应当指出,然而,动态分析工具的方式区分它们与所分析的程序(这是更详细的讨论互动这里 )。 例如,一种非常普遍的动态分析技术涉及在检查之前进行代码检测,即在应用程序的源代码中添加特殊代码片段,以使分析器能够诊断错误。 在这种情况下,您确实需要手头程序的源代码。

    2. It can detect complex memory handling errors such as indexing beyond array bounds and memory leaks.

      它可以检测复杂的内存处理错误,例如超出数组范围的索引编制和内存泄漏。
    3. It can analyze multithreaded code at execution time, thus detecting potential problems that have to do with access to shared resources or possible deadlocks.

      它可以在执行时分析多线程代码,从而检测与共享资源访问或可能出现的死锁有关的潜在问题。
    4. Most implementations of dynamic analyzers don't generate false positives since errors get caught as they occur. Therefore, a warning issued by a dynamic analyzer is not a prediction made by the tool based on the analysis of the program model but a mere statement of the fact that an error has occurred.

      动态分析器的大多数实现都不会产生误报,因为错误会在错误发生时被捕获。 因此,动态分析器发出的警告不是该工具根据程序模型的分析做出的预测,而仅仅是对发生错误这一事实的陈述。

    The cons of dynamic analysis:

    动态分析的缺点:

    1. Full code coverage is not guaranteed. That is, you are very unlikely to get 100% coverage by dynamic testing.

      不能保证完整的代码覆盖率。 也就是说,您不太可能通过动态测试获得100%的覆盖率。
    2. Dynamic analyzers are bad at detecting logic errors. For example, an always true condition is not a bug from a dynamic analyzer's perspective since such an incorrect check simply disappears earlier at the compilation step.

      动态分析器不善于检测逻辑错误。 例如,从动态分析器的角度来看,始终为真的条件并不是错误,因为这种不正确的检查只会在编译步骤的早期消失。
    3. It's more difficult to precisely locate the error in the code.

      在代码中精确定位错误更加困难。
    4. Dynamic analysis is more difficult to use in comparison with static analysis as you need to feed enough data to the program to get better results and attain as full code coverage as possible.

      与静态分析相比,动态分析更难以使用,因为您需要向程序中馈入足够的数据以获得更好的结果并获得尽可能多的代码覆盖率。

    Dynamic analysis is particularly useful in those areas where program reliability, response time, or resources consumed are the primary concern. A real-time system managing a critical production sector or a database server are some examples of such systems. Any error in these areas can be critical.

    动态分析在程序可靠性,响应时间或消耗的资源是主要关注的那些领域特别有用。 管理关键生产部门或数据库服务器的实时系统是此类系统的一些示例。 这些区域中的任何错误都可能是至关重要的。

    Getting back to the question why sticking only to one of the two types of analysis may not be sufficient, let's take a look at a couple of quite trivial examples of bugs that one analysis method has no problems diagnosing while the other is not fit to detect, and vice versa.

    回到为什么仅坚持两种分析中的一种可能还不够的问题,让我们看几个错误的例子,一种错误的诊断方法没有问题,而另一种不适合检测,反之亦然。

    The following example is taken from the Clang project:

    以下示例取自Clang项目:

    MapTy PerPtrTopDown;
    MapTy PerPtrBottomUp;
    void clearBottomUpPointers() {
      PerPtrTopDown.clear();
    }
    void clearTopDownPointers() {
      PerPtrTopDown.clear();
    }

    A static analyzer would point out that the bodies of the two functions are identical. Of course, two functions having identical bodies aren't necessarily a definite sign of a bug, but it is very likely that they have resulted from using the copy-paste technique combined with carelessness on the programmer's side — and that leads to unexpected behavior. In this case, the clearBottomUpPointers method should call the PerPtrBottomUp.clear method. Dynamic analysis wouldn't notice anything wrong in this example because it's an absolutely legitimate piece of code from its point of view.

    静态分析器会指出这两个函数的主体是相同的。 当然,具有相同主体的两个函数不一定是错误的明确标志,但是它们很有可能是由于使用复制粘贴技术以及程序员的粗心大意而导致的,并且导致了意外行为。 在这种情况下, clearBottomUpPointers方法应调用PerPtrBottomUp.clear方法。 在此示例中,动态分析不会发现任何错误,因为从它的角度来看,它是绝对合法的代码。

    Another example. Suppose we have the following function:

    另一个例子。 假设我们具有以下功能:

    void OutstandingIssue(const char *strCount)
    {
      unsigned nCount;
      sscanf_s(strCount, "%u", &nCount);
      
      int array[10];
      memset(array, 0, nCount * sizeof(int));
    }

    In theory, a static analyzer could suspect there's something wrong with this code, but implementing such a diagnostic is a very difficult and pointless task. The example is taken from this article, which also elaborates on why it's a bad idea to teach static analyzers how to diagnose errors like that. In brief, static analyzers are very bad at figuring out that a call of the memset function may result in indexing beyond array bounds as they cannot foresee what number will be read from the strCount string; and if the value of strCount is read from a file, it becomes an impossible task for static analysis altogether. On the other hand, a dynamic analyzer would have no trouble noticing and pointing out the memory handling error in this code (given that the program is fed the right data).

    从理论上讲,静态分析器可能会怀疑此代码有问题,但是实现这种诊断是一项非常困难且毫无意义的任务。 该示例摘自本文该文章还详细说明了为什么教静态分析仪如何诊断此类错误是个坏主意。 简而言之,静态分析器很难弄清楚调用memset函数可能导致索引超出数组范围,因为它们无法预见将从strCount字符串读取什么数字。 如果从文件中读取了strCount的值,则对于静态分析而言,这完全是不可能的任务。 另一方面,动态分析器可以毫不费力地注意到并指出此代码中的内存处理错误(假设已向程序提供了正确的数据)。

    This article doesn't aim at comparing static and dynamic analyses. There's no single technique that could diagnose the whole variety of software defects. Neither type of analysis can completely replace the other. To improve the quality of your programs, you'll have to use different types of tools so that they complement each other. I hope the examples shown above are persuading enough.

    本文的目的不是比较静态分析和动态分析。 没有一种技术可以诊断出各种软件缺陷。 两种分析都不能完全替代另一种。 为了提高程序的质量,您必须使用不同类型的工具,以便它们可以相互补充。 我希望上面展示的例子能令人信服。

    I don't wish to look too biased toward static analysis, but it is this technique that's being most spoken of and, more importantly, included by companies into their CI processes lately. Static analysis acts as one of the steps of the so called quality gates to building a reliable and high-quality software product. We believe static analysis is going to become a standard software development practice in a couple of years, just like unit testing once did.

    我不希望偏向于静态分析,但是最近最常被谈论的是此技术,更重要的是,公司最近将其包含在其CI流程中。 静态分析是构建可靠且高质量的软件产品的所谓质量门的步骤之一。 我们认为静态分析将在几年内成为标准的软件开发实践,就像单元测试曾经一样。

    To wrap up, I'd like to point out once again that dynamic analysis and static analysis are just two different methods, which complement each other. In the end, all these techniques serve the single purpose of increasing software quality and reducing development expenses.

    最后,我想再次指出,动态分析和静态分析只是两种不同的方法,它们相互补充。 最后,所有这些技术都可以达到提高软件质量和减少开发费用的单一目的。

    参考文献: (References:)

    1. Terminology. Static code analysis.

      术语。 静态代码分析

    2. Terminology. Dynamic code analysis.

      术语。 动态代码分析

    3. Andrey Karpov. Static and Dynamic Code Analysis.

      安德烈·卡波夫(Andrey Karpov)。 静态和动态代码分析

    4. Andrey Karpov. Myths about static analysis. The third myth — dynamic analysis is better than static analysis.

      安德烈·卡波夫(Andrey Karpov)。 关于静态分析的神话。 第三个神话-动态分析优于静态分析

    5. Andrey Karpov. PVS-Studio ROI.

      安德烈·卡波夫(Andrey Karpov)。 PVS-Studio的投资回报率

    翻译自: https://habr.com/en/company/pvs-studio/blog/461173/

    软件动态分析喝静态分析

    展开全文
  • 静态分析工具

    2015-01-15 19:48:40
    FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
  • Go进行静态分析-从业指南 嗨,欢迎来到使用Go进行静态分析-从业者指南。 这是一个有关在Go for Go中编写静态代码分析器的研讨会。 在本讲座中,您将学习如何在Go中编写静态代码分析并自己实现。 在本研讨会结束时...
  • 优化的静态分析技术,数据流分析,Java语言的缺陷及检测实例,C/C++语言缺陷及检测实例。
  • 国内外主流静态分析类工具汇总

    万次阅读 多人点赞 2019-07-27 11:17:48
    笔者从事该软件安全方面工作,在工作和学习中收集了国内外比较主流的静态分析类工具,供大家参考。大多是资料来自于网络整理,如有不足或欠缺,还请在评论中指出。我进行修正。也欢迎同行多多交流。 我使用0标注...

    笔者从事该软件安全方面工作,在工作和学习中收集了国内外比较主流的静态分析类工具,供大家参考。大多是资料来自于网络整理,如有不足或欠缺,还请在评论中指出。我进行修正。也欢迎同行多多交流。

    我使用0标注北大软件CoBOT,因为他是国内第一款基于主流SAST技术的静态分析工具,填补了国内在缺陷检测、安全漏洞软件工具上的空白。值得称赞的工具。

    0、北大软件CoBOT

    CoBOT(库博)是北京大学软件工程中心联合北大软件企业的研发团队打造的国内首款商业化的具有知识产权的代码安全类检测工具。 CoBOT软件源代码缺陷检测工具已通过美国CWE认证的安全产品,具有独立知识,打破了国外产品在软件缺陷检测和安全漏洞分析领域的垄断地位,成为国内政府、军工、金融、互联网、汽车制造、船舶制造、电信等领域保证代码安全的首选工具。

    目前支持C、C++、Java、C#.net、JS、HTML等超过10种语言的检测。能够支持静态代码度量、运行时缺陷检测和安全漏洞检测。支持GJB 5369、GJB 8114、MISRA 2004/2008/2012规范、支持CWE/SANS  TOP25和OWASP TOP 10中的大部分安全漏洞模式检测。支持百万行代码跨文件检测能力,检测效率达到100-200万行/小时。

    目前还支持开源软件/组件的成分检测和安全漏洞检测。

     

    1、Coverity

    https://www.synopsys.com/zh-cn.html

    美国Synopsys公司产品,国内注册新思科技公司

    支持C、C++、Java、C#、javascript、Ruby、Python语言,支持C# 7、VS2017、Clang 4.0、gcc7等编译器

    。能够发现导致系统崩溃的缺陷(内存错误、逻辑错误、指针错误等)安全性问题和并发方面缺陷。

    强调了有多种引擎:路径流程引擎(对应控制流图);数据跟踪引擎(整型和布尔型数据分析);统计引擎;过程间调用引擎(文件或工程级函数调用关系图);数据传播引擎(过程间调用和数据追踪引擎的结合),上下文敏感的过程间分析能力。类型流程引擎(类层次关系分析);加速引擎(消除冗余路径)、增量分析引擎(通过缓存数据分析变化后的数据)。提出了软件DNA图谱概念。具有足够的构建系统和源代码信息,编译器生成可执行代码的数据,能够从软件DNA图谱构建一个执行程序。

    Coverity提供先进的和可配置的用于检测软件语义缺陷和安全隐患的静态源代码分析解决方案。

    主要不足时需要配置编译器。误报率比较低,但是漏报率较多,互联网企业用得较多,但是在联网情况下,可能出现泄漏代码问题。华为购买了Coverity,但是出现了安全问题,曾出现升级时代码被传到国外服务器。

     

    2、Klocwork

    官网:http://www.klocwork.com/

    美国rogue wave公司产产品。

    Klocwork支持的语言种类多,能够分析C、C++和Java代码;

    国内用的最为广泛的静态分析工具,由加拿大北电于1996年研发,是中国最早的能够检测语义缺陷的静态分析工具。2015年版本号为V10,也就是大家常说的K10,目前最新版可能是K12

    1. 能够发现的软件缺陷种类全面,既包括软件质量缺陷,又包括安全漏洞方面的缺陷,还可以分析对软件架构、编程规则的违反情况;
    2. 软件分析功能全面,既能分析软件的缺陷,又能进行可视化的架构分析、优化;
    3. 能够分析软件的各种度量;
    4. 能够提供与多种主流IDE开发环境的集成;
    5. 能够分析超大型软件(上千万代码行)。
    6. 在程序生成前尽快找到问题,意味着之后更少的测试和较少影响成本和进度。它会继续持续集成,只有Klocwork支持流行的CI(Continuous Integration)工具,执行分析提交期间的渐进式代码变化,跟上快速的发布周期。Klocwork在提交之前、提交期间和提交之后识别开发者眼中的关键安全性、可靠性和代码标准问题。

    总结

    1. 非侵入式检测
    2. 准确率达到90%
    3. 描述非常清晰,详细的问题产生流程跟踪(具体每一步骤所涉及的源代码文件、行数),基本上一看就清楚问题的产生来源)
    4. 跨文件/模块的分析能力,对于大型软件非常重要

    主要不足是Klocwor误报率比较高,升级费用很高,客户被绑架。对License控制较为严格,用户退出一个license后,其他人要使用需要等7天才能使用。

    3、Checkmarx

    https://www.checkmarx.com/
    以色列CheckmarxCxSuite的产品。

    主要功能是查找安全漏洞、质量缺陷、逻辑问题和后门代码。是一个独特的源代码分析解决方案,该工具可用于识别、跟踪和修复源代码中技术上和逻辑上的缺陷,比如软件安全漏洞、质量缺陷问题和业务逻辑问题等。

    毋须构建或编译软件项目的源代码,Checkmarx CxEnterprise通过虚拟编译器自动对软件源代码分析,并直接建立了代码元素及代码元素之间关系的逻辑图。然后Checkmarx CxEnterprise对这个内部代码图进行查询。

    Checkmarx CxEnterprise包含针对所有编程语言已知数百个安全漏洞和质量缺陷问题预先设定好的查询(query)列表。可以查询全面而又广泛的代码安全和质量缺陷,同时使用Checkmarx CxEnterprise CxAudit 审计工具,您可以根据您自己的软件安全、质量保证和业务逻辑需要配置并自定义的查询(Query),以满足公司或者个人特定的代码安全策略及代码安全基线标准要求。

    Checkmarx CxEnterprise的扫描结果可以以静态报表形式展示,也可以通过可以对软件安全漏洞和质量缺陷在代码的运行时的数据传递和调用图跟踪的代码缺陷的全过程,同时还可以提供对安全漏洞和质量缺陷进行修复提供指导建议。也可以对结果进行审计,从而消除误报。

    4、Fortify

    美国HP_fortify,重点是安全漏洞的检测。Forify 支持语言超过20种,是检测工具中支持语言最多的工具。

    内使用最为广泛的静态分析工具,虽然支持很多种安全漏洞,但需要用户做很多的二次开发工作。

    不足是误报率和漏报率都比较高。目前在国内代理商以光盘价格出货。如果企业只是想少花钱,引入一个安全扫描工具,倒是一个好的选择。

    5、Testbed

    美国LDRA Testbed/TBrun 软件测试产品功能:编码规则、度量、覆盖率、生成测试用例。

    前身为Liverpool大学开发,能够支持C/C++数千种条目的规则检测,包括MISRA C/C++, GJB5369等,是最早进入中国市场的静态分析工具,在军队、军工广泛使用,但其技术仅支持编码规则类检测,无法进行语义缺陷分析,导致一些常用的运行时缺陷无法发现或者较高误漏报,由此市场占有率逐步下降。截止到2015年其版本号为9.5。

    创景公司是总代理。目前很多代理商代理该工具销售,军工企业、汽车制造等采购该工具较多。

    主要采用DERA(欧洲防务标准)和MISRA(汽车软件标准),GJB5369判断是否违反编程规则,只能算是语义语法检测工具,无法满足安全检测需要。原来不支持GJB 8114,最新版本也刚刚加入对GJB 8114的支持。支持Ada、C、C++、Cobal、Coral 66、Fortran、Pascal、PL/1等语言。

    通过下面的检测功能介绍,可窥见一斑。

    数据流分析变量单元级、集成级和系统级。(发现的错误,基本上都是比较浅显的)

    1. 没有实用的函数参数
    2. 不匹配的参数
    3. 变量未赋初值就引用
    4. 代码中有多余变量
    5. 给值传递参数赋值
    6. 无返回值的函数路径
    7. 函数的实参是全局变量

    控制流分析

    1. 不可达代码
    2. 不合理的循环结构
    3. 存在浮点相等比较
    4. 函数存在多个出口
    5. 函数存在多个入口

    表达式分析:

    1. 表达式中的括号使用不当
    2. 数组下标越界
    3. 存在被零除
    4. SWITCH语句缺少DEFAULT
    5. CASE语句缺少BREAK
    6. 存在混合运算
    7. 对指针进行逻辑比较
    8. 在逻辑表达式中使用赋值操作符

    接口分析

    1. 实参和形参个数不匹配
    2. 实参和形参类型不匹配
    3. 函数参数定义的结构和调用的结构不一致

    Testbed的静态度量分析做得还是比较不错。能够度量函数代码行数(200)、注释比率(20%)、函数参数(7)、goto语句(0)、圈复杂度(10)、基本复杂度(4,维护性)、LCSAJ密度(20,可维护性)、控制节点数(10)、基本节点数(5)、扇入度量(7)、扇出度量(7)等,括号中是阈值。

    但是Testbed的静态度量的公式也没有依据什么标准或权威组织的发布,可能只是自身企业研究出的算法。

    Testbed还支持单元测试,可以支持测试用例加载执行,计算覆盖率等。但是工程实践中,对于嵌入式软件很难在目标机之外的测试服务器上运行。

     

    6、PinPoint

    源伞科技由香港科大团队创立的, 用自动程序分析技术保障软件质量。307个C/C++缺陷检测器,覆盖95条CWE规则。

    该工具研发上投入上还是欠缺,虽然采用了主流的检测引擎,但是打磨的不太好,对于100万行代码可能需要超过10小时的检测,这在工程上基本是无法接受的。

    7、C++ test

    美国Parasoft公司研发的支持C、C++静态分析的工具,该工具除了可以检测编码规则外,还能检测少量的语义缺陷,此外能够进行测试用例生成,进行单元测试。

    Parasoft C++test 是一款自动化测试工具,自动测试C/C++类、函数或部件,而不需要编写测试用例、测试驱动程序或桩调用代码。

    主要用于嵌入式软件单元级别测试。

    8、PC-Lint

    PC-Lint 是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++,PC-Lint 能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint 运行于其它平台,以源代码的形式发布。PC-lint 在全球拥有广泛的客户群,许多大型的软件开发组织都把PC-Lint 检查作为代码走查的第一道工序。PC-Lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。

    PC-Lint和FlexeLine是强大的静态分析工具,检查C、C++源代码,寻找错误,小故障,不一致,不可移植的结构,冗余代码等。

    PC-Lint 能够检查出很多语法错误和语法上正确的逻辑错误,PC-Lint 为大部分错误消息都分配了一个错误号,编号小于1000的错误号是分配给C 语言的,编号大于1000的错误号则用来说明C++的错误消息。下表列出了PC-Lint 告警消息的详细分类:

     

    9、QAC

    英国PRQA公司成立于1986年,总部位于英国Hersham。主要编码规则测试。QAC/QAC++能够对C/C++代码规则进行自动检查,报告所违反的编程标准和准则。侧重于MISRA规则((ISO,MISRA C,JVF,EC++等)。能够发现1300多种C语言问题、800多种C++的问题,可以支持所有编译器的扩展、配置简单灵活,分析速度非常快,分析报告可以是excel、word、pdf、图表等多种形式,在线帮助相关联,可以及时得到问题的解释和示例。。QAC/QAC++提供了编程规则的二次开发接口,允许添加其它的自定义的编程规则。提供几十种C/C++复杂度度量,包括圈复杂度、静态路径统计和Myer's interval等,还可以扩展定制的复杂度度量。

    QAC/QAC++能够提供另外两种静态分析的能力:软件结构分析和质量度量.

    软件结构分析包括:函数控制结构图、函数调用树、数据引用关系图,文件包含关系。供多种多样的可视化输出,包括函数结构图、函数调用树、外部参考、文件包含关系和统计的度量分析。
    可用于Windows和Unix平台,有方便易用的GUI图形界面,可以和流行的开发环境集成。QAC支持的语言有C、C++、Java、Fortran;
    QAC可支持的平台有Microsoft Windows、Sun Solaris、HP-UX、Redhat Linux、Slackware Linux。

    QAC根据严重程度从低到高分为0~9级,9级为最严重,0级为最轻微。

    9级为ERRORS,必须先修复9级的错误,才能做其他级别的代码静态分析。

     

    https://img-blog.csdn.net/20180115152916770?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3hpZW1vdW1vdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

     

    https://img-blog.csdn.net/20180115152941512?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3hpZW1vdW1vdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

    10、AppScan

    IBM 安全类工具。对网站和移动应用进行扫描,识别安全漏洞并给出修复建议。

    IBM Security AppS增强网站应用和移动应用的安全,提高应用安全程序管理,加强合规性。通过在使用前扫描你的网站和移动应用,AppScan使你可以识别安全漏洞并产生报告和修复建议。

    IBM工具,在国内销售情况不是太好,该工具市场占用率极低,基本上被淘汰出具。

    11、SonarQube

    SonarQube 是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量。 通过插件形式,可以支持众多计算机语言,比如 java, C#, go,C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等。sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。

    Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 

    1. 编写干净的代码:SonarQube提供一份关于源代码整体健康情况的概述。更重要的是,它将在新代码中发现的问题高亮显示。使用项目中的质量门设置,你将可以轻易的修复漏洞,机械的改善代码。

    2. 检测错误:代码分析器配备强大的路径敏感数据流引擎,可以严格检测错误。比如空指针引用、逻辑错误、资源泄漏等等。

    3. 多语言:超过20个代码分析器可以使用,SonarQube为每个主流编程语言提供一个代码分析器:C/C++、JavaScript、C#、Java、COBOL、PL/SQL、PHP、ABAP、VB.NET、Python、RPG、Flex、Objective-C、Swift、Web等等。每个分析器提供大量的规则以便定位普遍的和特定语言的质量问题。应用程序经常一次使用几种编程语言,例如[C#,C++和JavaScript]或者[Java,JavaScript和HTML]。SonarQube自动检测这些语言,调用对应的分析器。

    4. 开发运营一体化:SonarQube希望成为开发运营生态系统的一部分,因此使用网勾或广泛的数据接口将它集成入CI引擎、提升渠道等。

    5. 集中控制质量:为开发者、技术领导、管理者和负责几个或者几千个项目的决策层提供一个代码质量共享的愿景。

    虽然sonarqube能够比较好的支持CI等,但是由于主要引入的开源工具进行检测,所以基本上无法在真正项目中运用。只能算是解决企业有无代码扫描的问题。

    12、codesonar

    商业,免费30天试用,在Jenkins插件中。静态分析工具,实现了几个静态分析工具基准。寻找静态内存,资源管理,并发性和其它缺陷的工具。

    CodeSonar,GrammaTech公司的王牌静态分析SAST工具,识别那些可能导致系统崩溃的错误、意外行为和安全漏洞。

    CodeSonar被证明可以提供最深层的静态分析,能够寻找比市场上其他的静态分析工具更多的重要缺陷。Code Sonar实现了最好的几个静态分析工具基准,寻找静态内存、资源管理、并发性和其他缺陷。

    通过分析源代码和二进制包,CodeSonar使团队可以分析完整的应用程序,使你可以控制你的代码供应链,从而在程序开发生命周期早期移除成本最高的最难找的缺陷

    但是通过笔者实际上运用该工具,基本上扫描不出多少缺陷和漏洞。

    13、PVS-Studio

    是一个C、C++、C#源代码程序的错误检测工具,进行静态代码分析,产生一个报告帮助程序员寻找和修复错误。

    14、OpenLogic

    扫描源代码和二进制文件,确认开源代码和授权,管理开源政策和审批,报告安全漏洞,以及提供开源技术支持。

     

    15、cppcheck

    免费的C++代码检测工具

    16、cpplint

    cpplint 是 一个python脚本, google使用它作为自己的C++ 代码规范 检查工具.如果你的C++代码遵循的也是 google 的C++代码风格, 那么这个脚本对你来说就非常实用.

     

    19、FindBugs

    FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。选定了以上各项后,便可以开始检测了。

    可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。

    FindBugs的运行环境可能是这四个工具之中最苛刻的了。它工作在j2se1.4.0或以后的版本中,需要至少256MB内存。它的安装非常简单,下载之后简单的解压即可。为了与ant配合使用,它提供了对应的ant task。

     

    20、FindSecBugs

    Find-Sec-Bugs 是一款本地 bug 扫描插件 “FindBugs-IDEA” 的 Java 安全漏洞规则扩展库,它支持在多种主流 IDE 环境进行安装:Eclipse, IntelliJ, Android Studio 和 NetBeans。

    扫描范围:只扫描 Java 代码,支持主流的 Java 开发框架,比如 Spring-MVC, Struts 等。

    扫描漏洞类型:通过扫描源代码,能够发现128种不同的安全漏洞类型。

    FindSecBugs检测效率比较慢,误报率和漏报率相对比较高。国内有些安全厂商集成了该工具,市场上销售。

     

    20、PMD

    开源检测工具。PMD的运行环境是j2se1.3或以后版本,安装过程同样也是解压即可。对应ant task的使用:

    检测效果不是太理想。

    21、Polyspace

    软件运行时错误检测工具.运行时错误(Run-time Errors)就是软件在动态运行时出现的错误,是所有的软件错误中最具风险的。根据ANSI C的定义,C语言中的典型运行时错误主要是:

    运行时错误属于潜在的威胁,广泛的存在各种软件中。根据Berkeley大学与 IBM Watson的研究报道指出所有IBM大型软件的漏洞中,30%-40%是运行时错误引起的。

    PolySpace使用语义分析技术,它依靠大量的数学定理提供的规则分析软件的动态行为。语义分析技术没有使用简单的穷举法,却有能力在更普通的模式下表达程序的状态,还能提供规则进行巧妙的处理。简单来说,语义分析技术可以通过静态的方法,能够发现动态的运行时错误。PolySpace根据软件的源代码,对软件进行抽象,这种突破性的方法使得程序员在写代码的同时,就能精确的而且自动的查明软件的运行时错误。

    支持Ada语言。

     

    22、Infer

    Infer是facebook开源的一款代码静态分析工具,现支持的语言有Java、Objective-C、C和C++; 对Android和Java代码可以发现null pointer exceptions和resource leaks等;对iOS、C和C++代码可以发现memory leak等。infer只支持Mac和Linux系统

     

    23、BlueMorpho(闪蝶)

    BlueMorpho是独立运行的B/S程序,安装简单,无需额外配置参数文件。

    在Windows下运行Bluemorpho windows安装包,注意有32位和64位两个版本,

    安装完成后,在开始-程序-BlueMorpho文件夹里运行Sart bluemorho server启动分析server.

    Server启动后,在开始-程序-BlueMorpho文件夹里运行BlueMorpho即可访问闪蝶源码分析平台。

    BlueMoropho提供两种方式上传source code, 手工上传和同步从Mainframe下载COBOL源码。

    代码上传或下载到BlueMorpho以后,即可点击任意程序进行源码分析。

     

    24、腾讯 TscanCode

    TscanCode支持以下类型规则扫描:

    1. 空指针检查,包含可疑的空指针,判空后解引用比如Crash等共3类subid检查。
    2. 数据越界,Sprintf_S越界共1类subid检查。
    3. 内存泄漏,分配和释放不匹配同1类subid检查。
    4. 逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查。
    5. 可疑代码检查,if判断中含有可疑的=号,自由变量返回局部变量等共计15类检查。
    6. 运算错误,判断无符号数小于0,对bool类型进行++自增等,共计11类检查。

    25、阿里 P3C是Java编码规范

    代码规范检查插件p3c,是根据《阿里巴巴Java开发手册》转化而成的自动化插件。目前主要阿里系的公司内部使用为主。

    26、360fireline 火线

    360火线(Fireline)是360公司技术委员会牵头,Web平台部Qtest团队开发的一款免费静态代码分析工具。主要针对移动端Android产品进行静态代码分析。其最为突出的优点就是资源泄漏问题的全面检测。同时,火线与360信息安全部门合作,推出了一系列针对移动端安全漏洞的检测规则。360火线提供免费使用,扫描速度快,并支持Android Studio插件,Jenkins插件,Gradle部署等多种集成方式。

    火线目前是360公司发布流程中必不可少的环节,在每次代码编译审核时提供静态代码分析检测,为代码审计人员、开发人员分别提供审核和修改代码的依据。目前火线在360发布流程中已累计运行超过500天,扫描文件数2千万+,扫描代码量超过45亿行。火线最近推出的Android Studio插件360 Fireline Plugin下载量已达到4000+。

    火线拥有四大类规则,分别为安全类,内存类,日志类,基础类。
    • 安全类:根据360信息安全部门最权威的SDL专门定制,每一条SDL都有真实的攻击案例
    • 内存类:各种资源关闭类问题检测(本次评测的重点)
    • 日志类:检测日志输出敏感信息内容的规则
    • 基础类:规范类、代码风格类、复杂度检查规则
    (详见官网:http://magic.360.cn

    Github上搜索TestCasesProject,可以找到他们上传的testcase,c语言和Java语言

     

    27、轩宇SpecChecker

    轩宇公司产品。是属于航天旗下公司。

    SpecChecker是一款利用程序静态分析技术对代码可信性保障提供支持的缺陷检测工具。支持安全编码标准符合性检查、运行时缺陷检测和代码质量度量等。可适用于源码开发的任何阶段,通过持续暴露缺陷以改善质量和化解风险。利用可视化代码结构分析以辅助审查、提高效率。是国内首个通过ISO 26262、IEC 61508 和EN 50128功能安全认证的同类产品。

     

    (完)

     

    展开全文
  • SolidWorks静态分析

    2016-09-29 18:26:32
    静态分析
  • Android 静态分析

    2014-05-10 00:42:12
    Android 静态分析 还可以参考http://blog.csdn.net/lpohvbe/article/details/7981386 注:invoke-static:调用静态方法,invoke-direct:调用私有或者构造函数,invoke-virtual:调用public或者protected方法
  • 推荐几个代码静态分析工具

    千次阅读 2021-04-26 00:24:44
    关注+星标公众号,不错过精彩内容作者 | strongerHuang微信公众号|嵌入式专栏大家平时写代码,有用代码静态分析工具进行分析吗?可能很多人都没有对代码进行过静态分析,今天就来...
  • 本文主要介绍了场效应管放大电路的静态分析
  • 恶意代码静态分析

    千次阅读 2022-02-27 10:55:21
    http://www.infocomm-journal.com/cjnis/CN/article/downloadArticleFile.do?attachType=PDF&id=166605 恶意代码实战分析-第一章:静态分析基础:https://blog.csdn.net/u013687652/article/details/45288925 基于...
  • 基于静态分析的虚假安卓APP产品分析与检测.docx基于静态分析的虚假安卓APP产品分析与检测.docx基于静态分析的虚假安卓APP产品分析与检测.docx基于静态分析的虚假安卓APP产品分析与检测.docx基于静态分析的虚假安卓...
  • 基于静态分析的虚假安卓APP产品分析与检测.pdf基于静态分析的虚假安卓APP产品分析与检测.pdf基于静态分析的虚假安卓APP产品分析与检测.pdf基于静态分析的虚假安卓APP产品分析与检测.pdf基于静态分析的虚假安卓APP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 711,757
精华内容 284,702
关键字:

静态分析