2

私は最近、この(古い)記事に出くわしました:

http://imranontech.com/2007/01/04/unit-testing-the-final-frontier-legacy-code/

作成者は、テスト ケースを自動的に生成するための perl スクリプトを作成したとされています。彼の戦略は次のようになりました(引用):

  1. 私が与えたヘッダーファイルを読み込んでください。
  2. 関数プロトタイプを抽出しました。
  3. 見つかった関数のリストが表示され、単体テストを作成する関数を選択できました。
  4. 次に、選択した関数が呼び出されるたびにブレークポイントを設定し、渡された変数を保存し、関数が返される時点で戻り値を保存するまで続行する dbx (Solaris デバッガー) スクリプトを作成しました。

  5. dbx スクリプトの下で実行可能ファイルを実行し、その時点でアプリケーションを通常どおりに使用し、問題のコードを通過すると思われる多くのユース ケース、特にエッジ ケースにヒットすると思われるケースを実行しました。単体テストを作成したい関数。

  6. 次に、perl スクリプトはすべての実行例を取得し、重複を取り除き、各例の単体テストを含む C ファイルを自動生成します (つまり、入力データを渡し、戻り値が実行例と同じであることを確認します)。単体テストをコンパイル/リンク/実行し、失敗したものを破棄しました (つまり、関数が非決定論的に動作する原因となる入力を取り除きます)

私は Python と Fortran の言語で、あらゆる種類のレガシー コードをたくさん持っています。この記事は 2007 年のものです。現在の単体テスト フレームワークに実装されているようなものはありますか?

このようなスクリプトを作成するにはどうすればよいでしょうか。

4

1 に答える 1

0

とてもCっぽい。また、OSに依存すると思います(Solarisデバッガー)?「記録/キャプチャおよび再生」ツールを検討する必要があると思いますが、どういうわけか「生成」部分は実際にはうまくいかなかったと思います。

Python のテスト ツールの分類法は、出発点として最適です。Selenium またはDogtailを使用して、アプリケーションの使用方法を記録すると思います。リンクをクリックすると、そのセクションである Web テスト ツールに移動しますが、他のツールもチェックしてください。ファジー テストはGolden Masterに似た手法であり、レガシー アプリで役立つ場合があり、「記録/再生」手法です。Feathers は、このようなテストを「特性化」テストと呼んでいます。これらのテストは、レガシー システムの動作を特徴付けるからです。

あなたが引用した記事の非常に良い点:

自分のソース コード リポジトリを見て、バグ修正チェックインが最も多く適用されている関数/クラスを確認してください。バグ修正の 80% は、コードの約 20% に対して行われる傾向があります。この背後には健全な論理があります。多くの場合、コードの 20% は、数十または数百の「特別なケース」のハックで不適切に記述されています。

これは私が実際に始めるところです。これらの部品は特定できましたか?タクソノミーのシンプルな Git/SVB ログ使用スクリプトとカバレッジ ツール セクションは、これに役立ちます。

残念ながら、私はあなたを助けることができません.私のPythonの経験は限られており、Fortranは存在しません.

于 2013-02-09T14:50:44.227 に答える