[三流君]/ [VBAで楽しく]/ [基本設計書/仕様書のお話]/ [テスト仕様書のお話]/ [関数仕様書のお話]

テストデータの作り方、テスト仕様書

テスト仕様書と言うか、テスト設計書というか、テストケース設定表、、、。まずイロイロな名称・呼び名からしてもめたり
先に作る、イヤ納品物として後から作る。診断書〜、たんなる厚さ稼ぎ、、、
テストデータはソフトの品質保証書だ〜なんてまじめな方もいるし。。
テストしたの?と聞くと、「自分が想定した正常ケースのみやりました」、、と、真顔で言い放つ若者プログラマーが居たり、
テスト仕様書・テストデータ作り、テスト不足のお話は、話題が多いので、参考程度に読んでください。

プログラマー愚痴系記事の[仕様書・設計書関係の話]もヨロシク。

テスト仕様書・テストケースのサンプル

設計書から機械的、何も考えないでテストデータを作る、それが最低限必要かなぁ。
↑でも、設計書から機械的に作ると、設計書が間違っていた場合、そのテストができなかったり。
※テストケース作りのうまい・ヘタがプログラム作りのうまさと少しは関係してたり・・・

よく、質問で、例題・サンプルがほしいと言われるので、フォーマットを整えてませんが、サンプルの仕様書関係は:[IE_GET_TABLE_0316.zip]←今回作ったサンプルの IE_GET_TABLE_0316.xls です。
サンプル作成履歴は→[IE Webの表取り込み]です。
1画面の処理なので、あまり参考となりませんが↑もあわせて見てください



ここから過去に書いたメルマガの記事

どうも、三流プログラマーのKen3です。

今回は、
テストデータの作り方、テスト仕様書についてです。

軽く読み流してね。

/* * 1.今回のキッカケ */

VBA系のメルマガ、少しにぎやかになってきました。 ※が、有料版はさっぱり・・・なんて話はみなさん聞きたいだろうけど、  置いといて。 掲示板やメールで、最近、相談をもらうようになりました。 少しは、質問しやすい空気になってきた?と思いつつ。 で、要望を出す時、テストのデータを付けて期待する結果を書いてくれる人と、 やりたいことだけを書いてヨロシクの人と、いろいろ居ます。 納品物の厚さ稼ぎにも役に立つ、テスト仕様書について書いて見たいと思います。 ※違うでしょ、厚さ稼ぎなんて書いちゃダメですよ。 関連項目?仕様書関係 [No.204 不具合の連絡を受け バグ票の作成とテスト仕様書について] [動画 テスト仕様書 イメージ] [関数仕様書のお話] もヨロシクです。 No.157 聞き易い空気・環境を作る(人気者目指して自己分析?) 質問し易い・しにくい空気について、少し書いてます。暇な時、ヨロシクデス。

/* * 2.テストデータがあるとイメージし易い */

まぁシステムの設計者さん達は、 いろいろな仕様書や依頼書を書いて、 日々、作成者(プログラマー)にイメージを伝えようと努力してます。 Access サブフォームの明細データを検索、メインを移動 http://www.ken3.org/backno/backno_vba22.html#107 でもらった質問なんですが、 メールで下記の質問をもらいました。 ---- >例としまして(本当はもっとドロドロしたデータベースなんですが、 >       違う例えで書いてみました。) > >親フォームが音楽のバンド名が記載されてます。 >サブフォームには、 >そのバンドのメンバーと出身県と楽器と年齢などが記載されています。 > >そこで、親フォームには、そのバンドのメンバーの出身県が出るテキスト >ボックスがあります。 > >例えば・・・バンド名(BOOWY)−−−−−−−−−−親フォーム >      メンバー(氷室、布袋、松井、高橋)−−サブフォーム >      出身県(群馬、群馬、群馬、福島)−−−サブフォーム > >●質問1 > >で、このサブフォームに記載されている、出身県を親のフォームの >任意に作成したテキストボックスの中に「群馬、福島」とだけ表示したいのです。 > >「群馬、群馬、群馬、福島」と表示するのは、ちょっと・・・。 >群馬がだぶっているので、群馬の表示は1つとしたいのです。 > > >●質問2 > >また、沢山のバンドや歌手をこのデータベースに入力します。 >そこで、「布袋」と検索すると、親フォームの「BOOWY」が表示されるようにしたい >のです。 > >まず親フォームのバンド名には >「バンドID」と云う名のフィールド名の主キー(オートナンバー)がありまして > >それをサブフォームの中にもフィールド名で、 同じ「バンドID」という >固有のデータで繋がっているです。 > >こんな説明で分かってもらえるんでしょうか・・・。 >すごく不安です。 ----- こんな感じの実データ付きの説明があると、わかりやすいですよね。 テーブルフォーマットは無かったけど、 2つの親子テーブルが存在して、 バンドIDでつなげた、フォーム・サブフォームが存在する。 そんな、イメージがつかめましたよね。 これが事務的に(SEのオレ様/自称DB設計5年のお偉いさんが清書した仕様書) みたいに、冷たく、テーブルの仕様書だけを渡されて、 親テーブル名:T_バンド名 バンドID オートナンバー バンド名称 テキスト 備考 メモ型 子テーブル名:T_メンバー 個人ID オートナンバー バンドID 長整数型(親テーブルとリンクする) 名前 文字型 楽器 文字型 出身地 文字型 生年月日 日付型 備考 文字型 T_メンバーの名前で検索し、データを移動させる機能をフォームに付ける。 なんて、言われても、?はてな?マークが付いてしまいますよね。 (※まぁ、画面仕様書がたぶんあるので、大丈夫だとは思うけど)

/* * 3.テストデータ作りのセンス */

テストデータ作りって意外と重要だったりします。 チョット前に書いた、メルマガの 都道府県のフィールドを Like "*京都*" を条件に検索、 *京都*と速度気にしないで前後に*を付けたから、 東京都を東(京都)ひがしきょうと(笑)と深夜ラジオのギャグみたいに拾ったんだ。 なんて事故(笑)を事前に防げるし。 三流PG 業務のグチ No.178 *京都*で検索 京都府/東京都を拾うバカ(笑) http://www.ken3.org/backno/backno_guchi35.html#178 詳細は↑を参照。 あとは、テストデータは1件じゃなくて複数件あると、 それだけでイメージや処理方法が沸きやすいし誤解を防げます。 >例えば・・・バンド名(BOOWY)−−−−−−−−−−親フォーム >      メンバー(氷室、布袋、松井、高橋)−−サブフォーム メンバーを検索して、バンド名を拾ってくる。 テストデータが1件だと重複値の落とし穴があったりします。 高橋で検索してBOOWYのバンドIDを返すのは、 'フォームの値を元に検索条件を作成する str検索条件 = "名前 = '" & Me!txt検索 & "'" 'str検索条件を条件にバンドIDをT_メンバーテーブルから検索する str検索されたID = "" & DLookup("バンドID", "T_メンバー", str検索条件) なんて感じで、簡単に作ったけど、 ほかにも高橋ってメンバーが在籍するバンドが存在したら? どうなるんだろう? と 作成後に気が付いたりして。 ~~~~~~~~~~~~~~~~~~~~~~~~~~ これが、テストデータで、 バンド名(BOOWY)−−−−−−−−−−親フォーム メンバー(氷室、布袋、松井、高橋)−−サブフォーム だけじゃなくて、 下記、読者とのメール(笑)から勝手に引用(また怒られるぞ・・・) ---- >>>私は高橋愛も分からなかったですから・・。(自爆) >>でも、新人はよくわからないし、何人居るの? >    ↑ >モーニング娘の人数調べてみました。(笑) >飯田圭織・安倍なつみ・矢口真里・石川梨華・吉沢ひとみ・辻希美・加護亜依 >高橋愛・紺野あさ美・小川麻琴・新垣理沙・藤本美貴 >亀井絵里・道重さゆみ・田中れいな ← この3人が6期メンバーらしいです。 >総勢15名・・。 >おそるべし、もー娘・・。 >師匠は何名ぐらい顔わかりますか・・?(笑) ---- なんて、モーニング娘わからなくなったおっさんトークをチョット前してたけど、 そんな話は置いといて。 違う高橋さんが子テーブルに存在するってことがテストデータで出てれば、 ~~~~~~~~~~~~~~ ・検索で複数該当するデータも考慮しなきゃ?   と作成するプログラマーへの注意を促す。 ・完全一致の氏名高橋愛だけ考慮かそれとも一部一致の*高橋*の複数もありか?   検索条件の入力方法を客先に確認してよ先輩・・・   なんて言われないで話や作業が進むよキット。 ※重複有り無しはテーブル仕様書に書いてある、  なんて逆切れする先輩は要注意ですね・・・・ テストデータ作りのセンスが良いプログラマーは、エラー率が少なかったりします。 自分に都合の良いデータしかテストできないプログラマーは、 そんなの聞いてないよ・・・とモメルシネ。

/* * 4.テスト仕様書いろいろ */

AAAAAとデータを入力するとBBBBBと結果が得られる。 CCCCCとデータを入力するとエラーが発生する(エラー画面へ遷移) など、 テストデータと得られる期待する結果(正常/異常)を書き、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ こんなデータを使用して、このシステムのテストを行いました。 なんてのが、テスト仕様書の基本なんだけど。 プログラム作成後、テスト仕様書を作って、テスト。 意外と落とし穴があって、プログラムにあわせたテストデータを作成したり、 プログラマー自身が自分がテストで使用したデータ、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 動作するのが当たり前のデータを使っていたり(笑) なんて話もアリだし、 意味無い厚さ稼ぎのチャントテストしてますよ私は・・・ 的な仕様書も必要なんですが、 テーブル仕様書・画面仕様書・テストデータ仕様書がそろっていると、 バグの発生や勘違いの処理、足りない処理が防げたりすると思います。 なんて偉そうに書いてるけど、 テスト仕様書を先に作ったこと、私はありません(自慢するなって?)

/* * 5.終わりの挨拶 */

今回は、テストデータのお話でした。 勘違いや危なそうな処理は、 テストデータを付けて、期待する動作を書くと、 そんなモメゴト、やり取りを回避できると思います。 ※些細な戦いが積み重なると大きな溝になったりするし・・・・  初めから溝を埋めたり、テストデータの架け橋を初めから用意したり。 関数仕様書の話 http://www.ken3.org/vba/doc_unit.html で、 モジュールのテストを兼ねた 上位の・テストルーチンを付けて渡すと、理解がハヤマルよ なんて書いてましたが、 それ+、複雑な処理は、はじめにテストデータを用意すると、 スムーズに作業が進むと思います。 えっ、そんなに詳しく各仕様書をコーディング前の開発時に用意できないって? ワープロ打つのが大変なんだって? まぁまぁ、そんなこと言わないで、 アナタはお偉い設計者様/自称スーパーSE様なんだから、 出来の悪いレベルの低いプログラマーさん達に オレ様の完璧な仕様書通りに作ってよお願いだから ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ なんて文句を言わないで、ラフでもいいから ・テスト用の上位ルーチン、接続用のテストルーチン ・流すデータ、テストデータと期待する結果 この2点を渡すだけでバグの発生率が違うと思いますよ。 ※そこまでやるなら自分で作るって? サスガ自称スーパーSEの皆様、がんばって一人で徹夜してね。  (ある意味、一人で作っちゃうから/できちゃうから彼らはスゴイんだけど・・・   意思の疎通なんて無視、自分でドリブル突破パスなんてしない、   そんなすごい人が居るのも事実な世界なんだけど・・・) お偉いシステム設計者がプログラマーへ依頼で話したけど、 何も知らない発注元の神様・夢のシステムを語るお客様 と 要望をなんとか聞き出しシステム化しなければならない設計者、 そんな場合も、テストデータじゃないけど、 流れる実データを把握することがまず大事だと思います。 ふざけて書いている部分もあるので、参考程度に。 (何も出来ない、何年経っても使えない手がかかる、  自分で作ったほうがホントにハヤイ、使えないプログラマーが居るのも事実だし、  逆に設計者の見落とし、ミスを温かくフォローしてくれる  人間ができてるプログラマーさん達も多数居るし  ※↑私が後輩プログラマーに助けられてた実例かなぁ、   よく、あんなカス設計書で作ってもらってた、迷惑かけてたなぁとフト思うよね) 何か読者の心に残れば、うれしいです。 *私の独り言をうまく消化してくださいね。 いつも失敗?のKen3でした。 ~~~~~~~(↑オイオイ)


質問・感想を送る

作者に感想・質問/要望を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい

サンプル IE Webの表取り込み

サンプル作成履歴は→[IE Webの表取り込み]です。
1画面の処理なので、あまり参考となりませんが↑もあわせて見てください

テストのケース シナリオを作る

次は、テストの仕様書 と 簡単なシナリオを考えます。
通常は、詳細設計書などから鏡のように作ったパターン

総合テストの勝手なストーリーを作ったテスト、そんな感じで行います。

↓えっ、たった2ケースしか作成しないのかよ・・・あきらかにテストの量が不足してるよねぇ。。。

テストケース1 www.ken3.org	

動作(確認操作)	
C8に	http://www.ken3.org/cgi-bin/cnt/top100.asp
C10条件	ア.日付 を入力
	イ.訪問者を入力

確認事項(確認方法)	
 ・シートを見て表の取り込みを確認する	

テストケース2 yahoo.co.jp  スポーツ 打撃成績	

動作(確認操作)	
C8に 	http://baseball.yahoo.co.jp/npb/stats/stats_c_bat_avg.html
C10条件	順位を入力


確認事項(確認方法)	
 ・セリーグ 打者の表がとれる か 確認する。	


03/17 VBA IE 表を取り込む テスト実施 と バグ発見
http://www.youtube.com/watch?v=rwpNaDCsgXI



テスト結果を報告する

テスト結果、OK 打ち上げ行きましょうと報告したいところですが、
バグがありました。

バグを報告します。
  [No.204 不具合の連絡を受け バグ票の作成とテスト仕様書について]

バグ001: セリーグの打撃成績の表が取り込めない

内容: C8のURLに http://baseball.yahoo.co.jp/npb/stats/stats_c_bat_avg.html C10の条件に[ 順位 ]と入力し、表を取り込みます。 すると、表が見つかりません の メッセージが表示される。 ※再現性 あり 必ず 原因: 順位を縦に表示するために、 [ 順<BR>位 ] となっている。 対策・対応 改行コードを除いてから 文字列の比較を行うように プログラム修正。 ↑、 原因が 表を見やすくするために <BR> で 改行してたので、 文字列の比較前に vbCr と vbLf を ""にReplace関数で置き換えて除外しました。 strMOJI = objTABLE(n).Rows(0).Cells(x).innertext '値を代入 strMOJI = Replace(strMOJI, vbCr, "") '改行コードを消す 0x0d 0x0a strMOJI = Replace(strMOJI, vbLf, "") If strMOJI = Trim(Range("c10").Text) Then 03/17 VBA IE 表を取り込む バグ001 BR改行に対応 http://www.youtube.com/watch?v=HJcCnoGt5pE

サンプル2 2009-02-17 三流解説 VBA IE デバック用 Webページのソースを表示する プログラム

Excel UserForm に WebBrowserを貼り、
デバック用のツールの作成を開始しました。
最新情報と作成履歴は→[更新履歴と最新を表示]

テストのケース シナリオを作る

次は、テストの仕様書 と 簡単なシナリオを考えます。



テスト F001 
画面名:htmlソースの表示画面
処理概要: URL後、Webページを表示、表示したページのソースをテキストボックスで表示する。

総合テスト概要: URL入力後のページ切り替え と HTMLソースの表示を確認する


テストケース1 www.ken3.org

動作(確認操作)
http://www.ken3.org/ を URLへ入力する
リンクをクリックして他のページに飛ぶことを確認。
新しいページのソースが表示されることを確認する。

確認事項(確認方法)
 ・ページの表示を確認
 ・HTMLソースの表示を確認


テストケース2 yahoo.co.jp

動作(確認操作)
http://www.yahoo.co.jp/ を URLへ入力する
スポーツを選択する
競馬を選択する
出馬表を見る


確認事項(確認方法)
 ・ページの表示を確認
 ・ソースの表示を確認


テスト結果を報告する

ほらね、やっぱり、バグが出た。。。なんて喜んでないで、 バグ票 と 要望票 を 書く [No.204 不具合の連絡を受け バグ票の作成とテスト仕様書について] さてと、口頭の報告で済ませてもいいんだけど、 アイツ 三流プログラマーのクセに調子こいてるから、 バグ票と要望票を書いて、紙に証拠として残して、 突きつけてやるか。 逆に仲の良い作成者・プログラマーには、 テスト不合格をこっそり教え、修正してもらい、不合格の実績を残さない、 そんな温情処理もアリなんだけど、 ※テスト報告書作らない 一番の理由は、書類作りは面倒だし、もめたくないし(笑) なんて、いつもの前置きは置いといて、 今後に生かすために、バグ票・要望票を書きます。 システム名 デバック用 Webページのソースを表示する プログラム バグ・不具合 必ず修正しないといけない項目。納品前のテストで見つかって、よかったね(おぃおぃ)
バグ001 : Yahooのスポーツのソースが表示されない
内容
http://www.yahoo.co.jp/ を URLへ入力後、スポーツを選択する
表示されるはずのHTMLソースが表示されない
証拠画像
システム名 デバック用 Webページのソースを表示する プログラム 要望・改善点(気が付いたこと) 仕様書通りに作りました これは 仕様です。 ^^^^^^^^^^^^^^^^^^^^^^ じゃねぇだろ、設計者の力量不足もあるけど、 開発時・テスト時に確認して、使い易いシステムを目指そうよ。 えっ、予算と納期をお前が用意してくれたらやってやるって?
要望001 : UserFormの起動ボタンがほしい
内容
VBAの編集画面から実行 じゃなくて
シートに貼ったボタンからUserFormを起動できないか?
証拠画像
要望002 : URLの初期値を自由に設定したい
内容
現在、Googleが初期値でセットされているが、
シートに設定値を書き、参照するなどして、
自由にテスト用の初期ページを設定したい。
証拠画像
要望003 : HTMLソースを読み込み前にクリアしてみては?
内容
読み込みに時間のかかるwebページだと、
前のソースが残っていて、切り替えがわかりにくい。
読み込み前にソースのエリアをクリアするなど、
わかりやすい表示にしてください。
証拠画像

終わりの挨拶

バグも出てるし、修正しないとなぁ・・・・
で、問題の解決編は→[2009-03-07 続きを見る]

最新情報と作成履歴は→[更新履歴と最新を表示]


分類別に記事を紹介

分類別といっても、あまり分類別にまとまっていないのですが、、、↓

よく使う操作方法

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[プロパティ、メソッドを探る方法]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、あわてないでデバックを押す]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話
[サンプル 実行方法]・・・Alt+F11 や ツール--マクロ から VBAの編集画面を開き F5で実行?

仕様書のお話(XXX設計書)

イロイロな仕様書・設計書を各工程で使っていくのですが、その一部を書きました。
[基本設計書/仕様書のお話]・・・仕様書・設計書を書いてますか?簡単な流れを書きました。
[テスト仕様書のお話]・・・テストデータ XXXXを入力したら、YYYYになる ほか
[バグの連絡票とテストケース]・・・バグ・不具合の連絡を受けたら 原因を書き 処置する。
[関数仕様書のお話]・・・仕様書は頭の中にありますでいいの?かよ?
[作業の流れ 入力・処理・出力ほか]・・・フォルダー選択を例に仕様書と流れを解説

プログラムのお話

[作成時 Ctrl+C Ctrl+Vの前によく考えよう]・・・コピープログラムの落とし穴?
[関数に汎用性を持たせる、共通に使える関数作り]・・・共通に使える関数(財産)を作りましょう

Access関係:アクセス側からのアプローチ

[AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
[Accessのレポートを操作]・・・レポートを操作してみました
[Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

Excel関係:エクセル側からのアプローチ

[Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

その他:VBAの共通関数やテキストファイルの操作など

[VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

blog:あまり更新していない作業日記 → [三流君の作業日記] と [通販商品の足跡] も よろしくお願いします。






[三流君]/ [VBAで楽しく]