静态分析工具日益强大

静态源码分析工具已经从简单的语法检查器发展成强大的工具,可以用来发现在大规模代码库的复杂交互中所产生的缺陷。直到最近,它们仍被质量保证人员用来在接近项目完成的综合创建期间评估代码。

最新发布的产品正在将这些工具的作用向开发流程的早期阶段推进,以便帮助开发者在软件错误蔓延前的更早期将其检测出来。Klocwork公司的Insight和GrammaTech公司的CodeSonar Enterprise都能满足开发人员的需要,即使在许多代码段还缺失的情况下也能发挥作用。

软件开发人员通常采用两种工具来自动检测他们代码中的错误。一种是动态分析工具,可以在代码执行过程中查看代码;另一种是静态分析工具,通过算法检查代码的错误。这两种工具各有优缺点。

动态分析擅长于发现运行时错误,如资源泄漏和动态存储讹误。开发人员可信赖动态分析工具所报告的任何错误都是真实的,因为这些错误是在实际代码执行期间被发现的。

但为了高效地使用动态分析,代码必须被全面执行,因此需要使用测试案例。这样,动态分析工具在寻找错误方面的效率就取决于测试案例的质量。另外,由于动态分析工具是与运行软件一起工作的,因此只能在开发过程的晚期阶段起作用,此时代码已经完全编好并首次被整合。

静态分析工具使用算法技术检查源代码中的错误,并标明问题区域,以便编程人员做更详细的检查。这种算法方式无需使用测试案例,算法本身决定了分析工具发现错误的效率。不过,这种方法存在识别失误的可能性:有可能标记为错误的代码事实上是可以正确执行的。如果它们产生太多的错误时别,用工具供应商术语而言就是低“准确性”,静态工具就会影响用户开展后续工作,并有可能掩盖真正的错误。

这两种工具呈互补的关系,各自都擅长于发现对方很难发现的错误,但动态分析工具似乎在开发人员中更加普及。部分原因是早期的静态分析工具更像是开发人员用来寻找相对简单的编码和格式错误的语法检查器。

然而在过去十几年中,随着研究人员开发出更加高效的算法,静态分析工具变得越来越强大。它们已经能够识别出大量的微小错误(见表1),其中有许多错误只在抢先多任务环境中的任务交织期间表现为执行问题。

表1:可被静态源代码分析工具发现的典型错误
newmaker.com

上述新的静态分析工具额外的好处之一是:它们拥有增强的能力,可以发现代码中有可能被恶意用户用来突破安全防护的缺陷。开发人员很容易低估软件安全缺陷,因为他们只是指望代码能正常执行。静态分析工具的算法没有预期性,只是一种规程,因此会不带偏见地识别潜在的问题。

向开发早期推进

直到最近,静态源代码分析工具还只是用于开发过程的晚期,即开发人员能够完整访问所有代码段的综合构建阶段。然而许多新推出的工具,包括Klocwork公司的Insight和GrammaTech公司的CodeSonar Enterprise,都已经通过性能的增强使得开发者在代码编写的过程中使用这种静态分析工具。

这种新一代静态源代码分析工具利用企业级软件开发环境,整合了从事同一项目不同部分的开发团队的成果(见图1)。通过实现代码段分析扫描方面信息的对等交换,这种工具可以收集到精确检测错误所需的范围更广的语境。

newmaker.com
图1:新的静态源代码分析工具可以通过收集中心数据库中个别代码段的数据、建立系统性观点来最大化效率

这种更广范围的语境,再加上为遗失的代码自动建模,就可以帮助开发人员快速建立有效可靠的代码检查基础,即使当时项目还没有全部完成。在这个阶段捕捉到的错误比开发过程晚期的错误更容易修正,代价也较低。另外,较早捕捉错误可以防止这些错误在系统中扩散进而影响后期开发的代码行为。

然而,在早期使用这种静态分析有个前提,即充分理解局部查看代码所引起的局限性。“重要的是记住在软件开发的早期阶段,工具是不够精确的,并可能忽略了程序间的影响。”GrammaTech公司工程副总裁Paul Anderson提醒道。

但Anderson补充道,随着被分析代码规模的增长,结果将有所改善。经常较早地使用静态分析工具,还有助于培养开发人员发现他们个人编码风格的缺点,并改变他们的编程方式以便防止重复发生相同类型的错误。

由于这种新一代工具被整个项目开发团队所使用,他们可以记录分析结果的变化规律,从而帮助识别新的问题。例如Klocwork公司的Insight可以保存每次分析过程产生的数据,从而让开发人员在整个开发过程中跟踪标示出的错误,该公司首席技术官Gwyn Fisher表示。

该工具还允许授权的高级开发人员将错误标示为伪错误或不相关错误,Fisher补充道,这样,在随后的分析操作中就不会再报告它们。这将有助于开发人员集中精力处理真正的错误,并使任何新引入的错误更加明显,或者在交互代码部分被一起分析时发生的错误更加突出。

何时采用静态工具?

在开发过程中要多么早和多么频繁地使用静态代码分析工具?这取决于具体的项目情况。“不同团队可以接受不同等级的伪错误。”GrammaTech公司的Anderson表示,“安全性非常关键的项目可能容忍10:1的假:真错误报告率,而其它项目50:50的比率就有问题,因为跟踪伪错误非常浪费时间。”

Klocwork公司的Fisher指出,“有些用户可能从第一天就开始使用分析工具,此时工具的作用表现的相对较弱,他们能够容忍过多的伪错误。其它用户则宁愿等待架构全部开发好再使用工具,即使那时缺陷密度会比较高。”

最后,项目组必须自己决定如何平衡在开发过程早期发现伪错误的成本和在开发过程晚期发现和修正错误的成本之间的关系。但无论如何要选用静态分析工具,因为这些工具已被事实证明在发现代码缺陷和安全弱点方面具有极高的价值。既然这些工具已经交付到开发人员手中,缺陷可以被尽早发现,那么静态源代码分析工具也将有助于降低开发成本。(end)

 

作者:Richard A. Quinnell    来源:电子工程专辑

静态代码分析工具简介 静态代码分析工具简介 什么是静态代码分析 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。 在软件开发过程中,静态代码分析往往先于动态测试之前进行,同也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70%... 阅读详情

相关推荐

国内外主流静态分析类工具汇总

笔者从事该软件安全方面工作,在工作和学习中收集了国内外比较主流的静态分析类工具,供大家参考。大多是资料来自于网络整理,如有不足或欠缺,还请在评论中指出。我进行修正。也欢迎同行多多交流。 我使用0标注北大软件CoBOT,因为他是国内第一款基于主流SAST技术的静态分析工具,填补了国内在缺陷检测、安全漏洞软件工具上的空白。值得称赞的工具。 0、北大软件CoBOT CoBOT(库博)是北京大学...

manok的专栏 2万+

【论文笔记】疯狂的检测工具 —— 静态分析工具

本文目标:精度论文 “CryptoGuard: High Precision Detection of Cryptographic Vulnerabilities in Massive-sized Java Projects” 。 主要针对大规模的 JAVA 项目,静态分析加密API漏洞。论文发布于 2019 年的 CCS~

qq_40119224的博客 3763

代码静态分析工具

在大型代码工程中,通常使用 Coverity 和 SonarQube 这样的工具,它们能够集成到持续集成/持续部署(CI/CD)流水线中,自动分析每次提交的代码变化,提供可视化报告,帮助开发团队及发现和修复问题。PVS-Studio:另一种静态分析工具,支持多种编程语言(如C、C++、C#、Java),能查找编码错误和潜在的安全漏洞。静态分析是指在不运行程序的情况下,通过检查代码文本来发现潜在的问题或优化建议。通过这些工具和方法,可以在代码开发的早期发现潜在的问题,提高代码质量,减少错误发生的可能性。

jjjxxxhhh123的博客 2092

9 个最佳 Java 静态代码分析工具

使用顶级 Java 静态代码分析工具列表来提高您的代码质量 - 确保您的代码干净、高效且无错误。开发人员如何防止频繁出现应用程序故障?自动化分析可能是答案。Java 静态代码分析工具有助于检测任何问题或,并通过自动化代码审查流程来帮助提高我们将探索一些市场上最好的工具,这些工具可以增强工作流程并创建更强大的代码。什么是静态代码分析?静态代码分析是一种无需执行源代码即可对其进行检查的技术。通过根据编码规则分析代码集,这种高级静态分析工具可以读取代码中的错误并确保其符合标准和最佳实践。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 9032

ASP.NET页面间的传值的几种方法

 ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryStri

html1992的专栏 216

ASP.NET页面间的传值的几种方法的总结

ASP.NET WEB FORMS给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryString...

weixin_30810583的博客 83

ASP.NET页面间的传值的几种方法(总结)

ASP.NET WEB FORMS给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryString

song530061187的专栏 648

ASP.NET 页面间传值的几种方法

原文出自:成都网站优化 QueryString传值: 1. 这是最简单的传值方式,但缺点是传的值会显示在浏览器的地址栏中且不能传递对象,只适用于传递简单的且安全性要求不高的整数值,例如:   2. 新建一个WEB项目,添加一个页面命名为Test1,在页面中添加一个Button命名为btnLogin,再添加两个TextBox分别命名为tbxUserName和tbxPassWo

挑战未来人生 437

kshen转ASP.NET页面间的传值的几种方法

ASP.NET WEB FORMS  给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QuerySt

kshenalphalo2002的专栏 811

一个html中两个textbox传值,ASP.NET页面间的传值的几种方法

ASP.NET页面间的传值的几种方法2006-10-08 00:00:00 作者:ASP.NET页面间的传值的几种方法ASP.NETWEBFORMS给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦...

weixin_32123093的博客 522

ASP.NET页面间的传值的几种方法(总…

ASP.NET WEB FORMS给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面,用同样的方法在ASP.NET中实现有点麻烦。在这里,我们可以通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryString

一览众山小 612

asp.net 页面间传值的几种方法

1.  使用QueryString变量QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:a.aspx的C#代码private void Button1_Click(object sender, System.Ev

学而不思则罔,思而不学则殆。 468

asp.net Context.Handler 页面间传值的几种方法

一、目前在ASP.NET中页面传值共有这么几种方式: 1、表单提交, <form action= "target.aspx" method = "post" name = "form1"> <input name = "param1" value = "1111"/> <input name = "param2" value = "2222"/> &l...

anxian8458的博客 138
上一篇: Java中System.load与System.loadLibrary异同
下一篇: 代码静态分析工具PC-LINT安装配置
miyazaki
博客等级 码龄20年 0粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值