Slide 1

Slide 1 text

ソフトウェアテスト入門
 2022-08-30
 諏訪真一


Slide 2

Slide 2 text

自己紹介
 suwa_sh
 
 Shinichi Suwa
 プロセスのデザイナー兼エンジニア
 株式会社プレーサ 取締役
  → 大企業 / 開発プロセス改善
 個人事業主
  → 中小企業 / DX伴走、DevOps支援


Slide 3

Slide 3 text

文化、プロセス、テクノロジーを通して
 より楽で安全に より早く多く
 顧客に価値を届ける


Slide 4

Slide 4 text

noteやってます
 


Slide 5

Slide 5 text

テストとは?


Slide 6

Slide 6 text

JSTQB / 利用者や提供者のリスクを防ぐ活動
 引用: JSTQB ソフトウェアテスト教科書 JSTQB Foundation 第4版 シラバス2018対応 


Slide 7

Slide 7 text

Agile Testing / 一緒に価値を生み出すことが大切
 引用: 【翻訳記事】テストに対する考え方「Testing Manifesto」 


Slide 8

Slide 8 text

テストの種類


Slide 9

Slide 9 text

テストの種類
 テストレベル
 テストタイプ


Slide 10

Slide 10 text

テストの種類
 テストレベル
 テストタイプ


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

機能
 ソフトウェアシステムの構造
 コンポーネント 
 コンポーネント 
 コンポーネント 
 機能
 コンポーネント 
 コンポーネント 


Slide 16

Slide 16 text

ソフトウェアシステム 
 機能
 ソフトウェアシステムの構造
 コンポーネント 
 コンポーネント 
 コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 


Slide 17

Slide 17 text

ソフトウェアシステム 
 機能
 ソフトウェアシステムの構造
 コンポーネント 
 コンポーネント 
 コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 ソフトウェアシステム 
 機能


Slide 18

Slide 18 text

ソフトウェアシステム 
 機能
 どこまで統合するかで、細分化して考えられる
 コンポーネント 
 コンポーネント 
 コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 ソフトウェアシステム 
 機能


Slide 19

Slide 19 text

テストの種類
 テストタイプ
 テストレベル


Slide 20

Slide 20 text

テストタイプは「どのような」
 品質特性
 変更部分
 テストタイプ


Slide 21

Slide 21 text

テストタイプは「どのような」
 品質特性
 テストタイプ
 変更部分


Slide 22

Slide 22 text

テストタイプ / 品質特性
 引用: つながる世界のソフトウェア品質ガイド 


Slide 23

Slide 23 text

テストタイプ / 品質特性
 機能テスト
 非機能テスト


Slide 24

Slide 24 text

テストタイプは「どのような」
 変更部分
 テストタイプ
 品質特性


Slide 25

Slide 25 text

ソフトウェアシステム 
 機能
 テストタイプ / 変更部分
 コンポーネント 
 コンポーネント 
 コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 ソフトウェアシステム 
 機能
 コンポーネント 
 v1.1


Slide 26

Slide 26 text

テストタイプ / 変更部分
 ソフトウェアシステム 
 機能
 コンポーネント 
 コンポーネント 
 コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 ソフトウェアシステム 
 機能
 コンポーネント 
 v1.1
 確認テスト
 回帰テスト


Slide 27

Slide 27 text

テストレベルとテストタイプの関係
 テストレベル
 テストタイプ


Slide 28

Slide 28 text

いつ、なにを、どのように で計画を整理する観点
 コンポーネントテスト 
 統合テスト
 システムテスト
 受け入れテスト
 機能適合性
 性能効率性
 セキュリティ
 Must
 Must
 Want
 Must
 Must
 Want
 Must
 Want
 -
 Want
 -
 Must


Slide 29

Slide 29 text

テストケースの考え方


Slide 30

Slide 30 text

テストケースの考え方
 ブラック
 ボックス
 ホワイト
 ボックス


Slide 31

Slide 31 text

ブラックボックス手法
 ブラック
 ボックス
 仕様ベースで分析
 同値分析
 境界値分析
 ディシジョンテーブル
 状態遷移テスト


Slide 32

Slide 32 text

ホワイトボックス手法
 ホワイト
 ボックス
 構造ベースで分析
 ステートメントカバレッジ
 条件カバレッジ
 複数条件カバレッジ


Slide 33

Slide 33 text

テストケースの実装


Slide 34

Slide 34 text

テストハーネス
 テスト対象


Slide 35

Slide 35 text

テストハーネス
 テストダブル
 テストデータ
 テスト対象
 テストドライバー


Slide 36

Slide 36 text

テストハーネス
 テストダブル
 Gherkin
 xUnit
 テストドライバー
 mock
 stub
 テスト対象
 テストデータ


Slide 37

Slide 37 text

テスト対象が変わっても用意するものは同じ
 テストダブル
 Gherkin
 xUnit
 テストドライバー
 mock
 stub
 テスト対象
 コンポーネント
 統合範囲
 システム
 テストデータ


Slide 38

Slide 38 text

プロダクションコードとテストコードの違い


Slide 39

Slide 39 text

テストコードの役割は、モニタリングのセンサー
 テストコード
 プロダクションコード 


Slide 40

Slide 40 text

目的が違うから、保守性が上がる書き方も違う
 ビジネスを実現する
   ビジネスと一致する命名 
   機能的凝集
   背景、経緯がわかるコメント など 
 テストコード
 プロダクションコード 


Slide 41

Slide 41 text

目的が違うから、保守性が上がる書き方も違う
 動かせる仕様書
   意図がわかる命名 
   上から読むだけで仕様がわかる 
   値はベタ書き など 
 ビジネスを実現する
   ビジネスと一致する命名 
   機能的凝集
   背景、経緯がわかるコメント など 
 テストコード
 プロダクションコード 


Slide 42

Slide 42 text

テストをプロセスに組み込む


Slide 43

Slide 43 text

引用: 業務でも活用できるソフトウェアテストの7原則 


Slide 44

Slide 44 text

発見が遅れるほどコストがかかる→シフトレフト
 引用: マネジメント向けアジャイル開発概要 


Slide 45

Slide 45 text

Agile Testing / 継続的テストモデル
 引用: Agile Testingのエッセンス 


Slide 46

Slide 46 text

テストを実施するアプローチ
 TDD
 BDD
 / ATDD


Slide 47

Slide 47 text

TDD
 TDD
 Red→Green→Refactor


Slide 48

Slide 48 text

BDD / ATDD
 BDD
 / ATDD
 振る舞いを整理してから開発


Slide 49

Slide 49 text

どんな戦略で組み込んでいく?


Slide 50

Slide 50 text

テストをトリアージして優先度を決める
 引用: 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 


Slide 51

Slide 51 text

テストをトリアージして優先度を決める
 引用: 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 


Slide 52

Slide 52 text

テストをトリアージして優先度を決める
 引用: 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 


Slide 53

Slide 53 text

テストをトリアージして優先度を決める
 引用: 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 


Slide 54

Slide 54 text

テストをトリアージして優先度を決める
 引用: 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 


Slide 55

Slide 55 text

まだまだ上の考え方が多い


Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

そのまま進めばアンチパターンの配分になる
 引用: The Software Testing Ice Cream Cone 


Slide 58

Slide 58 text

そのまま進めばアンチパターンの配分になる
 手戻りが大きい
 時間がかかる
 フレーキー


Slide 59

Slide 59 text

テストピラミッドで再配分したい
 引用: The Software Testing Ice Cream Cone 


Slide 60

Slide 60 text

テストサイズで分類
 引用: Google Testing Blog / Test Sizes 


Slide 61

Slide 61 text

サイズをピラミッドにマッピング
 S
 M
 L


Slide 62

Slide 62 text

すでにアンチパターンの割合になっている場合


Slide 63

Slide 63 text

E2Eのケースを絞る対策をすることが多い
 直交表
 ペアワイズ法


Slide 64

Slide 64 text

根本的な解決にはならない


Slide 65

Slide 65 text

E2Eをハッピーパスの回帰テストに絞る
 引用: Why should you return early? 


Slide 66

Slide 66 text

これだけでは不十分


Slide 67

Slide 67 text

Appアーキテクチャでsmallに寄せる
 レイヤード
 クリーン
 ヘキサゴナル
 オニオン


Slide 68

Slide 68 text

レイヤードアーキテクチャの場合
 引用: ドメイン駆動設計の基礎知識 


Slide 69

Slide 69 text

プロダクションコード
 シンプルが
 混み行って
 ややこしい
 単純
 単純
 手順だけ


Slide 70

Slide 70 text

テストケース数
 多
 少
 少
 中


Slide 71

Slide 71 text

ドメイン層はsmall
 small


Slide 72

Slide 72 text

コンテナを使えば入出力はmedium
 small
 medium
 medium


Slide 73

Slide 73 text

アプリケーション層は、データソース層次第
 small
 medium
 medium
 medium


Slide 74

Slide 74 text

DBアクセスをTest Doubleにすればsmall
 small
 medium
 small
 medium
 double


Slide 75

Slide 75 text

アプリケーション層をsmallにすることもできる
 small
 medium
 small
 small
 double


Slide 76

Slide 76 text

再配分して
 S
 M
 L


Slide 77

Slide 77 text

開発プロセスに組み込む
 S
 M
 L


Slide 78

Slide 78 text

品質を犠牲にしてスピードを上げる?


Slide 79

Slide 79 text

内部品質が高いから早い
 引用: 質とスピード(2022春版、質疑応答用資料付き) 


Slide 80

Slide 80 text

内部品質がスピードを生み、好循環をつくる
 引用: 質とスピード(2022春版、質疑応答用資料付き) 


Slide 81

Slide 81 text

事業成果につながるメトリクスは、品質とスピード
 スピード
 品質
 引用: LeanとDevOpsの科学[Accelerate]で統計学的に証明されていること 


Slide 82

Slide 82 text

コードの品質を上げるにはテストが必要
 引用: 見てわかるテスト駆動開発 


Slide 83

Slide 83 text

テスト自動化の損益分岐点は4回
 引用: 質とスピード(2022春版、質疑応答用資料付き) 


Slide 84

Slide 84 text

内部品質への投資の損益分岐点は1ヶ月以内
 引用: 質とスピード(2022春版、質疑応答用資料付き) 


Slide 85

Slide 85 text

秤にかけられているのはメンバーの成長
 引用: 質とスピード(2022春版、質疑応答用資料付き) 


Slide 86

Slide 86 text

まとめ


Slide 87

Slide 87 text

テストは
 利用者や提供者のリスクを防ぐ活動


Slide 88

Slide 88 text

テストをうまく使って
 スムーズに価値を生み出しましょう


Slide 89

Slide 89 text

Appendix


Slide 90

Slide 90 text

参考リンク
 ● JSTQB ソフトウェアテスト教科書 JSTQB Foundation 第4版 シラバス2018対応 
 ● 業務でも活用できるソフトウェアテストの7原則 
 ● 【翻訳記事】テストに対する考え方「Testing Manifesto」 
 ● Agile Testingのエッセンス 
 ● TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング 
 ● 見てわかるテスト駆動開発 
 ● テスト駆動開発
 ● BDDとATDD
 ● The BDD Books - Discovery (Japanese Edition) 
 ● リーダブルテストコード 
 ● テストコードにはテストの意図を込めよう 
 


Slide 91

Slide 91 text

参考リンク
 ● 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 
 ● 質とスピード(2022春版、質疑応答用資料付き) 
 ● マネジメント向けアジャイル開発概要 
 ● The Software Testing Ice Cream Cone 
 ● Google Testing Blog / Test Sizes 
 ● Why should you return early? 
 ● ドメイン駆動設計の基礎知識 
 ● つながる世界のソフトウェア品質ガイド 
 ● オブジェクト指向のその前に-凝集度と結合度 
 ● LeanとDevOpsの科学[Accelerate]で統計学的に証明されていること