Upgrade to Pro — share decks privately, control downloads, hide ads and more …

高品質と高スピードを支える品質のシフトレフトのアプローチ

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

 高品質と高スピードを支える品質のシフトレフトのアプローチ

Hiroki Iseri

November 12, 2026

Transcript

74 slides
  1. 自己紹介 ⚫経歴 • 開発者、テストエンジニア、コンサルタント、QAエンジニアとさまざまな立場で さまざまなプロダクトの品質保証や品質管理業務に従事 • テストや品質マネジメントについて執筆・講演・研究・技術指導複数 • 現在は車メーカーで車載開発のQA/テストテックリード、QMアーキテクトを担当 •

    JSTQB技術委員、テスト設計コンテストU30クラス初代審査委員長 ⚫主な著作 • 「ソフトウェア品質保証ガイド」 「ソフトウェアテスト徹底指南書」 「実践ソフトウェアエンジニアリング第9版」(共訳) 「シフトレフトテストを支える現代的なテスト設計」 「システムテスト自動化標準ガイド」(共著)など 2
  2. アウトライン:3.シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 4
  3. あるべきプロダクト品質の実現のためには ⚫ただ品質を追求するだけでなく、開発チームの総合力の向上が重要 • 品質の実現力 • 開発のスピード • 開発の持続性 • 開発のレジリエンス

    • コスト競争力 ⚫近年はソフトウェアプロダクトのサービス化で開発チームの総合力が サービスの品質に直結する関係性が強まっている • チームのスピードやレジリエンスが直接プロダクト品質に 6
  4. ビジネスパフォーマンスは開発チームの開発総合力に連動 ビジネス パフォーマンス エリート 高い 中間 低い 変更リードタイム 1日未満 1日~1週間

    1週間~1か月 1か月~ デプロイ頻度 いつでも 5% 1週間に1回~ 1か月に1回 10% 1か月に1回~ 変更失敗率 1日1回~ 1週間に1回 20% 障害復旧時間 1時間未満 1日未満 1日未満 1週間から1か月 40% DORA Accelerate State of DevOps 2024 現代的なソフトウェア開発の成功のためには 品質実現に加えて、 開発のスピード、レジリエンス、持続性の総合力強化が必要 7
  5. 品質と開発のスピード、レジリエンス、持続性は共立関係 ⚫開発チームのスピードが速いと →品質向上 • リソース効率改善。品質作りこみの余裕を確保 • 開発とユーザのフィードバックループを迅速化 • 顧客満足のための試行錯誤を迅速化 ⚫開発チームのレジリエンスが高いと

    →品質向上 • プロダクトの障害・不満点を早期解消 • リスク許容度が高まりよりチャレンジできる ⚫開発チームの持続性が高いと →品質向上 • ユーザへの継続的なプロダクト価値の向上実現 • プロダクトの改善機会を確保 ⚫逆に総合力に劣ると、品質に注力しても品質が低下する状態に 8
  6. シフトレフトの留意点: 「品質の要所を適時に押さえる」のがシフトレフト ⚫品質の問題やリスクは、見つけるべきポイント、対応すべきポイントがある。 適時にそのポイントに対応するのが重要 ⚫ただ早ければ良いわけではない 品質課題の例 見つけるべきポイント 並行処理での競合状態に ・設計段階で、並行処理設計が妥当 起因する異常動作

    か確認 ・コードレビューで、適切な保護処理 が実装されているかを評価 機密情報の暗号化漏れ 対処すべきポイント ・設計段階で並行処理設計を適正化 ・実装のルール整備や静的テストで 保護処理を適正化 ・セキュリティ要件が織り込まれてい ・要件定義・設計の段階でセキュリティ るか、それが設計に落とし込まれて 要件の定義と実現を方針付け いるかレビュー ・ペネトレーションテスト・セキュリ ティ監査で、機密情報を入手できる か評価 15
  7. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 18
  8. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 19
  9. 早期の品質フィードバック:反復型プロセス ただ反復すればよいわけではない ⚫有効・妥当な品質評価を早期から行うことでシフトレフトに貢献 • 反復ごとにテスト可能なリリースを確保し、有効な品質フィードバックを確保 • 避けるべきアンチパターン: • リリーススプリント肥大化、全体統合後回しのインクリメンタル開発、 アジャイル形骸化(例:ゾンビスクラム)

    ⚫反復型プロセスで「早期からの有効・妥当な品質評価」を支える施策 • 早期からのユーザ視座のフィードバックの確保 • ユーザ・代理ユーザのテスト確保、顧客満足のテスト観点注力 • 早期からのシステム視座のフィードバック確保 • 包括的な品質評価を実施 • 反復内にテストを収めるためのテスト効率化 • 自動テスト比率向上、探索的テスト能力向上、CI/CD整備、リスクベースドテスト 22
  10. 早期の品質フィードバック:反復型プロセス: ウォーキングスケルトンの実現 疎結合・高凝集アーキテクチャで 分離実行をサポートする アプリケーション フレームワーク アプリ ウォーキング スケルトン実現 アプリ

    アプリ テスト ダブル フレームワーク OS/基本サービス OS/基本サービス ハードウェア制御部 HAL ハードウェア テスト阻害要因や未実装部分は 分離し、置換の仕組み(DIなど) を設け、テストダブルに置換 ハードウェア制御部 ハードウェア モジューラーアーキテクチャ指向を取り入れ フィーチャ単位でも分離・置換実行可能にする 組込みシステムでのウォーキングスケルトンの例 テスト容易性に優れた 技術スタックを選定する 例)エミュレータ対応等 アーキテクチャレベルで 接合部を設け、環境仮 想化などテスト技術を 導入可能にする 24
  11. 早期の品質フィードバック:CI/CDの整備 ⚫CI/CDデプロイメントパイプラインは品質フィードバック迅速化の常識的な基盤 ⚫シフトレフト効果増大のため「デプロイメントパイプライン中心志向」が重要 • デプロイメントパイプラインを前提とした開発プロセスを構築する • 開発活動を可能な限り自動化・仮想化し、デプロイメントパイプラインに組み込む • 変更からデプロイまでの品質活動をデプロイメントパイプラインで一気通貫に行う ⚫「デプロイメントパイプライン中心志向」実現を支える施策

    • プロダクト、プラットフォーム、環境をCI/CD前提にする • コード化。環境ならIaC対応 • 仮想化対応 • 自動化/自動テスト容易性・自動デプロイ容易性の作りこみ • 開発活動を自動処理に移管する • 開発プロセス設計を工夫する • 活動はなるべく自動化可能な工程に移動させる • 例)品質評価は手動テストではなく、なるべくユニットテストや自動統合テストで対応 25
  12. 早期の品質フィードバック:体系的テスト ⚫体系的テスト • 開発ライフサイクル全体のテストを体系的に運用し、全体最適を目指す • 全体構造はテストアーキテクチャとも呼称される ⚫シフトレフトを促進する体系的テストの方針 • シフトレフトを促進するテストの責務を大きくする •

    シフトレフトを促進するテスト: • 自動化され、CI/CDに統合可能 • 早期から実施可能 • (できれば)ユーザ価値に近い評価が可能 • シフトレフトを阻害するテストの責務を小さくする • 例)自動テストの拡充に応じて手動テストを縮小する 26
  13. 早期の品質フィードバック:体系的テスト: 開発者テストの強化 ⚫開発者テスト:開発者による開発のためのテスト • 例)TDD、ユニットテストを活用したリファクタリング、継続的テスト • 実装初期から早期に実行される • CI/CDに組み込むことで、チーム資産として継続運用できる ⚫テストの責務をなるべく開発者テストで果たすことでシフトレフト促進

    ⚫開発者テストを強化するアプローチ:組織文化醸成が必要 • ソフトウェアチーミング(モブプログラミング)による知見や習慣の共有 • テスト駆動開発、AI駆動開発といった良いプラクティスの定着 • CI/CDによる継続的な下支え • バグ流出を分析して改善サイクルを回し、テストの有効性を担保する Gerard Meszaros、「xUnit Test Patterns: Refactoring Test Code」 28
  14. 早期の品質フィードバック:体系的テスト: 静的テストの強化 ⚫静的テストは早期から実行可能 • 動くソフトウェアがなくても実施可能/顕在化していない欠陥を直接見つけられる • 品質についてのさまざまな学びが早期から得られる ⚫静的テストの有効性の強化はシフトレフトにつながる • 技術・環境強化

    • 各種静的解析ツールやAI活用、CI/CDやPRと連携 • 静的テスト容易性確保 • 静的解析ツール対応、ツールやAIに合わせたドキュメント・構成管理の整備 • 観点の改善 • スリーアミーゴスレビュー、Wモデル、パースペクティブベースドレビュー • コミュニケーション効果・シナジー効果の引き出し • ソフトウェアチーミング(モブプログラミング) 29
  15. 早期の品質フィードバック:体系的テスト: 静的テストの強化:開発工程レビューへのテストの視座の注入 ⚫例)ユーザーストーリ作成時にテストの視座を注入する ユーザストーリをテスト担当交えて共同作成 or 作成直後にテストの視座でレビューする ユーザーストーリ:検索履歴の呼び出し 「システム利用者として、過去の検索履歴 の一覧を表示し、履歴の検索構文を選択し て再実行できる。それにより、以前検索し

    た内容をすばやく実行できるようにする」 テスト視座から問題検出・対応 境界値テストを考える。表示履歴数の最小値・最 大値を確認し、受け入れ基準に明記する テストに必要な情報を確保する。詳細なUI仕様 を確保・補完する リリース判定の観点でチェックする。「検索履歴 の削除」「検索履歴のセキュリティ」など、関連す るユーザーストーリや仕様の存在を確認し、不足 があれば是正する 31
  16. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 32
  17. コンポーネント品質の積み上げ: 疎結合・高凝集アーキテクチャ ⚫コンポーネント品質の積み上げは、疎結合・高凝集アーキテクチャが必須の 前提となる • 疎結合でないアーキテクチャ • コンポーネントを横断する問題やリスクが悪化する 品質が多数のコンポーネントに複雑に依存する →コンポーネントの品質を高めても、プロダクトの品質に直結しにくくなる

    • 高凝集でないアーキテクチャ • コンポーネントの品質とシステム視点の品質が乖離する システム視点の品質が依存するコンポーネントが複雑化する →コンポーネントの品質を高めても、システム視点(ユーザ視点)の品質に貢献し にくくなる 36
  18. コンポーネント品質の積み上げ: 疎結合アーキテクチャ:副作用の局所化 ⚫副作用の影響範囲を特定コンポーネントに局所化する • 副作用:意図した直接の出力とは別におこる作用 • グローバルな変数の更新 • 静的な変数の更新 •

    共有するリソースやデータの更新 • I/O の実行 • バッファオバーフローといった異常状態の発生 • 処理の遅延 • 上記を発生させる関数の呼び出し ⚫副作用の局所化により、コンポーネントを横断する問題が削減される ⚫個々のコンポーネントの品質の作りこみに注力できるようになり、 コンポーネント品質の積み上げが容易になる 37
  19. コンポーネント品質の積み上げ: 疎結合アーキテクチャ:副作用の局所化 ⚫副作用の局所化の推進手段:主に設計の工夫で推進する • 変数やリソースなどの状態のスコープを小さくする • 静的な状態を少なくする • 横断的に共有される状態、静的な状態は、操作処理や、ガードといった防御的設計 をまとめたオブジェクトとしてカプセル化する。状態更新についての防御的設計を

    複数に散在させない • 妥当な範囲で、参照透過性や不変性を確保する。例えば純粋関数(入力だけで出力 を決め、外部に他の影響を発生させない関数)や、不変オブジェクト(初期化以外で 状態を更新しない)として処理を実装する • バッファオーバーフローといった異常状態については、開発言語機能、型システム、 コーディングルール、静的解析といった多重の手段で解消を目指す • 不確実性を適正化する。例えば非同期処理でsleepによるタイミング調整を避ける など 38
  20. コンポーネント品質の積み上げ: 疎結合アーキテクチャ:バルクヘッドパターン ⚫実行環境のキャパシティやリソースを分割し、コンポーネントやサービスを 疎結合にする。特定のコンポーネントに問題が発生しても、他のコンポーネ ントへの悪影響を遮断する • 船舶のバルクヘッド(隔壁。浸水しても他への浸水の伝播をブロックする)に由来 ⚫バルクヘッドの実装例 • 物理サーバの分離。リージョンごとにサーバを分割する等

    • コンテナの分離 • プロセッサコアの分離。プロセスごとにコアをバインドする • 実行プロセスやスレッドの分離 ⚫バルクヘッドパターンを導入すると、悪影響が局所化される。コンポーネン トの品質確保が、システムの品質確保につながりやすくなる Michael Nygard、『Release It! Second Edition: Design and Deploy Production-Ready Software』 39
  21. コンポーネント品質の積み上げ: 疎結合アーキテクチャ:プロダクトリスクの分離: ソフトウェア安全性クラスの分離 ⚫医療機器ソフトウェア開発のアプローチ • ソフトウェアを疎結合のソフトウェアアイテムに分離し、ソフトウェアアイテムごとにソ フトウェア安全性クラスを評価する • ソフトウェア安全性クラスに応じて、ソフトウェアアイテムのプロセスや品質基準を 別々に使い分ける

    ソフトウェア クラスC ソフトウェア クラスC Cクラスのアイテムに厳しい 品質基準を適用して、全体の 安全性を担保する ソフトウェア クラスC ソフトウェア クラスB ソフトウェア クラスA Aクラスのアイテムには 軽快な品質基準を適用して、 開発スピードを確保する JIS T 2304:2017 日本工業規格、『医療機器ソフトウェア ソフトウェアライフサイクルプロセス』 42
  22. コンポーネント品質の積み上げ:高凝集アーキテクチャ: システム品質の凝集度を高める:ドメインプリミティブ設計 ⚫プリミティブ型(intなど)を使用せず、ドメインに合わせた型を用意・使用 する。ドメインの型にはバリデーションを組み込み、オブジェクトに問題が ない状態を実現する • 品質の実現もドメインに合わせた型に集約する • 型やオブジェクトの作りこみで、システム視点の品質を積み上げられるようになる ドメインに合わせた型

    セキュリティ の責務 セキュリティ の責務 セキュリティ の責務 ドメインに合わせた オブジェクトに集約 セキュリティ 担保の仕組み セキュリティ の責務 コンポーネント品質の積み上げでセキュリティ確保しにくい Dan Bergh Johnsson, Daniel Deogun、「セキュア・バイ・デザイン 安全なソフトウェア設計」 44
  23. コンポーネント品質の積み上げ:高凝集アーキテクチャ: システム品質の凝集度を高める:ドメインプリミティブ設計 class User { ドメインプリミティブでない設計 private: const std:: string

    name_; const int age_; public: User(const std:: string& name , int age) : name_(name), age_(age) {} ドメイン固有の型を定義する std:: string getName () const { return name_; } 不変オブジェクトにし、入力バリデーションを実装して品質担保 int getAge () const { return age_; } 名前はこの型のみで宣言することで、名前についての品質担保を ... さまざまなメソッド... UserNameクラスに集約する }; ドメインプリミティブ設計 class UserName { private: const std:: string value_; static std:: string validate(const std:: string& val) { if (val.length () < 1 || val.length () > 20) { throw std:: invalid_argument ("name must be between 1 and 20 characters "); } return val; } public: explicit UserName(const std:: string& val) : value_(validate(val)) {} std:: string value () const { return value_; } 45 };
  24. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 46
  25. ソフトウェアエンジニアリングの適正化: AI駆動開発 ⚫ソフトウェアエンジニアリングの適正化を進めシフトレフトに貢献する ⚫品質マネジメントとしては多方面の仕組み作りで持続可能な組織活動にする • 情報管理の整備 • コードベース・ドキュメントの整備、Everything as Code、構成管理の整備

    • 鮮度・必要十分性・一貫性の確保 • 機密情報のシークレット管理 • ハーネスエンジニアリングの推進 • ルール、スキル、外部情報の整備、ループの形成 • アーキテクチャの工夫 • 関心の分離/分割統治によるコンテキスト境界/作業スコープの明確化 • 品質評価の自動化 • スキャンツールや自動テスト、モニタリングを通したAI成果物の監視 • 技術スタックの工夫 • リスクの低いAIサービスの選択、ハルシネーションの発生の低い技術スタックの選択 • 開発インフラの整備 松本 淳太郎、サカモト、金剛洙、「プロフェッショナルAI駆動開発 • 開発コンテナ整備によるリスクコントロールの整備 確率論から決定論へ AIの揺らぎを制御する開発フレームワーク」 仕組みでエンジニアリングを適正化し、シフトレフトを促進する 48
  26. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 49
  27. 開発容易性の作りこみ ⚫プロダクトの保守性・運用性を作りこむと、以降のプロダクトの開発・運用 のスピードやコスト、レジリエンスを改善できる ⚫備えとして間接的にシフトレフトに貢献できる 保守性についての特性(ISO/IEC 25010) 品質特性 内容 運用性についての特性 品質特性

    内容 再利用性 再利用のしやすさ 監視性 モニタリングのしやすさ 解析性 問題の解析・特定のしやすさ 柔軟性 スケーラビリティや置換の容易さ 修正性 変更や修正のしやすさ 互換性 相互運用性や環境との競合性 試験性(テス ト容易性) テストのしやすさ デプロイ容易性 デプロイのしやすさ・容易性 モジュール性 結合性の低さ・凝集性の高さ 運用リスク管理性 運用に関わるリスクのコントロー ルしやすさ 50
  28. 開発容易性の作りこみ: シフトレフトにとって妥当な開発容易性の確保が必要 ⚫過剰・無駄な保守性・運用性の実装は、コストやリソースを悪化させ、 シフトレフトを阻害する • 例) • 負債化したフィーチャトグル。アーキテクチャを複雑化させる。効果的なポイント に実装しないと費用対効果がマイナスに •

    過剰なレイヤドアーキテクチャ。オーバーヘッドなどで性能効率性が悪化 • Mock Hell:Mock開発や接合部確保のコストが過剰にかかるほか、テストして いるのがプロダクトかMockか混乱する ⚫シフトレフトに必要な保守性・運用性の要件を見極め、必要十分な確保を 行う必要がある 51
  29. 開発容易性の作りこみ: 保守性・運用性を確保すべきポイント ポイント 内容 常識的に 確保すべき 最低限のリテラシー・常識として確保 例)クローンコードを避ける、命名は適切にす る、複雑な構造を避け可読性を確保する 計画上

    確保すべき 計画される保守・運用活動に対する備え 例)プラットフォーム切り替えを計画している ならば、プラットフォーム依存部を抽象化する リスクに対し 識別されたリスクに対する備え て確保すべき 例)脆弱性リスクが高い場合、ゼロトラストアー キテクチャを志向する 確保方針 常識として確保する 計画に従って確保する 費用対効果に基づいて 確保する リスク分析・リスクマネジ メントに従って確保する 上記に当てはまらないものはシフトレフトを阻害する リファクタリングを実施すべきかの判断基準にもなる 52
  30. 開発容易性の作りこみ: テスト容易性の作りこみ ⚫適切なテスト容易性の確保で: • テストの早期実行が可能になる • 後のテストの作成・実行・保守が容易になる ⚫シフトレフトに貢献 • 例)テスト自動化容易性を確保すれば、早期からリグレッションテストの継続実行が

    可能になり、後の追加変更の品質確保をサポートできる ⚫テスト容易性実現手段 • 開発工程へのテスト視座の注入 • アーキテクチャレベルからテスト容易性を組み込む • Wモデル、受け入れ駆動テスト開発、スリーアミーゴスレビュー • テスト容易性についての改善サイクルを早期から回す • 反復型プロセス 53
  31. 保守性・運用性の作りこみ: テスト容易性の作りこみ 品質特性 内容 具体例 観測容易性 テスト対象の観測のしやすさ エラーログの充実度 制御容易性 テスト対象の操作のしやすさ

    APIの充実度 セットアップ容易性 テストのセットアップのやりやすさ コンストラクタの単純さ 実行容易性 実行の容易さ テスト実行のブロック要因の少なさ 分解容易性 テスト対象の分割・置換の容易さ 接合部の充実度 網羅容易性 テストでの網羅のしやすさ デッドコードの少なさ 安定性 テスト対象の安定性・バグの少なさ 変更頻度の少なさ 環境構築容易性 テスト環境の構築のしやすさ 環境の冪等性 問題検出性 バグの特定のしやすさ 解析ログの充実度 対象によってより具体的な品質特性がある。例)自動化:仮想化容易性、並列化容易性、CI/CD統合容易性 54
  32. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 56
  33. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 61
  34. 開発基盤の整備: コンテキストに合わせたQMS ⚫シフトレフトを促進する活動は、品質マネジメントシステム(QMS)として仕 組み化してこそ持続可能になる • 品質についての方針、MVV、計画 • プロセス • 体制、リソース

    • インフラやサポートシステム ⚫QMSは開発のコンテキストに合わせたものを構築するのが重要 • 立ち上げ初期のPSFやPMFの時期は軽量な仕組みで • 医療機器など法規制の強い開発では、法規に基づいた厳格な仕組みで • QMSのネガティブイメージは、コンテキスト無視の鈍重な仕組み強制で発生 63
  35. 開発基盤の整備:コンテキストに合わせたQMS: シフトレフトに合わせたQMS シフトレフトを阻害するQMS シフトレフトを促進するQMS 品質管理 ・プロセスとして詳細な作業手順を指定 する ・マイクロマネジメント的に、作業手順か らの逸脱を許さない ・ガードレール(型システムなどの制約、PRと静

    的テストの組み合わせ、アーキテクチャ検査、開 発コンテナ)を整備し、スピード重視の開発を許 容しつつ品質確保 ・仕組みでゴールデンパス(ベストプラクティス) に誘導 品質評価 ・後工程に品質ゲートを設ける ・品質に問題がある場合は開発をブロッ クし工程を差し戻す ・品質の積み上げで早期から品質を担保する 運用 ・人が目視・手動で監査・運用 開発インフラ、開発プラットフォームとして実装。 ツールやサービスでサポートを自動化する 適切なQMSで、適切なシフトレフトを持続的活動として定着できるようになる 64
  36. 開発基盤の整備: CI/CDデプロイメントパイプライン ⚫デプロイメントパイプラインは現代的なソフトウェア開発の骨格 シフトレフトにおいて必須・常識のインフラ • 自動化による変更からデプロイまでのリードタイム短縮 • 迅速なデプロイの実現 • 例)ローリングアップデート、カナリアデプロイメント

    • 早期テストの早期実行 ⚫デプロイメントパイプライン中心志向での開発プロセス構築が重要 • なるべく多くの開発活動を自動化し、デプロイメントパイプラインに統合するのが シフトレフトに有効 Jez Humble、David Farley、『継続的デリバリー』 65
  37. シフトレフトを支える施策 ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 66
  38. あるべき品質への方向付け: ビジネス・ユーザ・開発・運用のすり合わせ ⚫共通言語を形成する • 全体に共通するバリューメトリクス(本当に価値のあるメトリクス)でKPI定義 • 全体を横断する言語の確立:ユビキタス言語、DSL、概念モデル、ビジネスモデル ⚫一緒に力を合わせる • 一緒に評価する:スリーアミーゴス、ふるまい駆動開発

    • トレードオフの合意形成:アーキテクティング ⚫相互に越境する • 越境する組織設計:FDE、プロダクトオーナー • 異なるドメインの知見取り込み:ユーザテスト ⚫横断するフィードバックサイクルを形成する • 開発と運用を横断するサイクルを回す:仮説検証、DevOps 69
  39. あるべき品質への方向付け: プロアクティブアプローチの確立 ⚫シフトレフトは未然防止や早期のリスクコントロールが有効。 その実現のためにはプロアクティブアプローチ(先読みして先手を打つア プローチ)の精度を高める活動がシフトレフトに求められる ⚫プロアクティブアプローチの推進手段 • 予兆・トレンド分析によるリスクマネジメント • トレンドパターンの監視(例:リソース使用率やキュー滞留数の悪化、サチュレー

    ションの監視) • 問題蓄積の監視(例:エラーカウント/エラーバジェットの累積傾向) • 弱点の監視(例:死活監視やレスポンス評価) • プロアクティブテスト(能動的に干渉してその反応を見る) • カオスエンジニアリング • 過去の知見の活用 • 過去の障害やトラブルからの逆引き予測:FTA • サンプリングによる推定(例:探針) 71
  40. あるべき品質への方向付け: プロアクティブアプローチの確立:オブザーバビリティの整備 ⚫プロダクトのオブザーバビリティを作りこむと、シフトライトテストや運用の 評価が容易になり、開発と運用のフィードバックサイクルが適正化する →知見が蓄積しプロアクティブアプローチの精度が高まる ⚫オブザーバビリティの整備アプローチ • モニタリング基盤の構築 • APMなどのプロダクト監視ツールの導入

    • インフラやネットワーク監視ツールの導入 • ロギングといったプロダクトの監視機能の作りこみ • ビジネス・ユーザ体験の評価手段の確立 • アンケートやNPS(Net Promoter Score)サーベイの手段の確立 • ビジネス指標の定量化 • オブザーバビリティの品質要件・指標の明確化 • 適正なSLAやSLOの明確化 73
  41. まとめ ⚫品質マネジメントの適時性の向上 ウォーキングスケルトン • 早期の品質フィードバック テストピラミッド • 反復型プロセス 開発者テスト強化 •

    CI/CDの整備 静的テスト強化 • 体系的テスト • 品質の積み上げ • 工程品質の積み上げ • コンポーネント品質の積み上げ • ソフトウェアエンジニアリングの適正化 AI駆動開発 高凝集・疎結合アーキテクチャ バルクヘッドパターン サービス志向アーキテクチャ 副作用の局所化 プロダクトリスクの分離 ドメインプリミティブ設計 ⚫開発容易性の作りこみ • 保守性・運用性の作りこみ • アーキテクチャの整備 • 開発基盤の整備 テスト容易性の作りこみ コンテキストに合わせたQMS CI/CDデプロイメントパイプライン ⚫あるべき品質への方向付け • ビジネス・ユーザ・開発・運用のすり合わせ • 開発と運用のフィードバックサイクルの形成 • プロアクティブアプローチ 74

More Decks by Hiroki Iseri

Other Decks in Technology