みなさん10連休はいかがお過ごしですか、iOSエンジニアの @imaizume です。
自分は技術書典 6で買い込んだ積読本にようやく目を通しています。
さて前回のOtemachi.swift #3に続き、4/16に株式会社DeNAさんで行われたiOS Test Night #10に登壇して参りました。
iOS Test Nightは今回が記念すべき第10回で、今回も主にiOSでのテスト手法やCI関連の発表がされていました。
ちなみに過去に行われた回では弊社の @kikuchy が登壇したこともあります。
そんな中今回、自分は初登壇のLT枠で「iOSアプリのテストを書きたいのに書けないあなたへ」という発表をさせていただきました。
自分が入社以来携わり続けているPoiboyでは、恥ずかしながらつい最近までテストコードがほぼが存在しませんでした。
テストのメリットを感じつつも長い間導入できなかった要因はいくつかありますが、その一つに「iOSアプリのテストの書き方が分からない」というものがありました。
大学の授業や入社後の研修でテストの書き方自体は習っていましたが、それは題材のコードが明示的な入出力関係を持っていたためでした。
一方スライド内でも紹介している通り、iOSアプリのコードは必ずしも入出力が明確なものばかりではなく、テストを書こうと思ってもうまく書けず失敗を重ねていたのでした。
その後、明示的な入出力があって小さなコードを選んでテストを書き始めたところ、徐々にテストを書くことができるようになりました。
また実際のプロダクトで起こったことを例に、テストが書きにくそうなコードも書きやすいコードに変えていくための手法として、依存注入と抽象化、また設計を行う前段としてのモジュール分割も紹介させていただきました。
今回は自分と同じようにテストをうまく書けないという方に向けて発表をいたしましたが、既にテストに慣れている方や他の登壇者からも、発表に対してのポジティブな感想をいただくことができました。
Parametrized Test だー。これはいいテスト。 #ios_test_night
— クニワッ (@orga_chem) April 16, 2019
テストコードを書くのって実装コードを書くのとちょっと違った経験値が必要だと思うので、書きやすいところから書くのは良いと思います :+1: #ios_test_night
— Kenta.Kase (@Kesin11) April 16, 2019
また発表中に紹介した「テストを書きやすいところから書く」という方針に対し、@kariad_uu さんからこのようなご意見もいただきました。
書きやすいところから書くのは一長一短あると思っている派 #ios_test_night
— kariad/かりあど (@kariad_uu) April 16, 2019
懇親会でもこのテーマでお話しさせていただき、やはりテスト経験のある開発者にとっては、簡単なテストは作業に近くなってしまいモチベーションも下がるという点には自分もまさに同意でした。
一方自分の場合は、iOSでのテスト経験が0でとりあえずの練習をしたかったこと、またチェックマークの数自体が増えることにモチベーションを持っていたこともあり、これまでは特にこの点を気にしていませんでした。
ただ今後は、実効性が高いロジックに有用なテストを書いていくということを意識して、よりレベルの高いテストを実践していきたいと思いました。
他の発表者で個人的に気になったのは @susieyy さんの「Snapshot Testing」でした。
Snapshot Testing in iOS #ios_test_night
— susieyy (@susieyy) April 16, 2019
本日の登壇資料です!https://t.co/kQwOnWdrFf
Snapshot Image UI Testingというテスト手法は、目的の画面のスクリーンショットを撮影し実際の動作と差が出ていないことを確認するための手法で、スライドにもある通りレビュー負荷の軽減や画面カタログを容易に作成することができます。
またiOSSnapshotTestCaseというフレームワークにより、これをUITestではなくUnitTestのレイヤーで行うことができます。
自分のいるPoiboyでも、リリースごとにQA担当者に実機を使って表示上の不具合を発見してもらっていますが、デバイスも多様化も相まって負担が大きいことは紛れもない事実です。
そのため今後は同手法を活用してデバッグの高速化を目指したいなと思いました。
懇親会では他社でのテストにおける悩みや知見をお話したり、今回お話できなかった組織的な側面についての意見交換もさせていただくことができました。
また懇親会では珍しいカレーの提供がありました、大変美味しかったので自分は2杯もいただいてしまいました(笑)
懇親会のカレーがとても美味しかったです#ios_test_night pic.twitter.com/4U4wIyIuv2
— Tomohiro Imaizumi - GitコンサルタントやってるiOSプログラマー (@imaizume) April 16, 2019
このようにまだまだ発展途上な部分もありますが、Diverseではこうした新しい技術へのチャレンジもサポートしています!
ぜひ自分と同じくアプリのコード・設計改善に興味がある方は、お気軽に @imaizume までDMなりコメントなりをいただければと思います。