ソフトウェアテスト [11] テスト駆動開発演習 Software Testing [11] Test-driven development Exercise あまん ひろひさ ひろひさ 阿萬 裕久 裕久( AMAN Hirohisa ) aman@ehime-u.ac.jp (C) 2007-2022 Hirohisa AMAN 演習の目的目的 テストファーストに基づいた基づいたづいたテスト駆動開 発を体験・学習する体験・学習する 主な内容な内容内容 簡単な例題を使ったな内容例題を使ったを体験・学習する使ったったテスト駆動開発の目的練習 仕様を満たす関数を体験・学習する満たす関数たす関数の目的テスト駆動開発 (C) 2007-2022 Hirohisa AMAN 演習の目的内容 演習は1人で行うで行う行ううか,または, 2人で行うで行う協力してペアプログラミングしてペアプログラミングを体験・学習する行うってもよい (どちらの目的スタイルでもよい)で行うもよい) 課題を使った1 簡単な例題を使ったな内容例題を使ったを体験・学習する題を使った材としてとしてテスト駆動開発を体験・学習する体験す る 課題を使った2 与えられたえられた仕様を満たす関数を体験・学習する満たす関数足する関数する関数を体験・学習するテスト駆動開発 に基づいたよって完成させるさせる (C) 2007-2022 Hirohisa AMAN 課題を使った1 【対象プログラム】 プログラム】 】 sample1101.c 【支援プログラム】 プログラム】 】 run_test.h Teams から ダウンロードせせ よ run_test.h で行うは,テスト駆動開発の目的演習 を体験・学習するサポートするための目的関数を体験・学習する提供していましていま す この目的後の説明に従って の目的説明に従って に基づいた従って って sample1101.c を体験・学習する編集しながらプログラムを完成させなさしな内容がらプログラム】 を体験・学習する完成させるさせな内容さ い (C) 2007-2022 Hirohisa AMAN テスト駆動開発とは 「先にテストケースに基づいたテストケースを体験・学習する作り,り,次に,それに合に基づいた,それに基づいた合 格するようなプログラムするような内容プログラム】 を体験・学習する書く」ことをく」ことを」ことをことを体験・学習する繰りり 新しいテストは,しいテストは,1回目は失敗 返す手法す手法 するはず(まだ実装していない実装していないしていな内容い の目的で行う).もし成させる功したら,何かか 別の要因が影響の目的要に応じて)因が影響が影響している. ① テストケース作り, 成させる 再検討 リファクタリング (必要に応じて)に基づいた応じて)じて) 成させる功 ② テス ト 失敗 成させる功 (C) 2007-2022 Hirohisa AMAN ③ プログラミング ④ テス ト 失敗 課題を使った1で行うの目的開発目標 関数 get_digit_number を体験・学習する作り,る この目的関数は引数で行う与えられたえられた整数 x に基づいたつい て,その目的桁数を体験・学習する戻り値り値としてもつ ただ実装していないし, < x < 1000000 ( =106 )と する 上の範囲外の整数が与えられた時はの目的範囲外の整数が与えられた時はの目的整数が与えられたえられた時ははエラーと して -1 を体験・学習する戻り値り値とする (例 ) get_digit_number(256) … この目的値は とな内容る (例 ) get_digit_number(0) … この目的値は -1 とな内容る(エラー) (C) 2007-2022 Hirohisa AMAN 課題を使った1で行うの目的テスト方法 こちらで行う用意した した run_test という関数 を体験・学習する使ったう 配布した した run_test.h の目的中で定義してあるで行う定義してあるしてある 使ったい方は次に,それに合の目的通りり run_test(1, get_digit_number(5), 1); テスト No (結果の表示の目的表示 で行う使った用する) テスト対象プログラム】 関数 の目的呼出し(実行)し(実行う) (C) 2007-2022 Hirohisa AMAN テストで行う期待 される結果の表示 (正解のの目的 戻り値り値) 課題を使った1の目的 進め方(1/7)め方(1/7) まずは main 関数内に基づいた1個目の目的テスト ケースを体験・学習する用意した する(手順①) この目的時は点ではまだ,で行うはまだ実装していない, 関数 get_digit_number は 存在していないしていな内容い (C) 2007-2022 Hirohisa AMAN 課題を使った1の目的 進め方(1/7)め方(2/7) いったん ひろひさコンパイルでもよい)してエラーに基づいたな内容るの目的を体験・学習する 確認する(手順②) この目的場合, get_digit_number という関数が存在していないしな内容いという エラーに基づいたな内容るの目的が正解ので行うある (もしもここで行うエラーが出し(実行)な内容かったら,既にその名前の関数がに基づいたその目的名前の関数がの目的関数が 存在していないしていることに基づいたな内容るため,この目的後の説明に従って の目的テストで行う混乱してしまう)してしまう) (C) 2007-2022 Hirohisa AMAN 課題を使った1の目的 進め方(1/7)め方(3/7) 次に,それに合に基づいた関数 get_digit_number を体験・学習する用意した す る:とりあえず戻り値り値を体験・学習する に基づいたしておけば テストに基づいたは成させる功するはず(手順③) とりあえず「その目的場しの目的 ぎ」ことをだ実装していないが動く」ことをように基づいたして みる (C) 2007-2022 Hirohisa AMAN 10 課題を使った1の目的 進め方(1/7)め方(4/7) 今度はコンパイルでエラーにはならず,実はコンパイルでもよい)で行うエラーに基づいたはな内容らず,実 行うすると, No.1 の目的テストに基づいた成させる功したと表 示される(手順④) No 1: PASS という表示は, 関数 run_test がやってく」ことをれている (C) 2007-2022 Hirohisa AMAN 11 課題を使った1の目的 進め方(1/7)め方(5/7) 次に,それに合の目的テストケースを体験・学習する追加する(手順①) No.2 として 桁の目的整数( 10 )を体験・学習する引数とし て与えられたえ,答えが えが とな内容ることを体験・学習する期待したテス トケースに基づいたする No.2 の目的 テストケース を体験・学習する 追加する (C) 2007-2022 Hirohisa AMAN 12 課題を使った1の目的 進め方(1/7)め方(6/7) 再びコンパイルして実行し,今度は コンパイルでもよい)して実行うし,今度はコンパイルでエラーにはならず,実は No.2 の目的テストで行う失敗することを体験・学習する確認する(手順 ②) No.1 は PASS の目的ままだ実装していないが, No.2 は失敗( FAIL )とな内容っている 関数の目的実行う結果の表示(戻り値り値)は だ実装していないが ( result = ) 期待される結果の表示は で行うあるという表示( expected result = ) (C) 2007-2022 Hirohisa AMAN 13 課題を使った1の目的 進め方(1/7)め方(7/7) 次に,それに合に基づいた No.1 と No.2 の目的両方の目的テストに基づいた合 格するようなプログラムするように基づいたプログラム】 を体験・学習する修正していく」ことを (手順③) これを体験・学習する繰りり返す手法すことで行う徐々にプログラムのに基づいたプログラム】 の目的 完成させる度はコンパイルでエラーにはならず,実を体験・学習する高めていくめていく」ことをの目的がテスト駆動開発で行う ある 途中で定義してあるで行うリファクタリングを体験・学習する行うってよい テストケースが徐々にプログラムのに基づいた増えていくが,毎回すえていく」ことをが,毎回す べてが再実行うされるところがこの目的手法の目的ポイ (C) 2007-2022 Hirohisa AMAN 14 ント 以上の範囲外の整数が与えられた時はの目的作り,業を繰り返すを体験・学習する繰りり返す手法す 関数が仕様を満たす関数通りり動作り,することを体験・学習する確認で行うきる まで行う「テストケースを体験・学習する追加&プログラムをプログラム】 を体験・学習する 修正」ことをを体験・学習する繰りり返す手法す エラー処理も忘れずに!も忘れずに!れずに基づいた! エラーの目的場合は -1 を体験・学習する戻り値り値とするが,直接 -1 と 書く」ことをく」ことをの目的は良くない(ハードコーディングになる)のでく」ことをな内容い(ハードせコーディングに基づいたな内容る)の目的で行う ERROR というマクロとして定義してあるするとよい (C) 2007-2022 Hirohisa AMAN 15 課題を使った の目的提出し(実行) Teams から sample1101.c を体験・学習する提出し(実行)しな内容さい もしも2人で行う組でペアプログラミングで行うペアプログラミング を体験・学習する行うった場合は,2人で行うとも同じものじもの目的 を体験・学習する提出し(実行)しな内容さい [11] Exercise-1 提出し(実行)〆切:本日 (May 16) May 16) ) 15:00 (ベトナム】 時は間) (C) 2007-2022 Hirohisa AMAN 16 課題を使った2 Teams から ダウンロードせせ よ 課題を使った1と同じもの様を満たす関数の目的方法で行う 手法で行うプログラム】 sample1102.c を体験・学習する完成させるさせな内容さい この目的プログラム】 の目的仕様を満たす関数は spec1102.pdf (C) 2007-2022 Hirohisa AMAN 17 課題を使った の目的提出し(実行) Teams から sample1102.c を体験・学習する提出し(実行)しな内容さい もしも2人で行う組でペアプログラミングで行うペアプログラミング を体験・学習する行うった場合は,2人で行うとも同じものじもの目的 を体験・学習する提出し(実行)しな内容さい [11] Exercise-2 提出し(実行)〆切: May 23, 13:00 (ベトナム】 時は間) (C) 2007-2022 Hirohisa AMAN 18 課題を使った1,2で行う注意した すること いずれの目的課題を使ったもテスト関数の目的呼出し(実行)し run_test(1, get_digit_number(5), 1); run_test(2, get_digit_number(10), 2); ……………………… を体験・学習するいろいろと考えてえて追加していきな内容さい 個の目的 run_test が 個の目的テストケース に基づいたな内容りますの目的で行うで行うきるだ実装していないけ多く作りなさいく」ことを作り,りな内容さい (C) 2007-2022 Hirohisa AMAN 19 Survey に基づいた答えが えな内容さい 今回の目的演習で行うは1人で行うで行うやってもよいし, 2人で行う組でペアプログラミングで行うペアプログラミングを体験・学習するやってもよ い みな内容さん ひろひさがどちらを体験・学習する選んだのかを知りたいん ひろひさだ実装していないの目的かを体験・学習する知りたいりたい の目的で行う,最初に に基づいた Survey に基づいた答えが えてく」ことをだ実装していないさい [11] Survey (you must answer first) (C) 2007-2022 Hirohisa AMAN 20