2.7 安全代码审查对开发实践的好处
将安全代码审查与公司的开发流程融合有很多好处,这取决于执行安全代码审查的流程和工具、数据备份的情况和工具的使用情况。那些把开发人员带到一个房间并使用投影仪显示代码,同时在一份纸质代码上记录审查结果的日子已经一去不复返了。目前,有很多工具使安全代码审查更加高效,并可跟踪审查记录和审查决定。当安全代码审查流程被正确设置后,审查代码的行为可以变得很高效,并对任何组织机构提供可用于培训的、可审查的和带有历史记录等优点的审查。本节介绍了安全代码审查流程被添加到开发组织机构后产生的一些优点。
1.提供历史记录
如果开发人员加入了其他公司,或在公司内被调到其他团队,而多年前其编写的代码仍须维护或完善,那么,最大的问题就是新开发人员缺乏对原有代码背景的了解。而在实践中收集的最多的意见是形成代码文档,包括内部代码(组件)和外部代码(设计文档、功能文档、Wiki 等)。这些意见从对零文档的容忍,到接近美国国家航空航天局级别的文档,其文档的大小远远超过代码模块的大小。
在安全代码审查期间发生的很多讨论,如果被记录的话,将对模块维护人员和新开发人员提供有价值的上下文信息。从开发人员对模块的描述到他们做出的一些设计决定,至每位审查人员提出的注释,说明他们为什么认为一个SQL查询语句应当被重构、算法应当被变更,还有展现在审查人员眼前的开发故事,这些都可被未来没有参加审查会议的编码人员使用。
使用审查工具自动捕捉那些审查讨论并将其存储,以作为开发组织机构将来的参考,以记录模块变更的历史,并可被新开发人员在以后查询使用。这些讨论还可以包含任何有关架构、功能、设计、测试的详细描述,以及安全漏洞或加固措施的序号。
2.验证变更已得到了测试
当开发人员将要提交代码到代码库时,公司如何知道这些代码已得到了充分的测试呢?针对发生变更的代码记录已运行的自动化测试或手动测试,可以给审查人员和管理团队信心:变更已奏效,且不会导致任何回滚。此外,记录人员还可以声明已针对变更执行了测试;记录人员允许审查人员审查测试,并提出其他可能未执行的测试建议。
在一个存在自动化单元或组件测试的开发场景中,编码准则可以要求开发人员在安全代码审查过程中包括这些单元或组件测试。这再次要求这个环境中的审查人员确保正确的单元组件测试包含在这个环境中,并在持续集成周期中保障质量。
3.为初级开发人员进行编码培训
当员工学习了开发语言基础,并阅读了一些最佳实践书籍后,他们怎样才能获得好的岗位技能呢?除了开发伙伴(因为成本高,这很少发生)和培训(对编码的非正式讨论、技术讲座等),在安全代码审查过程中有关设计和代码的讨论与决定,可以为初级开发人员提供学习的经验。许多有经验的开发人员承认这是对双方都有促进的事情,因为新的开发人员可以带来新的想法,或导致原有的开发人员学习新的技巧。这些经验和想法只会使开发组织机构受益。
4.熟悉代码库
当开发了一项新功能时,新功能往往集成在代码主体中。这里,安全代码审查可以使更多的团队成员了解新功能和代码将如何影响产品。这有助于防止其他团队重复开发软件功能。
这也同样适用于孤立团队的开发环境。安全代码审查人员可以触及其他团队的开发成果,并允许其他团队审查他们的模块,然后,每个人都能逐渐了解公司的代码库。
5.对集成冲突的预警
在一个繁忙的编码阶段,有时由多个开发人员共同对某个指定模块(特别是核心代码模块)编制代码。很多人有切割代码和运行测试的经验,只是为了发现其他一些提交的变更修改了功能,并要求相关人员重新编码、重新测试变更的影响。通过安全代码审查传播即将到来的变更,可使开发人员了解变更将影响他们即将到来的提交、开发时间要求等,从而相应地做出更新。