iOSDC 2021 のLTで『Kyash iOSアプリのQAの歴史』というタイトルで話してきました。
Kyashのアプリがリリースされてからの4年半でやってきたことを5分で話すということで説明を省いたところも多かったので、少し補足を入れながら紹介しておきます。
- Kyashの小西です。QAチームでテストの自動化やプロセスの改善などをやっています
- Kyash iOSアプリのQAの歴史ということで、Quality Assuarance、品質保証の話をします
- Kyashがリリースされてから4年半くらい、なるべくバグを出さないようにどんな工夫をしてきたのかという話です
- KyashのiOSアプリがリリースされたのは2017年4月5日、今から約4年半前です
- 当時もVisaによるオンライン決済はできましたが、送金アプリとしてリリースされました
- この時 @konifar はまだいません。入社するのはここから8ヶ月後、12月です
- 入社したその月に、『品質を上げる会議』というド直球の名前のミーティングが開かれました
- リリースして8ヶ月も経つと、いろんな綻びというか、だんだんと問題が起きてきますね
- 例えばデザインと違う状態でリリースされていたとか、リリースのたびに細かいバグが見つかったりとか、そういうのが起きてきます
- それを何とかしようということで、振り返りも兼ねて年末にPdMやエンジニア、デザイナーなど数名で話しました
- 入社した直後でしたが、こういうのを定期的に話す場があるというのは素晴らしいなと思いました
- そこで出てきた対応案の1つに、Bug Bashがありました
- Bug Bashというのは、一言で言うとバグ出し大会です
- こんな感じで皆で集まって、時間を決めてアプリを触りまくり、一番いいバグを見つけた人や、たくさんバグを報告した人を表彰します
- PdMやエンジニア、デザイナーはもちろん、ユーザーのサポートをするCSチームやビジネスチームなども職種関係なく触ります
- これをアプリのリリースごとにやっていました。当時の頻度でいうと2週間に1度くらいです
- 楽しくバグを見つけられるメリットに加えて、どんな機能や修正がリリースされるかをメンバーが体験できるというのもよいところです
- 20~30人くらいの組織には結構マッチするやり方で、Kyashでもうまく機能していました
- 2018年はKyashだけでなく、他社でも実施されて盛り上がっていたようです
- しかしKyashでは、1年くらいでマンネリ化していくことになりました
- 最初はうまくいっていたBug Bashも、リリースを重ねるごとに仕様が複雑化し、時間を決めて何人かで触るだけではカバーしきれなくなっていきました
- カバーするには何度か行う必要が出てきて、次第に参加メンバーの負荷も上がり、通常業務を優先して参加できないというメンバーもちらほら出てきました
- 2週間に1度くらいのペースで同じようなことをやっていると、そもそも飽きがくるという理由もあったかもしれません
- Bug Bashだけで品質を保っていたわけではなく、Pull Requestのコードレビューなどもやってはいましたが、iOSメンバーの退職後はAndroidの担当とiOSの担当がお互いに相手のOSのコードのレビューをしていたこともあり、少し不安がありました
- そんな感じで、2018年半ばから2019年にかけて、iOSアプリのリリース前にはテストを当然していたもののなんだか不安な時期が続きました
- 実際にリリースされた機能も少なく、開発スピードにも影響が出ていたようです
- 改善され始めたのは、2020年に入ってからです
- iOSエンジニアの@tamadonが入社し、iOSエンジニアが2名体制になりました
- 2019年末からテストの設計と実施を外部ベンダーに委託して、専任チームでテストを始めたのも思い返してみるとよい方針だったと思います
- tamadonさんが入社して以降、チームでの運用やUnitテストの指針などが整備されていきました
- 古いOSサポート終了の指針を決めたり、基本的に段階的アップデートでリリースすることにしたり、運用のコストを減らしてリリースする上での安心度を上げるような取り組みですね
- Unitテストまわりも、明確なルールを決めていなかったところを整理しました
- Kyash iOSアプリはMVVMで作られており、ロジックがViewModelに集約されることが多いです
- ViewModelにUnitテストを書き、ViewModelをカバレッジ対象としてウォッチすることにしました。カバレッジは目標には置いていませんが、下がった時にわかるように計測はしています
- 当時のViewModelは、モックできない作りでテストしにくい部分もあったので、2020年9月にmockoloを導入しDIまわりを整理してViewModelでテストを書く時のお手本となるクラスをいくつか作りました
- 2020年の10月以降、iOSエンジニアの人数も増え、さらに改善が進んでいきました
- XcodeGenの導入やライブラリバージョンの自動更新といった、チームで仕事をする上での課題を減らしていくものも入ってきました
- 2021年の6月から始めたiOSチームでのナレッジ共有会というのが、こういった改善を行うにあたってよい役割を果たしています
- 事業で必要な開発のみに集中してしまいがちですが、ナレッジ共有会で知見の共有やちょっとした相談を行うことで、iOSチームとしてやるべきことを認識し、実際にアクションを起こせています
- PRテンプレートにiPhone SEでの確認項目を追加したり、SwiftLintを最低限活用しようということでルールを整理したり、これらはナレッジ共有会で定期的に話しているからこそできた改善です
- 直近だと、iOS15 Betaで触ってみて対応箇所を洗い出すというのをやっていました。iOS14の時にいきなり公開されてちょっとつらい気持ちになったので、今回は早めに見て対策をしています
- 2020年にはQAチームも立ち上がり、Kyash Cardの発行や銀行入出金の対応などの大きなリリースを支えました
- 現在はリリースごとにバグの分析を行っていて、「iOSのバグが多かった/少なかった」「バグの中でもこういう種類のバグが多かった」といった定量的なデータを元に議論できるようになってきています
- 少しずつ色々と改善してきて、現在どんな課題があるかというと、Figmaと実装でデザインの相違があるというバグチケットがリリースのたびに発生していて、これを何とかしたいなと考えています
- デザインが変更されたら共有するというフローを作って何とかしようとしていますが、もう少しエンジニアリングで何とかできる状態を作りたいですね
- また、QAチームのリグレッションテストに3人日くらいかかるようになってしまっているので、これも改善の余地が大きいです
- 色々改善の方向はありますが、そのうちのひとつとして、Autify for Mobileを導入して自動化できないか検証を進めています
- まだ本稼働はできていませんが、今後開発経験のないメンバーでも運用できる自動化の体制を作っていきたいと考えています
- ここまで見てきてわかると思いますが、そんなにめちゃくちゃかっこいいQAをガッと最初からやってきたわけではありません
- 課題が出るたびに、少しずつ少しずつ皆で話しながら解決してきました
- KyashのiOSチームでは、プロジェクトごとの振り返りとナレッジ共有会が、課題を拾い上げる上でよい役割を果たしています
- 今回はiOSDCなのでiOSにフォーカスして話しましたが、Androidでも同様に課題に対して改善を進めています
- 当たり前の話と捉えられるかもしれませんが、結局こういう課題を定期的にあげられる場所を作って改善を習慣化することが一番大事なわけです
- 4年くらい色々やってきましたが、入社直後の『品質をあげる会議』も、BugBashがマンネリ化し出した時の振り返りも、そういう機会を設定してあったことがよかったと思います
- なんだか元も子もない話になりましたが、習慣が大事という話は、紀元前アリストテレスも「品質は行為ではなく習慣である」と言っているので、おそらく真理なのではないかと思います
- 19世紀の美術家のJohn Ruskinも、“Quality is never an accident. It is always the result of intelligent effort.” 「品質は決して偶然ではない。知的な努力の結果である」と言っています
- よい習慣を作っていきましょう
- ありがとうございました!
LTが始まる前、立木文彦さんのナレーションで「こオォにふぁアアア!!!」とコールされた時は、思わずニヤリと笑ってしまいました。
iOSDCで聞いてくださった皆さん、運営の皆さん、レビューしてくれたiOSチームの同僚たち、ありがとうございました。
Kyashでは、iOS/Androidエンジニアをはじめ、様々な職種を募集中です。
もし興味があれば、カジュアル面談にも気軽にお申し込みください。