かなりの量のコードを書いた後、可能な限り最善の方法でそれをしていないような不安を感じ、最終的にリファクタリングを続け、プロジェクトにあまりにも多くの時間を費やしているようです。時々やった。これは他の誰にも起こりますか、これにどのように対処しますか?
かなりの量のコードを書いた後、可能な限り最善の方法でそれをしていないような不安を感じ、最終的にリファクタリングを続け、プロジェクトにあまりにも多くの時間を費やしているようです。時々やった。これは他の誰にも起こりますか、これにどのように対処しますか?
回答:
このアクティビティを制限して生産性を高めるためのいくつかのルールを次に示します。
正直に言うと、膨大な数のコードを作成し、それがすべて完璧で、リファクタリングを必要としないと思ったらもっと心配です...
私が若くて経験の浅いとき、私はプログラミング能力について非常に慢で、いつもうまく設計して計画することが可能であることを想像する傾向がありました-そして、実装段階に到達したらすぐにそれを打ちますすべてが完璧になります。
現実はほとんど反対です。コーディングを開始したらすぐにメンテナンスモードにする必要があるとさえ言う人もいます。ここでの考え方は、SDLCの「実装」段階は実際には存在しないということです。バグ修正やリファクタリングを脇に置いて、作成するコードが「新鮮」で完璧だと偽装してはいけません。
私は思う、と述べているすべてのISリファクタリングについてあまりにも強迫観念を取得することが可能に。まだ見ていません。そして、私が経験すればするほど、より多くのソフトウェアチームが、締め切りに間に合わず、技術的な負債を負うことを特許的に拒否するのは良いことだと思います。結局のところ、これは、リファクタリングが現実の世界で脇に置かれる最も一般的な理由です。
純粋に感情やコードの匂いに依存しないことをお勧めします。
コードの問題点と解決策を明確に列挙してください。リファクタリングがこれに対してどれほど効果的だったかを確認したいので、真剣に書き留めてください。
リファクタリングを達成可能なチャンクに分解する方法を特定し、それらに優先順位を付けます。各チャンクのスコープのみに焦点を合わせ、タスクを損なう可能性のある接線を避けて、規律を持たせます。
また、先に進む前に、既存のコードに対して作成できる単体テストを特定します。すでに広範なテストがある場合、それは素晴らしいことです。単体テストの欠如は、いくつかを作成する絶好の機会です。
初めて言語や技術を学んだとき、このtrapに陥ります。たとえば、最初にjavaを学習するとき、サーブレットを使用してWebアプリケーションを作成し、それが正しい方法だと考えていることを想像してください。それからjspがあることに気づき、それはおそらくそれより新しいと思います。その後、途中でStrutsといくつかのEJBを見つけると、その後に春(xmlベース)が見つかり、その後にクールな@MVCアノテーションが見つかります。グルービー/グライルとスカラ/リフトの選択!ポイントは通常学習することであり、必ずしも期限を守ることではないため、これは個人的なプロジェクトにとってはまったく問題ありません。
私も仕事で超リファクタラーでした。しかし、より多くの経験を積むにつれて、リファクタリングするものについてより選択的になりました。会社を辞めたとき、コードを持ち歩くことはなく、通常、他のエンジニアは修正するよりもほぼ迅速にコードを破壊することができます。
私が従う経験則は次のとおりです。その時点で可能な限り最適化されるまでリファクタリングし、状況が変化しない限りリファクタリングしません。 (たとえば、新しい言語機能を使用して)物事を行います。
たとえば、既存のアプリケーション用に新しいコードモジュールを作成する必要がありました。私はそれを特定の方法で書きました。翌日、他の用途のために道を広げる必要があると確信していたので、リファクタリングして抽象化することができると考えて次の日に考えました。そこで、コードをリファクタリングしました。その後、私はそれが少しだったことを決めた、あまりにも同じ機能を取得するためにジェネリック(C#)を使用して、基本的には同じことをやっていたいくつかのクラスとインタフェースを統合し、一般的な、私。この時点で、私はおそらく可能性さらにリファクタリングしてさらに改善しますが、「十分」です-コードは適切に記述され、適切な設計パターンとエンジニアリング概念に従っており、拡張可能です。要件によってコードの再評価が必要になった場合、またはコードをより明確にしたり読みやすくしたりできる言語機能があった場合にのみ、リファクタリングします。