UI Test の楽しさとメリット | try! Swift Tokyo 2018 Day1-11

多くのiOS開発者はユニットテストには精通していますが、Xcodeを使ったUIテストを行なっていない方が多いと思います。自分のアプリに UI テストを導入した際のハイライトと、すべてをテストすることの苦労を共有します。

UI Test の楽しさとメリット

ビジネスロジックとDBのインテグレーション

コードのテストは簡単です。DIでXMLでクラスを設定して、、、

まだUIがなかったのでUIテストを心配する必要はなかったのです

これがテストとの蜜月だったといえるでしょう

f:id:niwatako:20180301154054j:plain

ですが5年前変わったといえる

UI開発は謎に包まれた興味のあるものでした

最初にコードを見て、VisualInterfaceと見ることができました。

フロントチームを待たずにアプリケーション全体を書くことができました。 テストに情熱を持っていましたがチームはそうではなかった。

これをテスト、ものとして売ることはできませんでした。

クライアントはお金は払いたくない、ですがコードは維持しなければならない

XCTestはMVCとUIKitを使ってテストしました。

全てがつながっているということでテストが難しくなったわけです。

iOSのテストは諦めてしまいました。私とテストの関係が壊れてしまった

f:id:niwatako:20180301154244j:plain

しかしWWDCでUIテストサポートが言われた

ワクワクしてUIテストをしてみましたが、最終的にがっかりしました

バグがたくさんあって、機能がなかった

f:id:niwatako:20180301154311j:plain

複雑なコードベース、実際のアプリの中でやることができなかった。

f:id:niwatako:20180301154327j:plain

現在Trelloと言うツールを開発しています。 学校テスト結婚式、いろいろなものを調整することができます。

これを保守しなければなりません。テストが重要です。

求めていた価値を見ることができました。

実際UIテストで何をするか

他のチームは何をしているのか Trelloでどうしているか。どう改善できるのか

f:id:niwatako:20180301154435j:plain

戦略の前にゴールを決めましょう。

目標はアプリが期待通り動くことを見ていく、その無限に時間があるわけではないので、Trelloでは、現在のテスト戦略を見てどこに乖離が歩かみましょう。

テストには様々なレベルがあります。

f:id:niwatako:20180301154515j:plain

ほとんど手動です。

  1. Xcodeを使ってビルドする
  2. バイス上で期待したとおり動くか
  3. Unit Test としてXCTestをします(834項目)。
  4. 結合テスト(アプリケーションの中で各テストを見ていき、正しい体験を提供できる)。現行ではほとんど手動です。
  5. UI Testing テストアカウントで設定して、GUIをテストしていく
  6. 非常に長いタスクだが様々なタスクを含んでいる。カードを作って開いて編集してチェックリストを使って....モックを使わずにサーバーデータで実際に行っている。これがテストを遅らせるので将来自動化したい。
  7. Fastlaneでスナップショットを使うこと

f:id:niwatako:20180301154735j:plain

  1. CI PullRequestをまとめる
  2. QA 担当者が見ていく
  3. βテスト
  4. 各リリースで2つのグループを用いる
  5. プロダクトマネージャーやデザイナーが外部に出す前に確認する
  6. リリースした後もチームの中の開発者、メンバーがデバイスレベルでテストを行います。
  7. 各開発者が1台使ってテストする
  8. Production Testing
  9. すべてのユーザーに対してアプリケーションを提供していきます
  10. ユーザーがたくさんいるのでラッキーでした
    • フィードバックを受け取ることができる

サポートチケットをもらうと対応できることになる。

可能な限り多くのユーザーにリーチしようとする

Trelloの成長は口コミで広がったのでユーザーをハッピーにすることが大事だと思っている。

f:id:niwatako:20180301155221j:plain

統合テスト、リリーステストもUIテストに入る。

ではどういったUIテスト機能がXcodeにあるでしょうか

f:id:niwatako:20180301155250j:plain

他のツールも見たが、Xcodeを使うのが適切ということになりました。 全体的にXcodeで使える。チュートリアルをすべて見ました。どのようなUIテストがあるかなど。ボタンのタップやセグエ、エラーハンドリングなど。

とにかく色んなチュートリアルを見ました。

皆さんもやってみていただきたいと思います。 今あるものを見ていきますがこうしたビデオやチュートリアルになり物を見ていきます。

f:id:niwatako:20180301155406j:plain

watchOS向けテストはAppleは提供していないし私達もやっていません。

Siriは音声コマンドをStringとして伝えられるので利用できます。 ただし、レコーディングはSiriでは使えません。また文字列を音声の意図として理解しても、続けるためにはマニュアルでボタンを押す必要があります。

f:id:niwatako:20180301155524j:plain

alertはアクセスできます。

f:id:niwatako:20180301155542j:plain

TransLationはサポートがありません。ラベル文字列をテストしたいというのは難しい。どの言語でも正しく翻訳されているかは大変難しいです。

別の方法でテストするのが良いでしょう。

かなりの問題に直面しました。

一番学んだのはあてにならないということです。

f:id:niwatako:20180301155639j:plain

20%がまったく問題ないのの失敗する。

そのためにUIテストをインテグレーションのビルドに入れるのはおすすめしません。個別に夜間プロセスやマニュアルテストで行うのが良いと思います。

リリースごとに改善はされているので最終的には十分な安定性になると楽観視しています。

f:id:niwatako:20180301155734j:plain

他のチームがどうしているのかTwitterやSlackなどで聞いてみました。

11チームが何らかのUIテストをしている

f:id:niwatako:20180301155757j:plain

また6チームがXcode

f:id:niwatako:20180301155819j:plain

f:id:niwatako:20180301155832j:plain

ほとんどデベロッパーが書いている。あるいはQA担当者が管理

f:id:niwatako:20180301155855j:plain

Kickstartarはオープンソースです。同僚が面白いと教えてくれました

機能の殆どが単体テストで扱えるのでUITestしていない

Java時代を思い出したが、DIなどを使ってテストしやすくしている。

どの言語でもPlaygroundでプレビューを見ることができます。 しかしだいたい均一なアプリのアーキテクチャに依存している。

サンプルアプリをテストする中でPlaygroundにいろんな問題がありました。

PlaygroundはUIと同じで安定しないです。

f:id:niwatako:20180301160038j:plain

f:id:niwatako:20180301160124j:plain

何ができるか

f:id:niwatako:20180301160141j:plain

smokeテストをする、APIのモックを作る、スナップショットテスティング

f:id:niwatako:20180301160213j:plain

[広告]面白かったら、ためになったら

  • はてなブックマークSwift タグをつけてブックマーク!
  • 「インターネットで生活を楽しく豊かにしたい」仲間を募集しています
  • Bitcoin: 3KGqXtR1ZaGVdkvcw8CCNrkDxDhdbZBYHL