torutkのブログ

ソフトウェア・エンジニアのブログ

テストの順番を入れ替えてみると・・・

ソースコードにとってみると、もっともきめ細かくテストされるのはユニットテストになります。ユニットテストでは、ホワイトボックス・テスト(ソースコードの記述に応じてテスト項目・入出力データセットを決める)を行うので、コードの条件分岐をなめるようにテストを実行することになります。

しかし、このユニットテストはテストケースの作成と保守がJUnit等のフレームワークを使ってもかなり大変な労力となります。実はアジャイルな開発ほどリファクタリング・機能追加/変更が頻繁に発生し、まじめにユニットテストを記述していればいるほど修正が大変になります。


アジャイルテストファーストな分野でこのことってあまり議論にあがっていないように見えるのが不思議です。多分、ユニットテストについてはブラックボックス・テストを行うだけで良しとしてしまっているか、実はユニットテストをしていないのではないかと想像します。


そこで、ユニットテストソースコードが十分枯れてきた終盤で実施するとどうでしょうか?
ユニットテストをしてから結合テストをするという流れを逆転させてみます。

結合テストを先にすることで、ユニット(クラス)同士の協調を先に作りこんでテストします。結合の過程でリファクタリングしたり、機能追加/変更に対応してクラスが変遷していきます。この間はプログラムが動くことを作業的にも試験的にも優先します。次第に機能やシーケンスが確定し、枯れてきたころに個々のユニット(クラス)についてユニットテストを記述してテストをします。

枯れてきていればそれほど変更はないので、ホワイトボックス・テストを十分記述していても手直しのコストはある程度極小化されることでしょう。

さらに、ユニットテストの記述はクラス作成者でなくても可能です。ホワイトボックス・テストならば、メソッドの仕様とソースコードの条件分岐を把握すればテストが記述できます。理想はペアプログラミングでテストを記述することですが、テスト部隊を作って別チームでユニットテストをすることもできます。結合テストでソフトウェアが動いているので、最悪でも解析して理解することは(効率はさておき)可能です。


高品質なソフトウェアを開発することが重要なプロジェクトであれば、開発者とは別チームを編成してこのユニットテストを実施するほうがよいかもしれません。従来ならシステムテスト等のV字モデルで言えば右肩に近いレベルをQAチームで実施していたのですが、V字の底辺にあたるユニットテストをQAチームで実施するということもありではないかと考えます。QAチームがユニットテストを記述できない(コードが理解できない)ということがあれば、それは保守性に対するコードの欠陥なので、それも指摘できます。

NetBeans 5.0でJava ME MIDPアプリ作成の設定

NetBeans 5.0は、さる1月末に製品版が出荷されていますが、日本語版は少し遅れて今月出荷の予定です(出荷と書いていますが、無償です)。
ですが、オープンソースなだけあって、日本語開発版NetBeans5.0が公開されていました。SunのKatakai氏のBlogからリンクをたどると入手できます。
http://blog.sun.com/katakai
3月13日の記事によれば、0312版がRC2の位置付けとなっているそうです。


NetBeans5.0(日本語開発版)をインストール後、製品版NetBeans5.0とともの公開されているJava ME MIDP開発用のNetBeans Mobility Pack 5.0をダウンロードしてインストールします。
これで新規プロジェクト作成で[Mobile]が選択可能になります。

Vodafone 702NK II用のエミュレータ設定

実行時に表示されるデフォルトのエミュレータ画面(DefaultColorPhone)は画面サイズが702NKに比べてはるかに大きいので、設定ファイルを調整します。で、下記書籍に記述されている702NK用の設定を行ってみました。
MIDP2.0 携帯Javaアプリ開発ハンドブック―M1000/702NK対応

まず、修正する設定ファイル(DefaultColorPhone.properties)の場所ですが、当初想定したNetBeans5.0+Mobility Packのインストール先を探すと、netbeans-5.0/mobility7.2/emulators/ディレクトリの中にwtk22_win.zipというファイルがあります。
このzipを覗くと、中にファイルが含まれているので、最初はこのzipを解凍して修正後再度zipに固めるのではないかと思いました。しかし、実際はこのNetBeansインストール先ではなく、なんとユーザーのディレクトリの下に展開されたプロパティファイルを編集するのが正しい方法でした。(一度Mobileプロジェクトを作成し実行しないと出来ないかもしれません)。


ディレクトリの調べ方は、NetBeansの[ツール]メニュー→[Javaプラットフォームマネージャ]を選択し、表示されたダイアログの左側ペインでJ2ME Wireless Toolkit 2.2を選択します。すると右側ペインにプラットフォームフォルダが表示されるのでそのディレクトリが該当します。

Windowsの場合、C:\Documents and Settings\<ユーザ名>\.netbeans\5.0\emulators\wtk22_win\emulator\wtk22\wtklib\devicesの下になります。