表題の勉強会に参加してきました!
実は、競技プログラマーミートアップ #0 〜topcoder & AtCoder〜に行く気満々だったのですが、距離 & 業務の都合でこっちの勉強会への参加となりました。
競技プログラマーミートアップは次回があれば絶対参加したい……!!
概要
MacBook Air の充電が途中で切れたため、発表についてのみまとめています。
- mruby のテスト方法についての試行錯誤
- スクラム開発において、テストメンバー(非開発者)の関わり方を模索してみた
- 大規模 Web サービスのブラウザテスト自動化・並列化
個人的には、mruby を使った Middleware as Code な話が最高にアツかったです。
mruby のテスト方法についての試行錯誤
mruby を使って「ミドルウェア」のテストを行った話。
mrubyについて
- 省メモリ版の Ruby 実装
- 色々なものに組み込める
利点
- 本番環境で動かすのが楽
- ミドルウェアに組み込むことができる
ngx_mruby
- Nginx のプロセス中で Ruby を動かすことができる
- Nginx の conf を mruby で書くことによりテストが可能になる
テストについて
- 動いてるコードは全てテストされるべき
- Nginx の conf 内の Ruby コードもテストすべき
- Ruby2 系でテストを作成することにした
- Nginx のダミークラスを作成
Test::Unit
を継承したテスト用クラスに、対象の mruby のコードをrequire
しテストを書く- moc/stab が増えてダークサイドへ落ちる
- mruby で mruby のテストを書こう!
テスト必須項目
mruby-mtest
- mruby 用のミニマムテストフレームワーク
- mruby-mtest を使ってインラインテスト
- mtest 環境のときだけテストが実行されるようなコード
- mtest を組み込んだバイナリと本番用バイナリを作ってテストを実行している
- 本番用とテスト用でのライブラリが異なってしまっているので、最終的には同一のものを使いたい
スクラム開発において、テストメンバー(非開発者)の関わり方を模索してみた
- 各スプリントにテストも組み込む
- スプリントに収まりきらなかった
- 次のスプリントに組み込むことで対応
- QA が最初から入ることによって要件定義の充実化
- 実際に要件漏れを指摘することができた
大規模 Web サービスのブラウザテスト自動化・並列化
DeNA の SWET (Software Engineer in Test)での取り組みについて。
- 開発者によるユニットテスト + SEWT による E2E テスト
ツール
メリット
- 本当に手動でのテストが必要な部分のみに集中できる
- UI / レイアウトは自動テストでは担保できない
- 実機に依存している部分も自動テストではできない
問題点
- テストケースが増えるだけ実行時間が長くなる
- テストケースは削りたくない
- テストの並列化による高速化を行う!
テスト並列化へのアプローチ
成果
- 8並列テストが可能になった
- 2.5h -> 30min
まとめ
- 自動テストの並列化により実行時間を削減
- 独自 API を実装することで様々な問題に対応
感想
ミドルウェアの設定を mruby で書く話は本当に良かった!!ぜひチャレンジしたい!
それと、テスト並列化の話もチャレンジしてみたいと思った。 テストが早くなるのは本当に嬉しい。生産性超上がると思う。
良い勉強会だった!