組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題 -14ページ目

ついに始まったApple Music トラブル続出の顛末と使ってみて感じたこと

定額音楽ストリーミングサービスの本命といわれるApple Musicがスタートしました。私もさっそく7月5日から本格的に使い始めましたが最初は重大なトラブル続出で満足に使えない状況が続きました。現在は普通に使えていますが、始めのトラブルの顛末、そして使ってみた感想などを書いてみたいと思います。私が使っている環境はPC上のiTunesです。なお、ここでいうトラブルとはあくまでも私個人が経験したことであり、他の人では起きていません。たぶん。

最初は問題なかったが・・・

Apple Music を使うために最初に iTunes からApple ID でサインインします。サインインすると、好みのジャンルとアーティストを選択する画面になります。ここでは好みのアーティストが出てこなかったので適当に指定しました。とにかく誰かを指定しないと次の画面に進めずサービスを使えない作りになっています。好みの指定が済んだら For You の画面になって好みに添った Apple お勧めの楽曲が表示されます。ここは無視して New の画面を表示させます。ここで検索窓から聞きたい曲や演奏者を検索すれば結果が表示され、クリックすることで曲がストリーミングされます。クリックしてから曲が始まるまで1~3秒待たされますがまあ許容範囲でしょう。しかし、しばらく使っているうちにトラブルに遭遇しました。

iTunes Store から購入したアルバムの日本語が英語になった! 曲が増殖した!

好みのプレイリストを作ろうとしたのですが、曲によってはプレイリストに追加できません。追加できたりできなかったりします。どうも動作が不安定です。クリックしても無反応になり、iTunes の再立ち上げが必要になること3回。アルバムによっては曲名がグレー表示され、クラウド上に曲データそのものが登録されていない場面に何回か遭遇しました。しかしそのうち安定してきました。約2時間かけてジャズの特定のジャンルの曲を約1300曲登録したプレイリストを作成できました。これをシャッフル再生に指定すれば、ラジオのようにながら聞きができます。

そのうち以前に iTunes Store から購入したいくつかのアルバムのタイトルや曲名が英語表記に変わっていることに気がつきました。どうして英語表記に替わったのか原因は分かりません。iTunes 上では、iTunes Store から購入した曲と、Apple Music から追加した曲が同じ画面に混在して表示されます。Apple Music を使ったことが原因であることが濃厚です。仕方がないので手作業で英語表記を日本語表記に直す作業を始めたところ、途中から英語表記の曲が2つも3つもダブって出現していることに気がつきました。そもそも英語表記に替わってしまうこと自体が異常事態発生です。小手先の修正では手に負えないことが明らかとなりました。

プレイリストが消えた!!

そうこうするうちに、さっき作ったはずのプレイリストが消えていることに気がつきました。原因は iCloudミュージックライブラリへの接続ができなくなったためです。iCloudミュージックライブラリは作成したプレイリストが保存される場所です。不安定だった iCloudミュージックライブラリへの接続が完全に途絶えました。iTunes に小さく表示されるクラウドアイコンを見ると数十秒おきにアクセスにいきますが、接続に失敗しているようです。クラウドアイコンにマウスカーソルを合わせると次のエラーメッセージが表示されました。

1


クリックしてもつながりません。つながらない限りプレイリストも復旧させることができません。しかし、Apple Music へのアクセスは普通にできます。曲もストリーミングできます。プレイリストの復旧ができない状況です。

Apple のサポートに電話し、対応を依頼する

これ以上どうしようもないので Apple のサポートに電話し、トラブル対応を依頼することにしました。最初の担当者に事情を説明すると、次の人に替わり、その人に事情を説明すると Apple 側からリモートで画面共有を行い、さらに事情を説明しました。すると次に「スペシャリスト」なる人物に替わり、同じく事情を説明しました。画面共有でいろいろ指示されて行なってみるも事態は好転せず。 iCloudミュージックライブラリへの接続ができない状況に変わりはありませんでした。スペシャリストの話では3つの可能性が考えられるとのこと。

①.PC環境などユーザ側の原因 → OS再インストールが必要
②.ユーザにヒモ付けられている Apple ID に起因する原因
③.クラウドサーバ側の原因

ここで①については、私としてはOS再インストールなどは(無駄なので)やりたくないので、ノートPCのOSを最新にアップデートして同じことをやってみることとし、②と③は同じようなものであり、Appleサポートから米国のサーバ管理者に問い合わせてもらうことになりました。翌日夕方にAppleサポート側から電話を入れてもらうことで電話はいったん切りました。ノートPCでもやってみましたがやはり現象が再現します。

翌日、Appleサポートのスペシャリストが悪戦苦闘2時間の末にようやく解決

次の日の朝、PCをスリープ解除し状況を確認したところ、iCloudミュージックライブラリへの接続ができるようになっていました。おそらく米国のサーバ側で何らかの修復作業を行なったのでしょう。消えていたプレイリストも復活しました。後は iTunes Store から購入したアルバムの日本語が英語になった問題と、曲が増殖した問題が残っています。

夕方、Appleサポートから電話があり、例によって画面共有によってスペシャリストと問題解決作業を始めました。前日とは違うスペシャリストでした。スペシャリストの指示でいろいろやるのですが、なかなか解決しません。問題のアルバムを削除して iTunes Store から ダウンロードし直すことができれば簡単ですが、iTunes Store ではそのアルバムがグレー表示の「購入済み」となっていて再ダウンロードすることができません。サインアウト、サインインを繰り返したり、iTunes の環境設定で iCloudミュージックライブラリのチェックを付けたり外したり、PCにワーク用のユーザを作成してログインし、iTunes で音楽ライブラリを作成したり、ITunesを Optionキーを押しながら立ち上げて新規に音楽ライブラリを作成したり、Apple Music から問題が起きた同じ曲をダウンロードしたり、ダウンロードしたファイルのファイル名をリネームしたり、スペシャリスト自身がいうところの「試行錯誤」すること約2時間。ようやく問題が解決しました。全部は調べきれていませんが大丈夫でしょう。たぶん。ここまで問題がこじれたのは他にはいないと思います。たぶん。

Apple Music を使ってみた感想

まだ本格的に使ってはいないのですが、これまで使ってみて感じたことを書いてみたいと思います。定額音楽ストリーミングサービスには大きくわけて2つのタイプがあります。1つ目はラジオ型と呼ぶもので、ユーザの好みのジャンルの音楽をラジオのように延々とストリーミングし続けるというものです。ラジオなので好きな曲を個別に選ぶということはできません。2つ目はオンデマンド型と呼ぶもので、ユーザが好みの曲を選択してストリーミングするタイプです。ラジオ型の定額音楽ストリーミングサービスはかなり以前からありました。Apple Music では、ラジオ型とオンデマンド型の両方を備えています。

Apple Music には、Radio のセクションがあり、ここでユーザの好みに応じたジャンルの曲をラジオのようにストリーミングさせ、ながら聞きするスタイルになります。しかし、ジャンル分けが大ざっぱ過ぎて、必ずしもユーザが好むジャンルの曲だけがストリーミングされてくるわけではありません。これはラジオ放送で音楽が流れてくることと基本的には変わるところがありません。普段、ラジオを聞きたいと思ったことがない私には不要な機能でした。このRadioに関係する機能として「ステーション」という機能があります。これはある曲をストリーミング中に右クリックで「新規ステーション」を選択すると、他に似ている曲を自動的に次の曲として次々とラジオのようにストリーミングしてくれるというものです。これが正常に動作すればかなり魅力的なのですが、この機能はどのアルバム、曲で選択してもいきなりストリーミングが止まってしまい、動作しません。単に選んでいるアルバムや曲が今ステーション機能の適用対象となっていないのでしょう。

この点では古くからある既存のラジオ型サービスの方が優れています。私がいつも聞いているジャズ専門に特化したラジオ型サービスの JAZZRADIO.com では、ジャズのジャンルが30以上のチャネルにジャンル分けされており、ここまで細かくジャンル分けが徹底していると、必ずどれかのチャネルが自分の好みにぴったり一致することになります。有料で月額7ドルです。無料で宣伝付きのプランも選べます。

2


こうした Apple Music の弱点は、次に紹介するオンデマンド型のサービスで自分専用のプレイリストを作成することで、ある程度カバーすることが可能です。自分の好みに合った曲をたくさん集めてプレイリストにまとめ、シャッフル再生すればラジオのように聞くことができるからです。

オンデマンド型のサービスは、New のセクションで利用します。聞きたい曲名やアーティスト名で検索すると、お目当ての曲の他に関連する同じタイプのアーティストや曲も一緒に検索結果として提示されます。自分の知っているアーティストばかりではなく、知らなかったけれど好みのアーティストに巡り合えたりします。テレビのチャネルを切り替えるような感覚で次々と異なるアルバムを再生することができます。惜しい点は、関連するとして提示されるアーティストやアルバム、曲が少ないことです。PC版の iTunes ですからもっと多くの曲が提示されてもいいはずですが、画面の広いスペースが空いたままです。とはいえ、これはアーティストやアルバムによってかなり変わるようです。たくさんの関連するアーティストやアルバム、曲が提示される場合もあります。

例えば、ブライアン・カルバートソンで検索すると、そのアーティストのトップソング、トップアルバム、トップビデオ、アルバム、バイオグラフィ、同じタイプのアーティスト、影響を与えたアーティストといった数多くの情報が1つの画面にまとめて表示されます。トップソング、トップアルバムには、それぞれこのアーティストの人気のある曲、人気のあるアルバムが提示されます。ここで「トップソング」の文字をクリックすると、提示されていたトップソングが収録されているすべてのアルバムが表示されます。トップソングとして表示されているアルバムアートワークに表示される再生ボタンをクリックすれば曲が再生されますし、アートワークそのものをクリックするとその曲が収録されているアルバムのすべての曲が表示されます。曲名の右端に表示されるマークをクリックすると、アーティストへ移動、アルバムへ移動、曲へ移動などのメニューが表示され、それぞれの画面に移動することができます。「同じタイプのアーティスト」や「影響を与えたアーティスト」で提示される情報はとても興味深いものです。これらは Apple が人手で作成したいわゆる「キュレーション」というものです。このように関連性の高い別のアーティストを手軽に知ることができるのは大変助かります。こうして様々なアーティストや曲をいろんな手段で簡単に自由に聴くことができるため、このブラウズ体験はとても快適に感じられます。この快適さはPC上の iTunes でなければ決して体験することができません。

1


For You というセクションでは、ユーザの好みに応じたおすすめのプレイリストが提示されるという仕組みですが、私の場合はまったく役に立ちませんでした。やたらと「はじめての○○」という入門用とでも言えるリストが多いのですが、うーん、どうでしょう。このセンスは好みではありませんね。おすすめとして提示されるプレイリストがまるで興味を引かないからです。どういう人なら役に立つのか考えてみると、特定のジャンルに好みが定まっていない人なら有用かもしれません。私の場合はもう何年もいろんなジャンルの音楽を聞いてきたので好みがはっきりしています。

数百万曲の楽曲を提供するとされていますが、今現在、邦楽に関してはごくわずかしか提供されていません。邦楽に期待すると失望するかもしれません。しかし、この問題は時間が解決するでしょう。邦楽以外はかなり充実していますが、有名なアーティストでも提供されていない場合があります。iTunes Store には提供されているビートルズが、Apple Music にはまだ提供されていません。例えば、レッド・ツェッペリンの楽曲は提供されていますが、キング・クリムゾンの楽曲は事実上提供されていません。「King Crimson」で検索すると、いくつかの曲とアルバムが表示されますが、これらはいずれも一般によく知られているCDレーベルとは異なるものです。

1

これは Apple Music に限ったことではないと思いますが、ある曲に関するすべての提供タイトルをリストにして表示することができないのは不便です。例えば、Apple Music が提供しているブラームスの交響曲すべてのタイトルを表示させるといったことができません。「Brahms symphony」で検索すると、いくつかのアルバムが表示されるので、ここで「アルバム」をクリックすると、ずらずらっと「Brahms symphony」に合致するアルバムが表示されますが、数えてみると本当に合致しているアルバムは100枚ほどです。数百万曲が提供されているという割には検索で提示されるアルバムが少ないように思います。本当はもっとあるはずだと思いますが探し方が分かりません。しかし、100枚といえば曲数にして700曲くらいですから、どうでしょうか。数百万曲のうちの700曲ということになるのでおおよそ1万分の1の割合。いろんな音楽、ジャンルがありますからまあこんなものなのかもしれません。


1


それからこれはこまかいことですが、検索を行なうと、検索語句が検索窓から消えてしまいます。そのため、検索語句をその場で手直しするということができません。これが意外と不便です。検索履歴も使えるのですが、履歴から検索しても検索窓には何も残りません。この点だけでも早急に改善して欲しいものです。

音質の面では同じ曲をCDで聴いても違いがまったく分かりません。かなり高価なアンプとヘッドホンで比較したのですが、音質はCD並といってよいでしょう。圧縮形式はAAC 256Kbpsであり、人間の可聴限界内の帯域をほぼすべてカバーしたうえで、聴覚の特性上聞き分けられない情報のみを削除しています(4G/3G回線では160Kbps程度に低下するようです)。はっきりいってCD以上の音質向上は人間の聴覚には不要です。最近は一部で「ハイレゾ」がブームですが、「ブラインドテスト」ではCDとの違いが認識できないのですから、これは音がよくなったと思って聞けばよく聞こえる「プラセボ効果」に便乗した一部メーカによる霊感商法以外の何ものでもありません。しかし被害者としての自覚が持てないのだから問題ないのでしょう 😊

音楽ストリーミングサービスと言えば、現在 YouTube が若者の間で大人気ですが、Apple Music がこれに割って入ることができるでしょうか。YouTube の強みは、無料であること、映像が伴っていること、の2つです。この2つは強力です。若者の多くは音質にはあまり関心がないようで、YouTube は以前から MP3 128Kbps~96Kbps 程度の低品質な圧縮形式を採用し続けています。映像がHD品質になると音質も少し向上するようですが、音質にこだわりがない若者の多くは無料でかつ映像付きの YouTube を好み、有料で音声だけの Apple Music は敬遠されるかもしれません。有料でも映像はなくてもよいが音質は確保したい、といった向きには Apple Music は最適だと思います。私個人としては、好みのジャンルの曲だけをながら聞きできる JAZZRADIO.com は捨てがたいのでこのまま契約を続けることとし、聞きたい曲を高音質でじっくりと聴ける Apple Music も同時に契約したいと考えています。おそらく既存の定額ストリーミングサービスの有料会員の多くが Apple Music にくら替えするものと思われます。

開始早々、大きなトラブルに遭遇した私ですが、その後は問題なく使えています。これだけ大規模なシステムですから、例外的にトラブルが発生することは避けがたいことかもしれません。PC上の iTunes での使い勝手はきわめて良好です。CDからリッピングした曲と iTunes Store から購入した曲と Apple Music から追加した曲が1つの My Music の画面で混在して同列に扱うことができるのでとても便利です。この調子ですと今年中に私の音楽ライブラリは数万曲に達しそうです。楽しみがまた1つ増えました。

CIT-BACH 1.02 を同梱した PictMaster 6.2.1J をリリースしました

ある特定の複雑な制約を指定した場合に、正しくない生成結果が出力される問題を修正した CIT-BACH 1.02 がリリースされました。このリリースにともない、CIT-BACH 1.02 を同梱し、軽微なバグを修正した PictMaster 6.2.1J をリリースしました。

今回のバージョンの変更点は次の通りです。

【バグ修正】
・ある特定の複雑な制約を指定した場合、現状のCIT-BACHでは正しくない生成結果が出力される問題があり、その問題を修正したバージョン1.02 のCIT-BACHを同梱した。
・結果表の左端の罫線を制約表と同じく太線で表示されるように修正した。

PictMasterバージョン6.2.1J は次のサイトからダウンロードすることができます。

http://sourceforge.jp/projects/pictmaster/


なお、CIT-BACH 1.02 は、次のサイトから直接ダウンロードすることもできます。

http://www-ise4.ist.osaka-u.ac.jp/~t-tutiya/CIT/

このサイトから CIT-BACH を直接ダウンロードし、その CIT-BACH を使用する場合は、CIT-BACH のファイル名 cit-bach1.02.jar を cit.jar にリネームしてから PICTフォルダにコピーする必要があります。

PictMasterで「巡回セールスマン問題」の厳密解を求める

今回はPictMasterを使ってちょっとした遊びをやってみました。最適化問題の代表的な例として「巡回セールスマン問題」があります。これは「ある都市を出発したセールスマンの移動距離が最も短くなるように、すべての都市を一度ずつ必ず訪問して出発点に戻るための経路を求める」というものです。

この問題の厳密解を求めることは、都市の数が多くなると計算時間が膨大なものとなるため、できるだけ厳密解に近い近似解を求める方法が盛んに研究されています。都市の数をnとしたとき、経路の組み合わせは (n-1)! となります。nの数が少ない場合は問題ありませんが、n=10では組み合わせは362,880となります。n=100での組み合わせは約10の156乗にもなってしまい、この厳密解を求めることは事実上不可能です。この問題が重要なのは、プリント基板の穴開けのように一度に数万個から数十万個の組み合わせ問題を実際に解く必要があるからです。

近似解を求める最も簡単な方法は出発点から順番に最も近い都市を選んでいくグリーディ法です。この方法は最も高速に近似解を求めることができますが、同じ距離の都市が複数ある場合、どちらの都市を先に通過するかによって得られる解が大きく異なるという欠点があります。別の方法には、都市間の距離が最も短い距離からスタートするグリーディ法の変形版があります。この方法では単純なグリーディ法に比べてより短い経路が得られる傾向がありますが、計算時間はより長くかかります。この他に分割統治法や局所探索法などがあります。

あらゆる種類の巡回セールスマン問題の厳密解を求める方法が見つかれば数学上の大ブレークスルーとなるだろうと言われています。そうした解法が見つかれば、答えの検算が容易にできるタイプの計算問題がもっと容易に解けるようになることが、計算量理論から示されている1そうです。

さてここからが本題です。PictMasterで巡回セールスマン問題を解くといっても、複雑なことはできません。ここではごく少ない都市を扱い、その厳密解を求めることにします。都市の数は8都市です。8といってもその経路の組み合わせは (8-1)! = 5,040通りあります。

各都市を通過する順番をパラメータとし、各都市の名称を数字で表しその値とします。制約表で1つの経路には同じ都市が組み合わせられないように指定します。経路の距離の計算は結果表で行ないます。2つの都市間の距離を「期待する結果」で指定し、その結果となる都市の地点をパラメータの値で指定します。各都市を経由するので結果表で各都市間の合計が計算できるようにします。実際の距離の計算は、生成結果が出力された後で距離の合計を求める小さなアドインで行ないます。

PictMasterのモデルを以下に示します。

0

 

パラメータの順序1には1しかありません。どの都市でもいいのですがここでは1からスタートすることにします。順序2以降のパラメータの値には1を含めないでおきます。このようにすることで、同じ経路を前進した場合と後進した場合とで二重に網羅されないようにすることができます。順序2~順序8では、他のパラメータと同じ値が組み合わせられないようにパラメータ同士の制約を指定します。

結果表の結果内容欄には各順序間の距離を記入します。結果内容の先頭から7行分は、都市1から各都市への距離を記入します。8行目以降は、各都市からその他の6都市までの距離を記入します。後は同じ結果内容と、順序をカスケード状に、順序2と順序3、順序3と順序4、… という具合にずらしながら結果表にコピー&ペーストを繰り返します。この例では259行分指定することになります。結果内容の+記号は区切り文字であり、カンマなどでもかまいません。結果内容の数値は実際に適当に各都市の位置を決めてから、各地点間を結ぶ辺に相当する42通りのおおまかな距離を測定したものです。

次に、このモデルでの生成結果の一部を示します。

1

 

最初は都市1からスタートし、各行の順番で各都市を巡回します。結果内容欄には、各都市間の距離が+記号で区切られて記入されています。合計距離欄の数値 は、生成が完了してからアドインを実行して求めた各経路の合計距離です。この生成結果は生成エンジンにPICTを使用して求めました。生成が完了するまで にかかった時間は約40秒。5,040通りある各経路と259通りの期待する結果とのマッチングを行なって結果内容をVBAで求めるのに約25秒かかりま した。アドインで各経路の合計距離を算出するのには3秒程度で完了しました。試しに9都市の場合も行なってみましたが、その場合に40,320通りの組み 合わせ結果すべての処理が完了するまでに1時間30分余りかかりました。そのほとんどの時間はPICTで組合せを生成することに費やされていました。

本当は生成エンジンに瞬時に生成が完了するCIT-BACHを使用したかったのですが、おかしな生成結果が出力され、使用することはできませんでした。生成そのものは1~2秒で完了しましたが、順序1に値の8と2しか含まれておらず、生成件数も約2000件余りと本来の生成件数よりかなり少ない結果となりました。CIT-BACHへ渡している制約式が正しいことは確認済みです。CIT-BACHでは正常に動作しない理由については今のところ不明です。  この問題は、CIT-BACH 1.02 で解決されています。

Excelのフィルタ機能で最短経路を表示させると78となり、最長経路は170となりました。 PictMasterを使わずに最初から最短経路を求める専用の方法を使えば、もちろん今回よりはるかに短時間に求めることができますが、こういうことも できますよという意味で行なってみました。


1: 日経サイエンス 2012年8月号 「巡回セールスマン問題を問い直す 計算の限界とは何だろうか」より

※ 生成結果の表で合計の値に誤りがありましたので7月29日に訂正しました。

忘れられつつある「ソフトウェア工学」 ソフトウェア労働者の過去・現在・未来

かつて数十年前に、「ソフトウェア工学」という言葉が一世を風靡したことがありました。ソフトウェア工学とは、簡単に言うと「品質の高いソフトウェアを低コストで期限通りに開発し、効率よく保守するためのさまざまな技術を扱う学問分野」のことです。一頃、オブジェクト指向が実用化され、ソフトウェア工学の発展に寄与するとも考えられた時期がありましたが、どうもそうはなっていないようです。確かに以前に比べて開発の効率化は向上したことは明らかです。ですが、そのこととソフトウェア工学の理想が実現されたかというと現実は失敗に終わったのではないでしょうか。

ソフトウェア工学の狙いは、誰が開発を行なっても一定の高い水準のソフトウェアを開発できるようにすることにあったはずです。そのための技法として、構造化プログラミングやオブジェクト指向、中間コード言語などの新しいパラダイムが考案されてきました。それには一定の効果はありましたが、ソフトウェア開発が個人の技量に大きく依存する状況はあまり変化がないようです。極端なことを言えば、各人の能力には100と0の差があります。同じ分野で同じ経験年数のある人同士でも、ある人は開発できるソフトウェアでも、別の人はまったく開発できないということが普通にあります。この意味でソフトウェア労働者は「工場労働者」というよりは「職人」と言った方がふさわしいです。

工場労働者であれば、同じ訓練を受ければ同じ能力を獲得でき、大体同じ品質の製品を生み出すことができます。しかし、職人となると、個人の技量に大きく左右されることになります。同じ努力をしても名人になれる人もいれば、凡人で終わる人もいるわけです。このことがソフトウェア工学の目算が外れた原因と言えそうです。俗に言う一握りの「天才プログラマー」の存在抜きに革新的なソフトウェアの成功はあり得ません。ソフトウェア開発がデザイナーなどと同じような知識集約型産業である限り、「ソフトウェア工学」の理想が実現されることはないと言えます。

近い将来、人工知能が飛躍的に発達した暁には、今のソフトウェア開発は激動の時代を迎えるでしょう。現在のプログラマーという職種はなくなるかもしれません。人工知能が自律的にプログラミングを行なうことになるでしょう。SEという職業が存在しているかも怪しいものです。意識を持ち、自己学習能力とプログラミング能力と常識を備えた人工知能は顧客との対話を通じて顧客の希望するソフトウェアを完璧に作り上げることになりそうです。顧客が見逃している仕様の不備について人工知能は的確に質問や提案を行ないます。この人工知能は人類が持つ能力をはるかに超越した能力を獲得するようになるでしょう。こうした人工知能は2050年代までには実現しそうだと科学者たちは予測しています。その頃に「ソフトウェア開発者」という職業がまだ存在しているかは怪しいものです。人工知能が人類に敵対しないように規制を行なう職業が存在しているかもしれません。

人工知能はこれから最もホットな話題の1つとなるでしょう。人工知能の発展がソフトウェア開発に与える影響力は「破壊的」といっていいほどです。

制約表と結果表を用いて状態遷移テストの重要な遷移ルートに重み付けを行なう

状態遷移テストの技法にNスイッチテストがありますが、このテスト技法が実際にはあまり使われていないようだという記事を数年前に書いたことがあります。現時点でもネットで検索してみると数十件しかヒットせず、以前と状況は変わりないようです。

本ブログでは、このNスイッチテストの効果的な利用法について調べていく中で、PictMasterを用いてNスイッチテストのテストケースを自動生成する方法についてはこれまで何度か記事にしてきました。


最終的に、PictMasterを使用して数千件程度のテストケースを生成し、その中から重要そうな遷移ルートに重み付けを行ない、数百件程度に絞り込む方法がよさそうだという結論になりました。

そこで今回は実際にPictMasterを使用して状態遷移テストの重要な遷移ルートに重み付けを行なってみましょう。

テストケースの生成方法は、「組み合わせテストツールを使用してNスイッチカバレッジのテストケースを生成する」で説明した方法で行ないます。第1状態→第1イベント→第2状態→第2イベント→第3状態→・・・という具合にすべての状態とすべてのイベントの可能な組み合わせと遷移順序を制約表で指定します。PictMasterの環境設定の組み合わせるパラメータ数には、NスイッチテストのN+2とします。例えば1スイッチテストのテストケースを生成したい場合は1+2=3を組み合わせるパラメータに指定します。この場合、パラメータの行には状態が3行、イベントが2行で合計5行のパラメータを記述することになりますが、組み合わせるパラメータには5を指定する必要はなく、いわゆる「強い制約」によって、現状態とイベントが決まれば次状態は一意に決まるので組み合わせるパラメータは少ない数で済むことになります。

制約表を記入するコツは、NスイッチのNに合わせて、同じ制約指定をパラメータをずらしながらコピー&ペーストで繰り返し指定するようにします。ちょうど下図のようにカスケード状に同じ制約指定をコピー&ペーストします。この図中の数字は特に意味はありません。

0


次に今回の説明で使用する状態遷移図を示します。以前にも使用したことのある状態数が9個、イベント数が6個ある少しだけ複雑な状態遷移図です。

1


具体的な制約指定の方法については、「状態遷移のNスイッチテストでイベントの同値分割を行なう」の記事を参考にしてください。この記事では同値分割について説明がありますが、その部分は無視してかまいません。上図の状態遷移図では1組の制約指定が17件の制約からなります。現在のPictMasterは複雑な制約指定を行なっても高速に生成が可能なCIT-BACHを生成エンジンに使用しています。PICTでは不可能だったことが可能となりました。ただ、CIT-BACHでは組み合わせるパラメータ数に指定できるのは5個までという制限があります。それを超えると全数組合せを指定するしかありません。全数組合せでは非常に時間がかかってしまいがちです。

組み合わせるパラメータ数が5個ということは、3スイッチテストになります。3スイッチテストでは5状態間の遷移ルートを網羅することができます。実はサブモデル指定と併用することで5スイッチテスト、7状態間までの遷移ルートを網羅することができます。具体的なやり方は後で説明しますが、ここでNを変化させた場合に生成されるテストケース数を次に示します。

 N=0   23件
 N=1   62件
 N=2  173件
 N=3  457件
 N=4 1208件
 N=5 3024件

興味深いことに、Nを増やすに従ってテストケース数の増加比率が一定しないことです。直感的には一定の割合で増加しそうですがそうではありませんでした。5スイッチテスト、3024件のテストケースを生成するまでにかかった時間は約1分20秒でした(i5 3.1GHz)。

5スイッチテスト、7状態間までの遷移ルートを網羅するにはサブモデルを使用します。サブモデルで第1状態から第7状態まで13個のパラメータをすべて指定します。正確に言うとすべてではなくてもいいのですが簡単のため下図のようにすべてのパラメータをサブモデルで指定してください。

2


組み合わせるパラメータ数に5を指定して生成を行なうと3024件のテストケースが生成されます。

ここからは結果表を用いて状態遷移テストの重要な遷移ルートに重み付けを行なう方法を説明します。

重要な遷移ルートとは、バグが発生しやすい状態遷移のことです。状態遷移で発生しやすい主なバグには次のものがあるでしょう。

・状態間で引き継がれ参照される変数の扱いの誤り
・状態間の繰返し、同じ状態内で遷移の繰り返しでの誤り
・タイマの停止忘れにより、想定しない状態でタイムアウト処理が動作するなどの誤り

遷移ルートの重み付けには結果表を使用します。結果表で重み付けを行ないたい状態とイベントのペアを指定し、結果内容欄で重み付けの値を指定します。結果表の使用例を下図に示します。

5


ここでは状態s0からs1への遷移に+1を、状態s5からイベントe2での遷移に+2を重み付けしています。結果内容が&で始まっているのは、異なる結果内容を連結するためのものです。例えばテストケースの最終的な結果内容に1+2+1が設定される、などのようになります。つまり異なる重み付けが加算される場合があるということです。

生成結果の結果内容には1+1+2などと設定されるのでそのままでは重み付けの合計が分かりにくいため、重み付けの合計を計算する20行程度の簡単なアドインを作成しました。テストケースが生成された後でこのアドインを実行すると、下図のように重み付けの合計が表示されます。この図では重み付けの合計が3以上のみをフィルタで表示させています。

4


テストケース3024件のうち、重み付けの合計が3以上のテストケースは212件となりました。これはテストケース全体の約7%に相当します。この程度であれば現実的なテストが可能だと思われます。

CIT-BACHを使用しても5スイッチテストが限界のようです。8状態間にまでの遷移ルートを網羅する6スイッチテストでは全数テストとならざるを得ず、実用的な時間では生成が完了しませんでした。今回の状態遷移は状態数が9個のやや小ぶりなモデルです。ツールとして実用的に使用するには、状態数が30程度のモデルを扱える能力が必要だと思われますが、PictMasterを使用するやり方では限界のあることが分かりました。今後は組み合わせテストツールを使わない方法を検討してみることにします。