第64回PHP勉強会@東京

日時:2013/01/31
場所:VOYAGE GROUP様セミナールーム

phpstudy#64 – Togetter

CakePHP2+BDD Pluginでカンタン受入れテスト(kaz_29)

CakePHP2+BDD Pluginで カンタン受入れテスト // Speaker Deck

BDDとは?

振舞駆動開発(ビヘイビア駆動開発)

なぜBDDなのか

受け入れテスト
→テストツールとして、Seleniumを使っていたが、テストケースのメンテナンスが面倒だったので挫折。

主なPHPのBDDツール

シナリオを作るときの大きさは画面一枚くらい
大きすぎるときは分割を検討

BDD Plugin for CakePHP2

導入後のテスト

  • TDD/BDDはしていない
  • 単体・結合テスト→CakePHPで書いてPHPUnit
  • 受け入れテスト→BDDでストーリーベース

受け入れテスト

  • 開発/CIはHtmlUnit(GUIレスなブラウザ)で実行
  • ブラウザごとのプロファイルを用意
  • ブラウザテストは手動実行

CI(jenkins)でやっていること

  • UniTest (Code Coverage)
  • 受け入れテスト
  • コード解析(phpcs/phpmd/phpcpd)

デモ

実際にプラグインを実行しているところをデモ。
ブラウザが自動的に立ち上がってスペックのチェックを実行していった。
バックエンドでSeleniumが動いており、プラグインがSeleniumのコードを吐き出し、Seleniumがブラウザを動かすとのこと。

注意点

  • window.confirm()/alert()はHtmlUnitでは認識できない
    →jQueryでラッパーしてダイアログ化
  • ブラウザによってはタイミングによってエラーになることも
    →waitを入れる

DietCake (halt)

DietCake – Fastest MVC framework skeleton for PHP

特徴

  • 高速動作
    CakePHPで書いていたが、大量のアクセスを裁く必要のあるソーシャルゲームを実装するにあたっては不都合が生じた。
  • 学習コストが低い
    多くの人が関わり、流動性もあるので、早く正しく書けるようにする。
    →bakeやoilコマンドを使って雛形を生成する事自体、学習コストがかかっている

DB処理

  • 多くのフレームワークはO/R マッパーを使うor内蔵している。
  • DietCakeに標準ではO/R マッパーはない。カスタマイズとして組み入れることは可能。
  • 昔はO/R マッパーを使っていたが、年月がたった今はSQLの知識は必要と思う。

    秒間数千アクセスがあり書き込みが多いソーシャルゲームでは生のSQLの知識が必要である。
    例)SELECT … FOR UPDATE と SELECT … LOCK IN SHARE MODEの違いなどのロックの知識
    MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.10.5 SELECT … FOR UPDATE と SELECT … LOCK IN SHARE MODE ロック読み取り
  • 簡単なものでもSQLを書くようにしている

学習コスト

  • Symfony,CakePHPの機能を知るのにどれくらいかかるか
    例)とあるSymfonyを使った案件で、あるコードがヘルパーがあるのに、それを使わずに書いていた。(そいういうヘルパーがあることを知らなかったから)
  • コントローラー肥大化問題
    本来モデルが行うことをコントローラーに書くことでコントローラーが肥大化していく。
    コントローラーの責務はモデルから値を取得してビューに渡す。
  • 協力会社の人が3日程度で書けるようになった。

コア部分の最終更新は1年前

サボっているのではなく、当初から高速動作などを前提に設計しているため、1年間変更する必要性がなかった。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中