スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

symfony1.4 jobeet 8日目

今回はユニットテストの説明。

1.0でもユニットテストやろうとしたけど挫折して、1.4ではユニットテストも使い易くなってるって記事を読んだ記憶があるのでかなり期待。
後、個人的な課題として開発工程にテスト駆動を取り入れたいので今回と次回機能テストは俺の中で結構重要な意味を持ってます。

まずはlimeテストフレームワークとテストに使用するメソッドの説明。

で、実際サンプルに基づいてJobeetクラスのテスト。
環境がWindowsでCygwinも入っていないのでグリーンにはなりません。(気が向いたらCygwin入れるかも)

その後に実際に以前作ったslugifyメソッドをテスト。
既に存在するメソッドに対してこう動くよねって視点のテストなので問題なく全部通りました。

その後、テストケースにコメントを追加して何のテストを行ったか表示するように修正。
1.0でもそうだったけど試しに日本語入れると当然化けました。
symfonyのソースファイルは基本UTF-8なのに対してコマンドプロンプトはShift-JISなので当然の結果。
そこで以前調べたコマンドプロンプトでUTF-8を表示する方法を実行して無事日本語も表示出来た。

コラム的な感じでカバレッジを調べる方法も書かれてたので試しに実行したらXDebugが入ってないので当然のようにカバレッジの計測は出来ませんでした。
なので、XDebugのインストール。
インストール方法が書かれてるサイトを参考にしてdllのダウンロードとphp.iniファイルの設定をしたけどXDebugが反映されない。
参考にしたサイトでは設定値の追加で"zend_extension_ts"という項目名になっていたのを"zend_extension"に変更したら無事反映されました。
このことをtwitterでつぶやいたら@hidenorigotoさんが以下のサイトを教えてくれました。(感謝)
http://www.php-seed.net/blog/archives/95
そこを見ると
1.zend_extensionに
2.もしデバッグビルドが有効なら、_debugを付けて、
3.もし、スレッドセーフが有効なら、_tsを付ける。
ということらしい。
真面目にtsをtestの略で参考にしたサイトはtest的にこの項目追加してますよって事なんだと思ってた^^;

その後、slugifyは機能が足りてないとの事なので新しい機能の実装。ここで本来のTDDにそってコードの修正を行う。
1.まずテストケースを追加してテストを実行し、レッドを表示(テストを失敗させる)。
2.コードの修正。
3.再度テストを実行してグリーンを表示(修正が正しいことを確認)。

その後、slugifyにはまだバグがあるのでバグを確認できるテストケースを追加して上記の流れ(レッド->修正->グリーン)で再度修正。

iconv(翻字(言語学において特定の言語を記した文字表記を別の文字による表記に移すこと))についてのコラムも記載されているのでついでだからそれもやってみた。
だが、ここで問題が。。。
コラムでは"Développeur Web"のテスト結果は"developpeur-web"となっているがテストが通らない。
で、調べてみるを"Développeur Web"にiconvを実行すると"D'eveloppeur Web"となってるため"'"が"-"に置き換えられてテストを失敗している。
しょうがないので"Développeur Web"のテストの期待値を"d-eveloppeur-web"にしてテストを通した。

 さらにこの後、Doctrine モデルクラスのユニットテストの説明
まずはテストに使用するDBの作成とテスト用DBに接続するための設定の追加。
設定の追加は以下のコマンドの実行で完了するのでラクチン。
php symfony configure:database --name=doctrine --class=sfDoctrineDatabase --env=test "mysql:host=localhost;dbname=jobeet_test" root mYsEcret
Doctrine モデルクラスのテストにはDBに接続する必要があるのでセットアップ用のクラスを追加。
後は、SQL発行するコードを書いて、上記のユニットテストとほぼ同じ流れでテストを実行。
DB取得してのテストこれでいいが今回saveメソッドをオーバーライドしてるのでそれのテストも行う。
しかし、saveメソッドテストちょっとややこしくインサートするために値のセットが必要なので値をセットするためのメソッドを追加。
その後、ユニットテスト実行して、無事終了。

試しにJobeetJobクラスのカバレッジ測ってみたら100%じゃなかったので、勉強のつもりでカバレッジが100%になるようにテストケースを修正してみた。
100%じゃない理由は__toString・getPositionSlug・getLocationSlugがテストされて無いため、これらのメソッドのテストケースを追加して無事カバレッジも100%になりました。
スポンサーサイト

DEVLOVE CHANGE THE FUTURE 「僕らの開発がアジャイルであるために」に参加しました

やっとblogを始めた本来の目的を果たせる。

勉強会はblogを書くまでが勉強会

過去幾度となく聞かされた言葉。
これで俺もようやくきちんと勉強会を完了させることが出来るようになった。

今回の内容は下記お二方によるXP祭り関西2010での講演の再演でした。
○倉貫義人さん http://kuranuki.sonicgarden.jp/
「XPの10年を振り返る」
○木下史彦さん http://fkino.net/
「アジャイルアンチパターン ~私がアジャイルの1周目で学んだこととXPの次の10年~」

 講演の内容をメモが苦手な俺が頑張ってメモったのですが、内容は下記スライドを参照してください。
「XPの10年を振り返る」
http://forza.cocolog-nifty.com/blog/2010/02/xp2010xp10-9e57.html
「アジャイルアンチパターン ~私がアジャイルの1周目で学んだこととXPの次の10年~」
http://fkino.net/20100206.html

今回の参加で俺が聞きたかったこと知りたかったことは"受託開発でもアジャイルな開発が出来るのか"。
これは自分が受託案件メインで開発してるのと事前に倉貫さんの「XPの10年を振り返る」のスライドを見てて、失敗した事例が受託開発だった為。
倉貫さんの話を聞いてると"受託開発でのアジャイルは難しいのかな"という気持ちになってきた。

その後、木下さんが受託開発だけどアジャイルで行っているという話をされました。
その中でアジャイルアンチパターンとしていくつか紹介があり、印象深いものでは
・受け入れられないスコープ調整
・進みすぎる問題
がありました。
上記、2つなんかは受託開発では特に問題になることかもしれない。

答えが見つからない中偶然帰りの電車で倉貫さんと一緒になったので話を聞いてもらった。
その中でtwitterにもツィートされてたけどこんな話になった。

受託だから難しいですよね、ではなく、やってみてから難しかったと言えば良い。初めてやることで、最初からうまくいくわけない。情報が多過ぎて頭でっかちになってる。契約が、とか言う前にやってみないと。完璧に用意された状況まで始めないなんて、それこそAgileではないよ。 #devlove

確かにそうなんだよな。
今テスト駆動開発を導入しようと試行錯誤してるけどテストコードめんどくさそうとか躊躇する理由はたくさん出てきてなかなか導入に踏み切れないけど実際導入してみないと何がめんどくさいのか分からないし、どうすればめんどくささが解消されるかも分からないからとりあえずやってみることが大事なんだなと思う。

う~ん。うまくまとまらないので現時点でのアジャイルに対する俺の意見を綴ってみる。
まず、誰もがそうだと思うけど目的はいい製品を作る、開発者が活き活きと仕事をすることなんだよね。
アジャイルを導入することが目的ではなく、アジャイルは上記を満たすための手段でしか無いんだよね。
上記を満たせるならウォーターフォールでもいいんだと思う。
後、アジャイル(XP)にはいくつかプラクティスがあるけど全部導入する必要も無いよね。
チームに合わないプラクティスは省けばいいし、一度に全部導入できないなら部分的に導入すればいいし。
実際俺は一気に導入できないから徐々に導入していって現時点ではコーディング標準、バージョン管理、コードの共同所有、10分ビルドだけ導入してる。(してた?最近職場変わったから新しい職場でまた0から導入するけど)
で、今はテスト駆動開発を導入しようと試行錯誤してる。

省くプラクティスも単純にやらないんじゃなくて実際やってみて問題を明確にして省くって判断をしたい。そのためにはどんどん導入してたくさん失敗してアジャイルを理解する必要があるな。

まだまだ勉強不足なんでもっともっとアジャイルは勉強したいな。

グダグダな文章ですみません。
検索フォーム
カレンダー
03 | 2010/04 | 05
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
RSSリンクの表示
last.fm
twitter
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。