どのくらいのドキュメントで十分ですか?


15

技術的な(将来の開発者向けの)ドキュメントはどれくらいですか?適切なコーディング時間と文書化時間の比率はありますか?

パパディモウリスはあなたがすべきだと主張する

最も理解しやすくするために必要な最小限のドキュメントを作成し、

それは良いガイドラインですか、それとも私が作成すべき具体的なものはありますか?


1
エンドユーザー/ UIまたは技術/ソースコードのドキュメント?

2
ソースコードについてのアドバイスは、私たちのサイトの最初の質問を参照してください。programmers.stackexchange.com/questions/1/...
タマラWijsman

回答:


24

廊下のユーザビリティテストはどうですか?プロジェクトに不慣れな開発者にコードとドキュメントを見せてください。コードをレビューしているときに何かを説明したいという圧倒的な衝動なしにそれを行うことができれば、それで十分です。


1
+1私もその考えが好きです。ソフトウェアを開発して、ドキュメントを必要としないほど直感的です。

12

ラ・パーフェクション・エスト・アテインテ・ノン・パス・アンド・ア・リエン・ア・ジューター、メイン・アンド・ア・イン・ア・リエン・ア・リタイア。
アントワーヌ・ド・サン=テグジュペリ

(英語:追加するものが他にない場合は完全になりませんが、削除するものがもうない場合は完全になります)。

1
すべてのドキュメントが削除されたプロジェクトは完璧ですか?

@ThorbjørnRavnAndersen-いいえ、コンテンツを削除するとドキュメント全体の価値が損なわれた場合に完璧になります。
cjmUK

1
@cjmUKとその解釈は、質問にどのように答えますか?

しょーた そうではありません。それはあなたのコメントに対するコメントでした。これは、記録のために、ブノワの答えの誤解だったと思います。確実に答えることができるのはブノワだけです。しかし、私の答えは他の場所にリストされています
...-cjmUK

2
違う。それは、多くが必ずしも良いとは限らないことを意味します。簡潔さは評価されるべきですが、より簡単なものを作ることが有用な情報を見逃すことを意味する場合は明らかにそうではありません。しかし、同様に、大量のドキュメントを書くと、他の開発者が最も有用な情報にアクセスするのが難しくなる可能性があります。ドキュメントを書くとき、まだ何が欠けているのかを考えるだけでなく、あなたが本当に必要としないものも考える必要があります。
cjmUK

3

私はしばらくこのトピックについて考えていました。

私の結論は-それは量の問題ではなく、質と文脈の問題です。

たとえば、適切なプロジェクト構造は、ファイルの場所を説明するコメントよりも優れています(実装vs意図)

同様に、コンテキストを明確にするための分類はネーミングよりも優れています(患者のID-> Patient.Id)。

DDDは優れたドキュメントに発言権を持っていると思います-分類はコンテキストを提供し、コンテキストは境界を作成し、境界は意図的な実装につながります(これは存在する必要があるのではなく、これが属する場所です)。

コード自体は、ドキュメントと見なされるほど十分ではありません。ほとんどの場合の問題は、コードの動作がコメントされているかコメントされていないという事実にあるのではなく、原動力(ドメインロジック)にコメントがないという事実にあります。

誰がボスであるかを忘れることがあります-コードが変更されても、ドメインロジックまたは推論は変更されるべきではありませんが、ドメインロジックまたは推論が変更されると、コードは間違いなく変更されます。

一貫性も非常に重要です-一貫性がなければ、それ自体の慣習は役に立たない。

設計パターンは単なる「良い習慣」ではありません-開発者が理解すべき専門用語です。開発者にファクトリに新しい型を追加するように指示する方が、新しい型をメソッドに追加するよりもよく理解できます(コンテキストと一貫性が弱いか欠落している場合)。

闘争の半分は親しみです。

補足として、多くのドキュメントを支持していると思われるAPIも、ドメインとコンテキストに非常に敏感です。機能を複製することは悪ではなく(同じこと、異なるコンテキスト)、時には別個のものとして扱われるべきです。

コメントに関しては、推論の背後にあるドメインロジックを指摘することは常に良いことです。

たとえば、あなたは医療業界で働いています。メソッドでは、「IsPatientSecure = true;」と記述します。

これで、まともなプログラマーは、患者が安全であるとマークされていることを理解できます。しかし、なぜ?その意味は何ですか?

この場合、患者は施設外の病院に安全に移送された受刑者です。これを知っていれば、この時点に至るまでの出来事(そしておそらくまだ何が起こる必要があるか)を想像するのは簡単です。

たぶん、この投稿はせいぜい哲学的なように見えるかもしれません-しかし、それはあなたが書いているのはコードではなく、「推論」または「論理」であることを忘れないでください。


1

Papadimouslisの引用に同意します。ソースコードはそれ自身で話すことができますが、コードはそれが存在する理由、それがどのように使われるべきか、そしてコードがどのように振る舞うべきかをあなたに伝えることができません。

私は良い比率を知りません。

私は非常に少ないドキュメントで何百行ものコードを継承しました。コードが書かれた理由を理解するのが難しくなりました。コードが書かれた理由を見つけた後、コードの使用方法を理解する必要がありました。それを見つけた後、コードをサポートおよび保守できるように、どのように動作するかを理解する必要がありました。

経験から、コメントを具体的にしすぎないようにしてください。さもないと、実際のコードとドキュメントを維持しなければならなくなります。ドキュメントとコードが同期していない場合、悪夢です。


1

2番目の推測をやめるのに十分です。

作業中にいつでも「うーん、これを文書化する必要がある」と思ったら、先に進んでください。次に、いくつかのドキュメントを作成していて、「これをもっと説明する必要があるかもしれない」と思ったら、先に進んでください。

その感覚がなくなるまで繰り返しすすいでください。


1
-1:あなたは基本的に「ええと...あなたが好きなことをしてください」と言っています。これは無回答です。
スティーブンエバーズ

彼は「あなたが必要だと思うことは何でもする」と言っているように見えますが、これは私にとって正当な答えのように聞こえます。私はあまりにも多くの具体的な答えを警戒するでしょう。
cjmUK

1

George Fairbanksの著書Just Enough Software Architectureに示されているようなリスク駆動型のアプローチは、ドキュメントがどれだけあれば十分かを理解するのに非常にうまく機能することがわかりました。彼のウェブサイトでこの概念を提示するセクション(第3章)を読むことができますが、主なアイデアは次のとおりです。

  • 「システムの理解」を心配することをリスクとして表現する
  • リスクを優先する
  • プロジェクトのリスクが十分に低減されたとチームが感じるまで、リスクを軽減します。この場合、おそらく何らかのドキュメントを作成することになります。

リスクを優先できるように懸念を調整するために、成功しきい値として知られるいくつかの目標を特定することが役立つことがわかりましたは、「成功、つまりチームが「成功」プロジェクトが達成しなければならないと考える目標の最小セット。ドキュメントの観点から、ToSの例は、「開発者がフレームワークを初めて選択してから4時間以内に簡単なプラグインを構築できるはずです」のようなものです。

次に、いくつかのリスクを特定します。構築した(または構築中の)システムで、チームにとって最も心配なことは何ですか?これらをリスクステートメントとしてフレーズします。SEIの条件と結果のスタイルが好きですが、他にもあります。例:

  • データモデルは大きく複雑です。開発者は、特定の状況でどのデータ要素を使用するかわからない場合があります。
  • システムには、信頼性を高めるためのAPI接続制限があります。開発者が誤って接続制限を超える可能性があります。
  • プラグインはいくつかの連続したステップで消費されます。開発者は、これらの順序付けられた手順を念頭に置いてプラグインを作成しない場合があります。

チームとして、リスクに優先順位を付けます。マルチ投票は非常にうまく機能します。

最優先のリスクを軽減し、プロジェクトの失敗のリスク(成功のしきい値で定義)が許容範囲内になるまで、識別から始めます。一般的に、これは、チームがそれほど心配しないことに同意するリスクがあることを意味します。おそらく、すべてのリスクを軽減したくないことを覚えておいてください。上記の最後のリスクに対する緩和戦略の例は、チュートリアルを作成することです。


1

できるだけ少ないが、必要なだけ

最初に聞いた場所と時期を思い出せませんが、多くのアプリケーションでそれは格言です。

テクノロジーやアプリケーションが複雑であればあるほど、より多くのドキュメントが必要になることは明らかですが、明らかに時間を無駄に使いたくないのは明らかです。

JohnFxの「廊下テスト」は健全です。しかし、自分を信頼してください。コードを開発したので、すべての人が、特別な注意を必要とする要素、およびすべての人にとって明白な要素について感じているはずです。コードの開発に苦労したことを考えてみてください。他の開発者がコードを見たときに、他の開発者が何を目にするかがわかるでしょう。

コーディングに費やした労力と文書化に費やした労力の関係を忘れてください。


0

これを正確なルールに入れることはできないと思います。文書化の理由は、他の人が生のコードを理解し、おそらく維持するために、生のコードから簡単に収集されない知識をフォームに提供することです。

したがって、十分に文書化したかどうかを判断できる唯一の方法は、対象の視聴者に十分かどうかを尋ねることです。「ピアレビュー」プロセスは、これを事前に行うのに非常に優れていると思います。ピアがあなたの話していることを理解し、それを最小化するためにどれだけの説明が必要であるかに注意してください。

これを一度も実行したことがない場合、どれだけの作業が必要かを見積もることはできませんが、数回の反復を行うと、どれだけの作業が必要であるかがよりよくわかります。

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