成長し続けるアプリのためのテストと設計の関係、そして意思決定の記録。
by
SansanTech
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Sansan株式会社 技術本部 Sansan Engineering Unit Mobile Applicationグループ 原田拓眞 テストと設計の関係、そして意思決定の記録。 成長し続けるアプリのための
Slide 2
Slide 2 text
ツールや技術的な話はあまりしないかも - テストや設計に纏わる状況や課題は十社十色で、 これやればうまくいくと言うものはないから - 今回は「何のためにテストするのか」「どうしたらテスト・ 設計を改善していけるのか」という話
Slide 3
Slide 3 text
- 依存関係が多い - 状態遷移が複雑で見通しが立ちづらい - UIにロジックがべったり - いろいろな副作用がある関数 - ひとつのクラスに責務てんこ盛り - etc... テストが書きづらいと感じたことは?
Slide 4
Slide 4 text
その感覚、設計の悲鳴かも?
Slide 5
Slide 5 text
- 依存関係が多い - 密結合な設計、DIできてない - 状態遷移が複雑で見通しが立ちづらい - 状態の定義や、状態遷移ロジックが分離できてない - UIにロジックがべったり - プレゼンテーション層とビジネスロジック層の分離不備 - いろいろな副作用がある関数 - CQSの原則に違反 - ひとつのクラスに責務てんこ盛り - 単一責務の原則に違反 冒頭の「書きづらさ」とは
Slide 6
Slide 6 text
テストが書きづらい = 設計に改善余地がある
Slide 7
Slide 7 text
書きづらい ↓ 書かない・捨てる ↓ 不具合が起きやすくなり、開発スピードが鈍化 ↓ … 放置しておくと悪循環へ入ってしまう
Slide 8
Slide 8 text
テストコードを書く目的は 「不具合を防ぐ」ためだけではない
Slide 9
Slide 9 text
アプリの成長を持続可能となるように支える
Slide 10
Slide 10 text
アプリの成長を持続可能にするためのテストコード - アプリはさまざまな「変化」の中にある - 仕様変更 - 機能追加・削除 - 人の入れ替わり - 技術トレンドの変遷 - etc... → これらの変化に対し強く設計・運用できる事が大事
Slide 11
Slide 11 text
でも設計方針変えるのって大変ですよね
Slide 12
Slide 12 text
なぜ設計方針を変えるのって大変なんだろう - 長い間使っていて慣れているから? - 合意形成が難しいから? - 結論が正しいかわからないから? - 影響が大きいから?
Slide 13
Slide 13 text
判断を資産にできてないから
Slide 14
Slide 14 text
判断は資産 - ドラスティックな設計変更も、スモールスタートのコツコ ツとした改善も、大なり小なり「判断」を行っている - 実施した結果のそれ自体以上に、どのような課題に対し、 何を検討し、どうする判断をしたかが大切 - 「どうしてこうなっているのか?」を知ることで、設計改 善、アプリの成長を持続可能とすることにつながる
Slide 15
Slide 15 text
しかし多くの場合、Slackのログ、PR、口頭、記憶、様々な ところに散らばってしまって、判断の内容が記録されず消えていく
Slide 16
Slide 16 text
- 判断の内容を記録すること - 判断として決定したこと、経緯・背景、比較検討されたこ との体裁が整っており、読みやすいこと - ドキュメント作成負荷が軽いこと 判断を資産とするために
Slide 17
Slide 17 text
- なぜその決定が行われたのかを説明し、将来その背景を理 解・議論することができるようになる - 設計変更の判断内容を振り返り、判断が適切であったか どうか、それを踏まえて今後どうしていくかが決められ る - 決定事項、経緯・背景、比較内容のフォーマットを整えて 議論することで、意志決定のスピードも上げる そのための「Architecture Decision Record」という枠組
Slide 18
Slide 18 text
Sansanで使っているADRテンプレート
Slide 19
Slide 19 text
- 80件近くの意思決定が記録されている - 承認者としてはiOS/Android双方のテクニカルリード - 全員の同意を取るとスピード感が薄れるため - レビューへの参加は誰でもOK - 決定事項は隔週のグループ会で共有される - 状態管理の設計についてはQ毎くらいで見直しと改善が 進んでいる - 長らく自動テストに乗っていなかったテストコードも、ADRで の議論、意思決定を通じて改善された Sansanでは約1年半くらい運用
Slide 20
Slide 20 text
判断を資産に変えて、アプリの成長を支えよう