Japan Symposium on Software Testing 2004 はじめてみようテストファースト JaSST ’ 04 チュートリアル2 2004年1月28日 10:00 ~ 佐賀大学 大月 美佳 … こと、みかまま 東京コンファレンスセンター 品川.

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

テストについて 近畿大学大学院 田中大介 資料:
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
επιστημη さん 提供の VB.NETプログラムを丸裸にする!?
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
OJT研修 「テスト実施、テスト設計の技術習得」 日時: 8月22日(月)  場所: 本社5階.
Step-by-Step Guide on How to Start ALICE Analysis
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
情報システム構築 -説明と実力テスト- 金曜4校時 掛下哲郎  大月美佳.
情報科学1(G1) 2016年度.
2008/09/20 TDD 道場 ~ ぼくと契約して TDD をやってよ! ~.
ノンプログラマのための Selenium de DDT はじめの一歩
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
関数 関数とスタック.
補足説明.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
ペアプロ小劇場 劇団ペケぴー 天野勝 永和システムマネジメント 大熊知栄 アジアパシフィックシステム総研
FlexとBison+アルファ -実習編-
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
プログラミング応用 printfと変数.
WinUnit お気楽お手軽 UnitTest
WinUnit お気楽お手軽 UnitTest
画像処理プログラムの説明.
TDDとメソッドの外部設計 テストファーストの秘訣 2009/08 biac.
メソッドの外部設計と テストファースト ~ 上手く TDD するために ~
Limeを使ったユニットテストの実装方法
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
2008/09/20 F# 入門 TDD 道場 ~ みんな TDD やってみよう! ~.
東京工科大学 コンピュータサイエンス学部 亀田弘之
メソッドの外部設計と テストファースト ~ 上手く TDD するために ~
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
TDD ってどんな感じ? FizzBuzz を作ってみる 2010/01/22 biac 1.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
B演習(言語処理系演習)第2回 田浦.
C言語 はじめに 2016年 吉田研究室.
高度プログラミング演習 (01).
プログラミング演習I 2003年7月2日(第11回) 木村巌.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Global standard programming with GNU Autotools
第5回 プログラミングⅡ 第5回
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
アジャイル開発プロセス 森口朋広.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
C言語講座第5回 2017 構造体.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

Japan Symposium on Software Testing 2004 はじめてみようテストファースト JaSST ’ 04 チュートリアル2 2004年1月28日 10:00 ~ 佐賀大学 大月 美佳 … こと、みかまま 東京コンファレンスセンター 品川

Japan Symposium on Software Testing おおまかな流れ テストファーストとは何か – テストファーストで何が嬉しいの? – テスト駆動型開発の流れ テストファーストの実際 –xUnit と CppUnit –CppUnit を使うには –CppUnit の手順と演習問題 質問など (10 分 ) 休憩 (5 分 ) επιστημη ( えぴすてーめー ) さんにバトンタッチ

Japan Symposium on Software Testing テストファーストとは Kent Beck 提唱 eXtreme Programming(XP) のプラクティス ( 実践項目 ) のひとつ XP については、第 3 章 (p. 89 ~ ) を参照 単体テストを最初 (first) に書く 実装はその後 ( テストの前には書かない ) テスト駆動型開発に発展 テストに駆動される形になるため 「テスト駆動開発入門」 ISBN: ケント・ベック

Japan Symposium on Software Testing テストファーストの利点 バグの早期発見 – テストで押さえられる範囲において ( 完全ではない ) 安心度が高まる – 変更に対する心理的抵抗が下がる 実装前にインターフェースの仕様が明確になる – どのような使われ方をするかから考える – どのような使われ方がやばいか、も考えるとなお良し 楽しい – 小さな挑戦をリズム良く繰り返せる 後でテストを見ると使い方が分かる – サンプル駆動型、と言っている人も

Japan Symposium on Software Testing テスト駆動開発の流れ 詳細は 項 (p. 24 ~ )

Japan Symposium on Software Testing xUnit テスティングフレームワーク – テストのドライバ → ボトムアップに向いている – ホワイトボックスというよりはブラックボックス Java 言語用から各種言語へ –Junit, CppUnit, CUnit, NUnit, PerlUnit, RubyUnit, … – 総称して xUnit

Japan Symposium on Software Testing CppUnit C++ 用のテスティングフレームワーク – 他にもある (CppUnit-x) –cppunit.sourceforge.net 今更新が停滞中 …

Japan Symposium on Software Testing CppUnit を使うには C++ 開発環境 –Visual C –Borland C++ –GNU C++ (+ make or automake) CppUnit インストール – インストールの詳細は、 2.2 節 (p. 36) 環境設定が必要 –Visual C++ の環境設定 → 項 (p. 80) –GNU C++ (+ make) での環境設定 → 項 (p. 74)

Japan Symposium on Software Testing CppUnit を使ったテスト駆動

Japan Symposium on Software Testing CppUnit 基本手順 1. 新しいテスト対象 1. テスト対象クラスを空で作る ( 定義のみ ) 2. テストクラスを作る ( テンプレート * → 項 p.239 ~ ) 3.Main 部を作る ( テンプレート → 項 p.241 ~ ) 4. 動作確認をする 2. テストケースの追加 1. テスト関数を追加・実装する (ASSERT マクロ一覧 * → A.4 節 p.275) 2. テストが失敗することを確認する 3. テスト対象クラスを実装する 4. テストが通ることを確認する 5. リファクタリングする

Japan Symposium on Software Testing 基本手順サンプル Visual C++ にて実演

Japan Symposium on Software Testing 演習 1 CGI を処理する C++ プログラムを作成するために、 CGIInput, DataProcesor, HTMLOutput という 3 つ のクラスを作ることにしました。 – 各クラスのヘッダファイルを作成しましょう » メンバ変数、関数はない状態で – 各クラスのテストクラスのヘッダファイルを作成しましょう » テストの中身はない状態で –3 つのテストクラスを駆動する TestMain.cpp を作成しましょう – ビルドできるように構成しましょう »VC++6.0 ならばワークスペースを、 g++ ならば Makefile を – ビルドして結果を確認しましょう

Japan Symposium on Software Testing 演習 2 演習 1 で作成した各クラスに以下の関数を実装し ます。必要だと思うテストケースを書き出してみ てください。 –char *CGIInput::getarg(char *argname) »CGI の変数名を文字列 (argname) で指定すると、その値を文字列で返 す –char *DataProcesor::addition(char *xstr, char *ystr) »2 つの整数値を文字列 (xstr, ystr) で受け取り、その結果を文字列で返 す » 与えられた文字列が数値でない場合はエラーメッセージ (Not Number) を返す –void output(char *message, ostream & os) » 表示したいメッセージを文字列 (message) で受け取り、指定された出 力ストリーム (os) に HTML フォーマットで書き出す。

Japan Symposium on Software Testing テストケースの実装 テストケースをテストクラスの関数で実装する – 元来はテストケース = テストクラス – クラス数が爆発、混乱 → アダプタパターンで 1 クラスに集中 –setUp, tearDown は各テスト関数の実行前と後にそれぞれ実行 この前後 アダプタ

Japan Symposium on Software Testing ASSERT マクロの使い方 ヘッダ cppunit/TestAssert.h – 明示的に読み込む必要はあまりない Visual C++ にて実演 –CPPUNIT_ASSERT( 条件 ) –CPPUNIT_ASSERT_MESSAGE( メッセージ, 条件 ) –CPPUNIT_FAIL( メッセージ ) –CPPUNIT_ASSERT_EQUAL( 期待した値, 実際の結果 ) –CPPUNIT_ASSERT_EQUAL( メッセージ, 期待した値, 実際の結果 ) –CPPUNIT_ASSERT_DOUBLES_EQUAL( 期待した値, 実際の結果, 誤 差 )

Japan Symposium on Software Testing 演習 3-1 演習 2 の関数 CGIInput::getarg について以下のテ ストを実装してください – 環境変数 REQUEST_METHOD に "GET" が、環境変数 QUERY_STRING に "x=12&y=6&submit=submit" が与えられたとき、 CGIInput::getarg("x") が "12" 、 CGIInput::getarg("y") が "6" 、 CGIInput::getarg("submit") が "submit" 、という文字列を返すかど うかチェックするテスト – 環境変数 REQUEST_METHOD に "GET" が、環境変数 QUERY_STRING に "x=3&y=102&submit=submit" が与えられたと き、 CGIInput::getarg("x") が "3" 、 CGIInput::getarg("y") が "102" 、 CGIInput::getarg("submit") が "submit" 、という文字列を返すかど うかチェックするテスト

Japan Symposium on Software Testing 演習 3-2 演習 2 の関数 DataProcessor::addition について以下 のテストを実装してください –2 つの文字列 "12", "21" を渡すと、文字列 "33" を返すようなテスト –2 つの文字列 "4", "102" を渡すと、文字列 "106" を返すようなテス ト –2 つの文字列 "-6", "10" を渡すと、文字列 "4" を返すようなテスト –2 つの文字列 "3", "-10" を渡すと、文字列 "-7" を返すようなテスト –2 つの文字列 "A", "-10" を渡すと、文字列 "Not Number" を返すよう なテスト

Japan Symposium on Software Testing 演習 3-3 演習 2 の関数 HTMLOutput::output について以下の テストを実装してください – 文字列 "result" が与えられたとき、与えられた出力ストリームに、 以下のような文字列を書き出すテスト Result Result: result – 文字列 “12” が与えられたとき、与えられた出力ストリームに、以 下のような文字列を書き出すテスト Result Result: 12

Japan Symposium on Software Testing 実装とリファクタリング 最初はダミーコードから – 環境変数 QUERY_STRING に “x=12” で getarg(“x”) なときに、 char *getarg(char *argname) { return “12”; } –addition(“1”, “2”) なときに、 char *addition(char *xstr, char *ystr) { return “3”; } –output(“test”, os) なときに、 void output(char *message, ostream &os) { os << “test”; } 重複の削除 ( リファクタリング ) – コードで重複している部分を置き換えていく “3” → _itoa(3) → _itoa(1 + 2) → _itoa(atoi(“1”) + atoi(“2”)) → _itoa(atoi(xstr) +atoi(ystr)) – 面倒くさくても 1 ステップづつやるのがこつ –C++ の場合メモリ管理が入る

Japan Symposium on Software Testing 演習 4 演習 3-1 ~ 3-3 で実装したテスト関数をクリアする コードを、ダミーコードから 1 段 1 段リファクタリ ングしながら実装してください

Japan Symposium on Software Testing テストを書けばいいというものではな い 書かないよりは書いた方がまし でも、今あるテストでは対処できない例を考えているか? テストに関する知識があれば鬼に金棒 – 境界値分析や状態の組み合わせなどの技法 – 開発環境の差異 – 並列環境や分散環境への対応 などなど 開発者とテスト技術者との知識交流 があるといいのではないか

Japan Symposium on Software Testing 演習 5 演習 3-1 ~ 3-3 では対処できない例を 1 つ以上挙げ、 それらに対するテストコードを追加してください。 また、このテストコードをクリアできるコードを 実装してください。

Japan Symposium on Software Testing 最後に より進んだ利用に向けて – 自動生成 / 支援環境 河童プロジェクト – モックフレームワーク C++ 用 → MockPP –GUI 特に Web HttpUnit, 開発者とテスト技術者の交流を – よりよいソフトウェアを作るために