大規模なコードベースと多くの開発者によるリファクタリングをどのように管理しますか?


13

おそらく何らかのツール(おそらくEclipseプラグイン)を使用して、2人の開発者が最初に話すことなく、同じコードを同時にリファクタリングする状況を防止したいと思います。手伝ってくれますか?

4大陸に450万行のコードと20を超える開発者チームがあります。

理想的には、前述の2番目の開発者が、他の誰かが同じコードの部分で作業していることに気付き、何かを変更する前に最初の開発者と話をしたいと思います。

あなたは解決策を知っていますか?


1
Eclipseプラグインについては知りません。バージョン管理システムの仕事のように聞こえます。
SLバース-モニカーの復活

なぜそれを防ぎたいのですか?合併症(バグ)を避けるためですか、それとも開発者の時間を節約するためですか?解決策は、このIMOの答えに大きく依存します。
KaptajnKold

SVNを試してみてください。ApacheSubversionまたはTortoise svnはこれに適しています。

1
20のチームが同じソースを編集するのはなぜですか?

VCSがあります。ClearCaseからGitに変更しました。
ロジャーCSワーナーソン

回答:


14

多くの第2世代のソース管理システムは、接続された「チェックアウト」を使用して機能し、ファイルを変更する予定であることをサーバーに通知します。例には、TFS、SourceGear Vaultなどが含まれます。このようにして、要件を技術的に達成できます。しかし、アダム・バトラーが指摘したように、これらのタイプのツールには独自の問題があります(長い議論をすることなく-オフライン作業のサポートを制限し、一般に非生産的な開発ワークフロー)。

リファクタリング作業を割り当てるために、何らかの階層的なアプローチをお勧めします。開発者は論理的にサブチームにグループ化され、それぞれがコードの特定の領域を担当します。チームの構造に応じて、それぞれがチームの領域の高度な設計を担当する「リード」ロールを持つことができます。この構造は開発者によく知られている必要があり、リファクタリングのためのコミュニケーションを簡素化する必要があります。このアプローチは形式的すぎて一部の人には逆に思えるかもしれませんが、20人以上の開発者が大規模システムのリファクタリングに「すべて無料」アプローチを使用することは非常に望ましいと思います。いくつかのリファクタリングは高レベルで行われます(たとえば、モジュールXがモジュールYと通信する方法)。その場合、適切なレベルで電話をかけることができる人が必要になります。チーム内のすべての開発者がアーキテクチャ上の決定を下す必要があるわけではないため、どのような場合でも、無知であることを選択したとしても、ほとんど階層が課されます。

したがって、基本的には、あなたが提唱する基本的な要件を満たすツールがありますが、適切なコミュニケーションに取って代わるツールはなく、少数の人々がプロジェクトの一般的なアーキテクチャを推進します。


ほとんどが垂直を変更します。GUI、ネットワークプロトコル、データベース、作品を変更します。リファクタリングを伝えるのに役立つツールが必要です。読みやすさを改善し、メンテナンスのコストを削減するために、チェックインごとにコードをリファクタリングしようとします。
ロジャーCSワーナーソン

@RogerWernersson-私は理解しています、これを達成する良い方法があるとは思いません。そのため、私の答えでは、つま先の踏み出しが最小限に抑えられるように、チームと責任、および企業文化を構築することを推奨しました。gitの上に同時チェックアウトを後付けしようとすると、苦労します。おそらく、集中型のリビジョン管理システムのすべての欠点があります。誰かがそれをやったと確信していますが、特定の実装を見つけることができるはずです。これで、gitを使用していることに言及しました。
ダニエルB

7
  1. 開発者に特定のモジュールが割り当てられていることを確認してください。
  2. すべてのリファクタリングの変更を追跡するタスク/バグ追跡システムがあります。各問題を1人の開発者のみに割り当てる
  3. 一部のバージョン管理システムには、ファイルをロックする機能があり、そのため、1人の開発者のみがファイルに対する更新権を持ちます。私はその機能を使用したことはありませんが、開発者が絶えずお互いに踏み越えている場合は、これを検討してください。
  4. 開発者が同じファイルで作業している場合でも、変更によってアプリが破損しないことがわかるように、単体テストを行います。
  5. リファクタリングがモジュール内に含まれている場合、上記のすべてが役立ちます。ただし、ロギングやセキュリティなどの分野横断的な懸念にリファクタリングを行うと、定義により多くのファイルに影響します。特に、AOPアプローチをまだ利用していない場合は、注意して処理する必要があります。

原則としてロックを使用することに賛成ですが、ツール(Eclipseなど)がリファクタリングによって多くのファイルを自動的に変更した場合の対処方法。変更されたすべてのファイルを自動的にロックする必要がありますか?ロックされたファイルの数は非常に急速に増加する可能性があります。ロックを段階的に取得する必要がありますか?デッドロックを処理する方法は?
ジョルジオ

メソッドのシグネチャを変更し、それが多くのファイルに影響する場合、すべてのファイルのロックを取得する必要があります。他の誰かがロックを持っている場合、リファクタリングの優先度が高い場合、強制的にロックを取得できます(svnはこれを許可します)。
スリラム

これを自動化できますか(優先順位を保存し、ロックの競合を自動的に解決します)?または、各開発者は、リファクタリングの優先度が高いかどうかを決定しますか?
ジョルジオ

優先度が適切なAPIでタスク管理アプリに保存されている場合は、自動化できると思います。試したことはありませんが、なぜそれが不可能なのかわかりません。
スリラム

リファクタリングごとにバグを上げたくありません。アプローチは、変更したコードをクリーンアップすることです。各ファイルのバグレポートを提出するのは、大変な作業のように聞こえます。
ロジャーCSワーナーソン

6

開発者が編集する前にコードをチェックアウトするバージョン管理システムがありましたが、これらには独自の問題があります。開発者が頻繁にコミットおよび更新できるようにすることをお勧めします。次に、ある開発者がクラスを減価償却としてマークし、コミットすると、他の開発者がリファクタリングを開始する前に更新すると、意図が表示されます。


3
+1:多くの場合、コミットと更新は、変更が小さく管理しやすく、競合の管理が容易になることも意味します。
Bringer128

多くの場合、コミットが役立ちます。残念ながら、それを変更することはできません。コミュニケーションを支援するツールを探しています。
ロジャーCSワーナーソン

3

技術は社会問題を解決できません。開発者が互いに話し合い、作業を調整できるようにする必要があります。20チームでは、いくつかの構造とルールが不可欠です。あなたは彼らを技術的解決策でサポートしたいと思うでしょうが、人々が最初に来ます。


3
彼は20のチーム、20チームのない話を聞いた
インゴ

1
テクノロジーの+1は社会問題を解決できません。しかし、言うことの答え「20チーム、いくつかの構造やルールには不可欠だろう」編集を行う
MarkJ

他の人が働いている間に眠る人もいます。4つの大陸にチームがあります。
ロジャーCSワーナーソン

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ワーナーソン

0

ソース管理でファイルをロックしている開発者は問題を簡単に解決できるはずですが、それからもっと大きな問題を抱えているかもしれません。

450万LOCは巨大なサンドボックスであるため、適切に設計および設計されたソリューションでは、複数の開発者チームが互いの足指を踏む状況に陥ることはほとんどありません。これが偶然以上に発生するという事実は、調査すべきいくつかの深刻な潜在的な設計上の欠陥を示しています。


ほとんどの変更は垂直的です。GUI、ネットワークプロトコル、データベース。各チームは機敏で、あらゆるスプリントで顧客価値を提供することに集中しています。データベースに1つのチーム、GUIに1つのチームなどを配置することはできません。コードが簡潔であれば簡単です。しかし、コードをきれいにする道は「多くの小さなリファクタリング」と綴られています。
ロジャーCSワーナーソン

0

いくつかのこと:

  1. 作業するモジュールを分離する
  2. 変更が行われる前に[すべての開発者と]話し合う
  3. 単体テスト[関連するものを破壊するための検証と回避のため]
  4. 他の人がVCSに言及したように

1.各チームが垂直に仕事をするときは難しい2.他のチームが仕事をしている間は眠るのでハード3.問題に対処していない4.以前はClearCaseでのGitの場所
ロジャーCSワーナーソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.