您如何使用大型代码库和许多开发人员来管理重构?


13

我想避免出现这样的情况,即两个开发人员在不首先讨论它的情况下同时重构同一代码,可能是使用某种工具,也许是Eclipse插件。你能帮我吗?

我们拥有450万行代码,并在四大洲拥有20多个开发团队。

理想情况下,我希望前面提到的第二个开发人员注意到其他人正在处理同一段代码,并在修改任何内容之前先与第一个代码交谈。

您知道解决方案吗?


1
不知道任何Eclipse插件...听起来更像是版本控制系统的工作。
SL巴特-恢复莫妮卡

为什么要防止这种情况?是为了避免复杂性(错误)还是节省开发人员时间?解决方案在很大程度上取决于该IMO的答案。
KaptajnKold 2011年

您为什么不尝试一些SVN,Apache Subversion或Tortoise svn可以解决此问题。

1
为什么二十支团队编辑同一源?

我们有一个VCS。我们只是从ClearCase更改为Git。
罗杰CS Wernersson 2011年

Answers:


14

许多第二代源代码管理系统都使用连接的“签出”来工作,该签出通知服务器您打算修改文件。示例包括TFS,SourceGear Vault等。这样,您就可以从技术上满足您的要求。正如亚当·巴特勒(Adam Butler)指出的那样,这些类型的工具都有其自身的问题(无需进行冗长的辩论-对脱机工作的支持有限,并且通常会适得其反)。

我肯定会建议某种分层方法来分配重构工作。开发人员可以按逻辑分组为各个子团队,每个子团队负责代码的特定区域。根据您希望组建团队的方式,每个人都可以扮演“领导”角色,负责团队区域的高层设计。这种结构对于开发人员应该是众所周知的,并且应该简化用于重构的通信。我相信这种方法对于某些人来说似乎过于正式和落后,但是我认为让20多名开发人员使用“所有人免费”的方法来重构大型系统是更可取的。某些重构将在高层进行(例如,模块X如何与模块Y通信),在这种情况下,您将需要可以在适当级别拨打电话的人员。并非团队中的每个开发人员都应该做出体系结构决策,因此,无论哪种情况,即使有人选择不了解层次结构,也几乎会强加一个层次结构。

因此,基本上,有一些工具可以满足您提出的基本要求,但是没有任何一种工具可以代替适当的通信,并且只有少数人来驱动项目的总体架构。


大多数更改垂直;修改GUI,网络协议,数据库,作品。我们需要一个工具来帮助我们进行重构。我们尝试在每次签入时重构代码,以提高可读性并降低维护成本。
罗杰CS Wernersson 2011年

@RogerWernersson-我知道,我只是认为没有一个很好的方法可以实现这一目标。这就是为什么我的答案建议组织团队和职责以及公司文化,以使脚趾踏步最小化的原因。尝试在git之上改写并发检出将很痛苦,并且可能具有集中修订控制系统的所有缺点。我敢肯定,虽然有人做到了,但是既然您已经提到了使用git,那么您应该能够找到一些特定的实现。
Daniel B

7
  1. 确保为开发人员分配了特定的模块。
  2. 有一个任务/错误跟踪系统,该系统跟踪每个重构更改。将每个问题分配给一个开发人员
  3. 某些版本控制系统具有锁定文件的能力,因此只有一个开发人员可以拥有对该文件的更新权限。我从未使用过该功能,但是如果开发人员不断互相推销,则可能需要考虑这一点。
  4. 进行单元测试,以便即使开发人员在同一个文件上工作,您也知道他们所做的更改不会以任何方式破坏应用程序。
  5. 如果您的重构包含在模块中,则上述所有内容都会有所帮助。但是,如果有人对诸如日志记录或安全性之类的跨领域问题进行重构,则按照定义,这将影响许多文件。需要谨慎处理这些问题,特别是如果您尚未利用aop方法的话。

我原则上赞成使用锁,但是如果您的工具(例如Eclipse)通过重构自动更改许多文件该怎么办。是否应该将所有更改的文件自动锁定?锁定文件的数量可能会快速增长。应该逐步获得锁吗?如何处理死锁?
乔治

如果更改方法签名并且它影响许多文件,则必须获得所有文件的锁。如果其他人拥有锁,则在重构优先级较高的情况下,您可以强制获取锁(svn允许此锁)。
斯里拉姆

是否可以自动化(通过存储优先级并自动解决锁冲突)?还是每个开发人员都决定他们的重构是否具有更高的优先级?
乔治

我想如果优先级是用一个不错的API存储在任务mgmt应用程序中的,则可以实现自动化。我从未尝试过,但是我不明白为什么这不可能。
斯里拉姆

我不想为每次重构都引发一个错误。方法是清理您更改的代码。为每个文件生成一个错误报告似乎太麻烦了。
罗杰CS韦纳森2011年

6

有/曾经有版本控制系统使开发人员在可以编辑代码之前签出代码,但是这些系统都有自己的问题。更好的做法是让开发人员经常提交和更新。然后,一个开发人员可以将一个类标记为已弃用,然后提交,如果其他开发人员在开始重构之前进行更新,他们将看到意图。


3
+1:提交和更新通常还意味着更改很小且易于管理,从而使冲突更易于管理。
Bringer128 2011年

经常提交会有所帮助。不幸的是,我无法改变这一点。我正在寻找一种工具来帮助我们交流。
罗杰CS韦纳森2011年

3

技术不能解决社会问题。您需要让您的开发人员互相交谈并协调他们的工作。在拥有20个团队的情况下,一些结构和规则至关重要。您将希望通过技术解决方案为他们提供支持,但是以人为本。


3
他说的是20支球队,而不是20支球队
。– Ingo

1
技术的+1无法解决社会问题。但是请编辑答案,说“拥有20个团队,必不可少的结构和规则”
MarkJ 2011年

有些人睡觉而其他人工作。我们在四大洲都有团队。
罗杰CS韦纳森2011年

0

如果您notice that someone else is working on the same piece of code and talk to the first one before modifying anything按照说明离开了,则需要版本控制系统(CVS / SVN / GIT)。虽然我不确定,但是如果您也想包含它,则将需要一些高级的东西(可能是某种触发机制/一些自定义的东西)。


我们有Git。在此之前,我们有ClearCase。VCS不是解决方案。我们确实需要一些触发机制。
罗杰CS韦纳森2011年

0

开发人员将文件锁定在源代码管理中应该可以轻松解决您的问题,但是我认为您可能会遇到更大的问题。

450万个LOC是一个巨大的沙箱,因此在一个经过精心设计和设计的解决方案中,您很少会遇到多个开发人员团队互相踩脚的情况。发生这种情况并非巧合,这说明应该考虑一些严重的潜在设计缺陷。


大多数更改都是垂直的;GUI,网络协议,数据库。每个团队都非常敏捷,专注于在每个冲刺阶段交付客户价值。我们不能在数据库上有一个团队,在GUI上没有一个团队。如果代码更简洁,那会更容易。但是清洁代码之路被拼写为“许多小的重构”。
罗杰CS Wernersson 2011年

0

一些东西:

  1. 单独的模块可以工作
  2. 在进行更改之前与所有开发人员讨论更改
  3. 单元测试[用于验证和避免破坏相关内容]
  4. 正如其他人提到的VCS

1.每个团队在垂直方向工作时都要努力2.因为有些团队睡觉而其他团队却工作3.不能解决问题4.现在在Git上的位置,以前在ClearCase上。
罗杰CS Wernersson 2011年
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.