コードの再利用を最大化するためにどのような手法を使用していますか?

StackOverflow https://stackoverflow.com/questions/145720

  •  02-07-2019
  •  | 
  •  

質問

数年前、私はコードの再利用に関する研究について知らされました。どうやら、再利用するコードを検索するとき、プログラマーは平均して7分間の時間があることがわかったようです。そのウィンドウ内でニーズに合ったコードが見つからない場合は、独自のコードを作成します。

これは、ウィンドウ内で必要なものを見つけることができるように、再利用のためにコードを慎重に管理する必要があるというコンテキストで提示されました。

再利用しやすくするために、ソース(個人および組織)はどのように管理しますか? 再利用ライブラリを具体的に管理していますか?もしそうなら、ヒット率を最大化するためにどのようにインデックスを付けますか?

役に立ちましたか?

解決

複雑な質問:

  • コードの一部は、ライブラリまたはAPIとして一般化できます。一般的な問題の解決策を最新の状態に保つ共通ライブラリがあります。通常:検証、キャッシュ、データアクセスクラス、ロギングなど...

  • 一部のアプリケーションはアプリケーション固有です。それらを簡単に一般化することはできません。 HowTosで変換し、内部プレゼンテーションを行います。コードは、簡単に参照可能なSCM(この場合はSVN)を使用してリサイクルされます。

  • また、一方ではリサイクルできないコードを生成するツールもあり、もう一方では常に類似しています(ストアドプロシージャの呼び出しを考えてみてください)。

  • ペアプログラミングは、既存のソリューションの知識を広めるための便利な方法でもあります。可能な場合または適切な場合に使用します。

  • 最後のテクニックは授業料です。各コーダーには、参照するチューターがあります。チューターが少ないため、チューター間で多くの共有が行われ、この知識はトップダウン方式で広めることができます。

他のヒント

容赦なくリファクタリングし、最善を期待します。

更新(4年後、うまくいけば)

  • S.Lottのコメントのように:命名に注意してください。チーム内のすべての「コミッター」にその言葉を広めます。良い名前は物を検索可能にし、それによって重複を減らします。
  • 何かをするための方法を1つ用意し、アクセスしやすく、検索可能な状態に保ちます。
  • 平均的な(L.C.D.)プログラマー向けのコードを記述します。単純なもので十分な場合は賢くしないでください。 (これには、デザインパターンの靴べらの強迫および関連する障害が含まれます)
  • 慣習、スタイル、ガイドライン、標準などの共通セットを早期に採用します。賛同を得て、チーム内のコンプライアンスを確保します。 (つまり、誰もがタブ(またはスペース)を使用します!)。何を選択しても構いません-目標はコードの一貫性を保つことです
  • ゲートキーパー(チームから尊敬されている)を持ち、レッドフラッグのすべてのチェックインを目で確認します。
  • コードをテストファースト/アウトサイドインで記述します。これにより、通常、コードが複数のクライアントで使用可能になります。 (コンテキスト非依存性に関するGOOSの箇条書きを参照)
  • 積極的にサポートされているフレームワークがあります。

  • 既存のコードベースを理解し、他の開発者にコードベースを知らせます。グループ/会社が十分に大きい場合は、コードベースを知っていて、ガイダンスを求められる人を用意してください。

  • ドキュメント、ドキュメント、ドキュメント。文書化されていないコードは、内部の仕組みを理解するには時間がかかりすぎるため、再利用には役に立たない。

  • 良いインターフェースを持っています。簡単な型、簡単な構造またはクラス。複雑なものほど、別のプロジェクトで使用されることは少なくなります。

  • 再利用可能なコードを最適化およびデバッグします。他の人のコードにn回目のバグを経験する開発者は、既存のコードを新たにコーディングし始めます。

まだ最初の回答者でない場合は、 TDD を使用してみてください。

TDDの使用は、他の利点の中でも特に、コードカップリングを低く保つための優れた方法だと思います。本質的に同じ動作が2回実装されるのを防ぐことはできませんが、重複を削除できる領域を特定すれば、非常に簡単になります。

別の利点として、TDDには、サイクルの一部として、二重化(リファクタリング)を削除するステップがあります。

また、テストはコードドキュメントの一部を形成するため、重複した動作を簡単に識別できます。

組織が重要です。名前空間とインテリセンスが利用可能な場合、適切な機能を絞り込み、最終的に見つけることができます。彼らが望んでいるものを正確に見つけられない場合、彼らは何か近いものや関連するものを見つけるかもしれません。 1つの巨大なグループにまとめられたコードは簡単に見つけることができますが、人々は必要な方法を十分に速く見つけることはできません。

名前と場所の両方の一貫性も重要です。プロジェクトの途中でスタイルを変更する場合は、戻ってそのスタイルに合うようにすべてを変更します。非常に長く退屈なプロセスになる可能性がありますが、一貫性のないライブラリを使用するよりも優れています。

アプリケーション全体のプロファイルを作成し、コードの重いセクションからリファクタリングを開始します。 (時間の80%が最も使用されるコードの20%に費やされています)

メモリリーク、繰り返しの呼び出しを特定する機能を備えたプロファイリングツールを使用し、 長時間の呼び出し、解放されていないメモリ、破棄されていないリソースなど。

規則により、新しいコードは常にベストプラクティスを使用します。

  

どのようにして(個人や組織)あなたのソースを管理し、   再利用しやすい?再利用ライブラリを具体的に管理していますか?そして   もしそうなら、ヒット率を最大化するためにどのようにインデックスを付けますか?

私はここでは賛否両論ありませんが、コードの再利用を最大化するという考えは逆効果です(「最大化」を他のすべてのことよりも優先させると解釈しています)長所と短所を考慮してバランスをとる)。私は代わりに、各開発者のモジュールをより適切に分離して分離するために、スライドするためのチームでの健全な量の冗長な努力を許可することを好みます。最初に、誰もが私に左右に反対するようになる前に、いくつかのことに同意できると思います:

  1. 他の人のコードのデバッグに何時間も費やすことになるバグのあるコードを再利用することは望ましくありません。
  2. 非常に広範囲の異なるニーズのバランスをとるコードを再利用することで、自分のニーズをほとんど満たすことができず、最終的に厄介で非効率的なソリューションを得るために多くのフープをジャンプする必要があります。
  3. 絶えず設計変更を必要とするコードを再利用し、6か月ごとにそれを使用してコードを書き換える必要がある種類の非推奨を通過する場合、30分以内に自分でソリューションを実装できた場合は望ましくありません」あなたの正確なニーズに応えているだけなので、将来的にデザインを変更する必要はありません。
  4. 異質なコードで満たされたコードベースは、少し多くのコードが必要な場合でも、より多くの言語と標準ライブラリを慣用的で使い慣れた方法で使用するものよりも望ましくありません。
  5. 開発者は、お互いの実装にバグを引き起こすような戦いや議論、変更を行う一方で、同じデザインに互換性のない変更を加えることを望んでいるため、互いの足指を踏みつけます。
  6. 依存関係のボートロードを、それ自体が証明されていない未熟な設計に投げかけます(徹底的なテストカバレッジがなく、設計を実際に防音し、さらなる設計変更を必要とせずにユーザーエンドのニーズを効果的に満たす時間がありません) 。
  7. 簡単なものを書くために最も複雑なビルドスクリプトを使用して、ライブラリとクラス/関数のボートロードを含める/インポート/リンクするのは望ましくありません。
  8. 何よりも、再利用しないよりも短期および長期の両方ではるかに多くの時間を要する方法でコードを再利用することは望ましくありません。

うまくいけば、少なくともこれらの点に同意できるでしょう。熱心な同僚からのコードの再利用を最大化することで私が発見した問題は、多くの場合、上記の1つ以上の問題につながることでした。基本的な問題であったのは、コードの再利用への熱意ではなかったが、テストカバレッジ、防音設計、クレイジーのように再利用する前に物事が十分に成熟していることなどではなく、コードの再利用に優先順位が偏っていた。

当然、再利用したすべてのコードが美しく機能し、徹底的なテストカバレッジがあり、再利用しないよりもはるかに生産的な方法でそれを使用するすべてのニーズを満たすことが証明され、設計を行う必要がない場合何年にもわたって変化し、私はコードの再利用に夢中になります。しかし、私の経験では、コードの再利用がソリューションではなくメンテナンスの問題になりつつあるという点で、この理想からはほど遠いものが見つかることがよくありました。

  

どのようにして(個人や組織)あなたのソースを管理し、   再利用しやすい?再利用ライブラリを具体的に管理していますか?そして   もしそうなら、ヒット率を最大化するためにどのようにインデックスを付けますか?

したがって、ここでも「最大化」を求めません。チーム内で内部的に記述された独自コード間のコードの再利用。私はチームが莫大な量を費やさないように努めています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top