$30 off During Our Annual Pro Sale. View Details »

ソフトウェアテスト入門 / 2022-08-30 software testing

Shinichi Suwa
September 01, 2022

ソフトウェアテスト入門 / 2022-08-30 software testing

Shinichi Suwa

September 01, 2022
Tweet

More Decks by Shinichi Suwa

Other Decks in Programming

Transcript

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


  2. 自己紹介
 suwa_sh
 
 Shinichi Suwa
 プロセスのデザイナー兼エンジニア
 株式会社プレーサ 取締役
  → 大企業

    / 開発プロセス改善
 個人事業主
  → 中小企業 / DX伴走、DevOps支援

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


  4. noteやってます
 


  5. テストとは?


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

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


  8. テストの種類


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


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


  11. テストレベルは「いつ」「なにを」
 要件定義
 システム設計
 構造設計
 詳細設計
 実装/机上テスト
 コンポーネントテスト 
 統合テスト
 システムテスト


    受け入れテスト
 テストレベル

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


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


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


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

    
 コンポーネント 

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


    機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 

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


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

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


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

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


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


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


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


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


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


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


    コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 ソフトウェアシステム 
 機能
 コンポーネント 
 v1.1

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


    コンポーネント 
 機能
 機能
 ユーザー コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 コンポーネント 
 ソフトウェアシステム 
 機能
 コンポーネント 
 v1.1
 確認テスト
 回帰テスト

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


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


    Must
 Must
 Want
 Must
 Must
 Want
 Must
 Want
 -
 Want
 -
 Must

  29. テストケースの考え方


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


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


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


  33. テストケースの実装


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


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


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


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


    システム
 テストデータ

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


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


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

  41. 目的が違うから、保守性が上がる書き方も違う
 動かせる仕様書
   意図がわかる命名 
   上から読むだけで仕様がわかる 
   値はベタ書き など 
 ビジネスを実現する


      ビジネスと一致する命名 
   機能的凝集
   背景、経緯がわかるコメント など 
 テストコード
 プロダクションコード 

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


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


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


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


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


  47. TDD
 TDD
 Red→Green→Refactor


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


  66. これだけでは不十分


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


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


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


  70. テストケース数
 多
 少
 少
 中


  71. ドメイン層はsmall
 small


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


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


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


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


  76. 再配分して
 S
 M
 L


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


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


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


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


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


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


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


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


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


  86. まとめ


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


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


  89. Appendix


  90. 参考リンク
 • JSTQB ソフトウェアテスト教科書 JSTQB Foundation 第4版 シラバス2018対応 
 •

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

  91. 参考リンク
 • 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版) 
 • 質とスピード(2022春版、質疑応答用資料付き) 
 • マネジメント向けアジャイル開発概要 


    • The Software Testing Ice Cream Cone 
 • Google Testing Blog / Test Sizes 
 • Why should you return early? 
 • ドメイン駆動設計の基礎知識 
 • つながる世界のソフトウェア品質ガイド 
 • オブジェクト指向のその前に-凝集度と結合度 
 • LeanとDevOpsの科学[Accelerate]で統計学的に証明されていること