Table of Contents
エンジニアリングシステムを維持し、改善するとき、組織はしばしば重要な決定に直面しています。既存のコンポーネントを再ファクタリングするか、完全に書き換えるべきですか?各アプローチの違い、利点、欠点を理解することは、プロジェクト目標とリソース制約と整列する情報に基づいた選択肢を作るために不可欠です。この記事では、実際の例とあなたの決定を導くための専門家の洞察を使用して、トレードオフを評価するための包括的なフレームワークを提供します。
製造の理解
再ファクター化は、コア機能を変更することなく、既存のシステムに改善を増大させることを含みます。それは、システムの動作を維持しながら、コードの品質、読みや保守性を高めることを目指しています。このアプローチは、多くの場合、技術的な債務を減らし、将来の開発のためのシステムの準備に使用されます。リファクタリングは機能を追加するものではありません。将来の変更がより容易になり、より速くなるように、コードの内部構造を改善することについてです。
改善とコード臭いの改良
一般的に「コード匂い」をリファクタリングする - 通常、システム内のより深い問題に対応する表面インジケーター。例には、重複したコード、長い方法、大規模なクラス、および過度のカップリングが含まれます。これらの匂いを系統的に排除することにより、チームはコードベースをよりモジュラーおよびテスト可能にすることができます。静的なアナライザやIDEのリファクタリング機能などのツール(例えば、名前、抽出方法、プルアップ)は、これらの変換の多くを自動化するのに役立ちます。
再ファクターのとき
既存のシステムが構造的に音がまだあるが、適度な技術的な債務を蓄積したとき、Refactoringは最も有効です。ビジネスロジックが複雑でよく根差されるとき、それはまた適切です。そして、ハードウォンドメインの知識を失うリスクを書き換えます。開発サイクルの一部として連続的に再ファクタリングを練習するチームは(例えば、「ボーイ スクアウト規則」)、コードベースが健康状態にあり、大きな書き換えの必要性が低下する可能性があることを確認します。リファクタリングは、リスクが少なくなり、リスクが低いと判断します。
書き換えの理解
一方、書き換えには、既存のシステムが一目瞭然に過酷に増大する、新しいシステムを開発することを含みます。この方法は、現在のシステムが古い場合、複雑すぎる、またはビジネスニーズを満たしていない場合に通常選択されます。書き換えは、新しいスタートを提供でき、近代的なアーキテクチャと技術が実装されることを可能にします。しかし、それはまた、古いコードに埋め込まれたバグ修正、最適化、および機関的な知識の年を捨てることを意味します。
グリーンフィールド対ブラウンフィールドリライト
グリーンフィールドは、まったく新しい環境でシステムを構築し、空白のスレートから始まります。 これは、元のプラットフォームが廃止される(例えば、CobolからJavaに移行)、またはシステムが完全にスケーラビリティのために設計されている必要があるときに起こります。 ブラウンフィールドは、既存のシステムの一部を増加的に変更し、他の実行を維持しながら、他の実行中の部分を「ストレンジャーのフィグパターン」と呼ぶ。 このハイブリッドアプローチは、フェーズの移行を可能にすることによってリスクを低減します。
書き換えるとき
現在のシステムが再構築するポイントに達したとき、書き換えは正当化されます。インジケーターには、コードベースが非テスト可能で、アーキテクチャは必要な変更(例えば、水平にスケールされることができません)、または技術スタックがサポートされていない場合にのみ保護されます。別のシナリオは、ビジネスモデルが完全に再構築せずに適応できないほど劇的にシフトしたときです。書き換えは、新しいパラサービスやマイクロサーバーのような新しいサービスを導入することにより、競争上の優位性を得るための戦略的な動きになることもできます。
リスクとコストの比較
どちらのアプローチも、異なるリスクプロファイルとコスト構造を運ぶ. これらの理解は、組織のリスク許容と予算サイクルで自分の選択を揃えるのに役立ちます.
リスク要因
] リスクを予測:] 最大のリスクは、システムが根ざした問題が持続する間、それは小さな改善の無限のサイクルになるということです。 進行が遅く、ステークホルダーに見えないため、チームがモチベーションを失っている別のリスクは「疲労を予測」です。 しかし、各変更が小さくて可逆にされるため、通常、再構築は、通常、リスクが低いです。
[] リスクを回復:] 最も有名な警告は、ホエル・スポルスキーの記事]から来ています。 「あなたがすべきこと、パートI」[]]、彼は書き換えると主張し、バグ、機能貧しい交換年を遅く出荷する。 書き換えは、スケジュールリスク(新しいシステムは、期待よりも時間がかかることがあります)、リスク(ビジネスルール(損失)、および相互のリスク)、および相互の統合システムを導入する。
コスト分析
再ファクタリングは、時間とともにコストを削減します。ソフトウェアエンジニアリング研究所の調査では、リリース後の欠陥を修正することを発見しました。10~100倍以上の欠陥が設計中に修正されるのは、コードの明確性を改善することによって、早期に多くの欠陥を捕捉する。リライティングには、大きな先行投資が必要です。リファクタリングには、再分析、再設計、再コード、再テストが必要です。リライトの総コストは、多くの場合、再ファクタリングコストが3年以上にわたって再ファクターコストを上回る必要があります。しかし、システムは、クラウドファンディングが1回だけに減少します。
エンジニアリング・リーダーの決定フレームワーク
再ファクターとリライティングのどちらを選ぶかは、システム複雑性、ビジネス優先順位、利用可能なリソース、および長期目標などのさまざまな要因によって異なります。 次の決定フレームワークは、特定の状況を評価することができます。
システム健康評価
回路図の複雑性、コードカバレッジ、カップリング、欠陥密度などのメトリックを使用して、コードベースの系統的解析を実行します。 SonarQubeやCodeClimateなどのツールは、客観的なデータを提供できます。 システムが保守性に悪影響を及ぼすが、ビジネスロジックは安定している場合は、再ファクタリングは十分かもしれません。 アーキテクチャが根本的に欠陥(例、モジュール化できないモノリシックスパゲッティ)の場合、リライトが必要な場合があります。
業務目標のアライメント
技術的な決定をビジネス成果にマップします。 目標が次の四半期内の機能配信を加速する場合、再ファクタリングは通常安全です。 目標が、根本的に異なるパフォーマンスやスケーリング特性を必要とする新しい市場を入力する必要がある場合は、リライトは正当化できます。 製品の所有者と利害関係者を「なぜか」を明確にするために囲む。 例えば、スタートアップは、重要なレガシーシステムを持つ企業は、下回る時間を回避するために増大的なリファクタリングを好むかもしれません。
チーム能力と機関の知識
既存のシステムを理解する上で、リファクタリングは大きく依存しています。元の作者はチームにまだある場合、リファクタリングはより効率的です。コードベースが少しのドキュメントを持つ黒い箱であれば、リライトはテンプリングされるかもしれませんが、過去の間違いを繰り返す危険性があります。その場合、「保存で書き直すこと」を検討してください。並行して新しいシステムを構築しますが、古いコードからビジネスルールを抽出し、古いシステムを破棄する前に、注意して自動化されたテストを行わなければなりません。
実世界事例
他社がこの選択肢をナビゲートした際の理解は、実用的な洞察を提供できる。
例:ベースキャンプのHEYのリファクタリング
電子メールサービスHEYを開発する際には、Basecampのチームは、既存のRailsのコードベースをゼロから書き換えるのではなく、再ファクタリングすることを選択した。 それらは、サービスオブジェクトにドメインロジックを体系的に抽出し、テストカバレッジを改善し、デッドコードを排除しました。 これは、コードベースを維持できる間、スケジュール上の製品を出荷することを許可しました。 ]チームは、そのアプローチを文書化しました]]、増分の改善は、その改善が、コードベースの処理の深い電子メールの理解を維持する鍵でした。
例: FreshBooks' 書き換え
有名なのは、会計ソフトウェア会社である FreshBooks は、モノリシックな PHP アプリケーションから、近代的な拡張可能なシステムまでプラットフォーム全体を巻き上げました。この決定は、パフォーマンスとアーキテクチャの制約を打ち立て、再ファクタリングが修正できなかったことでした。リライトは、2年以上かかり、何百万ドルのコストがかかっていたが、より大きな顧客を売り上げ、サポートコストを削減しました。CEOは、リライトが「最も困難なもの」だったことを指摘しました。これは、ビジネスの観点から、必要なアーキテクチャを生き延ばすために、必要なことです。[Fmort]
例:マーティン・フローラーのリファクタリングコミュニティ
マーティン・フローラー(Matson Fowler)は、セミナブック]の著者である。 再作成のリファクタリングのために、既存のコードのデザインを改善しました。 チームは自動化されたテストと継続的な統合に投資した場合、ほとんどのシステムが増大できると主張しています。 彼のリファクタリングカタログは、任意のチームが、Fatlerを最後に適用できる実証済みのパターンを提供します。 は、Fatlerは、Fatlersの最初の視点で、Fatlerを適用するべきではありません。
結論:正しい選択を作る
再構築と再作成の両方がエンジニアリングシステム管理の場を持っています。特定の状況の慎重な評価は、組織を最も効果的な戦略、バランスのとれたリスク、コスト、および将来の信頼性に導くでしょう。正しいパスは、多くの場合、組み合わせを含みます。 信頼できる部品を再ファクターし、修理を超えたコンポーネントだけを再書き込みします。 フレームワークを使用して、コードの効率的な健康を評価し、ビジネス目標と一致する、チームの知識を活用します。 通知された選択を行うことで、あなたは、あなたの成長システムに立ち向かうことなく、より強力な組織をアップグレードしたり、より適切な組織をアップグレードしたりすることができます。