提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:郑恭琳|2021-02-22 15:00:05.160|阅读 383 次
概述:“过多的误报”可能是避免进行静态分析的最常见借口。但是静态分析不必太吵。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
“过多的误报”可能是避免进行静态分析的最常见借口。但是静态分析不必太吵。
几年前,静态代码分析中的最大挑战是试图找到越来越多的有趣检查对象。在90年代初期的Parasoft原始CodeWizard产品中,我们根据Scott Meyers的书《Effective C++》中的条款制定了30条规则。我想将其视为“程序员的直觉”。我曾向Scott提过一次,虽然他没有想到过……但是确实给了他一个很好的笑声。
从那时起,静态分析研究人员一直在努力扩大可检测的范围,扩展静态分析的功能,并识别缺陷,而不仅仅是一些弱代码。但是它仍然遭受误报。静态分析已经改变了用户的注意力,从强化代码到寻找错误,这是很棒的,但是现在人们进行静态代码分析时遇到的最常见障碍之一就是试图弄清他们得到的结果。
尽管人们确实说“我希望静态分析能够捕获____”(将您喜欢的无法找到的错误命名),但听到“哇,我得到的结果太多了!”的说法更为常见。或“静态分析很吵!”或“静态分析中误报率很高!”因此,作为软件测试组织,我们的工作是继续为客户解决该问题——继续提供工具和功能,以帮助您对所获得的结果进行排序,并了解哪些风险最大。
在静态分析的上下文中,当静态分析工具错误地报告违反了静态分析规则时,就会出现“误报”。当然,这可以是主观的。有时,开发人员陷入了将任何他们不喜欢的错误消息标记为“误报”的陷阱,但这并不是真的。在许多情况下,他们只是不同意该规则,他们不了解该规则在这种情况下的适用方式,或者他们认为该规则通常不重要(或在这种情况下)。我称之为噪音,而不是误报。我在这里发现的有趣之处在于,该工具越聪明,就越有可能产生开发人员乍看之下可能无法理解的发现。
基于模式的静态分析实际上没有误报。如果该工具报告实际上没有违反静态分析规则,则表明该规则存在错误(因为规则不应含糊不清)。如果该规则没有明确的模式可寻,那就是错误的规则。
我并不是说每个报告的违反规则都表明存在缺陷。违反仅表示找到了模式,表明代码有缺陷,容易产生缺陷。
当我查看违规时,我会问自己这个规则是否适用于我的代码。如果适用,我会修复代码。如果没有,我将禁止违规。最好直接在代码中禁止违反静态分析的行为,以便团队成员可以看到它,而不必再次进行审查。否则,您将不断地反复审查相同的违规行为;这就像尝试拼写检查,但切勿在字典中添加“特殊”字词。代码内抑制的优点在于它独立于静态分析引擎。任何人都可以查看该代码,并查看该代码已被审查,并且该模式在该代码中被视为可以接受。如果您需要证明符合编码标准,则此功能特别有用。而且,如果确实需要合规性,则可以轻松地将现有配置用于这些标准,例如CWE,MISRA,IEC 62304,DO-178B/C等。
使用基于流的分析,误报不仅是方法固有的,而且是相关的,因此需要加以解决。流分析无法避免误报,原因与单元测试无法生成完美的单元测试用例相同。分析必须确定代码的预期行为。有时候,太多的选择无法知道什么是现实的。有时,您只是根本没有足够的信息来了解系统其他部分的情况。
这里重要的是,真正的误报是完全错误的。例如,假设您使用的静态分析工具说您正在读取空指针。如果您看一下代码,发现实际上是不可能的,那么您肯定会误判。
另一方面,如果您根本不担心代码中的空值(因为它们是在其他地方处理的),那么该消息(虽然对您并不重要)也不是错误的肯定。这是真的,而且碰巧并不重要。来自流量分析工具的消息的范围从“真实和重要”到“真实和不重要”,“真实和不可能”到“不真实”。这里有很多变体,每种变体的处理方式应不同。
这里也有一个常见的陷阱。就像上面的null示例一样,您可能会认为null值无法做到这一点,但是该工具找到了实现它的方法。如果对您的应用程序很重要,请确保进行检查并可能对此加以保护。
了解流量分析既有力量又有弱点,这一点至关重要。流分析的功能在于它遍历代码并尝试查找热点并在热点周围发现问题。缺点是必须假设才能尝试遍历代码,并且遍历得越远,产生可能性越大的可能性就越大。
真正的问题是,如果您开始认为由于流程分析是干净的而已经清理了所有代码,那么您就在自欺欺人。确实,您发现了一些错误,对此深表感谢。缺少流分析错误只是意味着您一无所获,而不是代码很干净。如果您要构建对安全至关重要的软件,则最好确保使用的是C/C++test,dotTEST或Jtest之类的工具,同时具有两种类型的静态分析
补充流分析的一种很棒但通常被忽略的方法是运行时错误检测。运行时错误检测可以帮助您发现比流分析所能发现的复杂得多的问题,并且您可以确信情况确实发生了。运行时错误检测不会像静态分析那样具有误报率。当发现缺陷时,是因为它实际上观察到了它在执行过程中发生的情况-没有涉及任何假设。
您的运行时规则集应与静态分析规则集紧密匹配。规则可以发现相同类型的问题,但是运行时分析具有大量可用的执行路径。这是因为在运行时,存根,设置,初始化等对于流分析的方式都没有问题。唯一的限制是它只能与您的测试套件一样好,因为它会检查您的测试套件恰好执行的路径。如果您使用C或C++进行编程,尤其是在IoT等嵌入式设备中,请查看Insure++——它在运行时发现的错误比其他任何工具都多。您可以在运行时准确地找到它们,而不必陷入诸如线程问题,内存泄漏和竞争条件之类的棘手问题中。
我对误报的处理方法是:如果要花3天的时间来修复错误,则最好花20分钟的时间来检查误报…只要我可以标记它,而不必再次查看它。在正确的背景下查看它是一个问题。例如,假设您有线程问题。线程问题极难发现。如果要查找与线程相关的问题,可能需要花费数周的时间才能对其进行跟踪。我希望编写代码时不会出现任何问题。换句话说,我试图将我的过程从发现转向预防。
如果部署正确,则静态分析不一定会带来嘈杂的令人不愉快的体验。看看我们在Parasoft的工作方式有何不同,特别是利用Parasoft DTP的全部功能通过智能分析来管理结果,使您始终专注于软件中的风险,而不是追逐不重要的问题。
基于模式的分析中的误报
基于流的分析中的误报
运行时错误检测
值得吗?
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
针对 C/C++ 软件开发提供统一、完全集成的测试解决方案。
Parasoft Jtest用于应用软件开发的集成Java测试工具
Parasoft dotTEST降低C#和VB.NET开发风险,有效地实现符合C#和.NET开发的测试工具的要求
Parasoft Insure++针对C和C++应用程序的运行时内存泄漏检测和内存调试
Parasoft DTP开发测试平台,通过在SDLC中持续应用软件质量最佳实践降低了商务风险
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢