2 テスト技法:基礎

概要

現場の課題調査 - 昨年の参加者20名に対して - 組込み開発・テストの課題を聞くと - テスト技術そのものより - タスクが重量化し,連携課題が多い. - 3つの課題に集約できたので次に示す.

(1)プロセスと品質管理の非効率性

手動でのコード作成やデータ処理が多く自動化が進まないため工数削減につながらず、制御対象の特性を考慮しないテスト設計や評価観点の洗い出し不足により網羅的なテストができていない

  • テスト・評価の課題,
  • 自動化と効率化の課題,
  • 検査・テストの不備と効率,
  • 業務プロセスの自動化と効率化,
  • 計画と管理の問題

(2)知識・情報共有とドキュメントの課題

製品担当者間の情報共有が進まず知識が属人化しており、手順書やマニュアルの更新遅延や単体検査手順書の分散により、手戻りや業務理解の手間が生じている

  • 情報共有の不足,
  • 作り込み不足と手戻り,
  • 知識共有と人材問題,
  • 業務プロセスの自動化と効率化,
  • ドキュメントと情報共有の不足

(3)人的リソースと計画・管理体制の課題

特に中堅層の人手不足や管理職の多忙が問題となっており、工数見積もりの曖昧さによる計画遅れや、不具合発生時の確認項目の増加に対する管理が困難になっている

  • 知識共有と人材問題,
  • 人的リソースと管理の問題,
  • 計画と管理の問題

テスト技法そのものは

  • 直接的にテスト技法への課題は少ない
  • 課題を感じている部分は
    • 組織やチームとしてのテストやレビュー運用
  • その前に前提となる,テスト技術の基礎を固める
    • 今期の要望:テスト設計(モダン技法を含む)

テスト技法の基礎とは

テスト設計= オラクル問題

  • テスト対象に対し
  • 「テスト入力と結果の確認」を設計,実装
    • もれなく,くまなく(テスト設計の品質)
    • 資源制約の中で合理的(効果/効率)

様々な知識があるので,整理から

テストの基礎知識を整理する

  1. 知識としてのテスト技法
  2. 実践としてのテスト
  3. 関数レベルの例題で考える
  4. テストは実行が命
  5. テストの品質:課題は何か

2.1 知識としてのテスト技法

  • 規格・資格制度

    1. 国際規格 ISO/IEC/IEEE 29119 シリーズ
    2. ISTQB / JSTQB翻訳版
  • 教科書的な図書

    • Myers「The Art of Software Testing」
    • Beizer「Software Testing Techniques」
    • Pressman「Software Engineering」
    • Sommerville「Software Engineering」

詳細は資料2.1

  • 規格・資格制度
    21世紀に入り,IT関連従事者が増加.資格ビジネスや研修ビジネスが盛んになり,その素材として広がった.
  • テスト技法(教科書や教本)
    テスト技法そのものは難解で広まらず.プロセスや規範の解説本が増加し大衆化した.
    • (単体,統合,システム)のテストプロセスは知っているが,それらの設計を訓練したか?

2.2 実践としてのテスト

  • テスト知識の普及,テスト資格者の増加
    • 疑問:実際のテストは進歩したか?
  • テストプロセスやレビュー規範の重量化が進行
    • 作業的タスクの増加と忙殺化,
    • 技術の分散,責任の分散

変化の始まり

  • アジャイル開発などで反動の火の手
    • 複雑なプロセス手順で進めても,後戻り
  • 人力テストが無力の分野出現
    • セキュリティ評価,Fuzz test
    • テスト専門技術(ツールと運用)
  • オープンサイエンスの台頭

★モダンテスト技術へ進化

詳細は資料2.2側で

  • 時代はGAIなど技術の革新時期
  • 規格や資格制は新技術導入には寄与しない
  • AIを始め,多くの新技術はオープンサイエンスから

2.3 テスト設計再考

  • ソフトウェア開発,テストは実践技術
  • テスト演習を通して
  • テスト設計の基本を考える
  • 演習は,テストケース設計

★関数レベルのテスト設計から

テスト対象の仕様

  • マイヤーズの三角形
  • (Glenford J. Myers, 1979)
  • 「The Art of Software Testing」のエピローグ.
  • 三角形の3辺(i,j,k)の長さを与え,
  • 三角形が正三角形,二等辺三角形,不等辺三角形かを判断する関数.

int triangle(int i, int j, int k)

引数 説明
i int 三角形の第1辺の長さ
j int 三角形の第2辺の長さ
k int 三角形の第3辺の長さ

演算のオーバーフローを考慮し入力値は1000を超えないとする.

戻り値 意味 説明
0 不等辺三角形 3辺の長さがすべて異なる三角形
1 二等辺三角形 2辺の長さが等しい三角形
2 正三角形 3辺の長さがすべて等しい三角形
3 三角形でない 三角形の成立条件を満たさない、または無効な入力

2.4 テスト設計を試す【演習2-1】

  • 各自が通常,使っている書式で良い(自由)
  • テストケースと呼んでいるものを設計
  • メモ程度でも良い
  • 記入はグループ共有note
  • ブレイクアウトルームを設定しますが
  • テスト設計は各自で
  • 時間は【10分】です.

ブレイクアウトルーム

  • 終わったら,共有noteにテストケースの数を書き出して
  • 独自の数え方で良い
  • 試験ではありません,解らないのはそのままで
  • 他のメンバーの設計を参照

チームで共有【演習2-2】

  • 紹介してもらうのは
    • どんな考えで進めたか
    • そのテストケース設計の習得もとは?
      • 独自開発とか,最初の職場,とか
  • 他者のテスト設計をレビューした経験があれば,その感想など
  • 後輩とかに教えたことがあれば,その時の感想など

ブレークアウトルーム【7分】

  • どんな方法で学習したかをグループでまとめて
  • 共有ノートに書いて

次に進みます

  • テストは実行しないと意味が無い
  • 関数レベルのテストは開発と一体
    • 「テストファースト」など
  • 伝統的な企業では,
    リリース後パス網羅のエビデンス作成もあるが例外.

テスト実行を試す 【演習2-3】

テストを実行するには, 1. テスト対象(triangle.c) 2. テスト環境(ドライバー,ハーネス) 3. テストデータ 4. 予測正解値

実行環境として

  • Jupyter Lab を利用します.
  • 入口はここです
  • Uidはグループ別で
    • dtec-21 (グループA)
    • dtec-22 (グループB)
    • dtec-23 (グループC)
    • dtec-24 (グループD)
  • Pass は test2025
  • 同時に複数ログインできます

操作は相談しながら

  • テスト環境の格納(Git)など
  • コマンドラインから操作します.
  • 操作が重複すると壊れることがあるので注意
    • コマンド入力画面は共有されていない
  • ブレークアウトルームで相談しながら進めて

操作

  • terminal を開く
    • File > New > Terminal
    • terminal 画面からpwd と入力し
    • /home/dtec-2X が出ることを確認
    • ここまで同時実行でも問題ない

テスト環境の理解

  • 左端上にあるフォルダーアイコンをクリック
  • 左側に/work01 フォルダが現れるのでクリック
  • /Ex01 フォルダが現れるのでクリック
  • 右画面のterminalから
    • cd ~/work01/Ex01
    • tree
      • ファイルが表示される
  • 次のファイルがある
├── Makefile メイクファイル
├── readmeEx01.html <- ここに操作法
├── readmeEx01.Rmd
├── sample.in サンプルテスト入力データ
├── test-1.in 研修生1用
├── test-2.in 研修生2用
├── test-3.in 研修生3用
├── test-4.in 研修生4用
├── testdriv.c ドライバーコード
├── test.in  チームで作成
└── triangle.c テスト対象

演習

  • readmeEx01.html を見て
  • 研修生は,テスト入力を各自作成し
  • 実行は make clean, make, を実行して
    • ./test <test-X.in
    • Xは,テストデータを作成したファイル番号
    • テスト入力と結果が出る.
  • パス網羅の説明を見て確認
    • 分岐パスが100%になるまで
    • テストを続けて

ブレークアウトルーム

  • 【15分】で一旦戻る
  • 共有noteに結果を書きます.
  • 未完なら延長します.

まとめ

  • ステートメント網羅は簡単
  • 分岐網羅は細かいのがある
  • MC/DC とかは?
  • 網羅したらテスト設計は100点?

課題検討は

  • 3限目にて

次は,