2009-04-29 4 views
11

私は最近、大規模なコードベースでリファクタリングを行い、一般的にデザインを改善してカバレッジを向上させました。また、かなりのファイルでは、文を使って余分を取り除いています。同様の機能が近くにあり、領域を追加するようにメソッドを移動しましたが、ファイル内のコードの機能は実際には変更されませんでした。コードを理解するソース管理用のマージツールはありますか?

一方、チームの他の開発者はバグを修正したり、コードの行を変更したりしています。明らかに、マージするときには、行番号が一致しなくなりメソッドが移動した可能性があるため、これが問題になります。

ここで、ソース管理環境では、メソッドを移動することは危険なことになる可能性があり、そのメリットがコストを上回ると判断しました。しかし、私が理解できないのは、なぜこのようにすべきなのかということです。

public class Calculator 
{ 
    public int Subtract(int a, int b) 
    { 
     return a + b; 
    } 

    public int Add(int a, int b) 
    { 
     return a + b; 
    } 
} 

そして私は、私は方法がアルファベット順になりたかったことを決めた:

public class Calculator 
{ 
    public int Add(int a, int b) 
    { 
     return a + b; 
    } 

    public int Subtract(int a, int b) 
    { 
     return a + b; 
    }   
} 

別の開発者は、減算方式のバグを修正しながら

は私の最初のファイルは、単純な計算だったと言います

public class Calculator 
{ 
    public int Subtract(int a, int b) 
    { 
     return a - b; 
    } 

    public int Add(int a, int b) 
    { 
     return a + b; 
    } 
} 

標準のマージツールでは、おそらく手動で2つのファイルがありますが、コードの機能を理解していれば、これらの2つの変更を簡単に調整できます。他のメソッド、コメント、地域、またはステートメントを削除または追加する場合も同様です。

(最終的に!)質問に:コードの機能性をインテリジェントに理解し、上の2つのファイルを人間の介入なしでマージできるマージツールがありますか?そうでない場合は、どうしてですか?この問題を解決できない問題はありますか(もちろん、それは私が暗示しているほど簡単ではないことを理解していますが、見えない何らかの理由で不可能です)。

私はC#を私のソースコードとそれに働いていた何かを愛するだろうが、私は、これはプログラミングの世界のどこに存在するかどうかに興味がある...


は、私はすでにこの質問の長さについて本当に心配、インテリジェントソースシステムがどのように機能するのかを追加するために編集しました。

システムで最初の計算機ファイルがチェックされたとき、p私は私のコードをチェックインすると(アルファベットメソッドを作る)

それが更新されます(...括弧などのためにそこに余分な線で)

File: Calculator.cs 
| 
|--Class[0]: Calculator 
    | 
    |--Method[0]: Subtract 
     | 
     |--Line[0]: return a + b; 
    | 
    |--Method[1]: Add 
     | 
     |--Line[0]: return a +b; 

:ファイルをお尻とクラスの階層を作成SubtractはMethod [1]に、AddはMethod [0]になります。

2番目の開発者はコードをチェックします(明らかにソース管理システムが元のものを基にしていたことがわかります)。今では、全体のファイルで行番号ごとに行番号を見つけるのではなく、Calculator.cs/Calculator/Subtract/0とメソッドが場所を変更したという事実は分かりますが、それでも問題はありません。マージ作業。

+0

"自動"調整の結果はどうなりますか?この問題は、プログラマーの意図を理解するほど言語を理解することではなく、テレパシーを必要とします。 –

+0

私は、コードの機能を理解し、それをレイアウトから分離するシステムは、最初の変更が純粋にレイアウトなので、ファイルのレイアウトに適用し、2番目の変更は純粋に関数なので、機能的な変更が行われた方法に、その方法が今あることがあります。 –

+0

私の疑惑は、そのような獣は存在しないということですが、私はいくつかの答えを見たいと思っています。私はそのようなシステムがAIに接してスカイネットVCSにつながると感じています。 ;) –

答えて

3

Source Code in Databaseはあなたの質問に対する1つの潜在的な答えだと思います。一般的な考え方は、バージョンファイル、バージョンブロックのコードではないということです。バージョン管理システムはコードDOMについて知っており、関数、クラス、what-have-you、編集、コンパイルなどをチェックするためにコードDOMを照会することができます。

メソッドの順序必然的に問題はなく、順序を念頭に置いてデータベースに格納されません。クラスをチェックアウトするときに、あなたが好きなアルファベット順、パブリック/プロテクト/プライベートなどの順番を指定できます。重要な変更は、+-に切り替えるようなものだけです。メソッドの並べ替えのために競合が発生することはありません。

残念ながら、SCIDはまだ若く、そこには多くのツールがありません。しかし、コードを表示して編集する方法は非常に興味深い進化です。

編集:プラスチックSCMとHere's another reference for SCID

+0

リンクのおかげで、適切なアイデアのように見えて、私は "中括弧などに余分なラインを入れて..."と書いていましたが、上記の私の編集で私は実際に考えました。 "中括弧をねじにして、タブ/スペース戦争を終わらせる」と述べたが、問題を解決したくなかった。私たちがまだそこにいなくても、私たちがその方法に向かっているのを見てうれしいです。 –

4

我々のアプローチは、これまで「完全」であることから、まだですが、それはすでにリリースさや状況のこの種のに役立ちます。 Xmergeをご覧ください。もちろん、フィードバックは歓迎すべきものではなく、いくつかの無料ライセンスを付与します;

+2

私が望んでいた機能の100%ではありませんが(まだ)良いですね。マージツールは個別に利用できますか?残念ながら、私が働いているSCMシステムの完全な変更を組織する権限はありませんが、そのXMerge機能のデスクトップ版は非常に便利です。 –

+0

通常はサポートされていませんが、サポート電子メール(codicesoftware.comのサポート)にお問い合わせください。 – pablo

+0

また、次のURLもご確認ください:http://codicesoftware.blogspot.com/2010/07/xmerge-to -merge-refactored-code.htmlでは、リファクタリングのサポートがさらに強化された新しいXmergeです。あなたはそれが欲しいと思います! – pablo

関連する問題