2008-08-21 8 views
5

私は製品で動作するチームに参加しました。この製品は約5年ほど前からあり、ASP.NET WebFormsを使用しています。その元のアーキテクチャは時間の経過とともに薄れており、ソリューション全体で物事は比較的混乱しています。それは決してひどいことではありませんが、確かにいくつかの仕事を使うことができます。あなたは皆私が何を意味するか知っています。既存システムのテスト容易化のためのリファクタリング

私は約6ヶ月前にプロジェクトチームへ来て以来、いくつかのリファクタリングを行ってきました。これらのリファクタリングのいくつかは、シンプル、抽出メソッド、プルメソッドアップなどです。リファクタリングのいくつかはより構造的です。後者の変更は、すべてのコンポーネントに付随する単体テストの包括的なスイートが存在しないので、私を緊張させるものです。

チーム全体がリファクタリングを通じて構造を変更する必要があるため、プロジェクトマネージャは回帰バグを導入しないという確信を持ってリファクタリングを行うための十分なテストがないという懸念を表明していますシステムに入力します。彼は最初に(既存のアーキテクチャに対して)より多くのテストを書いてから、リファクタリングを実行してほしいと思っています。私の主張は、システムのクラス構造が適切なテストを書くには密接に結合されていること、そしてリファクタリングを実行している間にテスト駆動型アプローチを使用する方が良いかもしれないということです。つまり、既存のコンポーネントに対するテストを作成するのではなく、特定の機能要件のテストを作成し、既存のコードをその要件を満たすようにリファクタリングすることです。これにより、「捨てる」テストをたくさん作成するのではなく、おそらくシステム内に長寿を持つテストを書くことができます。

誰もが最善の行動が何であるかについての任意の経験を持っていますか?私は自分の考えを持っていますが、コミュニティからの意見を聞きたいと思います。

答えて

5

あなたのPMの懸念が有効です - あなたはすべての主要なリファクタリングを行う前に、テスト中のあなたのシステムを得ることを確認してください。

マイケルフェザーの本Working Effectively With Legacy Codeのコピーを入手することを強くお勧めします(レガシーコードのフェザーとは、単体テストで十分にカバーされていないシステムを意味します)。これは、回帰バグの導入を危険にさらすことのない安全な方法で、あなたが話しているカップリングや依存関係をどのように細分化するかについての良いアイデアでいっぱいです。

リファクタリングプログラムで幸運を祈る。私の経験では、それはあなたが多くを学ぶことができる楽しさとカトリックのプロセスです。

2

あなたは並行して再因数を計算できますか?つまり、TDDを使用してリファクタリングする部分を書き直し、既存のコードベースをそのまま残しておくことです。あなたの新しいテストがあなたのPMのニーズを満たしたら、既存のコードを段階的に廃止しますか?

0

「レガシーコードで効果的に作業する」の2番目の推奨事項を捨てるだけで、古くて/馬鹿げた/確証できないコードが悩まされるという事実に本当に目を覚ました素晴らしい本です!

1

私はまた、Martin Fowler氏によるRefactoringウェブサイトを訪問する提案を投げるしたいと思います。彼は文字通りこのようなことについて本を書いた。

は限り式にユニットテストを導入するなど、私は発見した最良の方法は、トップレベルのコンポーネントを見つけて、それが具体的なオブジェクトに対して有するすべての外部の依存関係を識別し、インターフェースに置き換えることです。これを行うと、コードベースに対して単体テストを書く方がはるかに簡単になり、一度に1つのコンポーネントで実行できます。さらに、単体テストを捨てる必要はありません。

ユニットテストASP.Netは注意が必要ですが、それは簡単に行うことにするフレームワークがたくさんあります。 ASP.Net MVCおよびWCSFなどがある。

0

答えには全く一致します。Ian Nelson。さらに、ユーザーの視点からの動作を維持するために、いくつかの「高レベル」テスト(機能テストまたはコンポーネントテスト)を開始する予定です。この点は、あなたのPMにとって最も重要な懸念事項です。

関連する問題