2009-11-13 11 views

答えて

12

Refactoringコードは、コードをクリーンアップし、混乱を軽減し、副作用や機能の変更を引き起こすことなく可読性を向上させるプロセスです。

基本的に、ロジックに影響を与えることなく、コードの可読性と再利便性を向上させる一連のコード変更ルールを適用してリファクタリングします。

ロジックが影響を受けないように、リファクタリング前後の常にユニットテストを行います。

11

このWikipedia articleは、リファクタリングの一般的な概念に含まれるものの種類のアイデアを提供します。

アイデアは、あなたが行くようにあなたのコードを適応させ、進化させます。単純なことは、変数やメソッドのパラメータの名前を変更することですが、別のパラメータを渡すか、パラメータを削除したり、型を変更したりすることがあります。データモデルも同様に進化するかもしれない。

多くの場合、リファクタリングは、ユニットテストと連携して動作します。これにより、「何かを壊す」というリスクは、自動テストで検出される可能性があるという点で相殺されます。良いカバレッジと関連するテストケース...)。

簡単に言えば、リファクタリング(およびほとんどのIDEまたはアドオンをIDEにバインドし、リファクタリングを容易にし、エラーを起こしにくいさまざまなツールを提供する機能)により、いくつかの決定を強調することなく、このオブジェクトには配列やリストなどが含まれていなければなりません)プログラマが時間の経過とともにこれらの決定の一部を変更し、完璧ではないにしても実行可能であるという追加の洞察が得られます(agile development参照)。

などのAPI、リファクタリングを使用すると、オブジェクトモデルで、デザイン内の任意の考えを入れずにコーディングを開始するためにライセンス供与与えるものではありません、を用心が、しかし、それは、これらの決定の一部の剛性を軽減します。

-1

リファクタリングコードとは、一般に、複数回パッチが適用されたコードを取得し、それ以降のパッチのニーズを考慮して書き直すことを意味します。

+0

@staticsan:-1これはあなたが働いているところで起こっていることかもしれませんが、それはベストプラクティスから遠く、定義からは遠いです。 – quamrana

+0

「Refactoring bugs and bugs」は、どちらのアクティビティの前にもかかわらず、バグの修正も新機能も追加するのではなく、コードの理解容易性を改善し、内部構造とデザインを変更し、デッドコードを削除します。 (ウィキペディアの定義から)。 – staticsan

+0

ユースケースの1つ。最初に、コードが書き直されなければならないことがあります。なぜなら、デザインにはちょうど入った新しい要件を考慮に入れないからです。 – tgkprog

8

Martin Fowlerがおそらくリファクタリングの普及に最も力を入れていますが、良い開発者はいつもこのようなリストラを行っていると思います。 Fowlerのrefactoring web siteと彼の1999年Refactoringを調べてください。これは、Javaを使った特定のリファクタリングの優れた紹介とカタログです。

そして、私は彼が新しいRefactoring, Ruby Editionの共著者であることを知っています。これはすばらしいリソースです。

このように定期的にコードを整理すると、より明確で保守性が向上します。

一例を挙げると、(RESTアーキテクチャスタイルを使用して)リモートWebサービスにアクセスするための小さな(Java 1.6)クライアントライブラリを作成しました。このライブラリの大部分は1つのソースファイルにあり、その半分はWebサービスを扱い、残りの半分は応答の簡単なインメモリキャッシュ(パフォーマンス用)です。時間の経過とともに、両方の半分が、ソースファイルが複雑すぎていたところまで、機能性が増しました。だから私はFowlerの "Extract Class"リファクタリングを使ってキャッシュロジックを新しいクラスに移しました。その前に、キャッシュロジックを分離するためにいくつかの「抽出メソッド」を実行しなければなりませんでした。途中で私はいくつかの "メソッド名の変更"と "変数の導入の紹介"を行いました。

他の方々にお伝えしましたように、各変更を行った後に適用する単体テストのセットは非常に重要です。それらは、あなたが他の良いものの中に新しいバグを導入していないことを保証するのに役立ちます。

6

リファクタリングとは、通常、その動作を変更することなく、ソフトウェアの設計や実装を改善することを意味します。これは通常、コードを理解しやすくし、今後の開発を迅速化し、バグを起こしにくくするために行われます。

リファクタリングは、ソフトウェアの外見には影響しないため、コードに長期的な投資をしています。管理(管理)などからの圧力が非常によくあります。次のことに。 "これは時には正しい決定であるかもしれませんが、ビジネスの原動力に応じて、変更を受けても決してリファクタリングされないコードベースは、難しいバグの混乱に陥ります(Technical Debtも参照)。

具体的には、リファクタリングへ戻る理由は、通常、以下の通りである:

長く方法 のセクションから新しいメソッドを抽出することによって小片に長い方法を破壊
  • 重複コードを退治
    1. あまりにも多くの責任を持つクラスをより小さく、よりターゲットを絞ったクラスまたはサブクラスに分割する
    2. あるクラスから別のクラスへメソッドを移動する。多くの場合、これは、メソッドが操作するデータと同じクラスに存在するように行われます。
  • +0

    +1技術的な債務に言及してください! – TrueWill

    2

    最も簡単な言葉で言えば、リファクタリングコードはコードを最適化することです。 「より良い」コードの基準は、さまざまなコーディングスタイルとパターンが存在するため、多くの解釈が可能です。リファクタリングの中心的な考え方は、「このコードを改善できますか?」という問題です。その基準のいくつかの例には、スケーラビリティ、保守性、読みやすさ、パフォーマンス、実行可能ファイルのサイズ、コードの実行に使用されるメモリの最小化などがあります。

    +0

    「最適化」という言葉を「質の向上」または同等のものに置き換えることを検討してください。 – TrueWill

    +0

    用語の違いは何ですか?最適化がさまざまな意味を持つという事実は、その用語を使用する際のポイントの一部です。あなたは先に進み、私の答えを変えることができますが、私は、あなたがそう言っているから、ちょっとだけ正当化したいと思います。 –

    +0

    @JBキング・マーティン・ファウラーの定義は、「リファクタリングは、コードの既存の構造を変更し、外部の振る舞いを変更することなく内部構造を変更するための訓練されたテクニックです」その心は一連の小さな動作です。 ')はほとんど行いませんが、一連の変換が重要なリストラを生み出すことができます... "。 「最適化」コードは、その外部動作を変更することによる副作用を伴い、正確にはリファクタリングではない可能性があります。 – pageman

    0

    "リファクタリングは、コードの外部動作を変更せずに内部構造を改善するような方法でソフトウェアシステムを変更するプロセスです。" - リファクタリングの改善MartinFowlerDesignOfExistingCode

    詳細は、WhatIsRefactoringを参照してください。

    関連する問題