$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
なぜ、あすけんiOSでテスト戦略を導入したのか?
Search
Takuya Ohsawa
March 26, 2025
0
200
なぜ、あすけんiOSでテスト戦略を導入したのか?
Takuya Ohsawa
March 26, 2025
Tweet
Share
More Decks by Takuya Ohsawa
See All by Takuya Ohsawa
Kotlin補完計画 〜KMP(Kotlin Multiplatform)とAIが導く越境と補完の未来〜
takuyaosawa
0
510
iOSでスクリーンショットテストを導入した話
takuyaosawa
0
170
技術選定 askenでの取り組み Kotlin Multiplatform編
takuyaosawa
0
130
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
420
Firebaseイベントログの動作確認を効率化する話
takuyaosawa
0
580
iOS18とヘルスケアの睡眠対応
takuyaosawa
0
350
効率アップ! モバイルアプリの開発プロセス における自動化
takuyaosawa
0
210
with_iosで開発をスムーズにするためにやったこと
takuyaosawa
0
90
サーバサイドswift動かして見た
takuyaosawa
0
91
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Agile that works and the tools we love
rasmusluckow
331
21k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Documentation Writing (for coders)
carmenintech
76
5.2k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Typedesign – Prime Four
hannesfritz
42
2.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
BBQ
matthewcrist
89
9.9k
Being A Developer After 40
akosma
91
590k
Transcript
© asken.inc なぜ、あすけんiOSで テスト戦略を導入したの か? 品質の危機からの学び 25/03/26 Mobile勉強会 ウォンテッドリー ×
チームラボ × Sansan #19 Takuya Osawa
© asken.inc 2 自己紹介 Takuya Osawa 株式会社asken モバイルテックリード 主な仕事 食事管理アプリ「あすけん」のiOS開発を担当
趣味 野球観戦
© asken.inc 3 アジェンダ 導入前の課題 どうテスト戦略を導入したか? 成果 まとめ
© asken.inc 4 前提 iOS担当4名 QA担当1名 週に1回のリリースサイクル
© asken.inc 5 導入前の課題
© asken.inc 6 2024年10月
© asken.inc 7 アプリリリース直後で不具合が頻発 1ヶ月で緊急リリースを3回実施 -> ほぼ毎週不具合対応 ユーザーからお問い合わせが急増
© asken.inc 8 何が問題だったのか? 品質をチームごととして捉えていなかった • 個人任せ ◦ ユニットテストの範囲や書き方も不明確 コード変更時に既存機能が壊れても気づけない
• 品質担保できているか不透明 ◦ テストコードがない ◦ 手動テストの実施や範囲が不十分
© asken.inc 9 方針がないので 作りましょう!
© asken.inc 10 どうテスト戦略を導入した か?
© asken.inc 11 全体の戦略を定義 https://developer.android.com/training/testing/fundamentals/strategies?hl=ja Scope Fidelity Time = 品質保証にかかる時間
結合 分離
© asken.inc 12 優れたテスト戦略 優れたテスト戦略では、自動テストを活用して、 重要なメリットであるデベロッパーの生産性 に集中できます。 https://developer.android.com/training/testing/fundamentals/strategies?hl=ja
© asken.inc 13 優れたテスト戦略の特徴 問題をできるだけ早い段階で検出します。 迅速に実行されます。 修正が必要な場合に明確な指示を表示します。 https://developer.android.com/training/testing/fundamentals/strategies?hl=ja
© asken.inc 14 ユニットテストの範囲を明確化 Model部分は原則ユニットテストを追加 -> 早い段階での不具合検知 テストが書けない部分はリファクタを推奨 ユニットテストで担保できないケース ->
手動テストでどのように担保するか明確にする
© asken.inc 15 ユニットテストのガイドラインを整備 iOSメンバーでの認識を揃え、 誰でも同じような質でテストをかけるように整備
© asken.inc 16 ユニットテスト技術スタック サポートバージョン iOS16以降 XCTestが多数 Swift Testingが10%ぐらい 新規や書き換えはSwift
Testingを推奨
© asken.inc 17 テストメソッドを日本語 struct CalculationTests { @Test func testAddition()
{ let calculation = Calculation() let result = calculation.addition(1, 2) #expect(result == 3) } } struct CalculationTests { @Test func 加算できること() { let calculation = Calculation() let result = calculation.addition(1, 2) #expect(result == 3) } }
© asken.inc 18 Given/When/Thenパターン Given(前提) - テスト対象 を準備。mockなどを準備 When(実行) -
メソッドを実行。 Then(検証) - #expect を使い、期待値と実際の値を比較。
© asken.inc 19 // Given: 計算用のインスタンスを用意 let calculation = Calculation()
let a = 1 let b = 2 // When: additionメソッドを実行 let result = calculation.addition(a, b) // Then: 結果が期待通りであることを検証 #expect(result == 3)
© asken.inc 20 メソッド名を Given/When/Thenパターン @Test fun <Given>_<When>_<Then>() 何をテストしているか明確化
© asken.inc 21 func 与えられた2つの数値を_加算したとき_合計が返される()
© asken.inc 22 ユニットテストの数値の可視化 xcresultをCIを使って、コードカバレッジの可視化 -> ファイル単位と全体の数値を可視化。 カバーできていないファイルを検知
© asken.inc 23 基準値は 模索中
© asken.inc 24 成果
© asken.inc 25 成果 リリース前に不具合検知可能なった -> 10月をピークに緊急リリースは減少した。 2024年12月以降は緊急リリースなし ユーザーから問い合わせ減少
© asken.inc 26 新たな取り組み
© asken.inc 27 コードレビューガイドライン VRT (Visual Regression Testing) E2Eテスト自動化 生成AIの活用...
続きはテックブログで!!
© asken.inc 28 品質危機からチームで一丸となって、問題に対応できた まずは、チームで認識を揃えるところから始めましょう まとめ
© asken.inc 29 Thank you