cfneoってナンジャラホイ?

cfneoってなーに?みたいな事を考えた時に、ちょっと端的な表現が浮かばなかったのでそれを探った経路をメモ。


率直に言ってしまえば「テスティング・フレームワーク」です。でも、単にテストをするだけなら個別にテスト・ドライバ作れば?Assertionだって共通ライブラリ化する必要なくね?みたいに思います。つまり、わざわざcfneoなんつー妙な名前を与えてOSSとして開発するだけのもんなの?ってとこですね。

実際、cfneoのテスト・ドライバでサポートしている部分は、想定値と実際値の比較とそれを<tr>〜< /tr>として吐き出すよというもので、Eclipseで使うJUnitのUIをブラウザ上で真似たようなものです。Version0.01ではとりあえずここまで。次はもう少し何かをがんばるつもりです。(cfneo-Projectのチーフ・テスターからドキュメントについてDisられたので、これからもう少し頑張って書かないといけませんが><)


Seasar Conference 2008 Autumnという舞台で講演とかしながら、やってる事はソンナモンかい。と言われちゃいそうですが、まぁ今のところそんなもんなんですw

でも、そのJUnitライクなテストを実現する為には何が必要か?みたいな点に焦点を当てた時、設計だったりドキュメントだったりそういったものがないとダメかも、という事でその辺を何とか充実させたいなというのが最初のアプローチ、つまり今回リリースしようとしているcfneoのキモだったりする訳です。
テストし易い設計を意識しないとダメですし、それをチーム内や保守フェイズに入った後に担当者が変わる場合になるべくずれの無い伝達をしておかないと、と。ユーザガイドと設計ガイドはそのへんを意識してます。


ラインアップの充実を目指すとただの「開発標準」になってしまうので、OSSらしくこれを突き詰めていく方向に進めていきたいですね。

で、SC2008Autumnでid:cactusmanから頂いたご意見。

  • CIツールで定期実行すればいいと思った
  • レポーティング機能があればスーツに訴えかけやすくなる
2008-09-07 - cactusman日誌

ここが実は自分も考えつつ悩んでいるところ。

ようするに、ブラウザを起動しないとテストが実行されない、というのが良くも悪くもネックになっていて、例えば「SVNから最新のコードをチェックアウトしてすぐにブラウザを開けば結果が見れる」という、ビルド・デプロイ要らずの言語である利点を活かしたという見方も出来るんですが、膨大なテストをやろうとした時ってタイムアウト怖くね?といった懸案も一緒に抱えてしまいます。

その上で定期実行なんて出来るの?と。
しかもその結果をどっかにストレージしないとレポーティングにならないんですが、ストレージ部分はストレージ部分で結構悩みドコロです。


というか、現時点のcfneoの実装では、1つのテスト対象に対してテストコードを分割して作るとあのTest driver listからは見れなくなっちゃいます。アプリケーションのルートから、単純にディレクトリを掘り下げてテスト対象となりそうなファイルを探し出し、それをテストドライバのファイル名に置き換えた後にそのファイルが存在しているかどうかを判定してあの一覧に出しているので、ファイル名の置き換えルールから外れると「テストコード書け」な表示になるんです。

例えば、Sample.cfcというテスト対象に対してcfneoが生成するテストドライバのファイル名は必ずSampleTest.cfmになります。そのため、これを2つに分割してSampleTest1.cfm、SampleTest2.cfm等とすると、Test driver listを作る際SampleTest.cfmを探しに行って見つからないので「Create test driver.」が表示されます。また、SampleTest1.cfm、SampleTest2.cfmの元になるテスト対象がないため、そもそも一覧にリストアップされる事すらありません。

となると、1つのテストドライバでテストを書くしかないので、巨大なデータを一気に流すようなテストを行う場合はタイムアウトを凄く心配しないといけません。

さらに、実はTest driver listの画面ですべてのテストを実行するというのも一度実装してみたんですが、表示に異常に時間がかかる為断念した、という経緯があったりします。


また先ほどチラリと書いたストレージについてですが、ColdFusionでは特定のデータベースを使えるようにする際、ColdFusionAdministratorという管理コンソールを開けて、そこで設定をしなくてはなりません。という事は、cfneoをダウンロードしてColdFusionのwwwroot直下にコピーするだけじゃなく、面倒な設定を個別にやらなくてはならない訳ですが、これでは導入の敷居を上げてしまいます。

なので、可能な限りデータベースを使わないようにしようというのが、cfneo Version0.01の1つのテーマでありました。

また、ColdFusionではJavaで書いたコードを使う事も可能なのですが、これも以前エントリに書いたように管理コンソールで使いたいjarのパスを設定する必要があります。これもやっぱり冗長な作業で、導入の敷居を上げてしまいます。

という訳で、何かしらのデータをストレージするということをするようなシーンでは、cfneoはまだまだ全然ダメです。


以上を踏まえて、cfneoはなるべくCFMLだけで実装しようとしているのですが、RubyPython等と違ってそもそも投げられたリクエストを処理する為だけの言語ですので、CIをするにせよレポーティングをするにせよ、CFMLではカバーできないのでColdFusion以外のUIを持ったものを別途作らないといけない、という事ですね。


これはVersion0.02への課題です。