代码审查真的可以在真正的敏捷环境中工作吗?


13

因此,我开始为一家大型公司工作,其中一家公司名称中有3个字母,他们试图成为敏捷公司,但是却有大量流程,我认为这些流程不是敏捷的。

让我最受困扰的是代码审查。我最后的工作是在一家初创公司中工作,我可以说这是我见过,曾经和/或从未听说过的最敏捷的开发团队。

无论如何,我的观点是,代码审查在UX / UI极端/强烈(想想Apple / Steve Jobs完美)的迭代或敏捷开发中浪费时间。也许有人在解雇我之前可以帮助您理解?

这是我的开发过程,也是我上次启动的过程。非常敏捷。

我们进行早期功能工作以对开发任务/待办事项进行排序。我们将模拟几个版本并将其呈现给用户,团队和市场,以获取反馈。然后,我们进行另一次样机迭代,以从上述相同的涉众获得一轮机会。然后,我们将工作分拆并开始。我们有一些里程碑和日期可以见面,但我们一直在努力。在此期间,我们没有任何代码审查。在我们开发的几周中,我们几次与利益相关者进行讨论,以了解他们是否仍然同意功能/功能/ UX / UI仍然是合适的目标。

随着8周迭代周期即将结束,质量检查人员开始进行测试,然后测试对象为alpha用户,最后是beta用户。但是在Alpha和Beta测试期间,开发人员将研究新功能和旧功能,对UI进行每日或每小时迭代更改,以改善UX。因此,此版本正在开发的功能可能会在过去四周内被更改3次以上,以进行改进和完善,或者添加一些微小的功能(例如,使组件更光滑或更智能)。有时这些更改可能是肤浅的,这意味着没有更改或修改任何CRUD操作,而仅更改所有UI。

因此,使用这种类型的开发过程(极端敏捷),代码审查不会浪费时间吗?这意味着如果我有另一个开发人员或两个开发人员来检查我的代码,但是由于所有UI / UX的改进,代码在发布之前又要更改3次,我们是否不浪费时间来检查代码的前3次?该代码/组件/ UI被废弃了吗?

我们在此过程中从来没有遇到过很多质量问题,是的,如果开发人员将所有知识都排除在外,但是我们总是找到聪明的开发人员来接管并接管。

是的,我们有很多测试人员,因为他们可能必须重新测试3到4次。另外,请不要挂断询问为什么所有的UI / UX都会发生变化...那就是事情的完成方式...那么那就是为什么该应用程序会赢得大量的UI / UX奖并且用户会因此而丧命应用程式。思考的过程是,如果我可以多花2个小时来改善某件事,那么我可以将其提高2%。用户会更快乐,这意味着更多的$或用户。是的,我们的用户可以继续更改应用程序,因为这是自第一天以来的工作方式,因此他们不会认为它是不好的还是负面的。

希望这篇文章不会那么夸张,但是我看不出代码审查是不是浪费。也许我们所审查的代码中所有代码的2%都有错误。每个版本的代码审查可能会发现3个错误。因此,最终每个开发人员每个版本需要40个小时的代码审查(4 x 40 = 160个小时),才能发现3到5个错误?无论如何,质量保证会发现3到5个错误的可能性是50%。每个开发人员花40个小时来添加新功能或改进现有功能会更好吗?


@DeadMG:用户体验
Steven A. Lowe,

4
@ user25702:您描述的过程听起来不像敏捷,听起来像RUP / spiral。特别是“在我们开发的几周中,有几次我们再次与利益相关者保持联系,以了解他们是否仍然同意功能/功能/ UX / UI仍然是合适的目标。” 具有抗敏捷性;在迭代过程中冻结特征,以避免与RUP /螺旋方法相关的运动目标问题。关于名义上的问题,只有当您确定QA会发现错误时,我在这里的代码审查中看不到什么价值。
史蒂文·劳

1
8周的迭代不是敏捷的,并且绝对不是“极端敏捷”的。
马丁·威克曼

一些PM认为迭代意味着我们在开始时有几个短迭代,在中间有几个长迭代,然后根据需要在最后有多个短迭代。问题在于,这与软件开发的战斗节奏以及及早发现错误的能力相冲突。8周的迭代将是那些中间迭代之一。我同意这不是敏捷的。
Berin Loritsch 2011年

如果您想反对代码审查,那么我建议您获取一些统计数据。记录代码审查所花费的时间(总工时),在其中发现的错误/问题的数量以及问题的严重性。对于我的团队而言,我们每次审查至少花费了16个工时,平均发现了2-3个错误,这些错误本质上都是美观的。面对这些数字,以测试为先的方法来代替同行评审很容易争论。
Berin Loritsch 2011年

Answers:


13

代码审查可以为您做一些事情,而代码审查则做不到。支持代码审查的论点:

  • 集体所有权
  • 查找错误(QC)
  • 实施一致的样式(QA)
  • 指导

许多敏捷过程以不同的方式解决这些问题:

  • 集体所有权:团队中的每个人都对项目负责,这意味着在任何给定时间,每个人的眼睛都将关注代码。
  • 免费重构:将代码审查提高到一个新水平,并允许团队中的任何人根据需要执行重构。
  • 单元测试(QC):与外观检查相比,单元测试效率更高,更不容易出现人为错误。实际上,我还没有找到更有效的方法。
  • 配对编程(QA):负责指导并在编写代码时提供早期的重构建议。这仍然是一个有争议的话题,但是我发现它在增加新开发人员时会有所帮助。这也是实施编码标准的好时机。

本质上,还有其他途径来照顾您通常在同行评审中获得的潜在收益。我对同行评审的个人经验是,它们是非常低效的机制,不能有效地发现错误或更大的设计缺陷。但是,它们确实在某些团队中占有一席之地,并且在敏捷性不可行(无论出于何种原因)的项目中,它们是非常必要的。


3
当前答案似乎存在一些错误信息。集体所有权并不意味着“一直关注所有代码”。重构与缺陷检测无关。单元测试和检查的目的不同,实际上可以发现不同类型的缺陷(其他答案中的示例)。配对编程虽然是一种检查形式,但却不能真正替代例如Fagan检查。您的个人经历似乎很不典型,特别是在设计错误方面-您做了什么样的评价?您如何衡量评论的效率?
迈克尔

1
进行审查的时间与发现的缺陷及其严重性。我们将相同指标与单元测试进行了比较。在代码审查期间发现的问题几乎总是与代码格式相关,并且花费了更长的时间才能执行。花在进行单元测试上的时间相同,却发现了真正的问题,并且不再需要准备和做。
Berin Loritsch

“集体所有权”:根据我的经验,这通常是一种错觉:审阅者经常轻描淡写,看不到别人编写的代码中的大图景。然后,当涉及到修改该代码时,他们并没有真正理解它,或者他们(1)不敢更改它,或者(2)他们广泛地重写了它以使他们可以理解它。方法(2)通常有两个副作用:(A)他们引入了错误,并且(B)原始开发人员不再理解该代码。
Giorgio

B点表明,通常发生的不是集体所有权而是个人所有权始终从一个开发商转移到另一个开发商。通过这种方式,每个团队成员都大致了解代码的功能以及代码的组织方式,但是没人真正了解它。真正的集体代码拥有权需要更多时间和对代码的讨论才能获得共识,但是通常这一次根本不可用。
Giorgio

11

代码审查只是为了发现错误吗?您似乎以为是对的,但我不是。

我认为,代码审查可以更多地涉及代码的集体所有权,确保知识掌握在多个方面,并准备让其他人继承可能适用于新功能和错误的代码。我喜欢将代码检查作为对系统进行一些检查和平衡的一种方式,因为您永远不知道何时有人会知道在什么地方可以重写某些东西以维护约定。


4

配对编程是XP进行代码审查的答案。本质上,每行代码在编写时都会进行审查。这是代码审查的极致。


7
我对此表示强烈反对。当然,这是由两个人审阅的,但是这些人通常在编写代码的同一页面上。代码审查是一个完全不同的心态,他们正在查看您的代码并发现““!忘了处理这种情况”之类的问题-XP确实无济于事。
比利·奥尼尔

4

代码审查和测试通常不会捕获到相同类型的错误,并且由于已知错误的位置,因此代码审查捕获的错误可能更易于修复。

您不能仅仅因为代码通过了测试而没有记录任何代码就知道代码是否没有错误。“测试只能证明存在错误,而不能证明存在。” (Dijkstra?)

代码审查还使代码样式保持不变,并且能够找到代码不好但可以立即使用的地方。这样可以节省未来的维护成本。

而且,大型公司和初创公司的需求是不同的。启动通常会失败,并且必须快速发展。大型企业通过正确地做事而不是尽可能快地获取更多的价值。与大公司相比,您可能更喜欢在初创公司工作,但这不是试图在不合适的地方强加启动策略的原因。


2

您的代码审查是否只会出现UI / UX更改?我认为这不是代码审查,而是可用性测试。代码审查更多地是关于解决用户/测试人员/业务/任​​何人从未见过的问题,因为它们在代码中。线索就在名称中。

现在,我将与您达成一致,在某处划一条线。您是否审查了同一UI更改的4次迭代?还是您经历了4次迭代,每次迭代都有可能使代码的可维护性降低?我会说尝试衡量这两种方法并为您的团队找到合适的平衡点,但是不要完全放弃代码审查。

即使代码复审从不出现问题,它的好处是直到很少出现之前您几乎不会注意到:每一个代码都是由两个开发人员查看的,所以两个开发人员都知道更改是什么以及要实现的目标。因此,他们中的一个人第二天病倒,休假一周,另一个人可以接受他们正在做的任何紧急工作。


1

我倾向于同意,集体代码的所有权和与TDD和CI的配对是正式代码审查会议的敏捷解毒剂。

即使在UP / Spiral下,我也不喜欢特定过程步骤的“代码审查”,因为在我看来,发现相同问题的可能性要比发现相同问题的时间要晚一些。协作和一些简单的自动化。

我之所以这么认为是因为:-对设计进行一些共同的审查(通常至少在白板上以UML表示),这意味着大规模的设计问题或对API的不良使用等,在编写大量代码之前就被抓住了。-FxCop,CheckStyle,FindBugs(或类似版本)与自动连续集成一起运行,以捕获命名,样式,可见性,代码重复等。

与下游代码审查习惯相比,我们能够更早地失败并获得反馈。

我并不是说坐下来偶尔看一下您的代码库是在浪费时间,但是让代码检查成为调用已完成事情的重要步骤似乎像是在进行很多本可以进行的工作避免在上游进行更好的检查/合作。


0

我期望代码审查的主要目标之一是增加代码维护的便利性。代码审查应帮助每个人编写合理地符合良好编码标准的清晰代码。大多数代码都需要大量维护,尤其是在大公司中。可维护代码的回报应在代码发布之前开始,然后再继续。

本身的代码审阅绝不应该导致代码更改。如果代码检查表明需要更改,则实施更改将导致代码更改。

审查可能会导致代码状态发生变化,但这应该与您提到的问题无关。

如果代码检查导致多个代码更改,那么在您的开发过程中会出现问题。考虑到您拥有的测试人员数量,可能会碰壁,让测试人员发现问题的心态。

事情应该在完成状态下交给测试人员。应该将尽可能多的测试自动化,以便测试人员不会一次又一次地重新测试相同的东西。

UI / UX确实需要一些测试时间,但是在前端聘请设计/开发专家应该可以减少测试时间。它还需要屏幕前面有一张脸。但是,在我使用过的所有应用程序中,它只是代码的一小部分。

实施更改(包括错误修复)的成本通常在其经历的每个阶段都会增加。在开发中发现错误通常比在测试发现它们后对其进行修复要便宜。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.