8


3

私の現在の職場では、次世代のフレームワークとして宣伝されている本当に衝撃的なコードがいくつかあります。

ことは、この意見の人は一人だけであり、それはそれのほとんどを書いた男です。 部門の他の部分は、それがひどくコード化されているという印象、デバッグするためのピタ、そして一般的にちょっとちょっとしたことです。

それを書いた男は彼らがキャンプのその側にいるように管理者とかなり影響力のある立場を持っています。

私たちは経営陣への(本物の)懸念を強調してきましたが、明らかに彼らは収益に直接貢献しないプロジェクトにもっと時間を費やすことを望んでいません。

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

全体が非常に絡み合っているので、特定のクラスの実装を切り取ってそのように書き直すことはできないので、コアAPIへの単純な変更でも大きなプロジェクトを意味します。

しかし、実際の運用には3年かかり、多くのバグ修正、コーナーケース、境界条件に対応しています。

部分的に書き直して、それがいくつかの大規模なプロジェクトであることを考えると、時間をかけてリファクタリングするのにはさらに3年かかり、それを既存のものの上に書き直すだけなのでしょうか。フレームワーク?

6 Answer


5


何かを書き換えるのはほとんど普遍的に悪い考えです - あなたは作業を終えるまで何も表示しないで何ヶ月も働いて過ごします。 そしてそれは、あなたがセカンドシステム効果に没頭していないこと、そしてあなたが実際に終了したと仮定しています。

リファクタリングはほぼ確実に正しい答えです。 私はPHPをリファクタリングした経験がありません(私はCとC#をやっています)ので、具体的なアドバイスは提供できません。 あなたは赤ん坊のステップを進める必要があります。

  • 最初に、あなたを最も害するコードの部分を特定します。 私にとって、Cでは、これはグローバル変数です。

  • 次に、一度に1つの問題を取り除くために小さなリファクタリングを行います。 そのコードの古いクライアントを壊さないようにするために、ファサードを配置する必要があるかもしれません。 古いコードに新しい外観を付けることも、新しいコードに古い外観を付けることもできます。

  • 第三に、そして最も重要なことは、本当に自信がない限り、リファクタリングしようとしているコードのための単体テストのセットがあることを確認してください。

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

あなたがあなたの経営陣に技術的債務を説明するのを助けるでしょう この記事を参照してください。 また、なぜ彼らが気にかけないように見えるのかも説明します。


1


書き換えの利点は、分析フェーズですべての新しいものを考慮に入れ、現在のニーズにより適合したモデルを作成できることです。 反対に、それがひどくコーディングされていて、ひどく設計されていないのであれば、完全に書き換えても意味がありません。 コードをサニタイズ/リファクタリングするだけです。


0


それは本当に難しい決断です…​

私がここで見ている問題は、フレームワークが長い間使用され修正されているので、たくさんの知識がそこに入っていて、実行中のプロジェクトの品質が明らかに許容できることです。 あなたが知っているすべての必要条件でそれを最初から書き直すならば - あなたはあなたがすでに働いた何かを忘れないであろうことを確かめることができます(それを顧客に説明するのに難しいもの - またはあなたの上司)

それをリファクタリングすること - それは思う - それは、コード内の接続を本当に知っている人が1人だけいるのでそれも難しい仕事です - それを変更したくない…​

3つの選択肢があります。

  • それと一緒に暮らす

  • リファクタリングが必要であることをその人に納得させるためには誰もがそれを使用/維持することができます

  • 書き換えが必要であることを管理者に納得させるが、これは書き換え/リファクタリングに反対している人を本当に混乱させるでしょう。

どちらにしても、それは誰にとっても悪い状況です… 時間が経つにつれてフレームワークの責任者が自ら対処しなければならなくなるでしょうから、それはおそらく遅すぎます。


0


小さいレベルでは、はい:新しいバージョンの関数を提供し、それが新しい関数と古い関数の両方で動作することを確認し、古い関数を削除します。 それは関数自体をリファクタリングするよりもしばしば十分に速いです。 しかしそのレベルでは、それはリファクタリングしています:)

書き換えの*戦略*コストは、事実上常にリファクタリングを上回ります。

あなたは配達することができません。 新しいものを開発する間、あなたは古いバージョンを維持しなければなりません。 あなたが書き換えプロジェクトを殺さなければならないと財政が言うならば、あなたは何も達成していません - あなたの働くコードベースはまるで何もされなかったかのように悪い形にあります。 さらに悪いことに、 "とにかく書き換えが終わったらそれを捨ててしまうでしょう"という理由ですべての変更がまとめられていたので。

'' '' '

書き換えがより安価なはいのシナリオを構築することができます。

  • 元のコードベースは非常にスパゲティ化されているため、ローカルの変更を加えると、一見無関係な機能が失われます。

  • あなたは本当に偉大な新しいチームを持っていますが、彼らは既存のコードベースを使った経験がありません、そして既存のコードベースはめちゃくちゃです、あるいは彼らが知らない言語、あるいはそのようなものです。

'' '' '

それでも、経験上、何らかの理由でコードが不適切であること、そしてそれが常にコーダーであるとは限らず、原因を特定して変更しない場合、書き換えは履歴を繰り返す作業になります。


0


書き換えは非常に危険です。 あなたは古いよくデバッグされたコードをまだデバッグされることになっている新しいコードで置き換えるでしょう。 これはたくさんのバグを引き起こすでしょう、そしてあなたはそれらを修正しなければなりません。 徐々にリファクタリングすることをお勧めします - まず、ある部分が何のためにあるのかを非常に詳細に理解してから、それをリファクタリングします。 これにより、置き換えられるコードが減り、新しいバグが多すぎる可能性があります。


0


これまでに述べたことに追加するには、次のようにしてください。 リファクタリングをすると、最終的な利益になることがあります。新機能をプログラミングするための工数は、時間の経過よりもむしろ時間の経過とともに減少し、給与のコストの削減、そしておそらくサーバーのコストの削減につながります。 あなたの経営陣の誰もが、なぜリファクタリングが価値があるのか​​を理解しておらず、仕事を楽しくするために適切な場所で働いていますか?