如何防范代码审查力度的降低?

2021-02-20 17:26

我已经在一个新的团队里开始了。我有20年的开发经验,在几个项目中担任过团队领导的角色。通常我非常支持代码评审,但最终我加入了一个使用TDD的团队,一直到宗

解答动态

  • 我如何证明和捍卫这篇那就是:合并按钮应该由默认值启用代码审阅应该是一个建议,而不是代码作者应该拥有的强制命令在6小时内合并代码的权利可以说是拉请求的创建,无论是否有批准。 我不认为你应该尝试和证明任何这些,因为它们几乎肯定是坏主意。代码评审只是一件一直被证明能显著提高代码质量的事情,你实际上是在建议停止这样做。相反,把你的努力放在改进代码评审上流程:团队不关注什么是重要的(模式、接口、封装、分层、方法签名),但是这是你需要解决的问题。与您的团队合作,提高他们的能力,包括编写代码和审阅代码。然后你就把一个糟糕的过程变成了一个好的过程。哦,永远不要在讨论这个问题时使用“宗教原教旨主义”这样的语言。我希望我不需要解释为什么。

    • 公司的利益相关者如何看待他们的开发人员的生产力?我以前的老板曾经给我讲过一个关于这种狂热的故事。开发团队把这种狂热作为拖延时间的借口。因此,实施最简单的更改花费了数月时间。他说解决这个问题需要解雇一半的开发人员,所以几个月后,他继续工作。但是每个故事都有两面性。关于正在开发的应用程序的性质,您没有说太多。如果这是一个涉及潜在生命损失(如医疗设备)或数百万美元资产处理的任务关键型应用程序,那么这种严格程度可能是完全合理的。
      在我工作的地方,每个软件项目都要经过一个“特征化”过程。基于这一特征(“它是控制战斗机,还是仅仅是一个命令行实用程序”),每个项目都要经历不同程度的审查。正式评审的成本很高;这一成本必须根据软件项目的性质来确定。
      在任何情况下,作为新的团队成员,您的想法都会遇到很大的阻力,特别是如果团队长期以来一直以这种方式运作,而没有任何人质疑他们的观点。你必须与你的团队成员建立信任,按照他们的方式做事一段时间,并逐步建立你的改变理由。
      进一步阅读帕金森琐碎定律

      • 你可能会更幸运地认为开发人员应该有权忽略某些注释,例如方法不在首选顺序中,你在评论中把“Exception”拼写错了,等等……
        重要的是,所有参与的人都知道什么类型的评论是可忽略的。
        如果其他开发人员意识到这些评论通常会被忽略,他们可能会停止吹毛求疵。在某种程度上,我已经完成了这项工作。你提出了一些需要解决的实际问题。但你提出的解决方案不太可能使事情变得更好。没有人只是在推理,如果我们首先没有50个方法在同一个类中,可能它不会有太多的方法定位的问题。在我的经验中,最好的方式让人们看到“更好的方式”是跳进去,并编码它。一旦你有了一个好的例子,不要强迫它进入代码库。邀请别人和你一起复习。让他们自己看到好处。我完全重新设计了别人创建的课程,然后谦恭地询问他们的意见。一开始他们表现出一些抵触情绪,但如果你表现出你足够认真地对待他们,向他们学习,他们也会冷静下来,开始向你学习。
        对我帮助最大的是,我去找人看我的代码,而代码在我脑子里还很新鲜。而我仍然愿意重写它。我坐在他们的书桌旁,或者他们坐在我的书桌旁(玩我的书桌玩具)。我们花时间在一起编码。只有电子邮件的代码审查往往只会演变成脑残的检查。他们会挑刺,因为没有人觉得他们可以让你真正改变代码,所以他们只想让它看起来像他们审查了它。这是真的,因为这些通常发生在你完成并开始其他工作的几天后。这些都是浪费时间。很抱歉,对于一个好的代码审查来说太晚了。你对合并工具所做的任何事情都无法解决这个问题。愿意互相学习是协作工作的基本要求。否则这是委员会设计的。我怎样才能证明和辩护这篇呢那就是:合并按钮应该由default 启用,你应该有一些开发分支,你可以合并到你喜欢的,每个人都可以看到。这不一定是发布分支。
        代码评审应该是建议,而不是强制 强制代码评审!=正式代码评审。在你考虑其他事情之前,让别人看看你的代码。
        代码作者应该有权在6小时内合并代码,比如说创建拉取请求,不管是否有批准。 我完全赞成在6小时内完成(这是一个很长的时间),但未查看的代码需要停止在某个地方。我宁愿完全取消代码检查清单,也不想让事情不被检查。

        • 我不太关心检查和签入/合并过程,而更关心吹毛求疵的问题的数量。
          理想情况下,我们编写的功能在使用时非常简单,即在使用我们的抽象时,错误的空间尽可能� N颐窍M杓莆颐堑某橄螅故褂梦颐堑目突ЩㄍǔJ俏颐亲约海┞淙氤晒Φ南葳濉�
          我们有时可以使用类型系统来防止非法的中间条件,因此,某些不好的事情不会通过编译器。我们应该将两个(或更多)通常存储或一起完成的事情到一个可直接使用的单一抽象中,从而简化消费客户机。
          如果我们能够做到这一点,那么希望通过使用清晰的抽象和精心选择的名称,代码能够更直接地自文档化-如果我们能够在那里,评论就不那么重要了,也不需要争论(有时甚至不需要写出来)。我总是发现,定好基调是很重要的。把软件产品放在一切之上,并考虑最终用户。我不同意你所说的话,因为我不相信你所说的每一句话都赋予了你在没有得到团队适当认可的情况下进行合并的权利,但问题应该放在谁是利益相关者以及他们在开发/设计系统时是否被优先考虑上。
          如果你理解的话,我认为你的论点会更有分量更好地从更高的层次、您的最终用户、他们需要什么以及从系统行为(相对于您的pull请求)来查看项目。你可能也会受益于放低和观察初步了解这些动态。也许你的系统的用户被划分了优先级,但是由于没有成为这些会议的一部分,这些信息还没有被传递给你。潜在客户在整个项目中都具有开发人员所不具备的可见性,并且可能会实施程序/流程来反映这一点。
          我不确定哪家软件公司允许开发人员在没有审查的情况下合并代码,是否允许盖茨验证系统稳定性(在构建和行为方面),或者是否有6小时的超时时间,在此之后才允许合并。这似乎妨碍了团队提供反� ⒋ブ兜哪芰Γ⒖赡艿贾碌椭柿看氲姆缦铡�

          • 过去对我起作用的是争论相对的优点。例如,本文阐述了为什么代码评审不如其他机制对提高产品质量、提高代码质量、传递信息或提高工程师的编码能力(代码评审主要是在编码周期结束时进行的手动过程)有用的许多论点。就像你提到的那样,这种敌对的审查环境对建立一个安全、协作的团队环境是不利的。
            TL;DR——不要反对他们的目标,认为NoToCy代码评审是一种低效的方式。

            • End

            免责声明:

            本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。