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
100
なぜ、あすけんiOSでテスト戦略を導入したのか?
Takuya Ohsawa
March 26, 2025
Tweet
Share
More Decks by Takuya Ohsawa
See All by Takuya Ohsawa
技術選定 askenでの取り組み Kotlin Multiplatform編
takuyaosawa
0
84
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
310
Firebaseイベントログの動作確認を効率化する話
takuyaosawa
0
450
iOS18とヘルスケアの睡眠対応
takuyaosawa
0
210
効率アップ! モバイルアプリの開発プロセス における自動化
takuyaosawa
0
170
with_iosで開発をスムーズにするためにやったこと
takuyaosawa
0
74
サーバサイドswift動かして見た
takuyaosawa
0
82
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
38
1.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.2k
Why Our Code Smells
bkeepers
PRO
336
57k
Facilitating Awesome Meetings
lara
54
6.3k
The Cult of Friendly URLs
andyhume
78
6.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.7k
Code Review Best Practice
trishagee
67
18k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Automating Front-end Workflow
addyosmani
1370
200k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Building Applications with DynamoDB
mza
94
6.4k
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