update.ソフトウェアのテストはたいへんだなあソフトウェアのテスト、きちんとしてますか?最近は、スマートフォンやタブレットの普及に伴って、ユーザが使うデバイスの種類が多様化しています。使われるOSやブラウザ、画面サイズの種類が増える中、プリキュア1の多様化も著しいですね。「プリキュアで学ぶワンライナーWebスクレイピング」で検証した通り、昨年までは43人、今年は「魔法つかいプリキュア」が加わることで、プリキュアの数は総勢45人になりました2。プリキュアはキャラクターによって専用デバイスを持ったり3、感情が昂ぶると常識を覆す事象を起こしたりするので、ITサービスを提供するエンジニアの方々は、ユーザ満足度向上のため、当然プリキュアがユーザになった場合も考慮した動作テストをされていると思います。いえ、プラットフォームとプリキュアの組み合わせの数は、既にかなりの数です。全てのパターンを試すととてもテストの数が多くなってしまうので困ってしまいますね。そんな時は、テストの品質をそれほど落とさずに、テスト数を大幅に削減するPairwise法(オールペア法とも呼ばれます)と呼ばれる組み合わせテスト技法を活用しましょう。この記事では、簡単なPairwise法の考え方と、テストケース4を作ってくれるPICTというソフトウェアの使い方を紹介します。10.10.5の端末上で実施。zshを使って動作確認してますが、多分bashでも動きます。(x86_64-apple-darwin13.3.0)PICTの用意インストールPICTは、Microsoftが公開している、テストケースを生成するためのソフトウェアです。コマンドライン上で動作します。Windowsのコマンドプロンプトでも動きます。Windowsはこちらからファイルを落とせるようです。OSXとUbuntu系ディストロでの導入方法を紹介します。/usr/local/bin/pictインストール後にpictコマンドが使えるようになります。そのまま打つとヘルプがでます。statistics簡単な動作確認こんなファイルを用意する。3コマンドの引数に渡すとテストケースを作ってくれます。1行1ケースになっています。2入力するファイルは下記のようなフォーマットに従うテキストファイルにします。テストのパラメータ名をコロン:で区切り、パラメータの値をカンマ,で区切ります5。このようなpictがテストケースを生成するための元の情報をモデル、それを含むファイルのことをモデルファイルと呼びます。......Pairwise法ってなに?下記のようなモデルファイルを用意して、テストケースを作成してみましょう。「OS」が2種類、「通信キャリア」が3種類、「プリキュア」が2種類あります。12通りのテストケースができるはずですね?PICTを使うと、テストケースを削り、下記の6種類の効率的なテストケースを作成してくれます。キュアブラックここで、「OS」と「通信キャリア」の組み合わせに注目してみてください。この2つに関しては、存在する全組み合わせが網羅されていると思います。同様に「通信キャリア」と「プリキュア」、そして「プリキュア」と「OS」に関しても同様です。このようにテストのパラメータ2つでペアを作ったとき、どんなペアの組み合わせでもお互いのパラメータの組み合わせを全て網羅するようにケースを作る方法のことをPairwise法と呼びます。それって信頼できるテストなの?ちょっと古い研究ですが、バグの70%は2つ以下のパラメータ6に、90%くらいは3つ以下のパラメータに何かしらの関連があったようです7。「バグの原因が同時に出てくる場所って、大半は一度に1,2パラメータくらいなんでしょ?テストでは、2パラメータ(ペア)同時に何か起きても問題ないことを確認すれば十分じゃね?全部のパターン試してたらキリないし。」というのがPairwise法の考え方です。(後述しますがもちろん、3パラメータ以上の組み合わせパターンの生成もできます。)どれくらいケース数が削減できるの?MicrosoftのPICTについての論文8があります。減るみたいですね(雑)詳しく知りたい人は論文を読んで下さい。テストケースを作ってみよう基本的な使い方は説明したので、ここからは、pictのちょっとした応用をしてみたいと思います。pictの出力結果ですが、以降は幅を揃えてソートするなどして、適宜見やすくしたものをお見せします。実際の出力とは順番が違うかもしれません。整形方法に関しては、後述するPICT用整形用コマンドを作るで説明してあります。下記はテストケースの材料となるモデルファイルです。ちなみにシェルスクリプトみたいに#で始まる行はコメントになり、pictに解釈されません。シャイニールミナスpictコマンドを使うとこんな出力が出ます。この結果は2パラメータ間の組み合わせを網羅したものです。これはデフォルトの挙動です。18ケース作成されました。シャイニールミナスただし先ほど説明したように、確率は低いですが3つのパラメータが同時に関連したバグ出てくるかもしれないです。バグが出尽くしていない新しいシステムでは不安ですね。いう時は、ケースは増えてしまいますが、3パラメータ間を網羅したテストケースを作成しましょう。/o:3というオプションを付けましょう。これにより、3パラメータ間の組み合わせを網羅した55ケースが作成されます。)同様に、網羅したいパラメータの組み合わせ数を増やしたい場合は/o:4,/o:5...という風に数字を指定します。(Microsoft製なだけあり/で始まるコマンドラインオプションは、UNIXな感じではなくMS-DOSな感じですね。)統計情報表示:プリキュアオールスターズさて、プリキュア3人だけのテストではさすがにサービスレベルが保てないので、テストケースに全プリキュアをいれましょう。ミルキィローズ(..以下略..)ケースが多い場合は/sオプションを付けましょう。すると、実際に出力する前に、どれくらいのケースができるのか表示してくれます。time:0:00:00270ケース作成されるようですね。条件付き制約:みゆきちゃんが英語読めるわけ無いだろ。全プリキュアの中で最も頭が弱い子はキュアハッピーこと星空みゆきちゃんで間違いないでしょう。私には、とてもではありませんが彼女に英語表記のインターフェースが使いこなせるとは思えません。残念なことに先ほど作成した270のテストケースの中で、キュアハッピーが英語の端末を操作しなければいけないケースが3つも含まれています。キュアハッピーこのようなケースはテスト実施ができないため、除外しなければいけません。Constraints)の機能です。下記の一文を、テストの材料のテキストの末尾に追加しましょう。[値]で、条件式を記述できます。;で、条件式1が真の場合、条件式2が真になるようなテストケースが作成されます。下記のようなモデルファイルができると思います。これをpictを使って処理します。"JA";すると、見事にキュアハッピーが出現するテストケースは日本語(JA)のみの組み合わせになりました。キュアハッピーふと気付いたのですが、Android端末でSafariが使えるのはおかしいですね。このケースも取り除きましょう。下記のように、Not条件も<>という演算子を使うことで指定できます。"Safari";ちなみに特にテストケース数が削られている訳ではないので、少なくとも網羅率9は下がってはいないようです。time:0:00:00使える演算子や記法については、Githubにある資料に詳しくあります。ワイルドカードを使った制約:「キュア○○」しか妖精の力で変身できない皆さんご存知の通り、女の子がプリキュアに変身するためには妖精の力が必要です。厳密なテスト実施のためには、妖精もテストのパラメータとして入れるべきでしょう。メップル,ミップル,ポルン,ルルン,フラッピ,ムープ,チョッピ,フープ,ピルン,ブルン,キルン,アカルン,シプレ,コフレ,ポプリ,コロン,ドリー,ミリー,レリー,ファリー,ラリー,ソリー,ドドリー,シリー,シャルル,ラケル,ランス,ダビィ,アイちゃん,リボン,ぐらさん,モフルンしかし、ここで問題があります。変身に妖精の力が必要のない戦士がいます。シャイニールミナスやミルキーローズです。プリキュア」ではないです。対して「キュア○○」となっている戦士は妖精が必要なプリキュアとざっくり言ってよいでしょう10。このような場合に備え、pictでは、SQLのようなLIKE述語が使えます。これにより、値が文字列のパターンに合致するときのテストケースを制御できます。"N/A";これは、もしも「Precure」のパラメータ値が"キュア*"の時、そのテストケースの「Fairy」のパラメータは"N/A"以外になり、その他全ては"N/A"になる。この命令を動かすためには、「Fairy」のパラメータに"N/A"を追加します。妖精がいないことを示す"N/A"を追加。"N/A";たしかに、妖精(Fairy)の箇所が"N/A"となっているプリキュアは、ミルキィローズとシャイニールミナスのみになっています。N/A数値比較による制約:アコちゃんはそんなおっきなディスプレイもてない!アコちゃんことキュアミューズは、小学3年生の最年少プリキュアです。plusのような5インチ以上の大きな画面の端末を片手で操作するのは厳しいでしょう。可哀想なので、これもテストケースから除かないといけません(使命感)。pictには、こういう時に使える数値の比較をして条件として指定できる機能もあるので活用しましょう。察しの良い方はおわかりかと思いますが、<や>のような比較演算子が使えます。下記の行をテスト用テキストに追記してみましょう。5.0;結果は下記のようになります。見事、キュアミューズのテストケースは全て5インチ未満になっていますね。ルルン(..以下略..)pictの演算ここまで、比較演算子や文字列のマッチングを見てきました。pictは簡単なインタプリタを実装しています。オペランドには2種類のデータ型が使えます。数値型と、文字列型です。ダブルクオートで囲まれたものは文字列としてみなされ、先ほど紹介したLIKEなどが使えます。細かい仕様は把握していないのですが、数値型は整数だけでなく、浮動小数点数も含んでいるようです。文字列型に>のような比較演算子を使った場合、辞書順での比較をします(英語のみだと思います)。再掲になりますが詳しくは、Githubのマニュアルを見ていただければと思います。エイリアス:パワーアップ前後で名前が違うプリキュアテストケースでは、同物異名、すなわち違う名前だけど同じ値として扱いたいものがよくあると思います11。このテストケースの中にも同物異名、もとい同人異キュアとしてとらえても良いプリキュアがいますね。はい、もう皆さんご存知、キュアブルームとキュアブライトは日向咲ちゃんが、キュアイーグレットとキュアウィンディは美翔舞ちゃんがそれぞれ変身するプリキュアです。パワーアップ前後で名前が違いますが中の人は同一人物なので、ケースは一緒で良いかもしれませんね12。いう場合はpictのエイリアスを使いましょう。エイリアスを使うと、複数のパラメータの値を、一つの値のように扱えます。値A|値Bのように値を,ではなく|で区切ると、値Aと値Bは同じものとして扱われます。今回の場合、45人のプリキュアが記述してあるallstars.txtには下記の記述があります。(..中略..),キュアブルーム,キュアブライト,キュアイーグレット,キュアウィンディ,(..中略..)...これを、こうします。(..中略..),キュアブルーム|キュアブライト,キュアイーグレット|キュアウィンディ,(..中略..)...さて、pictを動かしてみましょう。述べたように45人のプリキュアを記述したallstars.txtでは270ケースのテストケースが生成されました。プリキュア1人あたり6ケースを占めます。エイリアス適用後は、2人分のプリキュアのケースが減るため、下記のように12ケース減り、258ケースになります。time:0:00:00大文字と小文字なおpictの条件式は、デフォルトではパラメータ名の英字の大文字と小文字を区別しません。JAに加えて、jaも増やした。"JA";Jaとjaが混在してしまいます。2つはエイリアス状態になっています。キュアハッピー/cオプションをつけると、区別してくれます。ふたりでプリキュア最近のプリキュアは2人組というパターンが減っていますね。Yes!プリキュア5は、初の5人組プリキュアです。5人もいると、視聴者は覚えるのが大変です。下記のモデルで2人抜き出してペアにしてしまいましょう。2キュアPrecure2:キュアドリーム,キュアルージュ,キュアレモネード,キュアミント,キュアアクア結果は以下になります。見ると、同じ名前のプリキュアでペアを組んでしまっています。Constraints)」を使いましょう。説明したifから始まる「条件付き制約」とほぼ同じですが、ifをつけず、そのまま条件式を書きます。下記のような感じです。[Precure2];すると全ての結果は、その条件式を満たすようになります。andやorという演算子で論理的な条件の組み合わせも表現できます。バッドエンドプリキュアエラーを検知し、意図的に動作を停止させるパターンもテストしたい場合があると思います。pictは、正常系だけでなく、異常を検知するテストのパターンの生成にも使えます。異常系のテスト13のケース作成では、意図的にパラメータに異常値を入れておくことがあるんじゃないかと思います。下記の例は、先ほどと同じようにスマイルプリキュアの5人から、2人ピックアップしてペアを作るモデルファイルです。[Precure2];おっと、よく見ると、バッドエンドプリキュアが混じっています。悪い奴らなので、しっかりとpictでケースを作って、入ってたら失敗にしてやりましょう。キュアピース(..中略..)ここで、作成されたテストケースに注目して下さい。バッドエンドプリキュア同士のペアが存在しますね。与えられるパラメータが全て異常値のケースです。ところで、一度のプログラムの実行で「検知可能な全てのエラーを拾う実装」って、結構珍しくないでしょうか?どちらかと言えば、「途中で何かしらのエラーを検知したら処理を中断して例外を投げる実装」の方がお目にかかることが多いと思います14。下記のような例外の投げ方です。"ハッピーエンド!";}このような場合、precure1がバッドエンドプリキュアだった場合、precure2の入力がどんなものだったとしてもエラーとなります。与えられるパラメータが全て異常値のケースを試しても、一つの異常値の入力が、他の値の存在を隠蔽してしまうかもしれないので、テストの実施効率が悪いです。(ホワイトボックステスト的な言い方をするのであれば、カバレッジを向上させるのに非効率なケースとなります。)そこで「1ケースあたり異常値は1つ」にして効率化をはかるための機能がpictにはあります。異常値となる値の先頭に~(チルダ)をつけてみましょう15。この記号をつけた値は、他の値を隠蔽するものとして扱われるので、1ケースに1つしか出現しなくなります。モデルファイルは下記のような感じです。[Precure2];確かに結果は下記のように、1ケースに異常値は一つになっています。キュアハッピーこれは、ペアではなくトリオにしても同じになります。サブモデル:新人育成のための重点的なOJTプリキュアオールスターズという映画が毎年3月に公開されます。これは、今までのTVシリーズの全てのプリキュアが集まり、協力して戦う作品です。2月に放映が始まったばかりのいわば「新人のプリキュア」が、歴代の先輩のプリキュアに心なしか敬意を払いながら協力する場面もあり、「新人研修」などと一部のファンから言われることもあります。新人研修のために古参のプリキュアと比較的新参のプリキュアを混ぜて5人チームを作るケースを作ってみましょう。time:0:00:00上記のように16ケースを作成してみました。思いましたが、全体的にコミュ力が高く経験のある古参組は良いものの、新参組には問題が見受けられます。キュアプリンセスはかなりのコミュ障な上、「キュアプリンセスはプリンセスプリキュアではない」などと、入ったばかりの魔法つかいプリキュア勢に説明しても混乱を招くだけでしょう。場慣れの機会がもっと必要なことは、プリキュアファンの方なら容易にお分かりいただけると思います。プリキュアもソフトウェアも、真新しい時にしっかりと問題をあぶり出すのが安心です。いう時は2パラメータを超える網羅で説明した方法で、単純に網羅率を上げるのも良いですが、いたずらにテストケースが多くなりがちです。パラメータの組み合わせ数を3に設定。ふたりはプリキュア勢は一人19ケースもこなさなければいけない。time:0:00:00OJTといえば、ひとつ上、ふたつ上くらいの先輩が重点的に面倒を見るのが理想ですし、それと同時に、人数の少ない古参プリキュアにかかる負担は極力減らすべきでしょう。そんな時にはpictのサブモデル(Sub-models)を活用しましょう。サブモデルを使うことで、特定のパラメータ同士の組み合わせを重点的に試すケースを作ることができます。モデルファイルに下記のフォーマットに従った記述を加えましょう。すると、指定したパラメータをグループにできます。このグループが1つのサブモデルです。<パラメータ組み合わせ数>pictは、サブモデルを、一旦は一つの大きなパラメータとして扱い、テストケースの生成をすると同時に、サブモデル内のパラメータ同士を<パラメータ組み合わせ数>を使ってPairwise法でテストケースの生成をしてくれます。最終的な結果として、それらを両立したものを出してくれます。実際にやってみましょう。2このファイルを実行すると、32ケース完成します。単純に3のパラメータ組み合わせ数で実施した時よりは6ケース少ないです。time:0:00:00ここで、新参プリキュアの結果のみに注目してみましょう。新参プリキュアのみ出力し、重複部分を調べる。キュアマジカル新参プリキュアの部分のみに限っては、同じパターンが2回網羅されています。これは、新参プリキュアのパラメータ全体が、一つのパラメータとしてもまた網羅されているからです。この機能は、幾つかのパラメータと、それらを含んだ集合自体もまたパラメータとしてテストをしたい時に便利です。16ちなみにサブモデルは下記のように、複数設定したり、一部重複するパラメータを入れたりできます。何もパラメータ組み合わせ数を指定しないとデフォルト値の2が使われる。3重み調整:キュアソードは優先したいPairwise法で算出した結果は、実はランダム要素が入り込む余地があります。入力に対して、最低条件として「2パラメータ間の組み合わせを全部網羅する」パターンを出すため、複数の候補が生まれる場合があります。pictでは、そのような場合はランダムに1パターン提示してくれるようになっています。いうことなのか具体例で見ていきましょう。このような、紫プリキュアと一緒にごはんを食べるテストケースを考えるとします。キュアフォーチュンこれをpictで実施するとこうなります。分かりやすいように、ソートして行番号をつけてます。キュアフォーチュンまず「時間帯」と「種類」に注目して下さい。3の9ケースできていることがわかると思います。ここまではいいですね?次に一緒にごはんを食べる「紫プリキュア」に注目して下さい。「キュアフォーチュン」が5ケース、「キュアソード」が4ケースできています。お分かりになりますでしょうか?「紫プリキュア」に関しては「2パラメータ間の組み合わせを全部網羅する」という条件は、8行目の時点でクリアしてます。9行目はぶっちゃけどちらのプリキュアでも良いはずです。どちらだったとしても網羅率は変わらないからです。これは、pictが適当に選んだ運命の結果です。私はまこぴーを優先したいです。まこぴーの出現頻度を上げてやりましょう17。特定の値に重みをつけて、出現優先度を調整するのは簡単です。括弧と数字を使います。キュアフォーチュン「キュアソード」に(10)という数字がありますね?これが重みです。このテキストから作成されたテストケースが以下になります。「キュアソード」を含んだものは4ケースしかありませんでしたが、なんと今回は6ケースになっています。「キュアフォーチュン」は、網羅率をクリアするための最小回数だけ使われています。キュアフォーチュン重みは整数値で指定できます。数が大きいほど重い(優先度が高い)です。何も指定しないと1の扱いになります。キュアソードを含んだテストケース、一番最初(pregohan.txt)は4ケース、2回め(pregohan2.txt)は6ケースでしたが、間を取って5ケースくらいにしたいという場合は、下記のように2指定し、差が1になるようにしてやると良いです。キュアフォーチュンすると、結果はこうなります。キュアフォーチュンシード処理:新プリキュア途中参戦!作成済みのテストケースは......?既に運用しているシステムに新機能が追加された時のテスト、どうしていますか?改修内容にもよりますが、きちんとテストケースを管理している方は、既存の機能のテストケースをベースにして、新機能向けのテストケースを考える方もいるんじゃないかと思います。いずれにせよ、新機能の動作テストだけではなく、元々存在する機能のデグレが怖いので、リグレッションテストはしておきたいですね。実は、プリキュア業界でもデグレ検知はとても重要です。プリキュアや妖精は物語の途中で増えることが多いからです。新プリキュアが途中参戦すると、新参者が水を差す形で、せっかく仲が良かったプリキュア達の関係が悪化することがよくあります。この現象をキュアデグレと言います18。具体例で見てみましょう。下記は、ドキドキプリキュアの登場人物から、プリキュア、妖精、サポート役の脇役の中から一人ずつピックアップして、トリオを作成するモデルファイルです。セバスチャンテストケースを作成し、その結果を一旦case_dokidoki.txtに格納します。16ケース作成されました。セバスチャン(..中略..)ドキドキプリキュアでは、物語の途中で新しくキュアエースとアイちゃんが仲間に加わります19。そこで、モデルファイルは下記のように修正しなければいけません。セバスチャンモデルファイルが修正されてしまったので、また新しいテストケースが作られます。こちらはcase_dokidoki2.txtに格納しましょう。セバスチャン(..中略..)1回目のテスト(case_dokidoki.txt)とプリキュアと妖精が増えた2回目のテスト(case_dokidoki2.txt)にどれくらい差があるでしょう?調べみましょう。一回目のケースと二回目のケースを比較。一回目に存在した8ケースが残る。セバスチャン1回目と2回目では8ケースがそのまま残っていました。1回目に作った16ケースのうち、半分が無くなったことになります。皆さんは、この差分のケース数はできるだけ無くならない方が嬉しいのではないでしょうか?例えば、1回目のテストの実施中に考慮漏れが発覚してパラメータの値が増えた場合や、古いテストは既に自動化していて、せっかく自動化したものは極力残しておきたいなんて状況、結構ありそうじゃないでしょうか?pictには、作成済みのテストケースをシード値として読込んで、できるだけそれに似たテストケースを作るためのシード処理(Seeding)という機能があります。シード処理には/e:ファイル名のオプションを指定します。このオプションで作成済みのテストケースの内容を記述したファイル(ここではシードファイルと呼びます)を指定します。今回の場合、下記のようになります。一回目のケースと二回目(Seeding有効)のケースを比較。一回目に存在した16ケースが残る。岡田シード処理を使うことで、一回目に作成された16ケースが全て残りました。ケースは全てPariwiseにもなっているはずです。この機能はキッチリ使わないと意図しないケースが生まれることがあるので、下記の点に気をつけて下さい。シードファイルには存在するが、読んでいるモデルファイルには存在しないパラメータがあるときは、それに該当するファイルの列が丸ごと無視される。シードファイルには存在するが、読んでいるモデルファイルに存在しないパラメータ値があるときは、行ごとに無視される。シードファイルに記載されているケースが、読んでいるモデルファイルの条件文と矛盾がある場合は、それは無視される。むすび本記事で紹介しているPICT自体は、結構前からありますが、昨年10月にオープンソースとして再公開されたようです20。Microsoft社の最近のオープン戦略のおかげかどうかは分かりませんが、MacやLinuxでも使えるので、とてもありがたいですね。pictは紹介したとおり強力なツールですが、テクニックに溺れて、テスト自体の目的を見失ってはいけません。このような組み合わせテスト技法は、あくまで人間の要件に合わせて使いましょう。Pairwise法以外でも、不必要なパラメータを削ることを忘れてはいけません。その辺りの話はテストがうまくいかないプロジェクトに捧ぐ、正しいテストの考え方でよくまとめられています。本記事の内容は、この記事の「統計情報に基づいて組み合わせを絞る」方法を更に深掘りしたというスタンスです。ケース数を削る考え方の1つに過ぎません。「独立している要素を間引く」ことと「重要度の低いパターンはテストしない」の2つと併せ、ぜひ本記事の内容も活用していただければと思います。「こんなやり方もあるよ!」「ここで言ってること間違ってるよ!」といったコメントも、していただけると嬉しい限りです。[付録]文字化け対策pictコマンドですが、Linuxでの動作の場合、入力ファイルはJISコードではないといけないようです。Ubuntuだと文字化けしてしまいました。日本語を含んだファイル。日本語だけ表示されない。1そこで、pictコマンドを少しだけ再開発しましょう。下記の関数を追加しましょう。これで、pictコマンドの入力ファイルがJIS以外のエンコードだったとしても21JISコードに変換されてきちんと処理されます。出力は自動的にUTF-8に変わります。ご紹介した/o:Nなどのコマンドライン引数もちゃんと認識されます。あPICT用整形用コマンドを作るこの設定おすすめなので、良ければ~/.zshrcに追加しましょう。sort"説明このaliasで作成されたpict-formatコマンドは、2つの改善点を含んでいます。pictコマンドの出力はタブ区切りです。そのままだと見にくいのでcolumnコマンドを使ってテーブル幅を揃えて見やすくできます。-tpictコマンドの出力にtailとかgrepとかすると、一行目の項目名の行が消えてしまって分かりにくいです。そこで、一行目は、後続のパイプの操作で消えないようにします22。見やすいようにsortします。sort両者を合体させるとこうなります。キュアブラックを含んだテストケースのみを抽出。一行目の項目名はgrepの影響を受けず残る。http://fj.hatenablog.jp/entry/2016/01/23/165849日本を代表する国民的アニメの一つ。基本的に、TVシリーズに出演するメインキャラクターのみを対象とします。キュアエコーやキュアフラワー、キュアゴリラ、アローハプリキュア、キュアテンダーなどのプリキュアは必須ではないとします。ふたりはプリキュアSplash☆Star勢は、pictのとある機能の説明のためあえて重複して数えています。プリキュア」かどうか微妙ですが今回は含みます。夢見る乙女はみんな「プリキュア」です。GoGoの変身アイテムであるキュアモや、ハピネスチャージプリキュアが使うキュアライン、特にドキドキプリキュアが使うラブリーコミューンはスマホそのものです。小さい子供が大人の象徴だと認識するモノが使われる傾向があります。↩Pairwise法はブラックボックステストを想定したものらしいので、今回はブラックボックステストを対象とします。キュアブラックボックステストです。↩pictコマンドのコマンドラインオプションで区切り文字は変更できます。↩ブラウザやOSの種類、ユーザの属性値やAPIのバージョンなど、テスト対象の挙動に影響する存在、くらいに捉えてもらえれば良いと思います。「テストのパラメータをどういう粒度で定義するべきか」という議論もあると思いますが、そういうお話は求めるサービスレベルによって違うのであまり議論したくないです。興味のある方は論文の方を読んでいただければいいんじゃないでしょうか。網羅率は、存在し得る全パターンを試した時に100%になる比率のことです。Pairwise法で作られるテストケースは、網羅率100%とは限らないわけです。一応他にも妖精の力は直接無くても変身できるプリキュアはいます。ここでは条件が複雑になるので割愛します。「"Windows8"と"Windows8.1"はもう面倒だからテストケース分けなくていいや!」といったような状況です。Star」の第30話以降から登場する形態。ピとチョッピに加えムープとフープの精霊の力を合わせて変身する月と風のプリキュア。キュアブルームはキュアブライトに、キュアイーグレットはキュアウィンディに、それぞれパワーアップする。↩ここで異常系テストとは、全く意図していなかったイレギュラーなエラーで停止するパターンではなく、エラーメッセージを出すような、意図的にエラーを検知するパターンのテストとします。APIのレスポンスなどです。GETとPOSTを間違えて、かつパラメータの数字を間違えていたとしても、最初のレスポンスではメソッドの違いしか注意してくれないですよね。いえ、勿論ケースによります。分かりやすい例だと、会員登録フォームでの入力チェックなどは後者のものもあります。(例:パスワードの長さが不十分かつ、規約への同意のチェックボックスにチェックが入ってなかったら同時に警告を出す。↩/nオプションを使えば~(チルダ)以外の文字も使えます。↩pictの本家のマニュアルでは「プロセッサやメモリ、HDDの組み合わせをパラメータとして網羅したけど、それらを含んだ完成したマシンとしてもテストを網羅しないと不安だよね」という場合を例に挙げています。↩この重み付けをしても生成されるケースは全く変わらないかもしれません。例のように、あるパラメータが変化しても網羅率が変わらない状況の時、優先度の高いパラメータが使われます。これは、特定のパラメータ値を含んだテストが比較的実施しやすいケースの場合、効率化に繋がります。IEはテスト用の設定がしにくいためできるだけ使いたくない、という場合。同じテストの網羅率であればFireFoxやChromeの優先度を上げ、IEの出現頻度を下げる、などの方法が考えつきますね。↩ドキドキプリキュア22話で何の前触れもなく登場。敵を撃退し、主人公のマナ達を助けるものの、心の折れたマナから変身アイテムを剥ぎ取り、プリキュアの資格を剥奪。年下にも関わらず先輩風を吹かせるなどして、ドキドキ勢の関係を一時的にではあるが悪化させ、視聴者をドキドキさせた。典型的なキュアデグレ。↩nkfがエンコードを特定できればOKです。滅茶苦茶なバイナリ情報など渡したらそのまま処理されます。いうコマンドをサブシェルで実行して、後続のパイプで繋がったコマンドの影響は受けないようにしています。詳しくは、コマンドとコマンドをつなぐ糊で説明しています。upLoginユーザーは見つかりませんでした。