美章网 资料文库 代码审查在软件开发中的应用范文

代码审查在软件开发中的应用范文

本站小编为你精心准备了代码审查在软件开发中的应用参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

代码审查在软件开发中的应用

《电脑开发与应用杂志》2014年第六期

1何时进行审查

根据软件项目质量标准,每一小段代码在之前都要经过细致的审查。全面的代码审查应占编码时间的50%或更多,比现实世界中的项目准备投入的时间要长。任何项目都会产生大量的源代码。除了严格开发过程之外,总是没有足够的时间对每一个小代码片断进行详尽的审查。那么,应如何决定哪部分代码需要审查呢?必须选择那些最能从审查中获益的代码。也就是那些可能编写得很槽糕的代码,或者是那些对于系统正常发挥作用最重要的代码。具体可采取5种策略:①选择中心组件的核心代码;②运行分析器,看一看大部分CPU时间被用在哪里,然后对那部分代码进行审查;③运行复杂性分析工具,然后对那段最槽糕的代码进行审查;④将目标锁定在那些已呈现出高错误率的代码上;⑤挑出开发经验缺乏的软件开发者编写的代码。最切实的做法是综合应用以上策略,基于对项目团队、代码库以及当前系统的性能、bug树立等特点,选择最佳代码审查对象。

2执行代码审查

仅仅有代码审查是不够的,它本身不能解决所有问题,还需要通过代码审查会议、集成审查、影子审查等来完成。

2.1代码审查会议

在高度程式化的软件开发过程中,最常见的审查方式是代码审查会议。该会议有一个固定的议程表,以确保不会忘记任何步骤,以及一个预先确定的结束点,不一定是一个时间限制,也许是一个关于审查这些代码不需要审查那些代码的规定。代码审查会议包括地点、时间、角色和责任、议程表4项内容。

2.1.1地点召开代码审查会议的最佳地点是一个安静的房间,审查人员不应受到干扰。应准备一台装有代码编辑器并与网络相连的笔记本和一台与投影仪相连的计算机。经验丰富的软件开发者会喜欢打印稿和用笔和纸做记录。

2.1.2时间召开代码审查会议应选择大家都方便的时间,可选择星期一到星期五的上午,因为这段时间人的工作效率最高。如果代码的规模太大,那么可将审查分为许多单独的小会议。但千万不要让参加代码审查会议的人员连续坐在一个封闭的场所很长时间,同时又期望他们的审查保持较高的质量。

2.1.3角色和责任选择谁参加会议,是决定一次代码审查会议是否成功的最重要的因素之一。每一位与会者都应被分配一个特定的角色。在较小的组中,一个人可承担多个角色,具体角色如下:(1)作者。显然编写代码的人应参加审查,以汇报他做了哪些工作,可拒绝不公平或不正确的意见,并倾听有效的和建设性的反馈意见。(2)审查人员。应仔细挑选参加代码审查的人员,确保这些人有足够的时间和技能来进行审查。如果代码在他们的专业范围以内,或者他们以某种方式参加了代码的编写,那么这对代码审查就会有帮助。例如,在对一个利用某个库来诊断不正确的API用法的程序进行审查时,编写这个库的人员就应被邀参加会议。(3)主持人。任何会议都需要一位主持人,否则就会出现混乱。这个人要引导代码审查的进行,并指导开展讨论。要确保谈话切中主题,以及代码审查会议不偏离主题。任何不需要在会议中讨论的次要问题,都应由主持人快速地派出出去。这是因为只要一有机会,代码编写者们就会对某个细小的问题讨论几个小时,而不惜浪费代码审查时间。(4)秘书。主要负责记录代码存在的问题和具体修改意见。

2.1.4议程表代码审查会议议程有5项:①作者签名表示代码已经准备就绪,可以进行审查;②主持人安排会议,包括预定适当的地点、设定时间和召集相应的审查人员;③准备好计算机、投影仪、打印稿等;④提前发出会议通知,预留出足够的时间,以便让审查人员做好准备;⑤在发出会议通知之后,开发者暂停修改代码。代码审查会议召开过程如下:(1)主持人事先安排布置好会议室,以便审查能如期进行;(2)作者用几分钟时间解释代码的目的,并接受代码的结构;(3)先邀请大家对结构上的设计发表意见。这些意见与实现的结构相关,而不是与代码的具体语句相关。将项目功能分为不同类型,将代码放在不同的文件中,以及编写不同风格的函数。(4)邀请大家对代码提出总体意见。这些意见可能涉及不一致的编码风格、槽糕的设计模式应用和错误的语言习惯用法等。(5)对代码进行逐步的排查,以便寻找缺陷;(6)考虑许多代码使用的场景实例,并对控制流进行研究。如果有一套完整的单元测试,那么这些测试将详细描述需要分析的场景,从而有助于审查人员考虑所有的执行路径。(7)秘书记录下所有必须进行的修改;(8)将任何可能影响代码库其他部分的问题记录下来,留待进一步研究;(9)当审查结束时,大家应对下一步达成共识。其结果有3种:①通过;②重新编写并验证;③重新编写并重新审查。

2.2集成审查

代码审查会议是一种高度程式化的审查办法。这是一项非常艰巨的工作,但是它能发现许多问题,如果不召开会议这些问题就可能被漏掉。除此之外,还存在一些强度较小的审查过程,它们最大限度地提供了代码审查会议所带来的好处,实际上最有效的就是将新代码集成到主线代码分支中时而进行的集成审查。在以下3种情形下使用集成审查:①一段新的代码即将签入到源代码控制系统中;②一段代码刚刚签入到源代码控制系统中;③一个代码包从功能开发分支合并到主版本分支上。在这些情形下,要将接受审查的代码标注出来,并挑选一位恰当的审查人员,可以是负责开发这个模块的人、代码集成人员、代码维护人员或被任命在一对一审查会议上对作者的源代码进行验证的人。与代码审查会议相比,实际的审查步骤通常要随意得多。审查人员会浏览代码,查看是否有明显的问题,对其进行测试,最后同意将其加入到主线中,由于审查人员和作者不需要真正面对面坐在一起,这种审查可看成是一种虚拟的审查过程。

2.3影子审查

这是一种介于对编程和代码审查之间的方法。每个代码模块都有一位主导开发人员,他负责开发代码。还会指定一位影子开发人员,他负责定期与主导开发人员一起对模块进行审查。在设计过程中,影子开发人员将对已经制定的决策进行验证。随着代码的逐渐完成,影子审查也逐步推进,并提出许多富有建设性的意见。在正式开发过程中,影子开发人员还被赋予了批准代码可以的权力。除非影子开发人员同意某个模块已经可以加入到版本构建中,否则任何模块都不能被集成。

3代码审查的标准

经过代码审查后,代码应达到如下标准:(1)没有bug。Bug是良好软件的宿敌。软件开发者必须对自己工作的指令充满信心,需要在开发过程中尽可能早地发现错误,问题发现的时间越早,发现的数量就越多,造成的成本和麻烦也就越少;(2)正确。代码必须符合所有相关的标准和需求。确保所有的变量都具有正确的类型。例如,不会出现数字溢出。注释必须非常正确。代码必须符合内存大小或性能的需求,检查对库的使用是否正确,以及所有的函数参数是否正确。代码需要经过验证,以确定它与需求和功能规范相符合;(3)完整。代码必须实现了整个功能规范。它必须令人满意地通过了集成和调试,并通过了所有的测试,且测试套件必须全面;(4)结构良好。检查已实现的设计是否可靠,代码是否易于理解,以及是否没有重复或多余的代码。例如,查找是否有任何明显的复制粘贴式编程;(5)可预知。不应该存在任何不必要的复杂性和无法预料到得以外。代码不应该自我修改,不应该依赖神奇的默认值,也不应该包含出现无限的循环或递归的可能性;(6)健壮。代码应该是防御性的。只要可能,它就要防止可能检查到的零作为除数、数字溢出范围等运行错误。所有的输入都应接受检查。不仅是函授的参数,还有程序的输入。代码能处理所有的错误情况,并且异常安全,可捕捉到所有适当信号;(7)数据检查。对C语言风格的数组访问执行边界检查。避免了其他类似的内部数据访问错误。多线程代码正确地使用了互斥,以防止竞争情况和死锁的出现。所有系统/库调用的返回值都经过了检查;(8)可维护。软件开发者在使用注释时要明智。代码处于正确的修订控制之下。有适当的配置信息。代码的格式与公司的内部标准相吻合。编译的时候要很平静,不会出现不正当的警告。

4结论

总之,代码审查对于任何高质量的软件产品生产来说都很关键,因为它不仅是对源代码开发有用,规范文档和需求列表也可有类似的审查过程。代码审查的成功,在很大程度上取决于采取积极态度的作者和审查人员。审查的目的是通过集体协作改善代码质量,而不是指责某人或证明实现决策的正确性。它是软件开发过程中的一个重要部分,有助于保障代码的高质量。

作者:张如云单位:徐州机电工程高等职业学校