2009-02-23 2 views
8

私は現在の職場で次世代のフレームワークとして宣伝している、本当に衝撃的なコードをいくつか持っています。リファクタリングのコストが書き換えのコストを上回る点はありますか?

この意見の人は一人しかいませんが、それはそのほとんどを書いた人です。残りの部門は、ひどくコード化されているという印象を受けています。

これを書いた人は、管理職にかなりの影響力を持っているので、彼らはキャンプの側にいる。

私たちは経営陣に(本物の)懸念事項を強調してきましたが、明らかに、最終的な利益に直接寄与しないプロジェクトにもっと時間を掛ける気はありません。

このフレームワークにはいくつかのアプリケーションがデプロイされているため、これらのアプリケーションをすべてリファクタリングする必要があります。

すべてのことが絡み合っているため、特定のクラスの実装を取り除くだけで、コアAPIの単純な変更でも大きなプロジェクトを意味するように書き直すことができます。

ただし、ライブデプロイメントで3年、多くのバグ修正、コーナーケース、境界条件があります。

私たちは部分的に書き直しを行い、いくつかの大規模なプロジェクト、リファクタリングを行い、それを形作るにはさらに3年かかる可能性が高いか、または既存のフレームワークのトップ?

+0

よく書かれた質問ですが、二重引用符の二重引用符です。 http://stackoverflow.com/questions/151498/refactoring-vs-rewriting –

+0

類似点についての謝罪しかし、私は、この質問で提供される追加の文脈が、私が求めていたすべての質問とは異なる回答をもたらしたと信じています。 – Mike

答えて

5

何かを書き換えることは、ほとんど普遍的には悪い考えです。何ヶ月も費やして作業しています。終了するまで何も表示しないでください。そして、それはあなたが2番目のシステム効果に餌食にならないと仮定し、そして実際にはを完了します。

ほとんどの場合、リファクタリングが正解です。私はPHPをリファクタリングする経験はありません(私はC++やC#を使っています)ので、具体的なアドバイスはできません。あなたは赤ん坊の階段を進む必要があります。

  • まず、最も嫌なコードの部分を特定します。私にとって、C++では、これはグローバル変数です。
  • 次に、小さなリファクタリングを作成して一度に1つの問題を削除します。そのコードの古いクライアントを壊さないために、ファサードを配置する必要があります。古いコードに新しいファサードを置くことも、新しいコードに古いファサードを置くこともできます。
  • 第3に、そして最も重要なことは、が本当にと自信がない限り、あなたがリファクタリングしようとしているコードの単体テストセットがあることを確認してください。

ただし、コードを書き換えるためにすべてを削除しないでください。徐々にリファクタリング。それは少しあなたを遅くしますが、あなたが行くにつれてあなたはまだ価値を提供しています。

this articleを参照してください。テクニカル債務の管理に役立ちます。なぜ彼らが気にしていないのかを説明します。作るために本当の硬判定だ...私はここを参照してください

問題は知識の多くは、それとランニングのための品質に入りましたがようなフレームワークを長時間使用して固定されていること、である

0

プロジェクトは明らかに受け入れられます。だから、あなたが知っているすべての要件を最初から書き直すならば、すでに働いていたもの(顧客や上司に説明するのは難しいもの)を忘れることになるでしょう)

リファクタリングit it考える - 実際にコード内の接続を知っている唯一の男があるので難しい作業でもある - それを変更したくない...

は3つのオプションがあります:

  • それと一緒に暮らします
  • リファクタリングが必要な人を納得させると、誰もが彼/
  • は書き換えが必要であると管理を納得させるが、これは本当に怒って書き換え/リファクタリングに反しているものを取得します

いずれかの方法あなたがそれを置く - それは皆のために悪い状況です...時間があるためその枠組みの責任者が通過すると、それ自体を処理しなければならず、おそらくそれは遅すぎるでしょう。

1

書き換えの利点は、分析段階ですべての新しいものを考慮に入れて、現在のニーズにさらに適合したモデルを作成できることです。一方、それがひどくコード化されていて、ひどく設計されていない場合、完全な書き換えを行うことに意味はありません。ちょうどコードをサニタイズ/リファクタリングします。

+0

インターフェイスは本当に悪く、クロスカッティングの問題があります(authは、たとえば呼び出しのコンテキストを認識しています)。 いくつかのパブリックメソッドは最大15個のパラメータをとります。パブリックなものであるため、500Mbのコードベースで完全な影響分析を行わずにパブリックメソッドを変更することはできません。 – Mike

0

小さなレベルでは、はい:機能の新しいバージョンを提供し、新しいものと古いものと一緒に機能することを確認し、古いものを削除します。ファンクション自体をリファクタリングするよりも、しばしば十分速いです。しかし、そのレベルでは、それはリファクタリングです。

戦略リライトのコストは、常にリファクタリングを超えています。

お届けできません。新しいバージョンを開発している間は古いバージョンを維持する必要があります。財務担当者がリライトプロジェクトを終了しなければならないとすれば、何も達成されていません。つまり、作業コードベースはまるで何も行われなかったかのように悪い形になります。おそらくさらに悪いことに、すべての変更は、 "とにかく書き換えが終了したら、それを捨ててしまう"ために不安定になりました。


はいリライトが安価であるシナリオを構築することができる:

  • 元のコードベースので、任意のローカル変更は、一見無関係な機能を破壊することspaghettiedれます。
  • あなたは本当にすばらしい新しいチームを持っていますが、これまでの人よりはるかに優れていますが、既存のコードベースに関する経験はなく、既存のコードベースは混乱しています。そうですね。

それでも、経験は、コードが理由で悪いです、そしてそれは常にコーダーではない、とあなたは原因を特定し、変更しない場合は、書き換えは歴史を繰り返すことで運動になることを示しています。

0

書き換えは非常に危険です。古いデバッグ済みのコードを、まだデバッグする新しいコードに置き換えます。これは非常に多くのバグを導入し、修正する必要があります。徐々にリファクタリングするほうが良いでしょう。まずはリファクタリングして、リファクタリングしてください。これにより、コードを少なくして、新しいバグがたくさん導入されるリスクを減らすことができます。

0

すでに述べられていることを追加してください:管理のバイインを試してみてください。 となり、リファクタリング時に新しい機能をプログラミングするための作業時間が増えず、時間が経つにつれて時間がかかり、給与の削減やサーバーコストの削減につながります。あなたの経営陣の誰もがリファクタリングがなぜ価値があるのか​​を理解しておらず、あなたの仕事をより幸せにするつもりなら、正しい場所で働いていますか?

関連する問題