日記:Modelのユニットテスト自動化終了

ようやく自転車でヒルクライムしようぜ!で使ってるCakePHPでのModelのユニットテストの自動化が終了しました。これで、データベース系のメソッドをいじっても大丈夫なはず…。まぁあんまりガチガチなユニットテスト組んでないので、微妙かもしれません(戻り値が配列かどうかや、空かどうかなど)。

コントローラのアンダースコアから始まるメソッドに関してもテストしたほうがよさそうな気がしますが、まぁ置いておこうかと。機能追加しながら、ぼちぼちユニットテストも追加のほうが、前に進めるかなと思いますし。テスト実装だけで疲れてしまいそうなので。

AndroidアプリのBatteryCrystalの評価がどんどん下がっていて非常に気持ちが苦しいです。平均点を表す星が2つになってしまいました。英語で、「見た目はいいんだけど、更新されない。なんとかしろ」と突き上げをくらってます。コメントを下さるということは、気に入ってるから使いたいという裏返しだと感じていますので、なんとかしたいのですが、私の使ってるDesireで全く再現せず…。うーん、一体何故なんだろう…。試しにエミュレータの1.6にインストールしてみたのですが、エミュレータのバッテリー状態は50%のまま変わらず。どうやったら変更できるだろうか?とググってみたところ、ありました。

エミュレータ上で電源状態を変更する方法

@adakodaさんのブログで紹介されていましたが、telnetでエミュレータに繋いで、コマンドを叩けば、バッテリーの状態など色々と変えられるようです。これを参考に値を変更したところ、普通に認識してくれました…。バッテリー残量100%で充電状態をfullにしたら、音もちゃんと鳴りました。うーん…。なにが原因なんだろう…(?_?)やっぱり実機で試さないと分からないですね…。土曜日にあるAndroid勉強会@愛媛で、瀬戸デ部の@Toro_KunさんがHT-03Aを貸してくれるとのことなので、そこでなんとかデバッグしたいと思います。

勝手にサービスが落ちるんだろうか…?


日記:CakePHP1.1にてユニットテスト実装

情熱プログラマーで刺激を受けた通りに、「昨日よりよく」を実践するために、CakePHP1.1のソースにユニットテストの自動化の実装を開始しました。とりあえず今日は3つのmodelに対して実装終了。

ユニットテスト自動化ができれば、ソースを改変した結果、バグが発生したときにプログラムがそれを教えてくれるので、プログラマとしては非常に便利な機能なのです。…なのですが、ユニットテスト自動化するためのプログラムを書く工数が必要になるので、面倒だったりしてなかなか書かないのです。特に仕事では。ふぅー…。

前々から仕事でもテスト駆動開発やってみましょうと言ってたのですが、まぁわかっていても動けない。一人でやったとしても、自分の箇所のみしか自動化が定義されていないから、システム全体の安定性を保証できない。与えられている工数も少ないし。なにかと難しいもんです…。テスト工数とか、真っ先に削られますからね…。

全部自動化するっていうのは工数的にも現実的ではないので、CakePHPで言えば、まず必ずやっておきたいのが、modelのテスト自動化。ここだけでもできていれば、ずいぶんバグも減るんではないかと思います。なので、現在はそこに着手しています。次に、componentでしょうか。パーツ単位で区切られるものに関しては有効ですから。helperとかも、できればいいでしょう。

テスト自動化も選択と集中で、まぁもちろん全部できたほうがよいでしょうが、パーツ単位での責任の分化を行って、アプリの成長を阻害しないシステムを作り上げていくことが、アプリと開発者とチームの成長に繋がると信じてます。それが顧客のためにもなる。

機能追加を行った時点でシステムの信頼度は下がるから、全体の再テストする必要があるけれど、その再テストをするためのコストのことをほとんど考えてない。プログラムは一度書いてしまえば(基本的に)文句も言わず短時間でずっと働いてくれる。人は、同じ事を繰り返すとミスも発生しやすくなるし、集中力が途切れるし、つまらない仕事はしたくないから、モチベーションも下がる。そういうコストのことを考えたら、ユニットテスト自動化は絶対にプラスに働く!

そう思いながら、今までちゃんとできていなかったので、頑張って実現していこうと思います。テスト駆動は難しいかもしれないけど、チケット駆動からテスト自動化の流れを入れられればいいかなと。そのほうが現実的な気がする。


日記:不具合修正

自転車にヒルクライムしようぜの不具合報告を早速受けた!やっぱり抜けがあったのか…。こういうのをちゃんとチェックするために、やっぱりユニットテストの自動化を早急に対応するべきだなと痛感。そうでないと、毎回自力でテストとかできないし…。今は適当にそうしているけれど、抜けは必ず起きる。特に面倒くさがりな自分には自動化がいいだろうと思う。Cake1.1でのテスト自動化はよくわかってないのだが…。

ついでにもうひとつバグを見つけてしまった。これは致命的なバグだったので見つけることができてよかった!なんという凡ミスをしていたのだろう。本当に不甲斐ない。

色々とやるべきことがたくさんあって、なかなか前に進んでいる感じがしない。しかし、一つずつ地道に倒していくことで、昨日の自分よりは成長しているということを意識しながら生きていきたい。小さなことでもいい。毎日少しずつでも改善していれば、時間が過ぎれば大きな変化になってくる。


日記:Good Cake化完了!!

ここ1週間程度取り組んできたGood Cake化ですが、ようやく終了しました。
Model側に意味のあるメソッド名でDBから情報を扱えるようにしたので、ずいぶんと再利用性が高まりました。Cake1.1をやっていた頃は、Model側にメソッドを作らないでもDBから情報を扱えるCakePHPって便利だな、とすごく勘違いしてました。色んな本やソースを読む事によって、自分の成長を感じています。昔に比べたらずいぶんよくなったと思います。

とはいっても時間ができるわけでもないので(常にAndroidアプリの開発のことを考えているので)、まずは機能追加をRedMineに登録して、それを目標にやっていこうと思います。Zend Frameworkとかをインポートして、まずツイッター連携をできるといいかなとか思ってます。走行記録を投稿したら、ツイートみたいな。

マッシュアップアワードにも参加したいと思っているので、そのアプリ作成をAndroidかGAEと絡めて勉強しながら形にしていきたいと思います。よし、今日は本読みながら寝よう…。


日記:BatteryCrystalのアップデート、しかし

BatteryCrystalをVer 1.0.2にアップグレードしました。
海外のユーザから使えない使えないとクレームが届きまくっていたのですが、これウィジェットだっつーの!!って思ってたんですが、stachibanaさんから教えていただいたWidgetアプリの起動エラーメッセージを出さなくする方法の情報をみたら、納得。なるほど、アプリをインストールしたときに、開くボタンがあるのだが、それがアクティブになっていてクリックしたらエラーが出て落ちるらしいです。Desireでは開くボタンがアクティブになっていないので、全く気付いていませんでした(そりゃそうか…)。

先の記事を参考に修正を加え、リリースしましたが、評価の修正はなし…(T_T)まあそれが現実ってものかもしれないですね…。よくそういう話聞きますし。あとHT-03Aユーザの方から動かないということで評価1を頂いているのですが、HT-03Aを持ってないから検証できず…(>_<)Desireでは普通に動いているし、自分で作っておきながら結構重宝してるんですがねー、これ。もっと多くの方に使っていただきたいのだけど、検証端末がないとつらい…。 Desireだけでは厳しいなぁ。 前日に頑張りすぎたせいで、寝不足になってしまって頭が働かなかったので、昼間に街に出てブラブラしてきました。久々に無印良品に行ってみたりとか。適当にブラブラと街中を歩くだけでも、いい気分転換になりました。まぁでも大体行く店って、雑貨屋や本屋、電気店ばっかり(^_^;) 少しずつでも前進しよう。