テスト仕様書と言うか、テスト設計書というか、テストケース設定表、、、。まずイロイロな名称・呼び名からしてもめたり
先に作る、イヤ納品物として後から作る。診断書〜、たんなる厚さ稼ぎ、、、
テストデータはソフトの品質保証書だ〜なんてまじめな方もいるし。。
テストしたの?と聞くと、「自分が想定した正常ケースのみやりました」、、と、真顔で言い放つ若者プログラマーが居たり、
テスト仕様書・テストデータ作り、テスト不足のお話は、話題が多いので、参考程度に読んでください。
プログラマー愚痴系記事の[仕様書・設計書関係の話]もヨロシク。
設計書から機械的、何も考えないでテストデータを作る、それが最低限必要かなぁ。
↑でも、設計書から機械的に作ると、設計書が間違っていた場合、そのテストができなかったり。
※テストケース作りのうまい・ヘタがプログラム作りのうまさと少しは関係してたり・・・
よく、質問で、例題・サンプルがほしいと言われるので、フォーマットを整えてませんが、サンプルの仕様書関係は:[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でした。 ~~~~~~~(↑オイオイ)
次は、テストの仕様書 と 簡単なシナリオを考えます。
通常は、詳細設計書などから鏡のように作ったパターン
と
総合テストの勝手なストーリーを作ったテスト、そんな感じで行います。
↓えっ、たった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
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ソースが表示されない | 証拠画像 |
要望001 : UserFormの起動ボタンがほしい 内容 VBAの編集画面から実行 じゃなくて シートに貼ったボタンからUserFormを起動できないか? | 証拠画像 |
要望002 : URLの初期値を自由に設定したい 内容 現在、Googleが初期値でセットされているが、 シートに設定値を書き、参照するなどして、 自由にテスト用の初期ページを設定したい。 | 証拠画像 |
要望003 : HTMLソースを読み込み前にクリアしてみては? 内容 読み込みに時間のかかるwebページだと、 前のソースが残っていて、切り替えがわかりにくい。 読み込み前にソースのエリアをクリアするなど、 わかりやすい表示にしてください。 | 証拠画像 |
バグも出てるし、修正しないとなぁ・・・・
で、問題の解決編は→[2009-03-07 続きを見る]
最新情報と作成履歴は→[更新履歴と最新を表示]
blog:あまり更新していない作業日記 →
[三流君の作業日記] と
[通販商品の足跡] も よろしくお願いします。