コード内にバグ修正コメントを入れておくのは良いですか?


15

私のチームは、バージョン管理としてクリアケースを使用しています。私が取り組んでいるプロジェクトは、7〜8年前には開始されていません。プロジェクトの存続期間中、バグ修正サービスパックなどのリリースがいくつかありました。問題はバグ追跡システムを使用して追跡され、バグ修正に取り組むほとんどの人は、START /日付、作成者、バグIDなどを含むENDブロック

これは非常に無関係で、コードが乱雑になり、保守が不安になります。これらは、チェックインコメント/ラベルなどの一部である必要があり、作業製品の追加のライフサイクル情報を保持できます。

従うべきベストプラクティスは何ですか?

コードのレビューアの何人かは、バグと修正についてのコメントを外に出して、彼らの人生を楽にすることを主張します。私の理解では、ファイルをビューにマッピングしてファイルをレビューし、ブランチの変更ログを取得してレビューする必要があります。レビュー用に更新されたコードを送信する際のベストプラクティスを入手できれば助かります。


3
本当の質問は、なぜそうするのかということです。これは、ソース管理前の非常に古い手順である可能性があります。

@anderson-導入時にclearcaseを使用することについて、彼らは適切に理解していると感じています。そのため、その練習はさらに続いたかもしれません
。...-sarat

見つけることを検討?


悪い習慣だとは言いません。とにかく、ソフトウェア品質測定の1つは、ソースコードを介したコメントの割合です。
ルディ

回答:


27

バグ修正をコメントとしてコードに追加することの問題は、完全なストーリーを取得できないことです。「これはバグの修正」というタグが付いた完全にすばらしいコードを見つけた場合、私の最初の反応は「そうですか?」と言うことです。コードはそこにあり、動作します。コードを維持するために知っておく必要がある唯一のことは、それが何をするかを教えてくれるコメントです。

より良い方法は、SCMコミットログにバグ修正参照を追加することです。これにより、バグの内容、導入された場所、および修正方法がわかります。さらに、リリースの時期が来たら、SCMログを簡単に抽出し、バグがあり修正されたことを示す箇条書きを追加できます。別のブランチまたはバージョンで同じバグが発生した場合、修正箇所を簡単に見つけて、それが実際に同じものである場合は簡単に再適用できます。

これをすべて言ったが、チャールズの答えにも同意する。コードの一部の理由が明らかでない場合は、必ずコードが理由があるため、注意して扱う必要があることをメンテナーに伝えてください。


素晴らしい答え。私の質問にもう少しポイントを追加しました。回答を確認して更新してください。ありがとうございました。ところで、特定のブランチからコミットログを取得するためのクリアケースコマンドを手伝ってくれませんか?
サラト

@Sarath ClearCaseを使用したことがないのではないかと心配しています。遠慮なくスーパーユーザーを使用してください。喜んで助けてくれる人がたくさんいると思います。
災害

4
JIRAのような優れたバグトラッカーは、SCMのコミットログを調べて、バグに関する情報を引き出すことができます。バグのために何かをコミットすると、バグトラッカーがバグレポートに自動的にノートを追加し、コミットXがそのバグを参照したと考えてください。

@Andersen-JIRAをご利用いただきありがとうございます。しかし、適切に使用されているかどうかを確認する必要があります。
サラット

@Thorbjørnあぁ、簡単だよ。私は、CVS / Bugzillaコンボ(およびそれ以降のSVN / Bugzilla)を使用して、手動でそれを行わなければなりませんでした。バグ修正参照をコミットに追加し、コミット参照をbugzillaに追加します。エラーが発生しやすいプロセスであり、開発者はどちらか一方を忘れがちでした。しかし、この情報は多くの場合非常に役立ちました。
災害

23

主に悪い習慣。絶対にやるべきだとは言いません。時折、回避しなければならない外部APIのバグのようなものに遭遇します。根本的なバグを知らない場合、回避策は完全に脳死状態に見える可能性があります。その場合、同僚や後の自分が明らかに脳死したコードを「修正」しようとしないように、コードのバグを文書化することをお勧めします。


3
同意した。これらの種類のコメントは、重要な価値を加えるときに追加します。ただし、ハンドルを回すためだけにそれらを実行しないでください。
すぐに

いいですね、これはいくつかのコードが「なぜ」あるのかを伝えるコメントのアイデアをサポートします。Programmers.stackexchange.com/questions/1/…を
Gabriel

私はこれを数回行いました:一見、ロジックを完全に無視するコード(「このコードは何のためにあるのですか?」)ですが、実際には非常に正当な理由でそこにあるので、人々に注意深く歩いてもらいたいですそれ。次に、そのコードの理由を説明する警告コメントを追加すると、誰もが簡単になります。そして、誰かが元の問題を解決するためのより良い方法を考えることができるなら、彼らのすべての信用、私は言います-彼らはブレインデッドコードが設置された理由とそれが達成することになっていることを知っているので、代替手段を実装するのがはるかに簡単です解決。
CVn

9

悪い練習。コメントは古くなり、コードが乱雑になります。情報は、必要に応じてSCCシステムのバージョン履歴で引き続き利用できます。


3

悪い習慣のようですね。組織が別のバグ追跡システムへの移行を決定した場合はどうなりますか?現在使用しているツールに製品を強く結び付けないでください。特定のバグIDを参照する代わりに、コードがそのように見える理由は不明であるため、コード内のコメントを使用して設計上の決定を動機付けます。


これは誤った二分法です。必要なときにデザインコメント(「これがxy zを行った理由」)を持ち、コミットメッセージにバグIDを記載できないのはなぜですか?
マシューフラシェン

どこにあなたができないと言うのですか?VCSのコミットメッセージではなく、コード内のバグIDを参照していました。
-fejd

すみません、私は誤解しました。バグIDをどこにでも置くのは役に立たないと言っていると思います。
マシューフラシェン

問題ありません、それは私の答えが十分に明確ではなかったことを意味します。:)
fejd

2

私の最初の反応は、自分自身を繰り返さないことですので、コードからそれをSCMログに入れてください。ここでは、関数の改訂コメント、作成者名、およびファイルと関数の作成日について、同様の議論を行いました。過去(SCMが使用される前)では、ファイルの進化を再構築できるように、この情報はすべてファイルに保存されていました。

開発者の約半数は、この情報がすべての情報を1か所に集められることを望んでいます(これにより、SCMの変更を検索するきっかけになります)。開発者の残りの半分は、coeで何が変わったかの手がかりを探すのではなく、コードの情報を必要としないようにSCMから検索を開始します。これらのコメントをどう処理するかはまだ決定していません。それは人々の働き方に大きく依存し、一部の人々は既知の方法を離れることに非常に頑固です。コードのブロックをコメントアウトし、コード内に永久に残すことについても同じです。


コメントされたコードはSCMによってチェックされ、コミットされることさえ拒否されるべきだと思います...将来のある仮想日が必要な場合、SCM履歴で5分間の検索を得るためだけにコードに混乱を追加していますバック。
ジュリアンロンカリア

同意しましたが、sourcesafeに実装してみてください:D私たちのプロジェクトチームではレビューを行っているので、今のところ、それらのブロックはレビュー担当者によって拒否されています。
-refro

ああSourceSafe ...あなたとあなたのチームに申し訳ありません。
ジュリアンRoncaglia

しないでください、何もないよりはましです。現時点では、すべての新しい開発はSubversionで行われているため、毎月ソースセーフとはあまり関係ありません。
refro

1

Dyaster に追加するだけです。JIRAにはバグ修正に関連する変更を表示する優れた機能がありますが、バグ修正を文書化するのに最適な場所はテストケースです。どのバグが修正されたかを示すコメントなしでコードが明確でない場合、それは「コード臭」です。ただし、匂いをきれいにする時間がない場合、コメントはテストケースを参照する必要があります。テストケースでは、コードが実行していることをコードが実行している理由がより明確になります。バグ修正を説明するテストケースを作成する時間がない場合、バグはまだ修正されておらず、延期されています。


1

コード自体ではなく、コミットメッセージにバグ修正IDを追加することに同意します。バグIDのコミットメッセージを自動的にスクレイプするバグトラッカーは非常に便利です。

さらに、非難 / annotate /を使用できますバージョン管理システム praiseコマンドをして、これらのコメントを置き換えることができます。次に、次のようなものを実行すると:

vcs blame file.ext

通常、各行を誰が変更したか、いつ変更したか、コミットIDなどの有用な情報を確認できます。コミットIDから、バグIDを含むメッセージ全体を取得できます。

優れたVCSシステムを使用すると、誰が行を変更したかを計算するときに空白を無視できます。

この機能に関してClear Caseが何を持っているのかわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.