時代遅れのコメントは都市の神話ですか?


38

「コメントは時代遅れになりがちだ」と​​いう主張をする人は常にいます。事は、私は私のキャリア全体で2つまたは3つの時代遅れのコメントを見たことがあると思います。別々のドキュメントの古い情報は常に発生しますが、私の経験では、コード自体の古いコメントは非常にまれです。

誰と仕事をしているのか幸運だったのですか?特定の産業は他の産業よりもこの問題を起こしやすいですか?あなたはありますか特定のあなたが見てきた最近の時代遅れのコメントの例は?それとも、時代遅れのコメントは実際の問題よりも理論的な問題ですか?


30
同意した。古いコードはコメントになりましたが、今ではよく見かけますが、あまり見たくないものです。
pyvi

8
何よりもコメントの欠如が多く見られます。貧弱な命名規則と組み合わせることで、私が仕事をしているもののいくつかを読み込もうとする楽しみのボールです。
P.Brian.Mackey

2
私は、時代遅れのコメントをたくさん見てきましたが、一部は単なる誤解を招くEVILでした。間違いなく神話ではありませんが、多くの人々によって維持されているプロジェクトおよび/または複雑さによって増幅された長期にわたってほとんど有効です。しかし、コメントではなくコードを信頼することを学びました(2行を超える場合はほとんど読みません)。
MaR

私は主に、私のキャリア全体を通じて非常に古いレガシーコードを使用してきました。変な30年前のFortan77コードで時代遅れのコメントに関連する深刻な問題が発生したことは数十回ありましたが、コメントが適切なコードの割合はほぼゼロでした。だから私は同意する、問題の規模は誇張されていたに違いない。
SKロジック

幸運なことに、私はこれを投稿してから一年のうちにかなりの数を見てきました。私は無意識のうちに彼らを信頼しないことを学び、それからそれらを修正して先に進むことを学んだのだと思う。
カールビーレフェルト

回答:


33

常に

時代遅れで誤解を招くコメントで泳いでいるのは私だけではないと本当に信じられません。偶然に、これは理解を助ける:

おそらく最も重要なのは、コードの年齢です。次の要因は、スタッフの離職率です。

私は同等の研究開発と保守作業をしています。R&Dは新しいコードであり、一般的にはbeat地から少し外れています。私の同僚の多くは、まだライブラリーが存在しないものを試すときに、多くのコメント付きの説明を入れることを信じています。コードに対するコメントの比率は通常よりも高いため、物事が同期しなくなる可能性が高くなります。

メンテナンスコード...私は、10年以上前のシステムと5年以上前のシステムのアクティブメンテナーです。10年前のコードとコメントは、ご想像のとおり、ひどいものです。10年以上にわたって、あなたはコードベースに多くの手を携え、全体がどのように機能するのか誰にもわかりません。チームの離職率が非常に低いため、5年前のコードとコメントは非常に優れています。

私の製品も特定の顧客向けに高度にカスタマイズされています。

具体例:

  • インメモリコピーの回避など、特定の方法論のパフォーマンスの改善を説明するコメント。大容量のRAMを搭載したPentium 2のトップエンドマシンの場合は大した問題ではありませんが、現在はほとんど問題ありません。

  • TODO

  • コメントを含むコピーアンドペーストされたコードのブロック。コメントは元の場所で意味を成したかもしれませんが、ここではほとんど意味がありません

  • コメントアウトされたコードの上にコメントブロックがあります(何年経っているのかを知っている人)。

これらすべてにおいて、ソフトウェアと同じレベルでコメントとコードを維持しない傾向が見られます。IDEと基本的な開発者の習慣はこれを助けません。私の目はそれらを追い越すように訓練されています。グリーンフィールドやアクティブなプロジェクトでは、コメントの古さを避けるのは比較的安いと思います。コード/コメントの比率を高く保つことができれば、それらを最新に保つことは大したことではありません。実稼働システムでのバグ修正のためにx時間予算を組んでいる場合、これらのことを追い詰めるのを正当化するのは少し難しくなります。


それで、基本的にあなたはコメントを完全に無視するだけだと言っているのです。なぜならそれはすでに混乱しすぎて、あなたの状況を悪化させるだけだからです。驚くことではありません。
スティーブンジュリス

5
@Steven-私個人的に 私は漸進的な改善を大いに信じています。完全に判読できないコードのりが、十分な漸進的な努力で非常にまともなものに変わったのを見てきました。しかし、私の経験では、無視するのは確かです。カタログ化するのに数週間の問題がある10000行のクラスがいくつか絡み合っている場合、古いコメントは優先リストの一番下に落ちる傾向があることは非常に理解できます。
スティーブジャクソン

1
@Steve:あなたの状況では、すべてのコメントを削除するスクリプトを作成し、必要に応じて最初からコメントを開始します。:)
スティーブンジュリス

1
私が働いていた主なコードベースは、少なくとも半分のコメントで、ほとんどコメントされていませんでした。時代遅れのコメントは人生の事実であり、正しいコメントは非常にまれであり、ドキュメントについてコメントすることさえしません!!! 光景が...この仕事の後、私は...あまり、あなたのコードは、コメントを必要とする場合、それはおそらく、物事をより明確にするためにリファクタリングを必要とし、良好であることを学んだ
Newtopian

4
私はいくつかのひどい例を見てきましたBlocks of copy-pasted code including comments. Comment may have made sense in its original location, but hardly makes sense here。たとえば、別のクラスについて話しているクラスレベルのコメント。
ピーターテイラー

18

「コメントは時代遅れになる傾向があります。」

これが問題になる可能性があることを知るのに十分な頻度でこれが起こるのを見てきました。

事は、私は私のキャリア全体で2つまたは3つの時代遅れのコメントを見たことがあると思います。

誰もがコメントを十分に管理し、維持する環境で働くことは完全に可能であるべきだと思います。編集中のコードの近くにあるコメントを見て、必要に応じて更新するのはほんの少しの余分な努力です。コメントがあまりにも遠すぎてすぐに気付かない場合は、とにかく悪いコメントであり、そもそも(少なくともそこには)追加すべきではありません。

さらに、通常、コメントは古くなる傾向があるという声明とともに、読みやすさを低下させ、人々を混乱させるという声明に従います。これは私がまだ経験していないことです。古いコメントに出会うたびに、何が変わったのかがはっきりとわかり、それに応じてコメントを更新して、新しいコードを表すようにします。


Roehmらによる最近の研究2012年は次のことを遵守しています。

[28人中]の21人の参加者は、ソースコードとインラインコメントから主要な情報を得ていると報告しましたが、ドキュメントが主要な情報源であると述べたのは4人だけでした。

これは、コード自体のコメントは一般に依然として非常に有用であると考えられるというあなたの疑念に沿っています。これは、古いドキュメントと古いコメントの間に明確な線を引くべきあることを示しています

Roehm、T.、Tiarks、R.、Koschke、R。、およびMaalej、W。(2012年6月)。プロの開発者はソフトウェアをどのように理解しますか?ソフトウェア工学に関する2012年国際会議の議事録(pp。255-265)。IEEEプレス。


良くなったので、典型的なプラグアンドチャックコードでコードが何をするのかを理解するためにコメントが少なくて済むことに気付きました。
ポールネイサン

3
@Paul Nathan、コメントは コードが何をするのかを説明するべきではありません-コードはそれをより良く説明しています。コメントは 、コードが何をするのを説明するためにあります。
SKロジック

2
@ SK-logic:議論は理解していますが、広すぎると思います。関数(またはコードの段落/ブロック)のコメントは、関数の名前よりも多くの(そしてより迅速な)機能を明確にすることができます。これは、パブリック機能に特に必要です。コードを読むのは簡単ですが、10ライナーのコードの2ライナーの説明を読む方が、まだ高速です。「何」のドキュメントがないお気に入りのAPIを使用することを想像してください。その機能についてはあまり確信が持てないでしょう。
スティーブンジュリス

うん、ドキュメント(たとえばJavadoc)は含めませんでした-構造化されすぎて、単に「コメント」と呼ぶことはできません。
SKロジック

17

時代遅れのコメントは仕事の匂いです。それは、古くなった、または無視された単体テストを持っているようなものです。これは、かつてショップでアクティブだった優れたプロセスがカウボーイコーディングに退化していることを示しています。物事を適切に行うために時間をかけるという適切な「エンジニアリング文化」が崩壊しました。プロジェクト/会社はおそらく技術的な負債を抱えています。

要するに、はい、あなたは幸運でした。あなたのキャリアの中でこれまでに合理的にうまく運営されている一連の店を偶然持っていた場合、これを見ないことはかなり可能です。しかし、より典型的な、あまりうまく運営されていない店では、これは他の混乱と並行して行われます。


「時代遅れのコメントは仕事の匂いです。」非常によく置く!同様に自己文書化コードのみのコメントなしには解決策が、怠惰な「ハック」ではありません。
スティーブンジュリス

10

コメントはテストのようなものです。コメントは最新の状態では非常に優れていますが、コードがないとコードを理解しにくくなります。

時代遅れのコメントを見たことがないなら、あなたはとても幸運だった。

私が扱ってきたほとんどのコードベースは時代遅れのコメントで一杯であり、通常はヘルプではなく混乱の原因であるため、通常はコメントを完全に無視します。


あなたが働いた業界を聞いてもいいですか?私はこれが他のものよりもいくつかでより一般的であるかどうか疑問に思っています。
カールビーレフェルト

私はヨーロッパの3つの異なる国で働いており、主に大企業と小企業のコンサルタントとして働いています。最近、SaaS開発ハウスで。
Kim.Net


10

古いコメントはJavaDocに頻繁に表示されます。

  • 存在しない引数のリスト
  • すべての引数を説明していない(欠落している引数はおそらく後で追加された)
  • 例外などについても同様です

さらに、パフォーマンスに関するほとんどの考慮事項がコード自体よりも早く失効する傾向がある場合、「パフォーマンスのためにこれを行う」などのコメントがコメントに記載されることがあります。


3
(批判ではなく、解決策を提示するだけです)IDEの警告は、これを防ぐのに大いに役立ちます。さらに抜本的な対策が必要な場合は、javadocビルドの警告/エラーでビルドを失敗させます。
マイケルK

1
これは、私があまり多く見なかった理由を説明できます。JavaDocスタイルのコメントを使用する場所で作業したことはありません。
カールビーレフェルト

4
@ Michael、IDE警告は軽度の場合に役立ちます。当社のレガシーコードベースは、あなたが注意を払って停止制限を超えているの道、2万人以上のCheckstyle警告を生成します-ひどく使用された場合(((のIDE、かなりのJavadoc悲惨さに貢献することができます私たちのコードベースでのがらくたのJavadocのほとんどは明らかに自動生成されました。。
ペテル・トレック

4

私は時々古いコメントに対処します。それは確かに都市の神話ではありません。人々が最悪の慣行のリストでそれを言及するのは、それがあなたに非常に頻繁に当たるからではなく、それが起こると、通常あなたに多くの時間と労力がかかるからです。

コードベースでは、ほとんどの古いコメントは、メソッド宣言の近くではなく、呼び出しの近くでメソッドの動作を記述する(アンチ)パターンの使用が原因です。誰かが長いコードをメソッドに抽出し、そのメソッドがその時点で一度だけ呼び出されてから、メソッド呼び出しをコメントするときに発生します。したがって、次のような結果になります。

featureList = GetFeatures();

// Sorting features and deleting empty ones from the list...
ProcessFeatures(featureList);

そして、メソッドはコメントなしで以下のどこかに宣言されています。人々はこれらのメソッドを長年にわたって仕様の変更に対処し、バグを修正し、最終的にはリストをソートせず、空の機能が見つかったときに例外をスローするメソッドになります。したがって、上記のコメントは古いコメントであり、最終的にはデバッガーで時間がかかります。これらはいくつかのコードベースで起こります。


3

これを自問してください。関連するコメントを変更したり、新しいコメントを追加したりせずに、コード行を変更したことがありますか?

私は多くのレガシーコードを使用してきましたが、コメントが関連性に欠けることもあります。


2

ほとんどの場合、私の経験はあなたの経験と一致しますが、コードベース全体に当てはまる場合があります。数年前にコンサルティングショップによって作成されたアプリであり、クライアントとは「良好な状態」ではなくなりました。

同社はコードにコメントして例外的な仕事をしましたが、元のハンドオフ以来それを維持していたプログラマーは、「絶対に変更する必要があるものだけを変更する」という考え方の一部でした。あいにく、彼らはコメントに対しても同じ態度を維持し、コメントとコードとの間に大きな隔たりが生じました。


2

古くなった説明的なコメントはあまり多くありませんが、何年もそこにあったTODOコメントがたくさんあります。私は彼らがタイムカプセルのようであり、このようなことを言っていたらいいのに。

//TODO: In 15 years AND NO SOONER... actually implement this method.

1
この場合の問題は、おそらくTODOの誤用です。TODOは、コードが実際に機能しているが、後で改善できる場合にのみ使用されるべきであると考えTODO: implementています。残念なことに、このルールを順守している人はあまりいないので、ある時点で実稼働コードに投稿されたようなコメントを見たいと思います。それは私の一日になります。
pwny

1
C#では、これらの目的でNotImplementedExceptionを使用します。
スティーブンジュリス

2
@pwny、私はチェックインする前に書くつもりのことだけにTODOを使用し、それをカバーするようにします。私の意見では、それよりも長い期間はバグトラッカーに属します。
カールビーレフェルト

@Karl Bielefeldtそれもまた理にかなっています。
pwny

2

私が取り組んだ最後の3つのプロジェクトは、コードベースから古く、誤解を招く、無意味なコメントを削除するのにそれぞれ数日を費やしました。可能かつ必要な場合は、より適切なコメントに置き換えますが、多くの場合、コメントを削除して先に進むだけの問題です。

私は他の人から引き継いだほとんどすべてのコードベースで同じことをしました。通常はしばらくメンテナンスされておらず、元の所有者が長い間行っていた、および/または適切なハンドオーバーを行うことを望んでいない、または不可能だった後です。


1

コメントの使用が減少している可能性があります。誰のコードがどれだけ適格ですか?1つには、誰かが実際にコメントを古くする必要があります。次に、コメントされたコードを変更する必要があります。高い割合のコードが適格かどうかはわかりません。

1つの悪いコメントだけに頼って、アプリケーションの大部分を台無しにし、多くの時間を浪費する必要があります。


0

大量のコードを大量に生成する組織では、コメントの同期を保つことは困難です。何が起こっているのかを理解する最良の方法は、作業中のモジュールの制御フロー図を描くソフトウェアを使用することです。それが、ソフトウェアが何をするのかを把握し続ける唯一の方法です。

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