CEGTest にニフティクラウド(mBaaS)からインポートする機能を追加

1

CEGTest はJavaScriptを使って、オフラインでも動作するように実装していますが、ウェブ版ではニフティクラウド(mBaaS)を利用して、いくつかのサンプルデータを取得できるようにしました。

2

サンプルデータは、原因結果グラフの演習で公開しているデータが利用できます。なお、演習問題のページで紹介している模範解答はあくまで「解答例」の一つですので、仕様の考え方や何の検証を優先するのか、などによって原因結果グラフは異なります。

今後は、FacebookやTwitterなどSNSとの連携ログイン機能やログインユーザ毎のデータ保管などを考えてみます。

| | コメント (1) | トラックバック (0)

CEGTestにxlsx形式でのエクスポート機能を追加

Xlsx

CEGTest(セグテスト)のエクスポートに xlsx 形式でのダウンロード機能を追加しました。
1シート目はデシジョンテーブル、2シート目はカバレッジ表です。本当は、3シート目に原因結果グラフの元データを、4シート目に原因結果グラフの画像を張り付けたかったのですが、ちょっとそこまで実装できませんでした。

URL はこちら。

CEGTest(ウェブ版)
CEGTest(ダウンロード版:v1.6-20130907)

| | コメント (0) | トラックバック (0)

CEGTest の js アップデート中

CEGTest の js ファイルをアップデート中ですが、プロパティの衝突か何かを起こしていて、ウェブサイト上で問題発生中です。ご利用の際は、zip ファイル版をご利用ください m(_ _)m

http://softest.cocolog-nifty.com/blog/cegtest.html

| | コメント (0) | トラックバック (0)

原因結果グラフの中間ノードが観測不可な場合について

TEFで原因結果グラフの「観測可能」についての解説があったので、すこしまとめてみました。

==

中間ノードが観測可能であるとは、テスト実施後にそのノード(状態や内部変数)が直接確認(観測)できることを言う。特に内部変数はデバッグ出力などを使わないと観測可能にはならないので、プログラムテストではデバッグ出力を用いて観測可能にすることが多い。

CEGTestでのデシジョンテーブル作成ロジックでは、すべての中間ノードが観測可能という前提で実装されています。グラフの形にもよりますが、デシジョンテーブルの1列が複数の論理関係を検証できるため、カバレッジ表よりもデシジョンテーブルの大きさが小さくなります。

では、観測可能ではない(観測不可)中間ノードがある場合はどう考えたらよいか。

Ceg2

このグラフではAが中間ノードになるので、Aが観測可能であればデシジョンテーブルは以下のように作成できる。

Dt2obs

では、Aが観測不可である場合、他にどんなテスト条件を確認すべきでしょうか。

その前に上記デシジョンテーブルの各列が「何を」検証しているかを再確認。


  • #1


    • a1がTであることによって、中間ノードAがTになることを検証している。

    • A,B,CがすべてTであることによって、結果ノードXがTになることを検証している。


  • #2


    • a2がTであることによって、中間ノードAがTになることを検証している。

    • BがFであることによって、結果ノードXがFになることを検証している。


  • #3


    • a3がTであることによって、中間ノードAがTになることを検証している。

    • CがFであることによって、結果ノードXがFになることを検証している。


  • #4


    • a1,a3,a3がすべてFであることによって、中間ノードAがFになることを検証している。

    • AがFであることによって、結果ノードXがFになることを検証している。


さて、Aが観測不可と考えると、#1は、


  • a1,B,CがTであることによって、結果ノードXがTになることを検証している。


というように見なせる。言い換えれば、a2,a3が結果ノードXがTになることに影響を及ぼしているかについては未検証と言える。さらに、#2~#4でもa2,a3がTになることが結果ノードXをTにする検証にはならない。


したがって、僕の解釈では、2つの列を追加すべきと考える。

Dt2kase

ただ、テスト実施は#6からはじめたほうがいいかもしれないなあ。

| | コメント (1) | トラックバック (0)

シーケンス図を使ったステートチャートの作成(1)

状態遷移図・ステートチャートをシーケンス図から設計する手法があるようです。

モデル検査法
http://apal.naist.jp/~seki/Japanese/ss/2011-2.pdf

例に挙げているのは通信プロトコルのモデル化で、

(1) 正常系のシーケンス図の作成
(2) それぞれのラインに対して、トリガー(入力イベント)を見つける
(3) 状態を見つける
(4) 状態遷移図に起こす
(5) 書きづらい・読みづらいなど、必要に応じて階層化
(6) 上記を、その他の正常系や異常系で繰り返す

といったもの。

今回はサンプルとして、メールソフトからのメール送信について、この手順を追ってみようと思います。

(1) 正常系のシーケンス図の作成

利用者、メールソフト、メールサーバで正常系のシーケンス図を作成。

Photo

まずは、メールサーバの入力イベントで区切ってみると、入ってくる矢印、出ていく矢印に注目。

Photo_4

状態は、「idle」「新着確認」「受付中」がみつけられる。さて、メールサーバの状態はこれだけだろうか。

| | コメント (0) | トラックバック (0)

[イベント]JaSST'11 九州とWACATE2011 冬

10月~12月、そして1月はソフトウェアテスト関連のイベントがいくつも連なっていますが、今日は自分にも関係しそうなものを二つ。

==

JaSST'11 九州 2011年11月25日(金)

今年のJaSST九州は福岡です。金曜日なので、東京近辺から遠征される場合は週末も吸収を楽しむのもよさそうですね。今回は午前中のチュートリアルで「実践! CEGTestで原因結果グラフを作ってみよう」と題して、CEGTestを使いながら原因結果グラフを学んでみるワークを担当させていただきます。

開催要項

基調講演は、尾縄 大輔さん(西日本旅客鉄道)による九州新幹線開通にまつわるお話のようです。今年のJaSSTは乗り物系がはやり?!

http://jasst.jp/archives/jasst11k/session_11k.html#s3

招待講演は、湯本 剛さん(日本HP)からテスト自動化を成功させるアドバイスがきけるようです。いろいろな場で湯本さんとお話しする機会はあるものの、落ち着いて講演を聞く機会がなかったので、楽しみです!
九州にみんなでいってみよう!

http://jasst.jp/archives/jasst11k/session_11k.html#s5

==

WACATE2011 冬 ~咲かせてみせようテスト道~ 2011年12月17日(土)~18日(日)

今年も実行委員を務めさせていただきます。今回のクロージングセッションは、「ソフトウェア品質会計」の著書でも有名な誉田直美さん(NEC)です。そして、2日間のセッションをモデレートする実行委員も女性が多く、今回はいつもよりも華やかな雰囲気です。

開催概要

プログラム

WACATE(わかて)とはいえ、ベテランのエンジニアでも参加されていますし、参加者それぞれが得るものを持ち帰っていただける2日間です。ご興味のある方はぜひご参加ください。


| | コメント (0) | トラックバック (0)

出力の組合せ

昨日の夜、twitter で @kyon_mm さんとやり取りをしていたことをもう少し考えてみようと思う。

もともとは数学的なテクニックを使って、自動的にテストパターンを作成する(したいけど、数学勉強しなきゃなあ)という話が発端だったかと思います。Inputは「入力条件」「出力結果」「論理関係を含むDSL」、Outputは「入力条件・出力結果を含んだ組合せテストケース(テスト条件)」というようなツールを目指しているのだと理解しました。

※DSLはドメイン特化言語で、仕様記述言語を意味するらしい。


ここで「出力結果の組合せ」というのは、何らかのシステムの端末で出力されるエラー通知方法

{ディスプレイ:”エラーA”を表示、”エラーB”を表示、”エラーA・B”を表示}、{エラー音:音1、音2}

といった要素と値の組合せを指している。

直感的には、出力結果の組合せを考慮するということは、それらになんらかの論理関係(主従関係)がある、ということになり、出力結果の要素のいずれかが他の要素の入力(原因)になっているんじゃないかなと思いました。

ひとつだけディスプレイに表示される場合は音1が鳴り、”エラーA・B”が表示される場合は音2が鳴る
みたいな。こういう仕様がわかっているならば、デシジョンテーブルなどで表現する方法もある。この場合、ディスプレイ表示(または、ディスプレイ表示を引き起こすイベント)が入力条件に位置する。


でも、「出力の組合せ」を考えたいというのは、おそらくはこういった関係性が仕様上ない場合を指しているのではないかと考えました。あるサイトに広告が3種類あって、

{広告A:a1、a2}、{広告B:b1、b2、b3}、{広告C:c1、c2}

といった広告がランダムに表示される、といったシチュエーション。

実際、JavaScriptを含むタグであったりすると、仕様上は存在しない影響を生み出す場合があり、組合せテストはしたいところ。でも、これも単純に広告A~Cの組合せを考えて、影響がないことをまずは確認することで、その後のさらなる結合テストでの検証範囲を狭めればよいのではないかと思いました。


| | コメント (0) | トラックバック (0)

第6回「ソフトウェアテスト技法ドリル」勉強会 - ペアワイズ

今週末は台風12号の影響で大雨や交通機関の乱れが見られましたが、9/2(金)の勉強会は開催されました。

第6回「ソフトウェアテスト技法ドリル」勉強会
http://atnd.org/events/18949

ツイートのまとめ
http://togetter.com/li/182805


今回も講義担当・演習担当のお二人にご協力をいただきました。jp_watanabe さん、tosikawa さん、ありがとうございました。演習では、スターバックスコーヒーのメニューと注文方法についての組合せが題材でした。

マイフラペチーノ
http://www.starbucks.co.jp/customize/frappuccino/

ベースとなるフラペチーノによって、コーヒーの量やミルクの量、カスタマイズができたりします。今回はペアワイズ法の勉強なので組合せを実際に作ってみようということでしたが、「何をテストするのか」によって実施したいテストが違ってきます(秋山さんも当日おっしゃっていました)。ということで、僕がいくつか想定した検証目的を書いてみます。

店員の教育テスト
メニューを覚えたか、それぞれのフラペチーノに対してどんな変更やカスタマイズが可能かどうかを覚えているかを確認するための組合せテストが考えられます。この場合は、ありえない組合せも考慮して、被験者が「その変更はできない」と判断できるかも確認すべき事項になってきます。コーヒーの量、ミルクの量、全てのカスタマイズに対して組合せを作成して、いくつか試験するのがよさそう。

食券システムのテスト
スターバックスは食券システムではないですが、学食や牛丼チェーン店のそういうシステムのテストはありえそう。この場合は、食券が正しく印刷されるか、選択したフラペチーノに対して可能な変更ボタンが有効になるかどうか等を確認したい。組合せテストともに、論理関係を考えたテスト(制約を含む)も一度検討したほうがよいと思います。入金の金額や釣銭状態もも条件に含まれそう。

味のテスト
変更やカスタマイズを組み合わせて、仕様となる禁則を決定するためのテスト。少ない組合せ数で、お客様に提供できないような味になりそうな組合せを見つける、といった目的になるでしょうか。


それにしても、こんなカスタマイズは今まで注文したことがないです^^;

| | コメント (0) | トラックバック (0)

CFD法の流れ図の見つけ方

CFD法の補習会を企画中。

==

drawCFDではデシジョンテーブルを自動生成するわけではなく、作成者が「流れ」を描くことでデシジョンテーブルの1列(1ルール)が追加されていく。秋山浩一さんに教わった流れ図の描き方を下記の例題で試してみる。

1.横浜ベイクォーター
1店舗3,000円(税込)以上のお買上げで1時間無料 ※駐車券を売場でご提示ください。 2店舗目以降も各店舗3,000円(税込)以上のお買上げで 1時間の駐車サービス券をお渡しします。

2.そごう横浜店

2,000円(税込)以上のお買上げで1時間30分無料
※駐車券を売場でご提示ください。

Cfd3

# 前回の記事とはちょっとだけデシジョンテーブルの順番が違ったり、有効・無効が違いますが、描き方の例としては問題ないかと。



  1. 結果は何か

  2. 今回は駐車料金、特に「駐車料金がどれだけ無料になるか」を確認することが目的。1時間無料、1時間半無料、2時間無料、・・・、無料でないといった結果が考えられる。2時間無料以降は、N時間無料とした(Nは2以上の正数、以後も同じとする)。ということで、「N時間無料」「1時間半無料」「1時間無料」「無料でない」の4つの結果をお得な順序で上から配置した。


  3. 有効結果と無効結果を決める

  4. 4つ結果すべて有効結果ともみなせる(無料でない場合は、次にいくらになるかの処理に進むため)が、今回は「無料でない」は無効結果とした。drawCFDでは右クリックで有効結果・無効結果を切り替えられる。


  5. 横浜ベイクォーターでの買い物に関する同値図を描く

  6. 仕様ではまず、「横浜ベイクォーター」での買い物金額について言及しているので、この条件を(完全)同値分割する。

    この入力条件が引き起こす結果としては、「1時間無料券がN枚」「1時間無料券が1枚」「無料でない」の3つ。ということは同値分割も3つになりそうだ。ということで「N店舗で3000円以上買い物」「1店舗で3000円以上買い物」「どの店舗でも3000円未満の買い物」となる。文言は少し変えました。


  7. 横浜そごうでの買い物に関する同値図を描く

  8. 次に判定するのは、「横浜そごう」での買い物金額について。ここでの買い物が影響を及ぼす結果としては、「1時間半無料」「無料でない」の2種類。ということで、「2000円以上の買い物」「2000円未満の買い物」の(完全)同値分割を考えた。同じく、文言は少し変えました。


  9. 有効系同値クラス、無効系同値クラスを決める

  10. どれも有効系同値クラスとした。


  11. 流れを描く

  12. 流れ図は、結果から探していく。上に配置された結果からそこにつながる流れを以下の手順で見つけていった。


    N時間無料」の結果になるのは?


    仕様から、横浜ベイクォーターでN店舗で3000円以上の買い物をした場合、とわかる。横浜そごうでの買い物は関係しないので、
    IF ベイクォーター is N店舗3000円以上
     THEN N時間無料



    N時間無料」の結果になるのは?


    他の条件はない。ということで「N時間無料」に結ばれる流れはこれでおしまい。


    「1時間半無料」の結果になるのは?


    仕様から、横浜そごうで2000円以上の買い物をした場合、とわかる。では、そのひとつ前の「ベイクォーター」同値図のどこから結ばれるか?
    「N店舗3000円以上」だと、結果が「N時間無料」となるので、ありえない。
    「1店舗3000円以上」だと、ありえる。ということで、
    IF ベイクォーター is 1店舗3000円以上 AND 横浜そごう is 2000円以上
     THEN 1時間半無料



    1時間半無料」の結果になるのは?


    仕様から、横浜そごうで2000円以上の買い物をした場合、とわかる。では、そのひとつ前の「ベイクォーター」同値図のどこから結ばれるか?
    「N店舗3000円以上」だと、結果が「N時間無料」となるので、ありえない。
    「1店舗3000円以上」だと、ありえる。でもさっき通った。
    「3000円を超えない」だと、ありえる。ということで、
    IF ベイクォーター is 3000円を超えない AND 横浜そごう is 2000円以上
     THEN 1時間半無料



    1時間半無料」の結果になるのは?


    他の条件はない。ということで「1時間半無料」に結ばれる流れはこれでおしまい。


    「1時間無料」の結果になるのは?


    横浜そごうで2000円以上の買い物をした場合、1時間無料ではなくなるので、「2000円を超えない」を通ることがわかる。では、そのひとつ前の「横浜ベイクォーター」同値図のどこから結ばれるのか?
    「N店舗3000円以上」だと、結果がN時間無料」となるので、ありえない。
    「1店舗3000円以上」だと、ありえる。ということで、
    IF ベイクォーター is 1店舗3000円以上 AND 横浜そごう is 2000円を超えない
     THEN 1時間無料



    1時間無料」の結果になるのは?


    横浜そごうで2000円以上の買い物をした場合、1時間無料ではなくなるので、「2000円を超えない」を通ることがわかる。では、そのひとつ前の「横浜ベイクォーター」同値図のどこから結ばれるのか?
    「N店舗3000円以上」だと、結果がN時間無料」となるので、ありえない。
    「1店舗3000円以上」だと、ありえる。でもさっき通った。
    「3000円を超えない」だと、ありえない。ということで、他の条件はない。


    無料でない」の結果になるのは?


    横浜そごうで2000円以上の買い物をした場合、ありえないので、「2000円を超えない」を通ることがわかる。では、そのひとつ前の「横浜ベイクォーター」同値図のどこから結ばれるのか?
    「N店舗3000円以上」だと、結果がN時間無料」となるので、ありえない。
    「1店舗3000円以上」だと、結果が1時間無料」となるので、ありえない
    「3000円を超えない」だと、ありえる。ということで、
    IF ベイクォーター is 3000円を超えない AND 横浜そごう is 2000円を超えない
     THEN 無料でない



    無料でない」の結果になるのは?


    他に条件はない。ということで終了。




以上のような考え方で作成しました。最後に確かめ作業があるのだろうが、いまいちわからなかった。。。

| | コメント (8) | トラックバック (0)

CFD法で同値図の順序を変えてみた

頭痛い。

==

1.横浜ベイクォーター 1店舗3,000円(税込)以上のお買上げで1時間無料 ※駐車券を売場でご提示ください。 2店舗目以降も各店舗3,000円(税込)以上のお買上げで 1時間の駐車サービス券をお渡しします。

2.そごう横浜店
2,000円(税込)以上のお買上げで1時間30分無料
※駐車券を売場でご提示ください。

この駐車場の無料特典をCFD法で表現してみた。「横浜ベイクォーターの買い物金額」と「横浜そごうの買い物金額」の二つの同値図があるので、順番を入れ替えて2個作ってみた。


Cfd1

Cfd2

1個目のほうがデシジョンテーブルが小さい。

| | コメント (0) | トラックバック (0)

より以前の記事一覧