专栏首页FunTester代码审查如何保证软件质量

代码审查如何保证软件质量

在软件行业,您可能经常会听到术语“代码审查”。但是,代码审查的概念经常被误解。人们通常认为它在软件开发生命周期中被忽视执行测试应足以满足验证过程。因此,他们倾向于对代码审查过程视而不见。但是,忽略代码审查过程可能会反弹并产生重大后果。我们也有一个误解,认为代码审查过程是开发团队的责任。它不是!代码审查是一个过程,不仅应包括开发人员,还应包括质量保证人员和产品经理。本文是我的尝试,旨在帮助您意识到代码审查的重要性以及您应该如何参加质量检查。

什么是代码审查及其目标?

代码审查是一种将源代码分解成小段的做法,由团队的主管或前辈检查这些源代码,然后在测试之前进行检查。这是敏捷方法中主要遵循的一个过程。

代码审查的主要目的是发现错误,及时发现错误并确保代码遵循标准做法。可以将其称为双向交流,在这种情况下,编码人员和检查代码的人员都可以互相学习,并消除可能会影响产品的任何潜在错误。

在敏捷环境中工作,您可能经常低估了代码审查过程的重要性。您可能会认为代码审查会很耗时,尤其是在期限紧迫的情况下。但是,这变得越来越重要。您越早检查代码并消除任何阻塞或错误的可能性,以后就可以按照发布过程越早交付产品。在发布周期的后期发现错误或在将其移植到生产中后,发现它们更昂贵,更耗时。这就是为什么组织现在沿用Shift-Left测试的现代方法,将您从客户需求收集阶段开始的测试纳入其中的原因。

为什么需要进行代码审查?

如果您认为只要进行测试就不需要进行代码审查,那么以下提到的好处可能会使您的想法转向不同的想法。

  • 早期错误检测:在开发阶段的早期阶段检测到错误时,可以减少测试阶段的大量时间。整个过程变得很便宜。尽管如今,自动化测试减少了测试工作量和花费的时间,但是,没有比检测和纠正其他人所犯错误的人性更好的天赋了。
  • 指导低年级学生:当新生参加项目时,高年级学生可能没有太多时间来指导或指导大三学生进行编码实践或培训他们如何工作。在这种情况下,对于高级开发人员而言,理想的解决方案是花费至少20-30分钟的时间来审查初级用户编写的代码。定期的反馈将使新生能够发展自己的编码技能。
  • 敏捷时代:如今,大多数组织都遵循敏捷方法论,要求及时交付高质量的工作。代码审查将使组织能够开发出无缺陷且遵循标准协议进行开发的高质量原型。
  • 团队凝聚力:频繁的讨论讨论使团队更加紧密,使他们意识到彼此的长处和短处,并避免他们陷入孤立的环境中。
  • 符合标准:在敏捷时代,客户经常要求我们遵守特定的编码标准。但是,较新的开发人员通常不了解行业标准编码。经常检查有助于确保代码遵守利益相关者设定的规则和标准。

代码审查和测试可以互相替代吗?

对于初学者来说,代码复查和测试都是包含在软件开发生命周期中的最佳实践。但是,两者在其各自的方式上都是独特的,不能混淆。认为您不需要代码审查是错误的,因为您已经在SDLC中进行了测试,反之亦然。

代码审查涉及检查代码,该检查可能包括也可能不包括检查错误。它涉及检查代码风格是否符合所有策略,是否存在违反安全性的问题,最重要的是,是否易于理解代码。目的是检查代码是否简单,是否遵循所有策略和标准,最重要的是,是否达到目的。

另一方面,测试具有几个类别。测试的主要目的不是检查代码,而是检查应用程序是否正常运行。测试包括检测应用程序不同层中是否存在任何错误,应用程序是否满足涉众的所有要求并确保将检测到的问题传达给相关团队。

假设地,代码审查可以代替测试。在很小的应用程序中,如果有多个审阅者仔细地检查代码,他们可能会确定执行单元测试时可能引起缺陷的部分。仅假设,不现实。

手动或自动化测试通常采用固定方法来检查应用程序流,并确定是否有任何异常的行为。

但是,代码审查需要人工干预。人类的大脑很复杂,可能会想到编写测试脚本时可能尚未预编程的方案。有经验的代码审查员可以在编写有效测试用例的过程中,在测试人员可能没有想到的特定情况下,检测出可能导致破坏的任何错误代码行。

但是,仅当应用程序非常小且可能仅包含一百行代码时,代码审查才能代替测试。在大型应用程序的情况下,范围会变大,无论有多少审阅者一起检查代码,集成代码时,应用程序都可能会造成损坏。这就是测试起作用的地方。

但是,测试不能以假设或现实的方式代替代码审查。尽管测试可以检测到所有错误并由开发人员修复它们,但让我们讨论一个方案,该方案将清楚说明为什么它不能代替代码审查。

我将分享我的个人经验。我们的团队正在开发大型动态Web应用程序。经过最后的测试阶段,整个应用程序可以满足每个用户的需求。但是,存在一个问题–加载时间。即使以最快的网络连接速度,该应用程序也需要4-5秒钟来加载。通过代码审查阶段,我们发现CSS和脚本非常复杂,可以将它们最小化几百行。这样做,我们将加载时间减少到2秒。因此,可以得出结论,实际上,代码审查和测试都是软件开发阶段不可或缺的一部分,并且永远不可能完全替代。

如何作为QA参加代码审查?

代码审查被认为是静态测试的一部分,该活动通常由质量分析人员执行,以在测试阶段开始之前发现是否可以较早发现任何错误。如果测试团队积极参与代码审查,则可以节省大量时间。

您可能想知道当您不参加测试时如何开始进行代码审查,而没有任何开发经验。但是事实是,代码审查只需要您的观察技能,而不需要您的编码能力。对于初学者,您可以从自动化脚本开始。尝试查找可能导致错误测试顺序的小错误。每当有时间时,请并行浏览应用程序的存储库,并尝试了解开发人员在该处所做的事情。

另外,如果您团队中的某人正在检查代码,请与他们讨论或坐在一起,并尝试了解他们的工作方式。检查他们是否在看

  • 记录易于理解的消息
  • 语法错误 -拼写错误导致的错误
  • 命名约定 最初,当测试人员有机会进行代码审查时,与经验丰富的人员进行配对会使任务变得容易得多。尽管最初的众多代码行毫无意义,但与时俱进使质量分析人员能够找到一种模式,然后他们逐渐习惯于代码库,最后只有通过查看应用程序的特定部分,他们才有机会可以清楚说明在该部分中实现了哪些业务逻辑。

此外,一旦开发团队发现QA团队正在关注代码,他们将很乐意向他们解释代码的工作原理,从而提高质量分析人员的编程知识,并改善团队之间的沟通。通过代码审查的实践,测试人员将知道在代码的哪个部分中定义了项目的哪些功能,从而提高了整体智慧和团队合作精神。

最后,记住一件事。您无需成为执行代码审查会议的专家编码人员。具有基本编码知识的任何人都可以查看代码。您只需要查看更改并询问做什么,为什么以及如何完成某件事。从较小的更改开始,并详细了解它们以及任何有任何差异的地方,对其进行评论,并请编码人员清除您的疑问。并且,如果您要管理整个项目,请确保将代码审查和测试作为必不可少的阶段包括在任何软件开发生命周期中都要执行。这将确保交付高质量的产品,并保持组织的声誉。

执行代码审查的方法

让我们开始阅读代码。根据您的应用程序的大小,您可以执行两种类型的代码审查。

  • 正式代码审查:这是一个详细的过程,需要您与多个参与者协作并在多个阶段中工作。这是团队参加会议并逐行检查代码的传统过程,传统上是使用打印副本。进行了彻底检查,发现该方法可有效发现缺陷。
  • 轻量级代码审查:此过程也非常有效,与正式代码审查相比,所需工作更少。作为正常开发程序的一部分,执行此审查有4种方法。
  1. 越过肩膀:在这里,开发人员查看其他人的代码,而后者则浏览前者的代码,并解释其中的操作。
  2. 传递电子邮件:无论何时签到,管理源代码的应用程序都会自动触发一封邮件给审阅者。
  3. 结对编程:2个编码器在同一工作站上开发代码,同时不断回顾彼此的工作。
  4. 工具辅助检查:如今提供了专用的工具,用于代码检查和测试。对等方使用这些工具来检查代码并根据需要进行注释。

Selenium自动化测试的代码审查清单

尽管有一些最佳实践,我们将在后面进行讨论,但这将导致无缺陷的代码审查,但是,如果您正在使用Selenium WebDriver进行自动化测试以对网站进行跨浏览器测试,则在审查代码时需要检查某些因素。

  • 尽可能使用CSS定位器代替Xpath。
  • 必须将页面对象用于所有用作选择器的DOM对象。
  • 避免使用复杂的数据管理结构。
  • 为了处理等待问题,测试应主要取决于框架。
  • 对于数据搜索功能,使用最少的文本。
  • 长元素定位器通常很脆弱。避免使用它们,因为绑定它们的布局会发生变化。
  • 页面对象应该是唯一且健壮的。

代码审查–遵循的最佳做法

就像编码和测试一样,您还需要牢记一些代码审查最佳实践。让我们详细讨论它们。

  • 知道您要寻找的内容:在检查之前设置目标。准备一个清单,其中可能包括编码样式,结构,逻辑的复杂性,可读性。简而言之,包括那些在自动化测试期间无法检查且需要人工干预的项目。提出诸如“我是否知道此代码在做什么?”或“此代码是否符合客户指定的编码标准?”之类的问题,这被认为是审查最佳实践的最佳代码,您可以轻松地准备要检查的项目。
  • 在审阅之前进行构建和测试:在当前持续集成和持续交付的时代,理想的方法是在手动审阅代码之前构建和测试代码。这样可以确保代码稳定并节省大量时间。成功构建之后,当代码通过所有自动化测试时,最好的做法是进行代码审查,并确保将无错误的代码推送到开发人员的代码行中。
  • 不要花太长时间进行审阅:作为代码审阅最佳实践的一部分,您需要确保您花费的时间不会超过平均时间。最好短暂休息一下代码,以确保您的大脑获得所需的时间间隔,并且可以重新开始,这会更好。经常检查代码也将帮助您考虑新场景并提高代码质量。
  • 您的评论绝不能伤害:在评论中要有建设性,而不是批评。提出问题而不是发表声明。此外,还要称赞开发人员的工作。您以正确的语气提供的反馈意见一定不会伤害他们,而应该激励他们改正错误,并确保不再发生错误。
  • 传达期望和目标:明确审核的目的和审核者的期望。如果审阅者在您的指导下工作,那么作为代码审阅最佳实践的一部分,建议您为他们提供一个清单,以帮助他们检查强制性内容并确保以一致的方式审阅整个团队的代码。
  • 包括您的整个团队:无论您的程序员有多资深或经验。每个人都必须检查代码以及对其代码进行检查。当他们知道要检查其代码时,性能水平将相对提高。审查代码时,请尝试将架构师和开发人员包括在内。两者都将检测到不同的问题,同时最终将影响整个应用程序的设计。
  • 在任何需要的地方自动化:应该手动检查代码中的某些内容。还有其他一些事情,可以使用适当的工具进行检查。在您不需要手动干预的地方实现自动化。诸如代码分析器之类的工具会将代码与编码规则进行比较,并找出潜在的问题。
  • 考虑代码检查以检查跨浏览器的兼容性:我们都知道,当特定的浏览器不支持特定的CSS样式或JS功能时,就会发生Javascript,HTML / CSS的浏览器兼容性问题。
  • 一旦我们在某个应用程序上工作,该应用程序只能在Internet Explorer的较早版本中完美运行,因此某些样式的使用受到了限制,该浏览器因与所有最新Web技术不兼容而给全世界的开发人员带来了痛苦。
  • 经过数周的编码,进行了一次审查会议,结果发现,在编写CSS时,在代码的某些部分,我们错过了浏览器特定的供应商。立即进行更正,然后应用程序进入测试阶段。不用说,它完美地通过了浏览器兼容性测试。如果不进行代码审查,则可能会在跨浏览器测试期间发现缺陷,从而使开发人员急于找出导致问题的原因。
  • 培养积极的环境:从管理的角度来看,保持积极的工作文化非常重要,这是代码审查最佳实践的一部分。审查代码时,积极的环境可能非常有帮助。谁引起了错误无关紧要。重要的是已捕获并修复了该错误。赞扬通讯员,总的来说,这将有助于维持产品的质量。
  • 依靠代码查看工具:代替手动检查和写下问题,使用代码查看工具可以通过启用内联注释和错误报告来节省工作量。

“我希望您现在意识到SDLC中代码审查的重要性,以及它与测试的区别。如果您是产品经理,那么对于您而言,至关重要的是将代码检查过程纳入发布周期,以防万一,您可以将其纳入其中。如果将其合并,则需要有效地组织带宽和资源,并确保开发人员和测试人员都积极参与。如果您是一个QA,但是害怕介入代码审查,那么您就需要改变看法,直接进入。最后,如果您是开发人员,则必须确保引入产品经理和软件测试人员。代码审查过程,以确保透明的透明度。审核愉快!

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 测试开发工程师工作技巧

    这里有一些工作技巧,从编写代码和工作任务清单到工作自动化,可以使帮助测试工程师成为更好的测试开发工程师。

    FunTester
  • 编写干净的代码之变量篇

    当我们自己写代码的时候,都知道这一行行的代码是什么意思,如何工作,如何实现业务需求的,当然,这些仅仅是「当我们自己在写」的时候。而真实的情况是:当时确实如此,但...

    FunTester
  • 如何成为全栈自动化工程师

    自动化测试领域正在迅速发展。对专业自动化工程师的需求也在增加,谁可以跟上当前行业对安全性和效率的需求,谁就可以在未来站稳脚跟。

    FunTester
  • 学习笔记:因为java匿名类学习到接口的一些小用法

    在看CometD的示例代码时发现了许多有意思的代码,但说实话看别人的代码确实是件很累的事情,所以就看到这个知识点做一下记录吧。 先看一段代码: ? 代码1 这段...

    用户1105954
  • 3大利器推荐,帮你写出规范漂亮的python代码

    Python学了好久,但是拿出来review的代码好像总是长的不够俊美,不够工整!因此标准化的代码规范就显得尤为重要。今天就来推荐3个利器,python界广泛认...

    墨鬓
  • JS本身并不难,为什么前端学起来感觉很难?

    image.png 这个问题我就不等大家的回答了,相信大家也明白,我并不是闲的无聊这么问。JS本身语法并不难,它困难的地方在哪呢?主要在于以下几点: ? 1,怎...

    web前端教室
  • 十年来,编程领域有什么重要进展?

    编程语言层出不穷,然而内核是万变不离其宗。我个人看法觉得是以下几个方面的变化比较明显。 语言本身: 1. 工业标准 网页标准有 W3C 控制,尤其是浏览器的开发...

    用户1667431
  • 毁掉你代码的35个不良习惯

    近日web开发专家Christian Maioli总结了导致程序猿效率低下,代码像意大利面条一样难以维护的35条恶习(归为代码组织、团队工作、写代码、测试与维护...

    华章科技
  • 将JavaScript代码转换为漂亮的SVG流程图——js2flowchart

    js2flowchart 是一个可视化库,可将任何JavaScript代码转换为漂亮的SVG流程图。你可以轻松地利用它学习其他代码、设计你的代码、重构代码、解释...

    IT大咖说
  • 优秀程序员的 18 大法则

    优秀程序员的 18 大法则 经过多年的积累,我发现,下面这些基本的指导法则,可以帮助我成为一个更加高效的程序员。 程序设计法则,与设计和工程的原理密切相关。下面...

    用户1289394

扫码关注云+社区

领取腾讯云代金券