6

次のようなレガシー アプリケーションをどのように維持しますか。

  1. 単体テストがなく、大きなメソッドがある

  2. 多くの重複したロジックがある

  3. 関心の分離がない
  4. クイックハックとハードコードされた文字列がたくさんあります
  5. 古くて間違ったドキュメントがある
  6. 要件が適切に文書化されていません! これは実際に、過去にテスター、開発者、およびクライアントの間で論争を引き起こしました. もちろん、遅くしてはならない、クラッシュしてはならない、アプリケーション ユーザーに知られているその他のビジネス ロジックなど、機能以外の要件もいくつかあります。しかし、最も常識的なシナリオと最も常識的なビジネス ワークフローを超えて、何をすべきか (またはすべきでないか) についてのガイダンスはほとんどありません。

???

4

7 に答える 7

12

Michael C. Feathers 著の Working Effectively with Legacy Codeという本が必要です。

代替テキスト

于 2008-10-31T14:56:37.700 に答える
7

できるだけ早くテストを書きます。できれば要件に反します (存在する場合)。機能テストから始めます。小さなチャンクでリファクタリングします。コードに触れるときはいつでも、開始時よりもクリーンで優れたものにしてください。

于 2008-10-31T14:56:12.320 に答える
3

2つのこと。

  1. 機会があれば単体テストを書いてください。
  2. 自信を持って十分な単体テストを作成したら、リファクタリングを開始します。

これを達成する速度は遅いかもしれません.... 通常、あなたはそれを修正するのではなく、「ただ維持する」ことになっています。

ただし、「メンテナンス方法の学習」フェーズでは、多くの単体テストを作成できます。

その後、バグが発見され、機能拡張が要求されたら、さらにテストを追加できます。

それはアジャイルであり、レガシーに適用されます。

于 2008-10-31T14:56:28.763 に答える
2

私は、質問で言及されているすべての条件を満たすコードベースを見て、作業し、作業しています:-)

このコードベースを維持するためのアプローチは、何も壊さないことです。FWIW、コードは機能し、エンド ユーザーは満足しています。コードの重複、ハードコードされた文字列などがあるという開発者の叫びに誰も耳を傾けません。可能な限り修正するために時間を盗み、新しいバグを導入しないように細心の注意を払っています..

于 2008-10-31T15:18:06.177 に答える
1

最新情報の小さなセットを作成すると思います: どのアクションがどの関数を呼び出すかなど。

そこから、リファクタリングを検討します。複製されたロジックはリファクタリングできるもののようですが、それを覚えておいてください

  • そのロジックが呼び出される場所がいくつあるかを理解すると、それは大きなタスクになる可能性があります。
  • 似ているように見える 2 つの関数に、+ ではなく - という小さな違いがある場合があります。

抵抗したいという最大の衝動は、「いまいましいものをすべて再構築するだけだ!」 だと思います。最初にシステムの概要を把握して、獣の謎を解き明かします。

于 2008-10-31T14:58:02.550 に答える
1

sudo rm -rf /

しかし、もっと真剣に、それは評価されなければならないと思います。コードが継続的に変更要求の原因であり、変更が難しい場合は、システムをより最新のものにリファクタリング/リエンジニアリングする価値があるかどうかをすぐに検討する必要があります。もちろん、これは常に実用的であるとは限りません。そのため、レガシー パーツの保守を担当するチーム内の数人だけになることがよくあります。可能な限り、チームの全員がシステムのすべての部分を保守できるようにする必要があります......

私が重要だと思うもう 1 つのことは、チームがメンテナンスや機能の要求を行うレガシー システムの作業に費やす時間と労力を追跡することです。これらの指標は、レガシー システム/コンポーネントを置き換える新しい取り組みの計画を評価する際に説得力があります。

于 2008-10-31T15:01:31.543 に答える
0

私は基本的に、ポール C が言ったことすべてに同意します。私は TDD の信奉者ではありませんが、レガシー コードベース (特にあまりよく知らないコードベース) に触れるときはいつでも、しっかりと再テストしてヒポクラテスに従っていることを確認する必要があります。 、害はありません。テスト、特に優れた単体テストと回帰テストは、その役割を果たせる唯一の方法です。

Reversing: Secrets of Reverse Engineering Softwareのコピーを入手することを強くお勧めします。この本は、あなたの現在のニーズ (さらに言えば、私のもの) の範囲を超えた非常に深いところまで掘り下げていますが、他の人のコードを安全かつ健全に扱う方法について多くのことを教えてくれました。

于 2008-10-31T14:59:06.167 に答える