配对编程是否意味着您不需要设计文档?

5
在配对编程中,团队中每个成员的经验可以传递给新成员。由于配对中的“资深”成员知道代码如何工作以及设计是什么样子,因此这种经验始终与代码同步。
那么在这种情况下,设计文档有什么用处? 更新 我并不是说没有设计,我是指没有文档。 对于一个实践配对编程的团队来说,我认为每个人都可以替代,因为每个人都知道代码。如果资深开发人员离开,我认为至少有一个人知道代码,因为之前的经验已经被共享了。

你是在暗示没有设计还是只是没有文档? - Joe Phillips
那么你实际上想要问什么。 文档是理解之前开发人员编写的代码工作的唯一途径。 只要你有良好的文档,就不需要任何人。 因此,每次人们强调文档,以防开发人员离开公司... 这有意义吗? - Syed Tayyab Ali
1
“每个人都是可替代的?”哇,这真是艰难的时期啊… - Dave Swersky
也许这个术语听起来有点难懂,(英语不是我的母语,我的意思是如果有人离开,项目不会受到影响)。 - Nicolas Dorier
16个回答

12

如果你的团队超过两个人怎么办?

仅仅因为两个人知道系统的一部分并不意味着它不应该被记录下来。

我很高兴知道,我不必记住系统中的每一个细节,因为这些信息除了存在于我的脑海中之外,没有任何其他地方存储。

对于小型系统,这种方法可能有效,但随着系统变得越来越大,你会限制自己和同事们的能力。我宁愿将我的记忆容量用于新系统,而不是记住旧系统的所有细节。


如果你的团队超过两个人,你需要与一个了解你所修改/调试/重新思考的代码如何工作的人搭配。 我认为通过大量的编程伙伴,很多人都能了解代码。 - Nicolas Dorier
1
想象一下一个大型系统,需要多少小时的同行编程来教新人如何运作系统?我建议让新人先阅读,然后在调试/重构的前几天进行配对编程。 - Davy Landman
1
如果你的团队由4(12和34)个人组成,这两个团队怎样知道设计?你需要一个设计否则你需要更长的启动时间。首先1和2一起工作,然后1与3合作,2与4合作。 - RvdK
我没有处理大型系统的经验,但我认为没有人需要知道这个系统的所有代码。只需要他需要完成工作的那一部分即可。 - Nicolas Dorier
1
@Slashene,确实没有人需要知道所有的代码,但是某个地方必须能够检索到这些知识。这个地方不能仅仅是其他程序员。 - Davy Landman

4

你有没有玩过“传话游戏”?我认为你不应该在你的代码库中玩这个游戏。


4
如果资深程序员离开公司/项目会怎样?

+1:赢得彩票,买下宾利,带着所有的知识驶向远方。 - S.Lott
在我曾经工作的一个地方,我的经理坚持要参加所有的彩票团队。如果我们都辞职了,他不想被困在应对混乱中。 - David Thornley

4

无论您是否使用成对编程,都应独立决定可交付成果的集合。

六个月或两年后,所有参与者可能会进入不同的项目(或不同的公司)。您想能够回来并使用设计文档吗?那就制作它。如果您不想回来,或者设计足够简单,以至于通过规格和代码您可以在没有明确的设计文档的帮助下理解它,则可以跳过它。

但是不要依赖两个人在一年后向您解释设计。


3

维护。你不能期望团队始终保持不变,没有新成员加入或老成员离开。设计文档确保那些在项目中新加入、需要在未来几年内维护项目的人能够获取有关已做出的决策、为什么选择该方法以及如何实施的信息。对于项目的长期成功来说,拥有这样的文档非常重要,可以通过传统文件、源代码注释、单元测试和其他各种方法来提供。


2
我认为双人编程并不会使设计文档过时。我立刻想到了“卡车因素”。当然,资深员工可能知道设计内容,但是如果他生病了怎么办?如果他遭遇意外怎么办?如果他被解雇了怎么办?
双人编程确实可以传递知识,但记录这些知识也是有必要的。

卡车因子,我不知道要加1 ; ) - Nicolas Dorier

1

“设计文档”是什么意思,这取决于你的理解。

如果你有功能测试——特别是行为驱动开发(BDD)测试、Fitnesse或FIT测试,那么它们肯定是一种“活跃文档”……它们不仅具有回归测试的价值,而且还有其他价值。

如果你编写用户故事并将其分解为任务,并将这些任务写在卡片上供成对完成,那么你正在进行一种文档编写方式……

这些是我在XP团队中使用的两种主要文档形式,这些团队会对所有生产代码进行配对。

我发现另外一种非常方便的文档是一个半页左右的项目要点列表,向人们展示如何为开发机器设置构建环境。你应该在使用过程中不断维护这个列表。


1

谁知道第一行代码是什么?答案是没有人知道,因为它还没有被写出来。之所以还没有被写出来,是因为没有人知道该怎么做,因此需要一个设计文档。


1

配对编程就是两个人共用一台电脑。仅此而已,并没有说明配对者使用何种设计方法。

当作为 "极限 编程" 的一部分时,配对编程意味着遵循极限编程的设计指南。这通常涉及收集和编码“用户故事”。然后,这些故事将代替其他设计文档。


1

人们的经验可能与代码同步,就像你所说的那样。但设计决策并没有全部被编码捕捉到——只有所做出的选择。

根据我的经验,要真正理解代码为什么是这样设计的,你需要了解哪些设计选择没有被选中,已尝试但失败的方法等。你可以希望“中国耳语”传递正确,但由于没有记录以刷新记忆或纠正错误......

......或者,你可以撰写有关设计及其达成方式的文档。这样,你就可以避免未来维护程序员将你带入歧途。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接