PC-lint Plus 静态分析 vs 动态分析

PC-lint Plus是一种静态分析工具,静态分析可以是动态分析非常有效的补充。

动态分析,指的是运行程序。这可以通过编译机器代码并运行代码,或通过解读程序来完成。通过观察程序的行为,人们很容易假设知道程序的全部内容。动态分析是编程的一个重要部分,因为没有程序员可以说他或她的程序是完美的,除非它真的按照预期运行。

一个新手程序员经常误以为他的工作已经完成,因为他选择的输入组合没有导致程序出现bug。 然而,经验告诉我们,虽然测试可以显示bug的存在,但测试永远无法证明bug不存在。即使是相对简单的程序,它的输入组合数量也可以是天文数字,而测试所有输入组合是十分不切实际的。

另一方面,静态分析不仅限于输入组合。例如,如果代码中的某处将signed quantity与unsigned quantity进行比较,那么signed quantity将被更新为unsigned quantity,在signed quantity失去作用之前对程序不会造成任何损害。而静态分析会主动发现问题,并且程序员不用编写输入组合去测试程序。

或者考虑C/C ++标准认为“implementation dependent”的构造,例如在较大表达式中,子表达式的求值顺序或C ++程序中初始化的顺序。通过在使用同一编译器的同时进行大量测试运行,您可能不会发现代码的任何部分容易受到此类攻击。但是,如果您要将应用程序移植到新的操作系统,或获取新的编译器,或者只是更改当前编译器的优化设置,那么implementation dependent的顺序假设可能会改变并触发一个看起来很稳定的代码中的bug。

静态分析与编译器有不同的角度。它不是找到一种可以解读程序的方法,而是寻找程序可能被误解的方式。

另一种常见的警告类是冗余元素。例如,如果没有调用某个特定的函数,那么该函数是否真的是多余的,或者是否应该被调用。显然,只有程序员才能回答这个问题,但这是一个在动态分析过程中不会出现的问题。

动态测试和静态分析与医疗保健行业有一个有趣的类比。动态测试就像急诊室护理,而静态分析就像预防性护理,例如保持健康的饮食和锻炼计划。如果您的系统崩溃,显而易见的工具是动态测试,即传统的调试器,就像一个刚刚突然身体很难受的人,家人会带他去急诊室。但是,保持健康的饮食和锻炼计划可以帮助您远离急诊室,因此使用静态分析可以帮助您避免程序失败。如果您的系统崩溃,您最好也进行静态分析,因为如果发现错误,静态分析将明确指出错误。

因此,静态分析可以是动态分析非常有效的补充。

PC-lint Plus 静态分析 vs 动态分析

PC-lint Plus是一种静态分析工具,通过分析C和C ++源代码来发现软件中的缺陷。与编译器一样,PC-lint Plus会解析源代码文件,执行语义分析,并构建一个抽象语法树来表示程序。PC-lint Plus采用各种机制,包括数据流分析,数值跟踪,读写分析,强类型检查,功能语义验证和许多其他技术,来提供对单个文件和整个项目强大而全面的分析。

PC-lint Plus试用版


想要购买正版授权,或者获取更多PC-lint Plus相关信息的朋友可以点击” 咨询在线客服 “~
海量产品正在参加年终大促,价格优惠!详情请点击” 年终巅峰钜惠 “~

标签:代码优化静态检测工具

来源:慧都网

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年11月13日
下一篇 2018年11月13日

相关推荐

发表回复

登录后才能评论