(CodeCompleteの内容は前提知識としてあるぐらい)
コードのマージ時にマージミスで重複行が発生してしまうのを防ぐ
良い方法ってご存じでしょうか。
具体的にはマージ時に、マージのミスで
call_method(foo)
if cond
call_method(foo)
end
みたいな重複行が発生することをチェックする仕組みがや取り組みが知りたいです。
なおテストケースではc1は網羅しててもメソッドの重複呼び出しだと場合によりテストが失敗しないので、テストをもっと書くべきというアドバイス以外でお願いします。
質問のようなことをやりたければ、Jenkinsを使ってる会社の人ということで回答しますが、静的解析ツールで重複しているコード数を把握し、増加を見るというのはどうでしょうか?
単なるマージで増加するのは普通はおかしいので、その都度チェックを入れればいい、という考えです。
そういうことをするのに、JavaだとPMDというツールが重複もチェックしてくれて、Jenkinsにはそれ用のPMD Pluginがあります。
Rubyには詳しくないですが、Flayというツールを使えば重複をチェックできるんじゃないんでしょうか?
残念ながらJenkinsにはPluginがないので、Plot Pluginなどを使えば増減を測定できるはずです。
質問のようなことをやりたければ、Jenkinsを使ってる会社の人ということで回答しますが、静的解析ツールで重複しているコード数を把握し、増加を見るというのはどうでしょうか?
単なるマージで増加するのは普通はおかしいので、その都度チェックを入れればいい、という考えです。
そういうことをするのに、JavaだとPMDというツールが重複もチェックしてくれて、Jenkinsにはそれ用のPMD Pluginがあります。
Rubyには詳しくないですが、Flayというツールを使えば重複をチェックできるんじゃないんでしょうか?
残念ながらJenkinsにはPluginがないので、Plot Pluginなどを使えば増減を測定できるはずです。
ありがとうございます、重複チェックのツール使うというのも機械的に把握できそうで良いですね~
質問に書いたケースは、単純化してるから余計にそう感じるのかもしれませんが、
この手のマージのミスを防ぐのはテストでは無い、と思います。
さすがに Git なり、バージョン管理システムを使っているだろうとは、想像しますが、
commit の単位が大きすぎるんじゃないでしょうか?
例えば、チケットの単位でしか commit を認めてない、とか。
Unit テストが通る、というのは大前提になると思いますが、その範囲内で、細かく commit していれば、
特定のコードを if でくくった程度のマージがミスるというのは、ちょっと想像がつきません。
git 使っててますが、コミット単位は人それぞれです。(特に規約等では決めてません)
大量のコードをマージしまくるようなお仕事も中にはあって、その場合仕様の完全な把握は難しいので、どうしてもヒューマンエラーが発生してしまうこともあるので、そのことに対する具体的な手法があれば知りたいのです。
どうしてもヒューマンエラーが発生してしまう
なんとなく、想像はつきます。
障害分析とか、結構やるんですけど、「障害をテストで救う」というのが、そもそも間違っている、ということも往々にしてあります。
大量のコードをマージしまくるようなお仕事も中にはあって、
「だから、テストで救うしかない」ということを前提にしてしまってはいないですか?
具体的な場面が分かってないので、的を外しているかもしれませんが、
ヒューマンエラーを起こした原因は、がっつりコードを変更するような修正方法を
選択したことに問題があった、というケースには、よく遭遇します。
ありがとうございます、重複チェックのツール使うというのも機械的に把握できそうで良いですね~
2011/10/28 23:42:41