Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
なぜ、あすけんiOSでテスト戦略を導入したのか?
Search
Takuya Ohsawa
March 26, 2025
0
160
なぜ、あすけん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
230
iOSでスクリーンショットテストを導入した話
takuyaosawa
0
150
技術選定 askenでの取り組み Kotlin Multiplatform編
takuyaosawa
0
100
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
350
Firebaseイベントログの動作確認を効率化する話
takuyaosawa
0
510
iOS18とヘルスケアの睡眠対応
takuyaosawa
0
260
効率アップ! モバイルアプリの開発プロセス における自動化
takuyaosawa
0
190
with_iosで開発をスムーズにするためにやったこと
takuyaosawa
0
81
サーバサイドswift動かして見た
takuyaosawa
0
86
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Docker and Python
trallard
45
3.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Practical Orchestrator
shlominoach
189
11k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Designing Experiences People Love
moore
142
24k
Statistics for Hackers
jakevdp
799
220k
RailsConf 2023
tenderlove
30
1.1k
Rails Girls Zürich Keynote
gr2m
95
14k
Into the Great Unknown - MozCon
thekraken
40
1.9k
BBQ
matthewcrist
89
9.7k
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