Slide 1

Slide 1 text

高品質と高スピードを両立させる ソフトウェアQAアプローチ 井芹 洋輝 井芹さんが語る!高品質×高スピードを両立させるためのQAアプローチ 2024/12/5

Slide 2

Slide 2 text

自己紹介 ⚫経歴 • 開発者、テストエンジニア、コンサルタント、QAエンジニアと様々な立場で 様々なプロダクトの品質エンジニアリングに従事 • 2021年からトヨタ自動車でQA/テストテックリードを担当 • JSTQB技術委員、テスト設計コンテストU30クラス初代審査委員長 ⚫著作・講演 • 「テスト自動化の成功を支えるチームと仕組み」 「シフトレフトテストを支える現代的なテスト設計」 「Androidアプリテスト技法」「システムテスト自動化標準ガイド」 「テストの視点を活用したTDDアプローチの検討とその検証」など

Slide 3

Slide 3 text

この講演について ⚫現場改善の視点で、ソフトウェア開発で高品質と高スピードを両立す るソフトウェアQAアプローチを解説します ⚫本講演は、QA活動は特定のQAエンジニアに閉じずチーム全体で推 進すべきという前提に基づいています。 改善の実行者はQAエンジニアに限定せず、チームとなります

Slide 4

Slide 4 text

現代的なソフトウェアQAに 求めらる高スピード

Slide 5

Slide 5 text

高スピードを支えるQAがなぜ重要か ⚫有限な開発リソース下では、QAのためのリソースがトレードオフ • 「QAでの開発スピード悪化」や「QAでの開発リソースの浪費」が発生すれば、 品質確保・向上に投入できる開発リソースが不足し、品質が低下 • 不幸なパターン: リリース間際の品質ゲート重厚化でプロセスが鈍重化 →QAへのリソース投資を増やしているのに、品質が下がる ⚫QAのスピードがプロダクト品質に直結するビジネス形態が増加 • ユーザのフィードバックサイクル対応を迅速化: →よりすばやく顧客満足を確保する 厳しい競争で競合に先んじて顧客価値を提供できる • プロダクトの障害対応の迅速化: →ユーザの不満が即時解消される。ユーザ視点で高品質の評価を得る

Slide 6

Slide 6 text

現代的なソフトウェアQAに求められるもの ⚫ソフトウェアQAには「高品質を確保する力」と「高スピードに品質を確 保する迅速性」の両立が不可欠 • 開発スピードを犠牲にするようなQA、ただ品質を追求すればすべて良くなる 考え方のQAはしばしば品質を悪化させ、プロダクト価値を棄損する • 有限なリソースで開発の高スピードと高品質の両立を実現できる力がQAに 求められる

Slide 7

Slide 7 text

高品質と高スピードの両立を 支えるチームの総合力

Slide 8

Slide 8 text

高品質と高スピードの両立を支えるソフトウェアQA ⚫高品質のみを追求するQAアプローチでは、品質ゲートの重厚化など QAに閉じた選択肢も取りえる ⚫一方で、高スピードと高品質の両立においては、チームの開発力を 総合的に強化するQAアプローチが不可欠になる • 妥当な品質をチームでより迅速に確保する • 同じチームリソースでより高度な品質を実現する • 品質とスピードのトレードオフをチームで緩和する・壊す

Slide 9

Slide 9 text

高品質と高スピードの両立を支えるソフトウェアQA 例:サービス開発の場合 変更のリードタイム 顧客要求への迅速な対応 サービス復元時間 顧客が直面する障害への 迅速な対応

Slide 10

Slide 10 text

高品質と高スピードの両立を支えるソフトウェアQA 例:サービス開発の場合 変更のリードタイム 顧客要求への迅速な対応 サービス復元時間 顧客が直面する障害への 迅速な対応 迅速な変更・修正 を実現する チームの技術力 変更・修正を支える 高い保守性 高い保守性を実現する チームの開発力 • 設計・実装・テストの総合力確保(能力確保・育成・発揮) • 設計品質を支えるプロセスや開発インフラの整備 • テストやリリース・デプロイの自動化 • デプロイメントパイプラインの洗練、など 変更・修正を支える 基盤 基盤を整備する チームの総合力

Slide 11

Slide 11 text

ソフトウェアQAで チームの総合力を高めて 高品質と高スピードを 両立させるアプローチ

Slide 12

Slide 12 text

QAでチームの高品質と高スピードを支えるアプローチ QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化

Slide 13

Slide 13 text

QAでチームの高品質と高スピードを支えるアプローチ QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化

Slide 14

Slide 14 text

チーム全体(Whole Team)アプローチ ⚫チーム全体で顧客価値につながる品質実現を推進する。 チームメンバー全員が顧客にとっての品質について責任を持つ • チームの各立場が顧客価値の理解を深め、顧客価値に貢献していく • POは顧客のニーズを引き出し、実現の橋渡しする & 開発者は開発判断の中で顧客価値に貢献する & テストエンジニアは顧客価値を観点にテストする • 顧客価値の向上のためチームのシナジーを発揮する • 例)開発者がテスト容易性を確保し、テストエンジニアの妥当性確認を 迅速化する →チームの力を正しい方向に結集させ、高スピードと高品質を向上する アンチパターン:「顧客価値を考えるのはPO。開発者の責務担当外」

Slide 15

Slide 15 text

チーム全体アプローチ ⚫精鋭志向/内製化志向 ⚫顧客満足に向けた明確なビジョン、目的、目標を共有し、チームの方 向性を合わせる ⚫密なコミュニケーションをとる ⚫オープンなコミュニケーションを推進する • 心理的安全性を確保する • 謙虚(Humility)、尊敬(Respect)、信頼(Trust)のHRTの三本柱の確立 ⚫チーム内の情報や意思決定の透明性を確保する

Slide 16

Slide 16 text

継続的QA ⚫DevOpsの継続的テストを拡張した考え方 ⚫プロセスの各工程でQA活動を推進する。 プロダクトライフサイクルの全工程でQA活動を継続する ⚫リリース前のテスト工程や品質ゲートに頼るのではなく、各工程の当 事者が自工程完結で品質を積み上げる ⚫チームのQAの総体的なスピードを高める

Slide 17

Slide 17 text

継続的QA Plan Code Build Release Deploy Operate Monitor Test ここでもQA ここでもQA ここでもQA ここでもQA ここでもQA ここでもQA ここでもQA ここでもQA

Slide 18

Slide 18 text

QAでチームの高品質と高スピードを支えるアプローチ QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化

Slide 19

Slide 19 text

QAのシフトレフト ⚫セキュリティ確保とQAの二つの用語定義がある。今回は後者 ⚫品質エンジニアリング活動を早期から実施し、品質の確保・保証を 早期から行う。品質問題を予防・早期対策する ⚫チームのQAの効率とスピードを確保する QAへの注力 シフトレフト プロジェクトの進展 シフトレフトでない開発

Slide 20

Slide 20 text

QAのシフトレフト ⚫要求仕様誤りの不具合修正のコスト 不具合修正 コスト 要求仕様 設計段階 コーディング テスト 納入時点 x 5x 10x 20x 200x 「ソフトウェア品質保証の方法論、技法、その変遷」,奈良隆正, JASPIC SPIJapan2009

Slide 21

Slide 21 text

シフトレフトの手段 ⚫中短期の反復開発プロセスの採用 ⚫開発者テストの充実とCI/CDへの統合 • テスト駆動開発/自分のコードに責任をもってテストを書く習慣 • 自動テストの拡充とCIへの統合 ⚫静的テスト/レビューの充実 ⚫リスクマネジメントのシフトレフト • リアクティブでなくプロアクティブにリスクをコントロールする ⚫シフトレフトを支えるQA容易性・テスト容易性の作りこみ • 例)仕様の静的テスト容易性の確保、ウォーキングスケルトンの確保

Slide 22

Slide 22 text

継続的QA/シフトレフトを支えるQAの戦略立て ⚫継続的QA、シフトレフトをQA戦略として明示的に推進する • 分散したQA活動の全体構造を工夫する:QAアーキテクチャ • チームの様々なQA活動を漏れ・冗長さのないように整理する • シナジーや強みを発揮しやすいように責務分担を調整する • 自動テストの効果を最大化するように手動テストの責務を調整する • 大きな品質のリスク・課題に戦略立てて対応する • 難易度の高いリスク・課題への対策を推進する • 様々な関係者を巻き込むQAアプローチを推進する • 中長期で一貫性の求められるQAアプローチを戦略として推進する

Slide 23

Slide 23 text

継続的QA/シフトレフトを支えるQAの戦略立ての例 リスク・課題 対応方針 QA戦略 サービスの頻繁な 改善・変更に対応 する テスト自動化(実行および生成の自 動化)の促進により、変更対応を効 率化する テスト対象のテスト自動化容易性の向上。テスト 自動化可能な領域を拡大し、それを活用する自 動テストの責務を広げる テスト容易性向上により、テスト対象 の安定性を向上させる プロダクトの変動部分を局所化し、安定性の高い 領域を拡大する。 高い網羅性が求められるテスト範囲を分離し、統 合テストレベルで品質確保する 手動テストについて、探索的アプ ローチの拡大により、変更対応を効 率化する 変動部分に対する手動テストをテストチャータベー スの探索的テストとして実装する プロダクト・フレームワーク固有のレ ビュー観点を蓄積し、変更レビューの 精度を高め、要件・設計バグを早期 検出する DRBFMで変更レビューを実施し、レビューで抑える べきレビュー観点を故障モードとして蓄積する。 DRBFMのレビューアにはテックリードを必ず参加さ せ、レビュー効果を底上げする

Slide 24

Slide 24 text

QAでチームの高品質と高スピードを支えるアプローチ QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化

Slide 25

Slide 25 text

顧客価値のフィードバックプロセスの構築 ⚫フィードバックプロセスは、高難易度で不透明な開発で、品質とス ピードを両立するために必然的に求められる ⚫フィードバックサイクルをまわし、チームの方向性を適正化して、ス ピードと品質を高める • 探索状態の中で方向を見出す • 正しい方向に先導する • サイクルの中で改善を継続して改善効果を蓄積する

Slide 26

Slide 26 text

顧客価値のフィードバックプロセスの構築 開発活動内 のQA活動 ユーザ・ビジネス 視座の工程 実運用 【既存の活動に顧客価値視点を導入】 スリーアミーゴス、受け入れテスト駆動開発 【専用の顧客視点の工程の追加によるフィードバックサイクル】 モックアップ、プロトタイピング、ユーザテスト 【実運用を巻き込んだフィードバックサイクル】 DevOps、継続的デリバリ、シフトライトテスト 開発プロジェクト

Slide 27

Slide 27 text

QAでチームの高品質と高スピードを支えるアプローチ QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化

Slide 28

Slide 28 text

保守性・QA容易性の作りこみ ⚫保守性・QA容易性の確保は、高スピードと高品質の両立の基礎 • 品質とスピードのトレードオフ関係を壊す有力手段 • 大きな効果を実現するものに、疎結合アーキテクチャによるプロダクトリスク の分離アプローチがある

Slide 29

Slide 29 text

疎結合アーキテクチャによるプロダクトリスクの分離 低リスク 高リスク 低リスク ・・・ 疎結合・高凝集度設計で モジュール化を推進。 プロダクトリスクを分離する (例:接合部配備、信頼できるインター フェース手段採用、カプセル化/状態 や副作用の局所化、インターフェース のシンプル化/契約による設計)

Slide 30

Slide 30 text

効果を増幅する施策: プロダクトリスクの分離に基づいたQA容易性の作りこみ 低リスク 高リスク 低リスク ・・・ 疎結合・高凝集度設計で モジュール化を推進。 プロダクトリスクを分離する (例:接合部配備、信頼できるインター フェース手段採用、カプセル化/状態 や副作用の局所化、インターフェース のシンプル化/契約による設計) リスクレベルに応じた アーキテクチャレベルの QA容易性確保 (例:自動化対応、CI/CD統合可能、 QAの障害排除、シフトレフト対応)

Slide 31

Slide 31 text

疎結合アーキテクチャによるプロダクトリスクの分離に 基づいたテスト戦略 低リスク 高リスク 低リスク ・・・ 疎結合・高凝集度設計で モジュール化を推進。 プロダクトリスクを分離する (例:接合部配備、信頼できるインター フェース手段採用、カプセル化/状態 や副作用の局所化、インターフェース のシンプル化/契約による設計) リスクレベルに応じた アーキテクチャレベルの QA容易性確保 (例:自動化対応、CI/CD統合可能、 QAの障害排除、シフトレフト対応) ●統合テストレベルで 高リスクに対応 ●高リスクで詳細なQA が必要なコンポーネント は、優れたQA容易性の 活用でQAを効率化

Slide 32

Slide 32 text

疎結合アーキテクチャによるプロダクトリスクの分離に 基づいたリリース戦略 疎結合アーキテクチャで、プロダクトリスクの分離を推進 高リスク コンポー ネント 低リスク コンポー ネント 高リスク リリースの QA 低リスク リリースの QA リリースに応じてQAアプローチを使い分け 高リスクリリースは詳細なQAで、低リスクリリースはスピード重視のQAで。 総体としてQAで高品質・高スピードの両立を実現

Slide 33

Slide 33 text

高品質と高スピードを両立するための リスク分離を活用したテスト・リリース戦略の原則 ⚫構造的にプロダクトリスクを分離する。高リスクを構造的に隔離する ⚫プロダクトリスクが高いコンポーネントのテスト容易性を高く確保する ⚫分離したプロダクトリスクに応じてテスト・リリースの戦略を調整する

Slide 34

Slide 34 text

QA容易性の確保 ⚫QA容易性:保守性の一種。QAのやりやすさの品質特性 ⚫QA活動が容易になるように、マネジメント、プロセス、設計・実装を 工夫する • 設計・実装で必要なテスト容易性を作りこむ • 観測容易性/制御容易性/分離・置換容易性/安定性/・・・ • QAのシフトレフトを実現する • 静的テスト容易な仕様/ウォーキングスケルトンの早期確保/仮想化対応 • 品質のオブザビリティを作りこむ • 品質問題の可視化・検出・対策の仕組みをマネジメントシステムとして実装 する

Slide 35

Slide 35 text

QAでチームの高品質と高スピードを支えるアプローチ QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化

Slide 36

Slide 36 text

デプロイメントパイプラインの拡充・高度化 ⚫CI/CDデプロイメントパイプラインは開発リードタイム短縮・高信頼化の要。 洗練させれば品質とスピード両方を高められる ⚫デプロイメントパイプラインの拡充 • 多くの開発活動をCI/CDデプロイメントパイプラインに組み込む • 自動化する/実行環境を仮想化する • 人の活動もデプロイメントパイプラインを補強するようにプロセス設計する • 例:PR/MRレビュー ⚫デプロイメントパイプラインの高度化 • より高度なパイプライン処理を実装する • 例:予測的テスト選択、テストの偽陽性/偽陰性の検出 • 高速化・最適化を進める • 例:並列化、コンテナオーケストレーション

Slide 37

Slide 37 text

まとめ ⚫ソフトウェアQAには「高品質を確保・作りこむ力」と「高スピードに品 質を確保する迅速性」の両立が不可欠 ⚫そのQAアプローチとして以下がある QAアプローチ アプローチを支える技術 顧客価値への注力 チーム全体アプローチ/継続的QA 問題の予防・早期解決 シフトレフト 改善サイクルによる方向づけ フィードバックプロセスの構築 保守性・QA容易性の作りこみ 疎結合アーキテクチャとプロダクトリスクの分離 開発プロセスの迅速化 デプロイメントパイプラインの高度化