中の人の徒然草298
昨日数学を学習していてふと私は考えました。
自動定理証明を工夫すれば、テスト指向言語が作れると。
昨今は品質を上げつつ短納期で情報処理システムを仕上げる事が求められております。
しかし、現状ではC++をテストしたいならばC++でという風に言語を合わす必要があります。
無論.NETやJavaなどの仮想マシンで動く実行環境ならば違う言語でテストを行えますが、いかせんテスト能力が高いとはいえません。テスト指向言語の開発が望ましいと思います。テスト指向言語を作れば、テスター達はテスト指向言語を学習するだけで高品質なテストが行えるようになります。
では、テスト指向言語とはどうゆう機能を持つべきなのかと言いますと、システムの内部まで探る機能とテストを実施するうえで便利な記法を持つ多実行環境な言語だと私は考えております。
より具体的に述べますと、次の要素が必要でしょう。
-
【テスト指向言語の要件】
- システムの内部の情報まで取り出せる機能を持つ事。
- 有効なテストパターンを記述できる事。
- プロファイル機能を持つ事。
- 可読性が優れている事。
- 基本的に実行環境に依存しない構文を持つ事。
- 実行環境に特化した情報も扱える事。
- セキュリティチェックを行うのに必要な機能を持つ事。
- テスト項目のチェックを行える事。
- 変化に強い事。
- パフォーマンスが測定しやすい事。
- バージョン管理ソフトなどと連携できる事。
今この瞬間に思いつくのはこれぐらいです。つまり、多くの普通のテスターがテストを間違えないようにサポートし、それでいて、熟練テスターがより高度なテストを行うための基盤も持つ言語だと言う事です。
これだけ書けば普通のシステム言語ですが、テスト指向言語には一つ重要な機能が必要です。それは、テスト計画を立てられる機能です。テストは無計画に個人々が実施するものではありません。テスト計画に基づき、ちゃんとしたテストを実施する必要があります。その時必要なのは、ドキュメントと言語間の差異をなくし、テストの漏れを防ぐための機能なのです。
これを実現するためには、テストフレームワークとアスペクト指向機能を組み合わす事になるでしょう。それに加えて、リフレクションは必須です。これを考慮すると、一番実現しやすいのは.NETかJavaです。実際私がオリジナルのテストツールを作った時、アスペクト指向・オブジェクト指向・リフレクション機能の三つが役立ちました。しかし、それで十分ではなく、Prolog的な機能も必要だと感じました。
そして、昨今の言語の機能を鑑みると、これからの言語はパラダイム(関数型・命令型などの分類の事)間の壁はより一層壊れ、マルチパラダイムが基本となると思います。それでは何を元に分類するのかと言いますと、テスト指向などの言語目的です。もちろん今までもプログラム言語の目的や目標はありましたが、より一層強い目的意識が要求される事になるでしょう。すなわち、プログラム言語の高度化です。例えるなら、第7世代言語ですね。
その様なプログラム言語の方向性は考えるのが楽しいし、実現すると有用なものですが、技術者のレベルの低下を私は危惧しています。言語が便利になるに従って技術者のレベルは反比例するのは避けられない事なのでしょうか?
私は利便性と学習の両輪を実現して欲しいと願っています。