Day: March 1, 2007

GDBによるテスト自動化への試み

…GDBの機能を使用すると,テストを自動化できないだろうか…そんな疑問がよぎったのでちょっと試してみた.はじめに基本方針デバッガによるテスト自動化へ向けてコマンドファイルの作成量産もう一越え はじめに まず,最初にこの頁はCによる開発を前提にしていることを断っておく.テストというと,最終的には実際に出来上がったものを対象に外部使用をチェックすることになる.しかし,そこに至るまでに関数単位でのテストをボトムアップでやっておかないと,障害の切り分けが繁雑になったり,モノができあがってから「この関数に問題があるので全体の構造をかえる必要がある」なんてことがわかっても困る.ということで,この頁では関数単位のテスト,すなわち関数の呼び出しとその結果のチェックを自動化することを目指してみる. 基本方針 残念ながらテストの自動化といっても,全てが自動なわけではなく,テストを自動的に行なってくれる何かを作成することになる.それはテスト対象とリンクされるプログラムかもしれないし,外部から入出力をチェックするスクリプトかもしれない.ここでは,GDBのコマンドファイルを使用する.入門編でも触れたが,このファイルには通常GDBのプロンプトから入力するコマンドの並びが記述されている.GDBは起動時に.gdbinitファイルがあればそれを実行する.もしくは-xで指定したファイルを実行する.あるいはGDBのプロンプトでsource コマンドファイルとすることで実行させたりもできる.今回はこのコマンドファイルでテストを自動化しようと思う.メリットは,ソースを汚さない問題が検出されて自動テストが停止したとき,そこはもうデバッグ環境である.こんなところだろうか. デバッガによるテスト つまらないものですが,テスト対象のサンプル. 自動化へ向けて さて,前節のテストを自動化するためには何が必要だろうか.デバッガに手動でコマンドを打ち込んだ場合には,getCodeの返り値を目で確認していた.したがって,getCodeに修正が入って次にテストするときにもまた目で確認する必要がある.これを自動化したい.もう一度やってみる.(gdb) call getCode (1)$1 = 0x804869b “HOGE”このとき(gdb) print $$2 = 0x804869b … More GDBによるテスト自動化への試み