web-dev-qa-db-ja.com

古いアプリケーションに新しい機能を追加する

Framework 3.5を使用して.NET Windowsアプリケーションを作成しました。当時、3.5は非常に新しく、フレームワーク2.0しか知りませんでした。締め切りのため、バージョン3.5の新機能は使用せず、アプリケーションを提供しました。時間がありませんでした。

今から2年とアプリです。は正常に実行されていますが、クライアントから新しい機能が要求されています。大きなスケーリングが必要です。これまでに書いた新しいコードは、.NET 3.5の多くの新機能を使用しており、新しいコードサイズの削減に集中しています。

問題は、私が書きたい新しいクラスが、同じことを行うための冗長なメソッドを作成していることがあるということです。私は古いコードを邪魔していません。

管理する方法は?古いクラスを新しいクラスに置き換えると、機能が危険にさらされ、もう一度完全なテストが必要になります。そうしないと、プロジェクトのサイズが大きくなります。

7
RPK

多数のWindowsアプリケーションを出荷しています。各アプリケーションの一部は.NET2を使用し、一部は3.5で、1つのアプリケーションはVB6のままです。税法は毎年変更されるため、毎年更新する必要があります(ユーザーの多くは会計士やアクチュアリーです)。毎年コードをリファクタリングすることは、私たちの標準的な方法です。 .NET 3.5を追加したとき、私たちはWCFとLinqが必要でしたが、時間が経つにつれてさらに多くのものを追加する予定です(そして、何を追加したいかを学ぶ時間があります)。

古いクラスを新しいクラスに置き換えると、機能が危険にさらされ、もう一度徹底的なテストが必要になります。そうしないと、プロジェクトのサイズが大きくなります。

ソリューションに単体テストを追加することをお勧めします。多くの開発者は、自動テストでさえ、テストを行うことを好みません。新しいコードが古いEdgeのケースを壊したために失敗したテストをコメントアウトする人がいます。

3つの良い本は次のとおりです。
。Netのブラウンフィールドアプリケーション開発 および
レガシーコードを効果的に使用する
成長するオブジェクト指向ソフトウェア、テストによるガイド

単体テストを含むバージョンのVisualStudioを購入する余裕がない場合は、テストに外部ツールを使用する方法について別の本をお勧めします。
NAntおよびCruiseControl.NETを使用したエキスパート.NET配信
この本は.NET1.1向けに書かれていますが、それでもいくつかの有用な情報があります。

私が強くお勧めするプラクティスの1つは、「継続的インテグレーション」です。これの目的は、コードをコンパイルしてテストするためにコードがチェックインされるたびに実行されるプロセスのためです。最初にセットアップするのは面倒で面倒ですが、後で非常に簡単で繰り返し可能になります。スコアを維持している場合は、継続的インテグレーションによって Joel Test の質問2と3に「はい」と答えることができます。

7
Tangurena

広範囲にわたるテストが心配な場合は、おそらくテストがコードレベルで自動化されていないことを意味します。自動テストなし=多くの苦痛(そして私はそこでの経験から話すことができます)。次に、最初のステップは、NUnitなどを使用して変更することを考えている既存のコードの周りにいくつかの基本的なセンシングテストを配置することです。ここで、古いコードを新しいコードに置き換えるために必要な変更を行い、すべてが引き続き機能することを確認します。

これらの検知テストと単体テストを混同しないでください。これらは、すでに配置されているコードが実際に実行したいことを実際に実行していることを確認するためのものであり、通常のテスト規則に従う必要はありません。うまくいけば、コードを変更および更新すると、意味のある単体テストが導入され、その時点でセンシングテストを削除できます(削除する必要があります)。

レガシーコードで効果的に動作する は、状況で使用できるさまざまなテクニックについて詳しく説明しています。 CucumberRobot Framework などの受け入れテストフレームワークの1つを使用して、コードカバレッジをすばやく取得することも検討できます(Webアプリの場合)。迅速で汚いレコード再生 Selenium テスト(ここでも、より保守しやすい受け入れテストで意味のあるテストカバレッジが得られたら、これらの初期テストを削除する準備をしてください)。

最後に、コードサイズを小さくすることに固執しないでください。問題を一度に1つずつ解決することに集中し、必要に応じて悪いものをリファクタリングします。

5
FinnNk