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
140
なぜ、あすけん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
160
iOSでスクリーンショットテストを導入した話
takuyaosawa
0
150
技術選定 askenでの取り組み Kotlin Multiplatform編
takuyaosawa
0
100
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
340
Firebaseイベントログの動作確認を効率化する話
takuyaosawa
0
510
iOS18とヘルスケアの睡眠対応
takuyaosawa
0
240
効率アップ! モバイルアプリの開発プロセス における自動化
takuyaosawa
0
180
with_iosで開発をスムーズにするためにやったこと
takuyaosawa
0
80
サーバサイドswift動かして見た
takuyaosawa
0
85
Featured
See All Featured
Speed Design
sergeychernyshev
32
1k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
680
Optimising Largest Contentful Paint
csswizardry
37
3.3k
It's Worth the Effort
3n
185
28k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Become a Pro
speakerdeck
PRO
28
5.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Mobile First: as difficult as doing things right
swwweet
223
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