7

リファクタリング後(つまり、変数名の変更後)にコードが機能していることを確認するにはどうすればよいですか?

静的言語では、クラスの名前が変更されているが、他の参照クラスの名前が変更されていない場合、コンパイルエラーが発生します。

しかし、動的言語にはそのようなセーフティネットはなく、十分に注意しないとリファクタリング中にコードが破損する可能性があります。単体テストを使用することはできますが、モックを使用している場合、名前が変更されたことを知るのはかなり難しく、結果として、役に立たない場合があります。

この問題を解決する方法は?

4

4 に答える 4

17

リファクタリングを開始する前に、変更しようとしているものをテストできるテストを作成する必要があります。単体テストでは不十分である、または作成するのが難しいと言う場合は、必ずより高いレベルのテストを作成してください。製品全体をエクササイズします。

言語用のコード カバレッジ ツールがある場合は、それを使用して、作成したテストの品質を測定します - かなり高い値に達した後、テストが最新の状態に保たれ、拡張されている場合は、何でもできるようになりますコードを非常に効率的に使用し、物事が間違った方向に進んでいないことを確認してください。

于 2009-03-27T06:46:53.687 に答える
10

私は単体テストやリファクタリングなどのクラスを教えてきましたが、これはおそらくほとんどの人が誤解していることです。リファクタリングはコードを変更するだけではありません。外部の機能的動作を変更せずにコードを変更しています。これは非常に重要なポイントです。

つまり、リファクタリング後に外部機能の動作が損なわれていないことを確認する何らかの方法が必要です。神聖な洞察が欠けているので、単体テストが非常に役立つと思います。Martin Fowler は、リファクタリングに関する著書の中で、この検証に自動テストを使用することを強調しています。

コードが TDD を使用して開発された場合は、コード自体の開発中に開発されるため、必要なテスト スイートがあります。テストが利用できないコードをリファクタリングする必要がある場合、コードに変更を加える前に自動テストを設定するのが最善の方法です。既存のコードのテストをセットアップするのは難しい場合があることは理解していますが、そうすることでコードについて多くのことを学ぶことができます。

Bruce Eckel の強力な型付けと強力なテストに関するエッセイも参照してください。コンパイラから得られるフィードバックとテスト スイートから得られるフィードバックについて説明しています。

于 2009-03-27T06:55:07.427 に答える
1

コンパイルされた言語であっても、リファクタリング中にコードが壊れる可能性があります。それだけに頼ると大変なことになります。自動テストは、プログラムが正常に機能することを確認するための最良の方法です。

使用している動的言語を教えていただければ、テストに役立つツールに関するアドバイスを提供できるかもしれません。すべてをテストできます。

編集:

あなたは、PHP と Python を使用していると回答しました。

これが Web アプリの場合は、seleniumを使用してブラウザーでテストを作成します。最初は Selenium IDE だけが必要です。すべてのテストを 1 つのテスト スイートにまとめて、すべてを簡単に実行できるようにします。リストが増えるにつれて、Selenium RC と Selenium Grid を調べ始めることができます。

于 2009-03-27T06:54:25.073 に答える
0

1) Python の場合、PHP phpunit に PyUnit を使用します。2) TDD アプローチは良いですが、コードを書いた後にテストを行うことも許容されます。3) 安全なリファクタリングのみを行う IDE で利用可能なリファクタリング ツールも使用します。Python にはロープがあります (これはライブラリですが、ほとんどの IDE 用のプラグインがあります)。4) 良い本: 「例によるテスト駆動開発」 最高の「エキスパート Python プログラミング」 Tarek Ziade (TDD とリファクタリングの両方を説明)

google tdd and database で、データベースを開発するための TDD アプローチに関する優れた本を見つけてください。

使用しているモックの情報を追加します。AFAIK モックは、データベースまたはネットワークが関係する場合にのみ必要です。しかし、通常、単体テストは小さなコード (1 つのクラスのみ) をカバーする必要があり、時には 2 つのクラスをカバーするため、モックアップは必要ありません!!

于 2009-11-28T18:02:38.413 に答える