はじめまして、小林@那須と申します。
私は kVerifier と名付けた C/C++ のシミュレーション・検証ライ
ブラリを、フリーの立場で作っています。自己紹介を兼ねて、XP
と kVerifier について論じてみます。そのあと kVerifier の宣伝
を少し行います。長文となります。興味が続けば最後まで読んでく
ださい。
---------------------------------------
XP の本質と kVerifier による検証
XP の本質はコーディングと同時にテスト・コードを書くことだと、
私は理解しています。テスト・コードが存在することが、プログラ
ムの変更を容易にするからです。テスト・コードによりデバッグ過
程を再利用可能なソフト資産として残していくことで、プログラム
の変更を容易にしています。一方で通常のアプリケーション・コー
ドの他にテスト向けのコードまで記述することはプログラマーに余
分な負担を強いることにもなります。
私の作っている kVerifier はシミュレーション・テスト・コードの
作成に特化した C++ ライブラリです。アプリケーションの実際の
動作シーケンスをテスト・ベクタ(テスト・ケース)ファイルに、
具体例を羅列する形で記述しておきます。アプリケーション・プロ
グラムに kVerifier library をリンクすることで、アプリケーシ
ョン・プログラムをテスト・ベクタから駆動し、また動作結果を
kVerifier に確認させます。 テスト・ベクタの大部分はデバッグ
過程で作ります。それはデバッグを再利用可能な資産として残すこ
とを可能にします。
このような kVerifier は XP にも有効です。皆様にも
kVerifier の利用を検討していただけることを希望します。
---------------------------------------
●XP の本質はデバッグ過程を再利用可能にすることです
XP は新しいプログラミング・パラダイムを示しています。
1 プログラムのコーディングするときにテスト・コードも同時に記述する
2 一つのプログラムを二人のプログラマが一体となってコーディングする
3 プログラム・ソースを詳細ドキュメントにもなるように記述する
などの特徴があります。
XP を特徴付けているのはテスト・コードを同時に記述することだ
と考えます。テスト・コードにより、プログラムのデバッグ過程が
再利用可能になっているこだと考えます。デバッグが再利用可能に
なっていれば、何万行ものプログラムに数百行の修正を加えても、
その動作のデバッグをコンピュータに代行させられます。これによ
り、プログラムの変更を許容する進化的プログラミングが可能にな
ります。プログラムの変更・改善を許容することで、プログラムの
完成度を高め、プログラム自体をドキュメントするようなことが可
能となります。
プログラムには修正が付きまといます。プログラムができあがって
からでも客先からの変更が発生します。組み合わせテストの段階で
タイミングが間に合わないことが別れは、泥臭いけれど高速なコー
ドに変更します。コーディングの途中で、よりスマートなデータ構
造に気付くこともあります。
今までのプログラミングでは修正をできるだけ避けるようにしてき
ました。最初の設計段階で可能な限り詳細まで検討しておくことで、
修正を避けてきました。プログラムの修正にデバッグが付きまとう
からです。コーディング以上にデバッグに手間がかかるからです。
プログラム規模が何万行にもなると、一日もかからない百行のコー
ド変更に対して、一週間以上のデバッグが必要になるからです。ま
たデバッグ作業は単純であり、生み出すもののありません。そうな
らばデバッグを避けるべきです。最初のプログラム設計に時間を費
すべきです。
でも新規性の高いプログラミング作業では、初期の設計段階で全て
を見通すことができません。予想タイミングには誤差が付きまとい
ます。最初の設計段階で理想的なデータ構造を完全な形で見出すこ
とは、新規性の高いプログラミングでは無理があります。変更が必
要となります。でも全体が出来上がってからの変更は、多くのデバ
ッグ工数を発生させます。このため、さきの必要となった変更は最
小のパッチを宛てることで対処されます。よりスマートなデータ構
造に変更したくても、それに伴うデバッグ工数を思うとコード変更
の多いデータ構造の変更にはふみきれません。しかし何度もパッチ
的なプログラム変更が重なると、プログラム構造が複雑怪奇になっ
てきます。これが極端になってくると、プロジェクトの破綻となり
ます。
XP プログラミングでは、最初に全体を見通せなかったならば、修
正すれば良いとします。より優れたデータ構造が見つかられば、そ
れを採用してプログラムをスマートにすることを選択します。デー
タ構造の変更に伴うコード変更は多くの個所に分散していても、コ
ード変更自体は単純作業です。このコード変更工数は許容できるも
のになるでしょう。テスト・コードが記述してある XP プログラミ
ングでは、デバッグ工数に怯える必要がありません。データ構造を
スマートにしてプログラム構造の見通しを良くできるならば他の修
正も容易になります。タイミング予測の誤りによるプログラム修正
があっても、その対処が容易になります。客先からの仕様変更にも
迅速に対応できます。
XP のプログラム修正の許容は、デバッグをコンピュータに代行さ
せるテスト・コードが存在することで可能になります。スマートな
データ構造への変更が発生してもプログラムの動作自体は変わりま
せん。テスト・コードの変更は発生しないはずです。客先からの仕
様修正修正があっても、プログラムの動作自体については一部の変
更にとどまります。テスト・コードも大部分が再利用できるはずで
す。テスト・コードの大部分を再利用できるならば、プログラム修
正に伴うデバッグ工数は許容範囲に抑えられます。
XP プログラミングではテスト・コードの作成が必要不可欠です。で
も既存のテストのためのテスト・ケース自動生成ソフトでは、上に
述べたようなテスト・コードの生成は不可能です。アプリケーショ
ンに合わせて、個別にテスト・コードを記述しなければなりません。
しかし数万行のプログラムの全部をカバレッジするテスト・コード
を記述するためには数万行のテスト・コードが必要となります。本
当に数万行のテスト・コードを書くとしたら、XP プログラミング
の実践は躊躇されるものとなります。
kVerifier はテスト・コードを具体例の羅列としてのテスト・ベク
タ・ファイルで構成します。数万行のテスト・コードを、単純な具
体例の羅列としての数万行のテスト・ベクタ・ファイルとして、単
純・汎用的に作成することを可能にします。
-----------------------------------------------
●kVerifier について
□kVerifier とは
kVerifier は C/C++ 言語で記述したプログラムを対象とするシミ
ュレーションと検証を行うツール・ライブラリです。プログラマー
が自分のコードをデバッグするために使うツールです。
kVerifier はプログラムのデバッグをコンピュータに代行させるソ
フトともみなせます。デバッグはソフト開発工数の半分以上を占め
ます。このデバッグの単純作業をテスト・ベクタ・ファイルとして
残すことを可能にしました。今まで浪費していた上級プログラマの
デバッグ工数を、再利用可能なソフト資産に変えます。
kVerifier はソフト仕様記述にも活用できます。
プログラムは入力を処理して出力に変換するものです。デバッグ作
業とは、プログラムに入力操作を与えて、出力結果を確認する作業
です。その多くは単純作業です。kVerifier は、この単純作業をコ
ンピュータに代行させます。入力操作の時間変化データと出力結果
の予定データをテスト・ベクタとしてファイルに記述することで、
このデバッグの代行を可能にします。
┌────────────┐
入力→│アプリケーション・コード├→出力
↑ └────────────┘ │
設定 監視
│ ┌────────┐ │
└──┤ kVerifier │←────┘
└───┬────┘
┌───────┐↑│ ┌───────┐
│テスト・ベクタ├┘└→│動作結果の記録│
└───────┘ └───────┘
・ ・
testN.vrf モニタ出力ファイル:testN.mnt
testN.trc
ベリファイア出力ファイル:verify.out
プログラムへの入力操作や、その結果の確認などの単純作業はコン
ピュータに代行させるべきです。kVerifier は、このデバッグの代
行を汎用的に可能します。kVerifier を使えば、テスト・ベクタ・
ファイルを再利用できます。ソフトの仕様変更・改良に伴って繰り
返されてきたデバッグ作業の大部分は、テスト・ベクタ・ファイル
と kVerifier を使って、コンピュータに代行させることが可能です。
□テスト・ベクタ・ファイル
デバッグ作業を再利用可能にするテスト・ベクタ・ファイルは変数
の時間変化を羅列したものです。プログラム動作の実例を羅列した
ものともいえます。その具体例を下に示します。
時間 変数名 コマンド 引数 # コメント
────────────────────────────
10nS port1 __set 3 # port1 に 3を設定
3mS port2 __compare 5 # port2==5 を確認
22uS funcStr __set "abc 3"# subroutine 呼出
この例の最初の行では10ナノ秒後に port1 入力変数を 3 に設定
しています。次の行で3ミリ秒後に出力変数 port2 が 5 になって
いることを確認しています。22マイクロ秒後にサブルーチン
fucStr を "abc 3" 引数で呼び出しています。これらはデバッグ時
にプログラマーが繰り返している作業です。この作業ををテスト・
ベクタ・ファイルと kVerifier を使ってコンピュータに代行させ
ます。
Window などのアプリケーション・ソフトでは上の時間はメイン・
ループやアイドル・ループの回数となります。
□テスト・コード、テスト・ベクタ・ファイルの作成
アプリケーションをテスト・ベクタと連動させるためには、アプリ
ケーション変数のアドレスと名前を kVerifeir に登録するプログ
ラム・コードをが必要となります。このためのプログラムは定型的
な単純なコード記述で済みます。本質的なテスト・ケースの作成は
テスト・ベクタ・ファイルの作成となります。でもテスト・ベク
タ・ファイルが作られていくのはデバッグしながらです。デバッグ
作業をテスト・ベクタ・ファイルとして残していくことにもなりま
す。
kVerifier はテスト・コードの作成の手間を簡略化します。テスト
のための共通の枠組みを与えます。設計者とコーダーが分離したソ
フト開発さえも可能にします。仕様事実の具体例の羅列して、プロ
グラム・コードに先行してテスト・ベクタ・ファイルを作成してお
くことができるからです。
□kVerifer と仕様記述との連携
kVerifier を仕様記述言語と組み合わせて活用できます。そ
のフィージビリティ・スタディを、情報処理振興会の「未踏ソフ
ト」プロジェクトとして、今年の二月まで行っていました。その採
択評価が
http://www.ipa.go.jp/NBP/12nendo/12mito/mitou12koukai.htm
の「高田広章 PM」の「小林憲次」の項目にあります。興味があり
ましたら、一読していただければ幸いです。
---------------------------------------------------------
4 月 19 日の XP セミナーに夜の部まで含めて参加します。
kVerifier に興味を持たれましたら声をかけて下さい。
郵便番号 325-0073
住所 栃木県黒磯市阿波町 117-835
電話番号 0287-63-1962 (通じないときは 0287-63-1642)
EMAIL kenji@....jp
名前 小林憲次