雀巽の日記帳

雀巽が綴る日常の記録

Testing Casual Talks #2 に参加した!

表題の勉強会に参加してきました!

実は、競技プログラマーミートアップ #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)での取り組みについて。

ツール

メリット

  • 本当に手動でのテストが必要な部分のみに集中できる
    • UI / レイアウトは自動テストでは担保できない
    • 実機に依存している部分も自動テストではできない

問題点

  • テストケースが増えるだけ実行時間が長くなる
    • テストケースは削りたくない
    • テストの並列化による高速化を行う!

テスト並列化へのアプローチ

  • 各環境でテストが衝突しないようにする必要がある
  • 専用データを用意する (サービスの API を使うのがベスト)
    • テスト毎に各テスト専用のデータを用意
  • テスト実行ノードは複数で DB は単一にする

成果

  • 8並列テストが可能になった
    • 2.5h -> 30min

まとめ

  • 自動テストの並列化により実行時間を削減
  • 独自 API を実装することで様々な問題に対応

感想

ミドルウェアの設定を mruby で書く話は本当に良かった!!ぜひチャレンジしたい!

それと、テスト並列化の話もチャレンジしてみたいと思った。 テストが早くなるのは本当に嬉しい。生産性超上がると思う。

良い勉強会だった!