- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
代码审查技术 学习目标 掌握代码分析和评审技术 掌握自动化代码分析工具的使用 建筑工程师的第一堂课-关注细节 关注并弄清楚桥梁修建细节,否则你建起来的桥就有可能坍塌。 -《安全编程 – 代码静态分析》 代码审查对成本的节省 黑盒测试的缺陷 黑盒测试既不充分,而且效率也低。 在系统完成之前,测试就无法开始,测试人员只有软件版本发布时才能拿到版本进行测试。 Static white-box testing Find bugs early Find bugs that would be difficult to uncover or isolate with dynamic black-box testing Cost effective Side benefit:give black-box tester ideas for test cases to apply when they receive the software for testing 不懂开发怎么做代码审查? 霍元甲因为他本人身体虚弱,所以父亲从小不让练武功,而生长在那样的环境中,他天天可以看到兄弟们在练功,招式已经记忆在心里,但是苦在没有练功的机会,他利用体力劳动的过程中,改变劳动方式,趁机练功,后来发展到独创“迷踪拳”。 代码静态分析 静态分析是指在不执行的情况下对代码进行评估的过程。包括: - 类型检查 - 风格检查 - 程序理解 - BUG查找 - 安全审查 静态分析 - 类型检查 在Java中,下面的语句虽然符合类型检查规则,但是会在运行时失败,抛出一个ArrayStoreException异常: Object[] objs = new String[1]; objs[0] = new Object(); 静态分析 - 风格检查 常见工具 C/C++:PC-Lint JAVA:PMD .NET:StyleCop 静态分析 - 程序理解 程序理解工具能帮助我们搞懂代码库中的大量代码,洞察程序运转之道。 集成开发环境(IDE)一般至少都包含某些程序理解功能,例如:“查找本方法的所有应用”。 常用工具: - 代码流程图:Code Visual to Flowchart - UML与源代码双向工程,例如Fujaba 静态分析 - Bug查找 BUG查找的目的不像风格检查那样抱怨格式方面的问题,而是根据“BUG惯用法”(规则)来描述代码中潜在的缺陷。 常用工具: PMD、FindBugs、Coverity、Klocwork EmptyCatchBlock: Empty Catch Block finds instances where an exception is caught, but nothing is done. In most circumstances, this swallows an exception which should either be acted on or reported. Example: public void doSomething() { try { FileInputStream fis = new FileInputStream(/tmp/bugger); } catch (IOException ioe) { } } 静态分析 - 安全审查 最早的安全工具ITS4、RATS、Flawfinder比素有美名的grep多不了多少东西;绝大多数情况下,它们将对代码进行扫描,寻找对strcpy()这样的函数所进行的调用。 int main(int argc , char * argv[] ) { char buf1[1024]; char buf2[1024]; char * shortstring = “a short string”; strcpy( buf1 , shortstring ); // safe strcpy( buf2 ,argv[0] ); // dangerous } 静态安全分析工具测试基准 SecuriBench是一个基于Web的开源Java程序集合,包含一些已知的安全缺陷: /~livshits/securibench SecuriBench Micro是SecuriBench的缩减版: /~livshits/work/securibench-micro ABM(Analyzer Benchmark)测试基准由一些小程序和大型的真实程序构成: 比较静态安全分析工具的最佳方法是使用这些工具分析同一代码并比较其结果。 把工具引入到代码审查流程中 练习:读代码、找错误 int main(in
文档评论(0)