8

コードの一部に単体テストを使用できないため、回帰テストにフォールバックします。いくつかの変更を加えた後、プログラムが同じように動作するかどうかを確認したいと思います。そして、振る舞いによって、私は主にデータ構造の状態を意味します。これまでのところ、私はそれらを人間が読める形式のテキスト形式にシリアル化し、最初の実行でいくつかのファイルにダンプしていました。次に、次のダンプで、状態が変化したかどうかを比較できます。また、変更がバグではなく新機能によるものである場合は、更新してください。

ライブラリ(C ++)を使用してすべてを整理できます。何でも知ってますか?ダンプファイルと一緒に、それは安価で大規模な単体テストを提供します。

最も面倒なのはシリアル化手順です。メモリの状態をダンプすることもありますが、それが異なる場合、リバースエンジニアリングは困難です。そこで、別の方法に移りました。ここで、比較フェーズ中に、メモリダンプを「ファントム」オブジェクトに読み込み、特殊なdiffメソッド(豊富なエラーレポートを備えたoperator ==)を実行します。これは、人間が読める形式のテキスト形式にシリアル化するよりも簡単に記述できる場合があります。

基本的に、私は車輪の再発明をしたいと思っているので、私の質問は非常に一般的です:
回帰テストをどのように実行しますか(実行する場合)?
ライブラリ/ツールキットを使用していますか?
自分のニーズに合わせて実装したことがありますか?

そして好奇心から:
回帰テストをしたいと思ったことはありますが、何かがあなたを止めましたか?

4

3 に答える 3

2

ブーストシリアル化ライブラリを確認してください。これにより、ファイルを xml にダンプして、バージョンごとに比較することができます。

テスト ケースを作成するには、まだ作成していない場合は、gcov を使用して関数のカバレッジを調べます。これにより、少なくとも、関数でカバーされているすべてのステートメントを確実に取得できます。

単体テスト

フィクスチャが欠落しているレガシー コードをテストする場合、中間のアプローチを使用することがあります。私たちが持っているのは、通常のタスクを実行するだけでなく、関数のテストも実行できる、アプリケーションのわずかに変更されたバージョンです。

ライブラリの残りの部分が正しいと仮定する必要があるため、厳密な意味での単体テストではありませんが、少なくとも回帰/システム テストで可能なテストよりも多くのテストを実行できます。

于 2009-06-22T11:07:13.557 に答える
2

Boost Test Libraryをご覧ください 。私はそれを使用したことはありませんが、それはあなたの欲求を満たすかもしれません.

私が働いているとき、私は通常、回帰テストをできるだけ簡単にするために、テストトラッカーに簡単なテストケースを書きます(特に、私ではない人のために:)。

于 2009-06-22T09:39:45.073 に答える
1

OK、ここで議論されていることは 3 つあります。レガシ コードへのテストの適合、単体テスト、受け入れ/回帰テスト、すべて C++ です。

まず、レガシー コードを使用してそれにテストを適合させるために、Michael Feathers 著の「レガシー コードを効果的に使用する」のコピーを購入することをお勧めします。これは素晴らしい本で、どんなレガシー コードも単体テストできることを教えてくれます! 私はその本のテクニックを使用して、単体テストはできないと誰もが言ったものにテストを当てはめましたが、とにかくそれを行いました:-).

2 つ目は、C++ での単体テストについて、Visual Studio でこれを行う方法を詳しく説明した 5 部構成のブログ記事を書いたところです: Boost.Test を使用した C++ 単体テスト

最後に、受け入れ/回帰テストでは、Fitnesse を使用して成功しました。これは基本的に、Wiki を使用してテストを整理および作成する受け入れテスト フレームワークです。Wiki ページは走査および解析され、記述したテスト フィクスチャへの呼び出しに変換されます。次に、テスト フィクスチャは、wiki ページで説明されているように、テストと運用コードの間を仲介します。このメカニズムを使用して、アプリケーション全体でエンドツーエンドの回帰テストを実行しました。変更するクラスの単体テストと、非常に強力なバグ検出メカニズムを組み合わせてください。リグレッション テストは上から絞り込み、ユニット テストは下から絞り込み、バグは真ん中でキャッチされます。それは私にとってうまくいきました。

Fitnesse.org からメインの Fitnesse ディストリビューションを入手してください。FitNesseの C++ テスト ランナーはsourceforgeから入手できます。(私はそのプロジェクトの開発者です。) メインのフィットネス wiki にある SLIM サポートはまだ追加していませんが、いくつかのフィクスチャを適切にサポートしています。すぐに SLIM サポートを追加したいと考えています。仕上げる必要がある初歩的な実装があります。

于 2009-07-18T09:30:23.127 に答える