読みやすく保守が容易なコードを書いたかどうか、どうやって知るでしょうか?


336

作成したコードが読みやすく、理解しやすく、保守しやすいことをどのように知ることができますか?作成者の観点からはもちろん、作成者がコードを作成および編集したため、最初からコードは読み取りおよび保守が可能です。しかし、私たちの職業がコードを測定できる客観的で定量化可能な標準がなければなりません。

これらの目標は、元の作者の専門家のアドバイスなしにコードを使用して次のことを実行できる場合に満たされます。

  • コードを読んで、基本的なレベルでロジックの流れを理解することができます。

  • 入力、出力、アルゴリズムを含めるためにコードが何をしているのかをより深いレベルで理解することができます。

  • 他の開発者は、バグ修正やリファクタリングなど、元のコードに意味のある変更を加えることができます。

  • 元のコードを活用するクラスやモジュールなどの新しいコードを作成できます。

コードの品質を定量化または測定して、読み取り、理解、および保守が可能になるようにするにはどうすればよいですか?


154
必須リンク(xkcd ではありません):osnews.com/images/comics/wtfm.jpg
ジェリーコフィン

3
私はあなたがそれを見るときにあなたがそれを知っていると思いますが、この議論は根本的に欠陥があり、元の形でさえ恥ずかしいです、ソースコードに適用される気はありません。
コンラッドルドルフ

6
「もちろん、あなたの観点では、コードは読み取り可能です」-それは明らかではありません!
-UncleZeiv

24
あなたがそれを書いてから数ヶ月後にそれを見たとき、あなたはそれを知っていると言うでしょう。
-JeffO

2
@asfallows:私は妻にいくつかのコードを見せましたが、彼女はそれを読むことができるので本当に悪いコードだと思ったのです!(英語に見える単語が多すぎて、@ [!^ $&*)文字が足りません...)
gnasher729

回答:


370

あなたの同僚は、コードをレビューした後にあなたに伝えます。

これを自分で判断することはできません。なぜなら、作者がコード自体が言う以上のことを知っているからです。絵が芸術かどうかを判断できないのと同じ理由で、コンピューターはあなたに伝えることができません。したがって、あなたが書いたものを見て、彼または彼女の意見を述べるには、ソフトウェアを維持できる別の人間が必要です。言われたプロセスの正式な名前はピアレビューです。


6
経験的なテストに勝るものはありません。
世界エンジニア

25
+1あなたの最も重要な聴衆は、あなたが取り組んでいる問題の理由と方法とその解決策を知っていることに没頭している同僚です。適切なコードは、ピアグループのこれに対する現在の理解を反映しています。チームが有能で思慮深く、新しいアイデアを受け入れていると仮定すると、「あなたの仲間があなたにその良い/保守可能なことを伝えている」とは、私の経験では、他よりもはるかに良い定義です。
ダグT.

69
私の経験では、これは同僚が何が良くて何が悪いかを知っているときにのみ機能します。それ以外の場合は、意志は、このような音:「あなたが同じ方法でそれらのコードを記述する必要があり、それはコードを見つけることが簡単だ」
ランギ林

12
@RangiLin、まあ、あなたの同僚は正しいかもしれません。

11
@Rangi同僚と仕事をしなければなりません。もし彼らがあなたのコードを難しいと思うなら、それはあなたのコードの問題です。長期的には、あなたがそれらを教育、または(あなたが移動することができたり、採用プロセスに影響を与えることができる)より良い同僚を取得しようとすることができます...ああ、とは常に彼らが正しいかもしれないことを覚えています。
-MarkJ

220

時には、6か月前に書いたコードに戻って、それが何をするために書かれているのかを理解してみるのが最良の方法です。

すぐに理解できれば、読みやすいです。


28
ええ、それは良さそうです(そして真実です)が、今日何をするか/どうするかを決定するための非常に良いアプローチではありません...
マイケルデュラント

10
解剖はしばらく時間がかかっていることを示唆しており、慎重に行う必要があります
...-deworde

3
再訪の期間を最初の再訪で1か月またはそれ以下に短縮するかもしれません。それはプロジェクトとドメインの複雑さ、そしてあなたのメンタルアプローチに依存すると思います。6か月後には、実際の読みやすさではなく、コードを最初に書いてから学んだツールや手法を使用して、リファクタリングや最適化の機会を見ることで気が散ります。
クリスさようなら

1
@MichaelDurrant古いコードを確認するたびに、異なる方法で記述されているはずの部分を見つけ、「今日」記述しているコードを考慮に入れます。はい、良いコードを書く方法を学ぶには時間がかかります。
dj18 14年

1
@MichaelDurrantは、6か月前に何をしていたかわからないことを学習でき、今日はそうではないので、それでもある程度です。
-djechlin

94

それは:

  1. あなたがそれを維持できれば維持可能
  2. 他の誰かがあなたに助けを求めずにそれを維持できるなら、簡単に維持可能
  3. 他の誰かがそれを読んで、デザイン、レイアウト、意図を正しく理解している場合に読み取り可能

1.の実際のテストは(パリのアレックスquant_devが言うように)数か月後に何か他のことをして、それを取り戻すことができるということです。

2.と3.のテストは、他の誰かがそれを拾い上げて、設計の粒度に従ってコードを拡張または修正する方法を見つけ出すことです。彼らはデザインを理解することができない場合、それは問題空間にどのように関連するか、またはあなたのコードをする方法を意図し、使用する、彼らは代わりに穀物全体で解決策をハックます。

経験則、原則(つまり、誰かがうまく書き上げて名前を付けた経験則)、および正しい方向に導く、または一般的な落とし穴から離れる可能性のあるあらゆる種類の提案があります。ただし、あなたが求めている品質を保証するものはありません。


2
保守性の要因として、バグの修正または既存の動作の変更に費やす時間を考慮することはどうですか?同じ変更を行うのに必要な時間が短いコードは、保守性が高いはずです。
VCD

1
依存します。修正をうまく行うにはリファクタリングが必要になる場合があります(判読可能なコードがそのように使用することを意図していないためわかりやすいため、必要です)。これは、特殊な場合のハッキングよりも時間がかかります)。
無駄な

30

コードがSOLIDDRYの原則に従っており、その周りに適切な単体テストのセットがある場合は、おそらく保守可能です。

読みやすいですか?それを読んで。メソッド名と変数名には意味がありますか?問題なくプログラムロジックに従うことができますか?答えが「はい」の場合、コードは読み取り可能です。


8
...そしてあなたがそれを読んだ後、それを他の誰かに手渡して読んでもらいましょう。
jcmeloni

19
これは特に良いテストではありません。これらのルールの多くのアプリケーションは主観的であり、ほとんどの場合、作成されたコードをすぐに読むことができます。
DeadMG

1
「答えがイエスであれば、コードが読み取り可能である」...によってあなた。他の人が読めるかどうかを確認するには、他の人が読む必要があります。

2
IMO、SOLIDは過大評価されています。特に「S」それまたは誰もがそれを誤解しています。
エリックReppen

私は数え切れないほどのコードを実行して、DRYでソリッドでありながら恐ろしいコードを実行しました。原則に従うことは、あなたが書いているものがくだらないものではないという誤った印象を与えることがあります。
ヤクブアーノルド

24

保守不可能なコードの書き方を読む-Roedy Green、笑い、学習によって人生の仕事を確保します。

...維持するのが非常に難しいコードをどのように書くか、あなたの後に来る人々が最も簡単な変更をするのに何年もかかるでしょう。さらに、これらのすべてのルールを宗教的に守れば、コードを維持するという希望を誰も持っていないので、あなたは一生の雇用を保証することさえできます...

エッセイは、あなたにたくさんの面白い例を使って、悪いコードを書く方法の多くの例を与えます。グローバルネームをプライベートとして再利用する非常に高く評価されている手法である、クリエイティブミススペル、名前の再利用の利用方法について引き続き説明します。

エッセイは、ユーモラスな方法で、読み取り不能および保守不可能なコードのすべての例を回避する方法を教えます。

実際、誰もがテキストの例と類似したコードを書くとは信じがたいと思いました。それは私が学校から新鮮だったときでした。しかし、数年間働いた後、私は毎日テキストからコードを見る...


また、waterfall2006.com / gorman.htmlを
シェード

22

どう思われますが、かなり客観的な測定方法がいくつかあります。C ++ Coding StandardsRefactoringClean Codeなどの書籍には、意味のある名前、関数サイズ、結合や結合などの原則、オブジェクト設計、単体テスト、連続的な改良などを見て、コードを判断するための長い基準リストがあります。

リストは大きすぎてチェックリストを受け入れられませんが、本を読んで作業するいくつかの重要な項目を選択し、数か月後にもう一度読んでさらに改善します。


4
インクリメンタル学習のための+1はなく、完璧な一夜になることをしよう
dj18

19

証拠はプリンにあります。適格な有能な人に引き渡した後に何が起こるかを見てください。コードの難易度に関して多くの質問をする必要がない場合は、良い仕事をしました。

これは私のキャリアの初期のレッスンでした。メンターは、「すべてを文書化して、後でプログラムをエスケープできるようにします。答えが頭に浮かぶときに質問を予想しない場合は、そうでないときに答えを見つけなければなりません。」


10
人々は彼らの無知を暴露することを恐れて質問をすることを控えるかもしれないことに注意してください。そもそも、人々がそれを暴露することを控える傾向があるため、それらの人々を「合理的に有能な」と認識しているかもしれません。したがって、あなたが両方とも誠実であることを知らない限り、質問の欠如は良いことではないかもしれません。
ヘルマンインジャルドソン

1
@HermannIngjaldsson-結構です。もちろん、彼らが有能でなく、何かが壊れていたら、すぐにそれについて聞くでしょう。"助けて!!!!"
MathAttack

これは単にトップアンサー
-gnat

17

私はすべての答えを読みましたが、コードの複雑さについて誰も言及していませんでした。

コードの複雑さと読みやすさ/保守性の間には密接な相関関係があります。多数のコード複雑度スコアリングアルゴリズムがありますが、McCabe複雑度スコアリングの仕組みについて説明します。

基本的に、McCabeスコアリングはコードを読み取り、そこにある一意の「パス」の数を計算します。McCabeを分子として使用し、コード行を分母として使用すると、「読みやすさ」のかなり良い近似値が得られます。

10行のコードがあり、そのコードを通る300のパスがある場合、それはかなり維持不可能なコード(安全かつ簡単に変更するのが難しい)であり、おそらくあまり読めません。逆に、300行のコードを持っているが、それを通るパスが1つしかない場合(条件はありません)、読み取りやすく、保守が容易です。

ただし、McCabeが倒れるのは後者の例です。条件のない300行のコードがある場合、「コピー/貼り付けの再利用」を行った可能性が非常に高く、明らかにそれも良いことではありません。そのため、McCabeに加えて適用するシステム全体のメトリックがあります-重複またはほぼ重複したコードの検出など。


2
これが答えです。測定します。他の答えは事実よりも意見です、私がそれを理解できれば、それは良いに違いありませんか?などまず複雑分析を用いて測定し、人間のリファクタリングは、重複を探すために、
ジョンRaynor

1
McCabeスコアをLOCで除算した場合の欠点について言及した最後の段落では、アイデア全体が無効になる傾向があります。コードに300個のパスが必要な場合、なぜより多くの行を使用することでコードのメンテナンス性が向上すると思いますか?それは、本が複雑なアイデアを提示する場合、簡潔にコミュニケーションをとるのではなく、本当に大きな本であるべきだと言っているようなものです。-1。
ワイルドカード

8

コードが「モジュール」に組み込まれているかどうか、そしてモジュール内の1つのことを変更して、全体で簡単に機能させることができるということを言うとき、私が共有する1つのポイントです。無関係なものの間の影響を排除します。また:

  • コードは簡単に再利用できます
  • あなたのコードは柔軟です(これはモジュールの組み込みと結びついています)
  • DRY-繰り返してはいけません

The Pragmatic Programmerを読むことを強くお勧めします。


8

いくつかのテスト/インジケータ:

  • IDEをオフにします。あなたはまだあなた自身のコードを読むことができますか?バグがある場合、それを手でトレースし、ブレークポイントが必要なクラスを見つけて問題がどこにあるかを見つけるのはかなり簡単ですか?または、IDEを使用するときに、気にせず、最初からステップスルーするだけですか?

  • デバッグは、1つのバグを修正すると2つ以上のバグが発生するという奇抜なゲームになることがよくあります。

  • トリガープルから実際に発生する有用な何かまで、メソッド呼び出しは何回かかりますか?まったく同じまたはほとんど同じ正確なパラメーターを別のメソッド呼び出しに渡すメソッドの数はいくつですか?

  • 単純な新しいメソッドをクラスに追加するためにいくつのファイルを開く必要がありますか?

  • 採用したパターンと実践を考えてください。彼らが完全に理にかなっているか、誰かが「それを行う唯一の方法だ」とあなたに納得させたので、あなたはそれをしましたか?または履歴書でそれを望んだか、ロックスターの開発者がそう言ったからです。


3
IDEを使用せずにコードを読むことは、特に読みやすさの尺度としては無難に思えます。このタイプのメトリックは、最終的に読みやすさを実際に損なうハンガリー表記法の「ソリューション」をもたらします。
rubenvb

8

彼が作成したコードが簡単に保守可能で読みやすいかどうかを知るにはどうすればいいですか?

次のプロパティを検索することで、メンテナンスが容易で読み取り可能なコードを見つけることができます。

  1. オブジェクト、メソッド、関数は常に1つのことを行います。
  2. メソッドや機能は簡潔です(「簡潔だが包括的な」など)。
  3. オブジェクト、メソッド、および/または関数は、基本的に、名前に基づいて想定される動作を実行します。
  4. 再利用が予定されているコードは、実際には再利用可能です。
  5. 最後に大事なことを言い忘れましたが、コードをすぐに単体テストできるなら、おそらく少なくとも単一の責任を果たすモジュラーコードを書いたことでしょう。

かなり面倒で保守不能なコードを記述した場合、どのようにして知ることができますか?乱雑なソフトウェアを開発したかどうかを知るための構造やガイドラインはありますか?

  1. メソッドを読んでいて、意図が何であるかが明らかでない場合、これはせいぜい洗練されておらず、最悪の場合維持できない可能性があります。
  2. 単純に見えない場合は、おそらく単純ではなく、それは保守不能なコード、または間もなく保守不能になるコードの兆候です。
  3. コードベース全体で対称性(一貫性)が欠如している場合、保守不能なコードを見ている可能性があります。

リファクタリングの例がより明確であることには同意しません。元のコードには作業が必要であることに同意しますが、純粋に明快さとコミュニケーションの意図の観点からは、元のコードの方がはるかに優れていると思います。正規表現を導入する際に明確性が向上すると主張するリファクタリングは非常に疑わしいです。
ロイ14年

1
@ロイ、はい、十分に公平です。おそらく、このコードサンプルを追加するべきではなかったでしょう。確かに、それはほぼ3年前でしたが、それでも、おそらくPHPを使用するべきではありませんでした(今は見ているだけです)。それを見てすぐに取得できますが、他の人にとっては、どんなに簡潔であっても、正規表現はすぐにオフになります。回答を編集して、コードサンプルをドロップします。コメントありがとうございます。
ウィルムーアIII 14年

オブジェクトはどうすれば1つのことができますか?
コライトゥゲイ

@KorayTugayこのように考えてください。オブジェクトが単一のまとまりのある概念以上のものを記述している場合、匂いがします。
ウィルムーアIII

6

一言で言えば、経験

始めるには、地上の作業に入れている必要があるので、私はプログラマのような本読むのに時間がかかる必要があることをより高度にお勧めすることはできませんリファクタリング改善されますプログラマの武器庫で、より基本的なツールのいくつかを提供します、あなたのコードを維持する能力、およびクリーンコード当社の分野で最も高度に認識才能のいくつかによって書かれたものであり、あなたのコードがきれいで読みやすいです確実にするために理解する必要がほとんどすべてを説明しています。

ただし、苦労して得た経験に代わるものはありません。コード品質への注意がもたらす違いを十分に理解するためには、しばらくの間コードを操作する必要があります。クリーンで適切にファクタリングされたコードで作業することの喜びと、コードスパゲッティで作業することの苦痛を経験することで、これらの本の著者が実際に教えようとしていたことをよりよく理解することを学びますが、より広いコンテキストでそうします実際の本番稼働コードでは、実際に行うことの品質が重要であり、毎日コードを簡単に操作する能力に影響を与えます。

また、優れたメンター、または経験を積んだピアのいずれかが、高水準のコードを書く努力をしていることを確認するのに役立ちます。これは、コードレビューが非常に役立つ理由の1つにすぎません。コードチェックと書式設定ツールを使用することは、物事をきれいに保つために非常に役立つこともあります。ただし、長年にわたるソフトウェアの作成で得た経験と比較できるものはありません。そのため、クリーンで読みやすく、簡単にメンテナンスできるように構造化されたコードを自動的に作成できます。長いです。


3

純粋主義ではなく、機能的なスタイルを好む。最近のほとんどの言語(.NET、Ruby、Python、Javascriptなど)は、それをサポートおよび宣伝しています(たとえば、LINQ、underscorejs)。

それは非常に読みやすいです。

var recentTopCustomers = OrderList
    .Where(o => o.Date >= DateTime.Now.AddDays(-5))
    .Where(o => o.Amount > 1000)
    .OrderBy(o => -o.Amount)
    .Take(10)
    .Select(o => o.Customer);

これにより、各ノードは、目的を明確にするために、単一の集中的な意図の貸し出しを強制されます。また、個々のタスクは分離されているため、ポップアウト、プラグイン、ノード(操作)の異なる端への再配置は簡単です。これにより、メンテナンスが容易になります。


2

読みやすく保守可能なコード:プログラマーは、一見すると、次のことを簡単に理解できるほど十分に理解できるコード:

  • インターフェイスを介して再利用する、または
  • デバッグする、または
  • その動作を変更します。(機能の追加/削除)、または
  • 最適化する
  • 試して

これは「明確さ」に要約されます。すなわち、プログラマーは、予期しない副作用を引き起こさずに現在のタスクを達成するために「十分に機能することを理解する」ことを確認する前に、特定のコードセグメントについていくつ質問する必要があります。

「コード完了、スティーブマッコネル著」という本は、これについて非常に詳細に説明しています。

彼は、コードの品質が良いかどうかを判断するために使用できるさまざまなメトリックを調べます。

こちらの例をご覧ください:http : //books.google.co.uk/books?id=3JfE7TGUwvgC&lpg=PT376&pg=PT389#v=onepage&q&f=false


これは、以前の回答で作成され説明されたポイントに実質的なものを追加しないようです
-gnat

追加する最も重要なものの1つは、以前の回答では言及していないCode Completeへの参照だと思います。その本は、読み取り可能で保守可能なコードを書くことに焦点を当てた最も重要で影響力のある本の1つです。その本を読んだ人はだれでも、「読みやすく保守しやすいコードを書いたなら、どのように知っているでしょうか?」と尋ねる必要はありません。
JW01

...したがって、私の意見では保守可能なコードを書くことに本当に興味があるなら、誰でも得ることができる最高のものはその本を読むことだと思います。したがって、何分も慎重に考えて(SOのモデレーターよりも多くの分多く考えられる)、これはOPの質問に対する適切な答えであるだけでなく、最高のものだと思います。
JW01

2

副作用を最小限に抑える(理想的にはありません)

独自のスコープ外の状態に3つの変更を引き起こす関数は、単に何かを入力し、他の何かを出力する関数よりも推論および保守がはるかに困難です。関数が何をするのかを単に知ることはできません。それが何をしたのか、それが他のすべての関連関数にどのように影響するのかを覚えておく必要があります。

OOPの場合、副作用を最小限に抑えるということは、メンバーが少ないクラス、特にクラスの状態を変更できるメンバーが少ないことを意味します。メンバー関数は、自身の状態を超えて状態を変更でき、副作用があるからです(クラスの内部を操作できるなど)。また、独自のデータメンバが少ないクラスを意味するため、これらのメソッドが改ざんされる状態が少なくなり、副作用が発生しにくくなります。

簡単な例として、sortedバイナリ検索とリニア検索のどちらを実行するかを決定するために使用する状態を維持できる、ファンシーなデータ構造を設計しようとすることを想像してください。このような場合、デザインを2つのクラスに分けると便利です。sortedソートされていないクラスを呼び出すと、そのコンテンツを常にソートしたままにする別のクラスのデータ構造が返される場合があります。これで、副作用が少なくなり(したがって、エラーが発生しにくくなり、コードを理解しやすくなります)、より広く適用できるコードになります(前の設計は、ソートする必要のない小さな配列の処理と人間の知的効率の両方で無駄になります)。

余分な外部依存関係を回避する

13の異なるライブラリを使用して比較的単純なタスクを達成することにより、最大限のコード再利用で想像可能な最も簡潔なコードを実装できる場合があります。ただし、13の異なるライブラリの少なくとも一部を理解させる必要があるため、読者に知的オーバーヘッドが移ります。この固有の複雑さは、機能するために他の多くのライブラリを引き込んで構築する必要があるサードパーティのライブラリを構築および理解しようとした人なら誰でもすぐに認識されるはずです。

これはおそらく非常に物議を醸す見解ですが、最終結果が十分にテストされている場合は、控えめなコードの複製を反対の極端に好むでしょう(テストされていない欠陥のあるコードが何度も複製されるより悪いことはありません)。ベクトル外積を計算するための3行の複製コードと、3行のコードを削るだけの壮大な数学ライブラリを選択する場合は、チーム全体がこの数学ライブラリを使用していない限り、前者をお勧めします、その時点で、デカップリングの利点と引き換えに十分に簡単な場合、1行ではなく3行のコードを記述することを検討することもできます。

コードの再利用はバランスのとれた行為です。再利用しすぎると、上記で保存した3行の単純なコードのように、読者とメンテナーが3行のコードよりもはるかに多くの情報を理解する必要があるため、知的複雑さを1対多の方法で転送します。また、数学ライブラリが変更されるとコードも不安定になるため、コードの安定性が低下します。再利用が少なすぎると、知的オーバーヘッドも増加し、コードは中央の改善の恩恵を受けなくなりますので、バランスをとる行為ですが、バランスのとれた行為であるという考えは、あらゆる小さな形式の控えめな複製を排除しようとする可能性があるため、言及する価値があります反対の極端よりも、維持するのが難しいとしても、それ以上ではありません。

廃品をテストする

これは当たり前のことですが、コードがすべての入力ケースを処理せず、一部のエッジケースを逃した場合、目や手に転送される直前に取得できなかったコードを他の人が維持することを期待できますか?そもそも完全に正しくなかったコードはもちろんのこと、完全に機能するコードに変更を加えることは十分に困難です。

それに加えて、徹底的なテストに合格したコードは、一般的に変更する理由が少なくなります。これは、変更する必要のない安定したコードにはメンテナンスコストがかからないため、保守性よりも達成すべき聖杯である安定性に関連しています。

インターフェースドキュメント

両方を文書化するために同じ時間を割くことができない場合は、「物事がそれを行う方法」よりも「物事が行うこと」を優先します。すべての可能な入力ケースで何をするか(または少なくとも、何を行うべきか)についての意図が明白な明確なインターフェースは、どのようにコードを使用するだけでなく、それがどのように機能するか。

一方、人々がそれが何をすべきかさえ知らないこれらの品質を欠くコードは、その実装の詳細がどれだけよく文書化されていてもSOLです。ソースコードの実装方法に関する20ページのマニュアルは、そもそもどのように使用されるべきか、あらゆるシナリオで何を行うべきかを正確に把握することさえできない人々にとっては価値がありません。

実装面では、他のユーザーとは異なる方法でドキュメント化することを優先してください。例として、Intelにはレイトレーシングカーネル用の境界ボリューム階層があります。私はこの分野で働いているので、ドキュメントを調べなくても、彼らのコードが実行していることの大部分を一目で理解できます。ただし、BVHを横断し、光線パケットを使用して交差点を並行して実行するというアイデアである、独自の何かを実行します。コードのこれらの部分は、ほとんどの歴史的なBVH実装からエキゾチックで珍しいので、私は彼らにドキュメントの優先順位をつけて欲しいのです。

読みやすさ

この部分は非常に主観的です。人間の思考プロセスに近い種類の読みやすさについてはあまり気にしません。著者が問題を解決するために奇妙で複雑な思考プロセスを使用している場合、最高レベルで物事を説明する最もよく文書化されたコードをフォローするのは依然として困難です。一方、ロジックが非常に単純であれば、2文字または3文字の名前を使用した簡潔なコードの方が理解しやすいことがよくあります。査読をして、他の人が何を好むかを見ることができると思います。

私は主に保守性と、さらに重要なことには安定性に興味があります。変更する理由が見つからないコードは、メンテナンスコストがゼロです。


1

新しいチームメンバーがコードを選択して理解し、修正して欠陥を修正したり、新しい要件を比較的簡単に満たすことができるかどうかを知る1つの方法だと思います。


1

私が使用したいテクニックは次のとおりです。

同僚のプログラマーにコードを見せ、それが何をするのか説明してもらう。これらに注意してください。

1)コードのブロックの目的を簡単に説明できない場合は、それをリファクタリングします。
2)現在のセクションを理解するためにコードの別のセクションにジャンプする必要がある場合は、リファクタリングします。
4)プロセス中に発言する衝動を感じるときはいつでも、コードのそのセクションはリファクタリングが必要です。(コードはそれ自体を語っていません)。


ピアプログラマが少なくとも同等の経験があり、プログラミング言語とそのイディオムを読んでいると仮定します。これらの技術は、多くの場合、最も若いチームメンバーでもintを理解できるようにするという誤った試みで、言語の表現力のサブセットでコードを記述する人々につながります。その結果、言語の馬鹿げたサブセットのコード本体が大きくなりました。また、言語サブセットをいくら下げても、500KLOCの小さな言語サブセットコードは、より表現力豊かなサブセットを使用する200KLOCコードよりも常に保守作業が多くなります。
user1703394

これは単にトップアンサー
-gnat

-1

最も保守可能なコードは、そこにないコードです。そのため、LOCカウントに追加する代わりに、LOCカウントを「削減」する新しいコード(単独で表示した場合の保守性がわずかに低くても)は、サイズを縮小するだけでコードベース全体の保守性を高めることができます。したがって、保守可能なコードの主なルール:

  • DRYを最大化します。

第二に、保守性に隠された依存関係ほど悪いものはありません。ルール番号2の場合:

  • すべての依存関係を明示的にします。

第三に、すべてのプログラマーが特定のより高度な技術の言語機能またはイディオムを使用して保守または作成するのに同等に熟練しているわけではありません。コードベース全体を掘り下げると、サイズが維持するのが難しい大きなコードベースが得られます。コード全体で高度なテクニックの機能とイディオムを許可すると、上級の開発者のみがすべてのコードを保守できるようになります。保守性の鍵は、スキルレベルに基づいた階層化です。次に例を示します。

クロスプロジェクトライブラリ:上級開発者、トリックの完全なコード/イディオム/テクニックプロジェクト固有のライブラリとシステムバックエンド:中間開発者、最も高度で説明が難しいものを避けます。高齢者はDRY改善の機会を探してこのコードをたどります。

フロントエンド:ジュニア開発者、厳格なスタイルガイドと一連のテクニックを使用して、言語の構成要素とイディオムを回避します。Medior開発者は、DRYの機会と隠されたビジネスロジックを探してこのコードをたどります。

ルール3の場合:

  • 開発者のスキルレベルごとにコードを階層化し、それに応じて保守可能なコードを記述します。


1
これは、以前の25の回答で作成され説明されたポイントに対して実質的な何かを提供していないようです
-gnat

@gnat、私は他の答えの多くの(潜在的に有害な)単純化に「ニュアンス」を追加したいと思っていました。特にポイント3で
。– user1703394

1
@ user1703394この質問とその回答はコミュニティwikiです。既存の回答を改善できると思う場合は、「他のユーザーの投稿を編集する」権限がなくても編集できます。

-2

読みやすく保守が容易なコードを書くことは決して簡単ではありませんが、簡単で保守可能なコードを書くのは難しくありません。

OOADは4文字の単語ですが、一度に理解するのは難しいです-オブジェクト指向の分析と設計に従ってください

  1. 常に適切な要件の収集と正確な問題の記述から始めます

    • いくつかのユースケースから始めます。システムとユーザーの対話
  2. オブジェクトを疎結合に保ち、コードが繰り返されないようにする必要があります-DRYに従ってください[繰り返さないでください]

    • 重複する場合は、カプセル化する場所を探してください
  3. あなたのコードは拡張のために開かれており、修正のために閉じられています-OCP [Open-Closed Principle]
  4. コードを変更するときは常に覚えておいてください-問題を解決するために問題を作成しないでください、ITは単に既存の機能を変更しないと述べています
  5. コードの単体テスト
    • 物事がうまくいかないときは常にコードをテストする
  6. 機能に取り組んでいる間、アプリケーションが最初から適切に設計されていることを確認するために、基本的なOOP(オブジェクト指向の原則)とテクニックに従うことを常に忘れないでください。
    • オブジェクトは、その名前が示すとおりにする必要があります
    • 各オブジェクトは単一の概念を表す必要があります
  7. システムの問題ステートメント、およびどのコンテキスト/ドメインソフトウェアが機能するかを常に覚えておいてください
  8. 紙の仕事もします。そうです
    • UI関連のものとUML図のプリントアウトが常に機能する
    • ホワイトボードからブレーンストーミングセッションのスクリーンショットを撮ることもできます。
  9. アーキテクチャのレイアウト
  10. 可能であれば設計原則を適用する
  11. ドキュメンテーション
    • 常にコードを文書化する
    • IDEでインデントを設定し、それも文書化する

1
これは、コード品質をどのように定量化または測定して、読み取り、理解、および保守可能かを判断する方法に答えない理論です。質問
Jan Doggen

同意した!! しかし、上記の原則に従うと、コードの品質を測定しやすく、読みやすく、理解しやすく、明らかに保守可能です。間違っている場合は修正してください。
ナレンダーパーマー

私の答えがなぜ投票されたのかはわかりませんが、すでに主要なポイントをカバーしています
ナレンダーパーマー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.