
| TOP | Environment  | POSE  | PalmUnit | Download  |   |
[Japanese|English]
| はじめに | |||||||
|
ここは PalmUnit を使って実際にアプリケーションを作ることでその使い方を説明していくページにしていく予定です. 単体テストを自動化することで,すこしでもデバッグ作業を減らし,効率よくアプリを作成することができるようになるお手伝いができればと願っております. 余計なお世話かもしれませんが... ^^; 「もっといい方法がある!」とか「そんなことしてたらダメ!」とかご指摘くださいますとありがたいです. catoo までお気軽にメールしてください. なお例題として作成するのは「燃費計算ソフト」です. |
|||||||
| 燃費計算ソフトの仕様 | |||||||
|
最初は簡単なものでいいので,以下のようなユースケースを考えています.
以上から,燃費計算ソフトには詳細編集画面と一覧画面があればよいようです. 私はより具体的にイメージしやすいようにいつもテキストデータでプロトタイプを作成しています. テキストなのですぐに前後を入れ替えたりコメントを記しておくにも便利だとおもうのですがいかがでしょう? 【給油画面】 +------+ |Refill| ▼ My Car ← 車種を選択 +------+----------------------+ | Date: [01/02/12] | ← 日付を選択 | Mileage: [0][0][0][3][0][0] | ← 各数値がボタンでタップするとその桁がカウントアップする | Vendor: ▼○×スタンド____ | ← 最近行ったガソリンスタンドを 10 個所までおぼえておく | Grade: ▼Regular | ← レギュラー,ハイオクなどをリストから選択 | Amount:__31.33 ▼Liter | ← リットルとガロンを選択可能とする(小数は 2 桁) | Cost:___3412 | ← トータルの金額を入力 | Note:___________________ | | ___________________ | | ___________________ | | ___________________ | | ___________________ | | ___________________ | | | |(Done) | ← 一覧画面に遷移 +-----------------------------+ 【一覧画面】 +---+ |MPL| ▼ My Car ← 車種を選択 +---+-------------------------+ |Date Vendor ▼MPL | ← MPL,MPG(ガロン)のほか金額や単価(Cost÷Amount)を |2/12 ○×スタ... 9.58 ↑| 選択可能とする | | | | | | | | | | | | | | | | | | | | | ↓| |(Refill) | ← 給油画面に遷移 +-----------------------------+ 【設定画面】 +-----------------------------+ | Preferences | +-----------------------------+ |Currency Decimal Places: ▼2 | ← 通貨の小数点以下の桁数 |Default Unit: ▼Liter | ← デフォルトの単位 |Sort by : ▼Date Des. | ← 一覧のソート順 | | |(OK)(Cancel) | +-----------------------------+ そうそうアプリケーションの名前は mileage per liter を略して MPL としましょう. |
|||||||
| 準備 | |||||||
|
それではアプリケーション作成の準備にかかりましょう. やらなければならない準備が多いので大変ですが,辛抱ください. まず作業ディレクトリを作成します. PalmUnit のヘッダファイルやライブラリとあわせて次のような構成にしてみます.
では PalmUnit のヘッダファイルとライブラリをインストールしましょう.
編集ができたら PalmUnit をインストールします. hoge [~] $ cd prog/PalmUnit/framework hoge [~/prog/PalmUnit/framework] $ make hoge [~/prog/PalmUnit/framework] $ make install これで
hoge [~] $ cd prog/PalmUnit/src hoge [~/prog/PalmUnit/src] $ cp * ~/prog/MPL/Palm/test hoge [~/prog/PalmUnit/src] $ cd ~/prog/MPL/Palm/test hoge [~/prog/MPL/Palm/test] $ rm Sample* hoge [~/prog/MPL/Palm/test] $ rm AllTests.* つぎに Makefile の編集です.
最後に PalmUnit.cc を編集します. 先ほど削除したサンプル用のテストを呼んでいるところを削除してください.
これでやっと準備がおわりました. お疲れ様でした. m(__)m |
|||||||
| 失敗するテスト | |||||||
|
準備も終わりましたので早速 Unit Test をつくりましょう. 最初のテスト対象は
ではコンパイルしてみましょう. おっとその前に POSEAUTOLOADPATH に POSE の Autoload ディレクトリを設定しておいてください. 詳細についてはこちらをどうぞ. hoge [~] $ cd prog/MPL/Palm hoge [~/prog/MPL/Palm] make test うまくコンパイルできましたでしょうか? うまくできたら POSE を起動してみましょう. 次のような画面が表示されれば OK です. PalmUnit アイコンをタップし, AllTests を選択してテストを実行してみてください.
今回は失敗するようにテストを作成しているので上記のような画面になります. |
|||||||
| 通貨クラス | |||||||
|
いよいよ Unit Test の記述です. ここまで長い道のりでした.^^; さて,
これを Unit Test で書くと次のようになります. CurrencyTest.cc の
ではコンパイルしてみましょう. え?,失敗するに決まってるって? それが狙いなのです. XP というプログラミングスタイルでは,まずテストを記述します. そしてそれを実行して失敗するところから始めるのです. 失敗するとその原因を取り除くもっともシンプルな解法を実装していきます. ここでは
さて今度はどうでしょうか. コンパイルはちゃんととおりました. POSE で実行してみるとどうでしょう. POSE をリセットしてみてください. make test でコンパイルしていれば新しい PalmUnit.prc が POSEAUTOLOADPATH にコピーされていますので,リセットするだけ再ロードできます. PalmUnit を実行すると Failures が 2 個になるはずです. 一覧をタップしてみてください. 次のようにその失敗の内容がポップアップします.
このように PalmUnit はなんと言う名前のテスト (parse) のどういう期待値 (expected:<1980>) が実際にはどういう値 (but was:<0>)だったのかを,そのテスト個所(CurrencyTest.cc:14) とともに報告してくれます. どうです. ちょっと便利なような気がしませんか. それとも「なんかピンとこない」といったところでしょうか. まぁそれはさておき,先に進みましょうか. これらはテストですからパスするようにしなければなりません. ということで Currency クラスを実装します. できるだけシンプルに...
Currency.ccの実装はこんな感じでしょうか. (ぜんぜんシンプルじゃない?) 各ファイル (currency2.tar.gz) はこちらからダウンロードできます. test ディレクトリの Makefile も変更しているので注意してください. コンパイルして POSE で動かしてみてください. 今度はテストをパスするはずです. これで少なくとも Unit Test に記述したテストケースについては正しく動くことが確かめられました. では他のケースではどうでしょうか. もっといろいろなテストを追加してみましょう.
テスト結果はいかがでしたか? どうでしょうか. こんな感じでちょっとずつ「実装してはテストを行う」というサイクルを繰り返すことで,どこでおかしくなったのか,なにがおかしいのか,ということを追いやすくなります. 負の金額を処理できるようになった |
|||||||
| 通貨クラスの機能拡張 | |||||||
|
ところで, Palm では Prefs の Formats で数値のフォーマットを指定することができるようになっています. ここには次のような候補がリストされます.
これらの数値フォーマットは SDK ヘッダファイルの中で,次のように定義されています.
MPL を海外のユーザにも使ってもらうためには, まず最初にテストケースから考えましょう.
さぁコンパイルしてみましょう. 失敗します. じゃぁソースを修正して,コンパイルを通して,テストしてみて,と作業を進めてみてください. ちょっと直してはすぐテストをするようにしてくださいね. そうすることでどの時点でおかしくなったのかが把握しやすくなります. 私の場合のコードとテスト (currency4.tar.gz) がこちらからダウンロードできます. 参考になれば幸いです. 「こうすればもっとシンプルになる」などありましたらどしどしお知らせください. よろしくお願いします. |
|||||||
| フォームの実装 | |||||||
|
すみません,力つきました. 文章を書くのは結構たいへんなのですね. 代わりといってはなんですが GUI を実装した全てのソースを Download のページで公開しておりますので参考にしてください. |
|||||||
| TOP | Environment  | POSE  | PalmUnit | Download  |   |