バージョン管理を使用しているときに、すべてのコードファイルに「変更ログ」を含めることは重要ですか?


75

バージョン管理システムにより、コードのいたるところに「変更ログ」を貼る必要がなくなるという印象を受けました。私は頻繁に変更ログの継続的な使用を見てきました。これには、ファイルへの変更のためにブロックされた大きなセクションを含むストアドプロシージャの開始時の大きな長いブロックが含まれます。

// 2011-06-14 (John Smith) Change XYZ to ABC to fix Bug #999

そして:

// 2009-95-12 (Bob Jones) Extracted this code to Class Foo 
// <commented-out code here>

私に説明されたように、この理由は、VCSログをふるいにかけるのに時間がかかりすぎて、誰が何をなぜ変更したかを見つけようとしている間、コードファイル自体に関連する上部または近くにそれを持っているからです誰が何をいつ変更したかを簡単に確認できます。私はその点を見ていますが、冗長であり、「VCSを適切に使用する方法が本当にわからないので、そのようなことは一切気にしません。

どう思いますか?コメントとログの両方を使用していますか?ただのログ?John Smithが1週間前にXYZをチェックするようにメソッドを変更したコードブロックの上に表示されると、Diffツールでログを検索してコードファイルを比較する代わりに、コーディングが簡単になりますか?

編集:SVNを使用しますが、基本的にはリポジトリとしてのみ。ブランチ、マージ、ログ+ストレージ以外はありません。


4
どのバージョン管理システムを使用していますか?
ChrisF

11
一部のショップでは、ソース管理システムが登場する前に変更ログを使用していました。慣性と親しみやすさは、変更ログを保持します。
ギルバートルブラン

2
+1-私のチームもこれを行っており、VCSの役割であることを彼らに納得させようとしました。問題は、これらのコメントが実際のコードで最新に保たれていないときに始まります...そして最悪なのは、管理者がすべてのメソッドに変更ログを追加することを決めたことです。
slaphappy

2
+1-私はこれについて2年近く前の開発者と戦っています。これらの役に立たないコメントを追加するための彼の唯一の理由は、3000行のメソッドへの変更のマージを少し簡単にすることです。3000行の方法はわいせつであるという考えは軽cornに会います。
ジョシュアスミス

1
「[あなたの] VCSログをふるいにかけるのに時間がかかりすぎる」場合は、何か間違ったことをしていることになります。
キーストンプソン

回答:


46

私はコード内のコメントを削除する傾向があります。そして、削除というのは、偏見を持つということです。特定の機能が何かを行う理由をコメントで説明しない限り、コメントはなくなります。バイバイ。合格しないでください。

したがって、まったく同じ理由で、これらの変更ログも削除しても驚くことではありません。

コメントアウトされたコードや本のように読めるコメントの問題は、それがどれほど関連性があるのか​​を本当に知らないことであり、コードが実際に何をするのかについて誤った理解を与えることです。

あなたのチームはバージョン管理システムの周りに良いツールを持っていないようです。Subversionを使用していると言ったので、Subversionリポジトリを管理するのに役立つツールがたくさんあることを指摘したいと思います。Webを介してソースをナビゲートする機能から、変更セットを特定のバグにリンクする機能まで、これらの「変更ログ」の必要性を軽減する多くのことができます。

たくさんの人にコメントしてもらい、コメントを削除したのは間違いだと言います。私が見たコードの大部分はコメントされているのが悪いコードであり、コメントは問題を難読化しているだけです。実際、私がコードにコメントしたことがあるなら、私は彼らが私を殺したいと思うことは比較的確実だから、保守プログラマーに許しを求めていると確信できる。

しかし、コメントをjestで削除する必要があると言わないように、このDaily WTFの投稿(作業したコードベースから)は私のポイントを完全に示しています。

/// The GaidenCommand is a specialized Command for use by the
/// CommandManager.
///
/// Note, the word "gaiden" is Japanese and means "side story",
/// see "http://en.wikipedia.org/wiki/Gaiden".
/// Why did I call this "GaidenCommand"? Because it's very similar to
/// a regular Command, but it serves the CommandManager in a different
/// way, and it is not the same as a regular "Command". Also
/// "CommandManagerCommand" is far too long to write. I also toyed with
/// calling this the "AlephCommand", Aleph being a silent Hebrew
/// letter, but Gaiden sounded better.

ああ...そのコードベースについてお話しできる話、そしてそれは、周りの最大の政府機関の1つによってまだ使用されていることを除いて、そうするでしょう。


4
特定の複雑なロジックと格闘するときはいつでも、コメントは、ロジックが複雑である理由を理解するのに役立つことがあります。しかし、全体的に私はあなたに同意します。
maple_shaft

5
すべての開発者には少なくともいくつかの悪い資質があります。私はすべきではないことは知っていますが、やめることはできませんTODO
maple_shaft

32
偏見を持って他の人のコメントを削除することは、あなた自身のプログラミングスタイルと他人に対する信念を強要する方法です。ジュニアおよびパシフィスティックプログラマーはbarえませんが、たまにアルファオスに出くわすと、そうでないはずの戦いが始まります。賢い人の賢いブログを読んで、コメントに関しては少ないほうがいいと書いています。他の人は同じ本を読んでいないかもしれません。あなたが正しいと思うとしても、5k +の代表者がいるSOの少数の人々が同意するので、独裁は共同作業を行う方法ではありません。前にアルファ男性の下で働いて、辞めました。
ジョブ

8
@Neil Butterworth:re:ructions:コードは順応性があることを意図しています。リファクタリング、変更、改善します。それはそのためのものです。一度だけ書かれることを意図したものではありません。ビジネスの変化を理解し、それが発生した場合、コードを変更する必要があります。コメントには多くの問題がありますが、私たちの議論に最も関連するのは、コメントがコードと同期していることはめったにないことであり、通常、何かが起こっている理由を説明しません。その場合、簡単に削除できます。誰かが私のところに来て、なぜ次のコメントを削除したのかと尋ねたらfile.Open() // Open the file。私は笑います。
ジョージストッカー

5
数日前、私はコードを書き、非常に複雑な数学的計算で三角法、変換などを完全に書きました... 10行未満のコードを書くのに約1時間半かかりました。私の周りの誰もそれがどのように機能するか理解していない。私も数週間でそれを理解しません。その一方で、なぜそれが些細なのか。したがって、これらの数行の上には、テキストではなく、理由ではなく内容を説明する章全体があります。あなたが来て、そのコメントを削除した場合、私は顔にパンチをし、解雇されます。
DavorŽdralo

76

コードに埋め込まれたこれらの「変更ログ」は特に重要ではありません。リビジョンを比較するとき、それらはさらに別の違いとして表示されますが、実際には気にしません。VCSを信頼してください-ほとんどの場合、誰が何を変更したかをすぐに表示する「非難」機能があります。

もちろん、本当に恐ろしいことは、ソースファイルに実際のVCSログを埋め込むことができる「昔の」VCSの機能でした。マージをほぼ不可能にしました。


14
彼らはさらに別の違いとして現れるだけでなく、さらに悪いことに、時間とともに間違っている可能性があります。一方、優れたVCSは、特定の行を実際に書いた人とその行の歴史を常に伝えることができます。役に立たないコメントよりも悪いのは有害なコメントだけです。これらのコメントは無意味なものから始まり、完全に無視されないにしても、最終的には有害になります。
ベンホッキング

10

特定のコミットメッセージによって自動的に入力されるプロジェクトごとに1つのChangeLogファイルがあります。

ChangeLogコメントは埋め込まれていません。もしそうなら、私はそれらを削除し、それらを追加する人と「話」をします。使用しているツール、特にvcを理解していないことを示していると思います。

ログのgrepを簡単にするコミットメッセージの形式があります。また、役に立たない、またはあいまいなコミットメッセージも許可しません。


8

私は個人的に、コードソースファイル内の変更ログを嫌います。私にとっては、ソフトウェアエンジニアリングの原則に違反しているように感じます。つまり、変更は複数の場所で行う必要があります。多くの場合、変更ログ情報はまったく役に立たず重要ではありません。私の謙虚な意見では、コードをチェックインするときにソフトウェアの変更を文書化する必要があります。

しかし、私は何を知っていますか...

ソースコード内に変更ログを保持する慣行を実装することに固執する場合、変更ログは、クラスのpulic API /インターフェイスに影響を与える変更に限定する必要があると思います。クラス内でそれを使用するコードを壊さない変更を行っている場合、これらの変更を変更ログに記録することは私の意見では散らかっています。ただし、ソースコードファイルの先頭をチェックして、他の人にとって何かが壊れている可能性のある変更に関するドキュメントを確認できると便利な場合があります。変更がAPIにどのように影響するか、変更が行われた理由の概要のみ。

一方、私のショップは主にC#のことを行っており、APIのドキュメント化には常にインラインXMLコメントを使用するため、パブリックAPIの変更に関するドキュメントの読み取りは、インテリセンスを利用するのとほぼ同じくらい簡単です。

ソースファイル内の変更ログを主張することは、マシンに不必要な摩擦を追加するだけであり、そもそもバージョン管理システムを実装する目的の1つを無効にするものだと思います。


6

私が働いていた最後の会社には、17年の歴史、開発、年次更新があったソフトウェアがありました。あるバージョン管理システムから次のバージョン管理システムへのすべての移行が、コメントまたはチェックインノートを保持するとは限りません。また、その年のすべての開発者は、チェックインのコメント/メモとの一貫性を維持していませんでした。

ソースコードにコメントがある場合、変更の考古学的な履歴は、コメントアウトされたコードではなく、メモとして保持されていました。そして、はい、彼らはまだVB6コードを出荷しています。


5

チームの開発者が適切に使用している場合、バージョン管理はコード内の変更ログのコメントを置き換えることができます。

チームがチェックインに関するコメントを追加していない場合、または役に立たないコメントを残している場合、将来探している情報を見つけるのはかなり困難です。

現在の会社では、チェックインごとにコメントを送信する必要があります。それだけでなく、チェックインごとにJiraのチケットを添付する予定です。将来Jiraを見ると、チェックインされたすべてのファイルと、その問題についていつ残っているコメントを見ることができます。とても便利です。

基本的に、バージョン管理は単なるツールであり、チームがあなたが探している利点を提供するツールを使用する方法です。チームの全員が、バグ修正の追跡とクリーンなコードリビジョンを提供するために、それをどのように使用するかに同意する必要があります。


5

これは、VCSログが混乱し、VCSシステムの処理が難しかった時代の残り物です(80年代のどこかで、当時のことを覚えています)。

あなたの疑いは完全に正しいです。これらのコメントは助けというよりも障害であり、最新のVCSはあなたが探しているものを正確に見つけることを可能にします。もちろん、あなた(そしてあなたの同僚)は約を費やす必要があります。これらすべての機能を操作する方法を学習する30〜60分(実際、これらのコメントがまだ存在する理由だと思います)。

私は(ほぼ)ジョージと一緒にいます。コード内のコメントは、コード自体にすぐに表示されない何かを説明する場合にのみ正当化されます。そして、それは良いコードではめったに起こりません。コードにたくさんのコメントを入れる必要がある場合、それはそれ自体の匂いであり、「リファクタリングしてください!」と叫ぶ。


4

ストアドプロシージャのソースにはまだ含まれています。これは、クライアントでどのバージョンが使用されているかを正確に判断できるためです。残りのアプリケーションはコンパイル済みで配布されるため、ソースにリンクするモジュールバージョン番号がありますが、SPはローカルのデータベース内コンパイル用にクライアントにソースとして配布されます。

レガシーのPowerBuilderコードは引き続きそれらを使用しますが、それは特定の覗き見の安らぎの要因と考えています。これも配布用にコンパイルされるので、(IMOは当然のことながら)初期のVCS履歴を使用します。


1
+1この答えを書くつもりでしたが、あなたは私を助けてくれました。ストアドプロシージャがソースとして配布されるだけでなく、多くのスクリプト言語も配布されます。OpenACSとTCLを頻繁に使用します。多くの場合、クライアントが特定のファイルの分岐バージョンを持っている場合、それらがどのバージョンであるかを確認する唯一の方法は、変更ログを読み取ることです。クライアントのサイトにログインしていて、バージョン管理ソフトウェアで簡単に差分をとることができない場合に特に便利です。
TrojanName

3

SVNを使用している場合、それを行うことは時間の無駄であり、まったく役に立ちません。

SVNには非難機能があります。これにより、特定のファイルの各行を誰がいつ作成したかが正確にわかります。


1

変更ログのコメントは、後続の開発者が新しい要件に関してより良い質問をするのに役立つときに、コードで非常に役立ちます。開発者がコメントを見ると、たとえば、Fredがいくつかの要件を満たすために6か月前にFooフィールドを要求したということ、その開発者は、Fooをオプションにするための最新のリクエストを実装する前に質問をする必要があることを知っています。複雑なシステムを扱う場合、異なる利害関係者は異なる優先順位と異なる欲求を持つ可能性があります。変更ログのコメントは、将来の問題を回避するために、これらのトレードオフのどれを文書化するのに非常に役立ちます。

ここで、すべての開発者がコードのすべての行の完全な履歴をチェックしてから変更を加える場合、これらのコメントをコードに含めることは冗長です。しかし、これはワークフローの観点から非常に非現実的です-ほとんどの開発者は誰がそれを追加したのか、なぜその履歴を調査せずに検証を変更するだけであり、技術の観点からは、バージョン管理システムは「同じ「ある行から別の行に移動した場合、または別のクラスにリファクタリングされた場合のコード行。コード内のコメントは見られる可能性がはるかに高く、さらに重要なことは、一見単純な変更がそれほど単純ではない可能性があることに注意するよう後続の開発者に促すことです。

ただし、コード内の変更ログのコメントは比較的まれです。少しのコードがリファクタリングされるたびに、または真のバグが修正されるたびに、変更ログのコメントを追加することを推奨しません。しかし、元の要件が「Fooはオプション」で、誰かが来て要件を「Fooはダウンストリームプロセスバーをサポートするために必要」に変更した場合、コメントを追加することを強くお勧めします。将来のユーザー/アナリストが下流のBarプロセスに気付かない可能性が高く、Fooが必要になった理由に気付かない可能性が高く、Fooを再びオプションにし、Barプロセスで頭痛の種を引き起こすように要求するからです。

これは、特に少数の開発者を抱える小さな会社からはるかに大きな会社に成長するときに、組織がある程度の頻度でバージョン管理システムを変更することを決定する可能性があることを考慮する前です。これらの移行により、多くの場合、変更ログのコメントが失われます。コード内のコメントのみが保持されます。


コミットメッセージを保持しないVCS変換はありますか?
デビッドソーンリー

1
@David-そうではないことをたくさん見ました。私はそうすることに技術的な障害があったかどうかわからないか、誰かがそれだけで「新鮮なスタート」と1日目に新しいVCSにすべてのコードをチェックインすることが容易であると判断しましたかどうか
ジャスティン洞窟

プロセスが変更理由を説明するコメントを追加することができ便利、そして時には説明するコメントを追加するとき、それは変更しましたが、私は、変更ログの形でそのコメントを置くことでメリットが表示されません。1つは、コメントの有用性を多少偽装し(「ああ、単なる変更ログコメント」)、2つ目は、不必要な変更ログコメントをさらに奨励する(#1を強化)。
ベンホッキング

ビジュアルソースセーフの使用を終了しますか?有用な最新のソース管理システムはすべて、変更ログを適切に処理します。定義でこれを知っているのは、そうしなければ有用だとはみなされないからです。所有しているソースコントロールの使用方法を30分間学習すれば、ツールを知っている人に祈りをかけるよりもはるかに効果的になります。言うまでもありませんが、多くの場合、コード履歴は無関係であり、現在はテストと作成のみを行っています。
ebyrob

「ソース管理の変更」について-ほぼすべての最新システムは、履歴を相互に移動したり、個々のプロジェクトレベルの変更ファイルを出力したり、変更ログをソースファイルに実際に埋め込んだりすることができます。前ではありません)。技術がそこにあるので、ソース管理を適切に使用しないことを選択する人々が問題です。
ebyrob 14年

1

誰もこれに言及していないことに驚いていますが、これがライセンス要件に準拠する最初の理由ではありませんか?つまり、一部のライセンスでは、ファイルに加えた変更はファイル自体に記録する必要があると言っていますか?


1
どのライセンスがそれを言っていますか?
Trasplazio Garzuglio

2
私は、Sarbanes Oxleyがソースファイルの変更ブロックを要求すると信じていた場所で働いていました。また、長年にわたってPVCS(別名「ディメンション」)を使用していたため、バージョン管理はまったくありませんでしたが、私は何を知っていましたか?
ブルースエディガー

@Marco:覚えていないか、リンクしていたでしょう。
スヴェールラベリア

1
GPLv2のセクション2aで必要です。ほとんどのプロジェクトはそれを無視し、いくつかは「ChangeLog」ファイル(VCSから生成されることが多い)を持っています。
dsa

0

コメントセクションで変更ログを維持し続ける理由は、使いやすさのためです。多くの場合、問題をデバッグするとき、ソース管理ファイルを開いてその中のファイルを見つけ、加えられた変更を見つけるよりも、ファイルの上部までスクロールして変更ログを読む方が簡単です


1
個人的には、すべてのソースファイルに変更ログを追加するために、200行のファイルが1,000行の長さになったとき、少し苦痛を感じます。この余分なノイズは、やがて重要なものを実際に覆い隠します。
ebyrob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.