やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

システムテスト自動化カンファレンス2013で「スマートフォンアプリのテスト自動化をはじめよう」をお話してきました #stac2013

テスト自動化研究会主催のシステムテスト自動化カンファレンス2013にスタッフとして参加&モバイル枠をいただいてお話してきました。

システムテスト自動化カンファレンス2013ツイートまとめ - Togetterまとめ

毒食わば皿まで

古来より「毒食わば皿まで」という言葉がありまして、これはつまり「スライドを使いまわした*1ならブログエントリも使い回せばいいじゃない」という意味なのですが、さすがに心苦しいので以下オリジナルの補足をします。

尚、スライド自体もiOSに関する記述を追記したり*2、構成を見なおしたりしています。

テストレベルについての補足

途中で言った「『ユニットテストの話はするな』という圧力」はもちろん冗談なのですが、テストレベルに関して説明不足を感じたので補足します。

スライドでは「ユニットテスト」で済ませている部分、デブサミ2012でのAndroidテスト部講演や、書籍Androidアプリ テスト技法では「モデル*3ユニットテスト」を適切に切り出してテストすべきで、テスト困難なViewとControllerはシステムテストなど上位で実施すればいい*4のではないか、という方針でした。

それに対し、現時点では「モデルだけでなく、ビューのユニットテスト」まで行なった上で、Controllerはシステムテストで担保できれば良いのではないか、と考えています。

スライドにも「(システムテストでは)日時、天気、株価、為替、乱数などに起因するJudge*5を無理にはしない」と書いていますが、表示内容や最小桁/最大桁での見栄えはユニットテストで実施可能です。

もちろんUIの変更が発生するとテストのメンテナンスも必要になってしまうのですが、システムテストレベルで(スタブサーバを用意するなどして*6)実施するテストよりも楽に対応できるはずです。

尚、Viewのユニットテストを行なう前提は以下の二点です。

  • GHUnitなどイメージ比較をサポートしているテストフレームワークを使う
  • Viewに表示内容を渡す部分が切りだされている(MVVMにおけるViewModel的なもの。ControllerにsetText()等が書かれていないこと)

まずユニットテストからはじめなければ!という方は、テスト技法からユニットテストの基礎、Mockito、Robotiumなども載っているこちらの書籍をぜひお読みください(宣伝)

Androidアプリ テスト技法

Androidアプリ テスト技法

質疑応答(12/6追記)

これからモバイルのテストをやろうとする人へのオススメは?

まず、ちゃんとユニットテストを書きましょう。 開発者テストから入れない事情があるのであれば、Monkey Talkなどでハッピーパスから入ることをおすすめします。

モバイル向けWebアプリとネオティブアプリとの違いは?

システムテストなど上層のテストでは観点や手段などはほとんど変わらないと思います。ユニットテストなど開発者テストでは差があるはず。 WebViewのテストはMonkey Talkでもサポートされています。

システムテストではスクリプトを書くスキルは必要なのか?

自分は(開発者なので)ツールでキャプチャしたものより、スクリプトを書いています。 ひとつのアプリを複数の環境にカスタマイズしている場合など*7、キャプチャしたものをコピペしたものではメンテナンスが大変。

まとめ・感想

まずスタッフとして、手応えのある、とても良いイベントだったと思っています。講演すべて聞けたわけではないのですがどれもとても濃い内容でしたし*8、なにより会場の反応が良く、楽しんでいただけている雰囲気、一体感のようなものを感じられました。

テスト自動化研究会で初の主催イベント、しかもキャパ200人。研究会メンバーで運営にあたりましたが、事前準備、段取り、また会場をご提供いただいた日本オラクル様のサポート、また何より来場いただいた方々のご協力があって大きなトラブルもなく終えることができたと思っています。

自分の発表に関しては、Tizenとか自動化ハイ(©TABOK関西)とかがウケてよかったです。ハイと言えばDIO様のあれをネタ画像に使おうかとも思ったのですが自重したのが少し心残りです。

WebViewのテストについて

Seleniumハンズオン参加者の方から質問をいただいたそうなので(又聞き)ここで回答します。

アプリ内に組み込んだUIWebView/WebViewのテストは、少なくともMonkey Talkではサポートされています。

またSelenium自体にもAndroid Driverがバンドルされ、iOS向けにはios-driverというフレームワークも公開されているようなので、そちらも検討してみてはいかがでしょうか。WEB+DB PRESS Vol.77の特集1-3で紹介されていました。

WEB+DB PRESS Vol.77

WEB+DB PRESS Vol.77

  • 作者: 中川勝樹,山内沙瑛,舟崎健治,吉荒祐一,今井雄太,八木橋徹平,安川健太,近藤宇智朗,奥野幹也,天野祐介,賈成カイ,伊藤直也,住川裕岳,北川貴久,菅原一志,後藤秀宣,久森達郎,登尾徳誠,渡邊恵太,中島聡,A-Listers,小俣裕一,はまちや2,川添貴生,石本光司,舘野祐一,沖田邦夫,澤村正樹,卜部昌平,吉藤博記,片山暁雄,平山毅,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/10/24
  • メディア: 大型本
  • この商品を含むブログ (3件) を見る

12/3追記

@dageziさんより、RobotiumでもWebViewの中のエレメントにアクセスできるとの情報をいただきました。ありがとうございました!

*1:ひとつ前のエントリ参照。でも結構アドリブで違うこと喋ってるのです

*2:そもそもこちらがオリジナルで、Quesは後から決まった話なので削った、が正しい

*3:MVCのModel

*4:Controllerの責務にフォーカスするという意味ではなく、画面遷移やUIイベントを実行すれば確認できたと言えるので

*5:自動化の三要素(Drive, Judge, Report)からこう書いていますが、xUnitで言うAssertion

*6:そもそもスタブサーバを使うテストがシステムテストと言えるか、という話もあります

*7:これはちょっと例が悪かったのですが

*8:私のが一番内容薄くてごめんなさい感でいっぱいです