つれづれなる技術屋日記

しがない技術屋。専門は情報工学で、「つれづれ技術屋」って呼んで。

組み合わせ生成ツール「PICT」の可視化(エクセル利用)

組み合わせ生成ツール「PICT」の可視化

2007/02/18 ほんだ
Last Modified:2020/08/13

All-pair(Pairwise)法によるソフトウェアテストの組み合わせ生成ツールが、いくつか発表されている。今回は、その中でのMicrosoft社による”PICT”と呼ぶツールの可視化を行なった。具体的には、PICTはWindows上のコマンドラインによるツールだが、表計算ソフトのExcelで因子・水準の設定→結果表示をおこなうようにした。なお本可視化はPICTでの基本的な設定への対応のみで、重みづけとか禁則の指定へは対応していない。

※自己責任で使用願います。 なお、本ドキュメントでExcel等は商標・登録商標です。

 

【操作方法】

本可視化は、Excelのマクロ(VBA)で実装している。マクロを含むExcelファイルを特定フォルダへダウンロードしてセーブし、ファイルを開く際にマクロを有効にする。Windowsで動作可能。細部は後述する。※2020年の更新で、エクセルファイルそのものを示す→マクロのテキストを示すに変更しました。マクロは後段を参考に願います。

(本Excelファイルのファイル名には、日本語文字を含んでいます。IEを利用している場合でファイルが見つからない旨が表示されたら、「インターネットオプション」→「詳細設定」で「常にUTF-8としてURLを送信する」のオプションを外してダウンロードしてみて下さい。また、上手く動かない時は、PICT.exeと本エクセルを同じフォルダに置いてみて下さい。)

  f:id:honda-jimusyo:20200813164703j:plain

Excel上で、矩形領域に因子と水準を記載する。行方向の先頭に因子名。それ以降に水準値を記述する。

矩形領域を選択選択状態にして、「ツール」→「マクロ」→「Case_Gen」を実行させる。(なお実装上は、途中で空白のセルがある場合、水準や因子の記述が一旦終了したと見做しています。)

  

f:id:honda-jimusyo:20200813164923j:plain

 

マクロの実行で、新しいシートに生成結果を表示する。

 

Excelのマクロで実装した理由】

All-Pair法に基づくテストケース生成ツール"ALLPAIRS"の利用を支援するExcelアドイン「AssistAllpair」があり、それとの因子・水準の共用を考えたため。矩形領域を指定して実行する操作方法も似せた。

ちなみに「AssistAllpair」は、moonlightさんの作でフリーソフト。"ALLPAIRS"はJames Bachさんの作。ただし、本Excelファイルにはそれらのアドインは含んでいない。

 

【マクロ「Case_Gen」(テキスト)】

Public Const INUMMAX As Integer = 100

'領域の行、列数 先頭位置
Public IAreaRow As Integer
Public IAreaCol As Integer
Public IAreaStartRow As Integer
Public IAreaStartCol As Integer
Dim ObjString As New DataObject

Sub Case_Gen()
'
' ユーザー名 : ほんだ
'
Dim StrFactorLevel(1 To INUMMAX, 1 To INUMMAX) As String 'エクセルでの列、行
Dim ITempRow, ITempCol As Integer
Dim StrTemp, StrDir As String

Dim StrWSH, Str_WSHExec, StrResult As String

Application.DisplayStatusBar = True
Application.StatusBar = " "


If Selection.Areas.Count <> 1 Then End

'領域が1つのみ
IAreaRow = Selection.CurrentRegion.Rows.Count
IAreaCol = Selection.CurrentRegion.Columns.Count

IAreaStartRow = Selection.CurrentRegion.Row
IAreaStartCol = Selection.CurrentRegion.Column

If IAreaRow > INUMMAX Or IAreaCol > INUMMAX Then End
If IAreaRow < 3 Or IAreaCol < 2 Then End

'行、列計算でIntのオーバーフローを避けるために、先頭も100行・列で制限
If IAreaStartRow > INUMMAX Or IAreaStartCol > INUMMAX Then End

'配列クリア
For ITempCol = 1 To INUMMAX
For ITempRow = 1 To INUMMAX
StrFactorLevel(ITempCol, ITempRow) = ""
Next ITempRow
Next ITempCol


For ITempCol = 1 To IAreaCol

If Trim(Cells(IAreaStartRow, IAreaStartCol + ITempCol - 1)) = "" Then Exit For

For ITempRow = 1 To IAreaRow

Application.StatusBar = "取り込み。Row、Col= " + Str(ITempCol) + "、 " + Str(ITempRo)

If Trim(Cells(IAreaStartRow + ITempRow - 1, IAreaStartCol + ITempCol - 1)) = "" Then Exit For

StrFactorLevel(ITempCol, ITempRow) = Cells(IAreaStartRow + ITempRow - 1, IAreaStartCol + ITempCol - 1)

Next ITempRow

If ITempRow < 3 Then End

Next ITempCol

If ITempCol < 2 Then End


'配列→PICT用Modelファイル
ChDrive ("")
StrDir = ActiveWorkbook.Path

'本BookのディレクトリへModelファイルや結果をストアするため
ChDir (StrDir)

Open CurDir + "\ModelFile.txt" For Output As #1
For ITempCol = 1 To INUMMAX
If StrFactorLevel(ITempCol, 1) = "" Then Exit For

StrTemp = StrFactorLevel(ITempCol, 1) + ": "

For ITempRow = 2 To INUMMAX

Application.StatusBar = "ModelFile作成中。Row、Col= " + Str(ITempCol) + "、 " + Str(ITempRo)

If StrFactorLevel(ITempCol, ITempRow) = "" Then Exit For

If ITempRow <> 2 Then StrTemp = StrTemp + ", "

StrTemp = StrTemp + StrFactorLevel(ITempCol, ITempRow)

Next ITempRow

Print #1, StrTemp

Next ITempCol

Close #1

Application.StatusBar = "PICTで処理中。。。。"

Set StrWSH = CreateObject("WScript.Shell")
Set Str_WSHExec = StrWSH.Exec("PICT ModelFile.txt")
Do While Str_WSHExec.Status = 0
DoEvents
Loop
StrResult = Str_WSHExec.StdOut.ReadAll

Set Str_WSHExec = Nothing
Set StrWSH = Nothing

If Len(StrResult) > 32000 Then End '出力文字列が多すぎる (対策は大変かな)

Set ObjString = New DataObject

ObjString.SetText StrResult
ObjString.PutInClipboard

'新規シートへ書き出し
Sheets.Add
DoEvents
DoEvents
ActiveSheet.Paste

Application.DisplayStatusBar = True
Application.StatusBar = "新規シートへの書き出しが完了しました。 "

End Sub

 

 

【動作環境】

WindowsXP Pro、Excel2003で動作確認した。その他のOS等については??

クリップボードの操作のために、必要なDLLを取り込んでいるので、注意の事。マクロのソースをコピー&ペーストして実行させようとしても、本DLLの取り込みを行なわないと実行出来ない。

 

【おことわり】

・使用に伴う障害については、責任は負いません。

・以下は気にしているけど、ごめんなさい。

 重みづけとか禁則の指定というPICTの利点への対応。

 Excelのマクロよりも、、、。(上述の様に理由有り。)

 エラーへの対応が不十分とか命名ルール等がいい加減。

・多量の因子・水準にすると、PICT自体の挙動がおかしいように思う。単に処理時間がかかっているだけかもしれないが、、。

 

(多量の因子・水準を処理させる場合は、しばらくしたら、本処理のために開かれている"コマンドプロンプト"を閉じてみてください。処理が続行され、結果が表に記載されます。"コマンドプロンプト"のタイトルバーで、PICTの実行か確認した上でのクローズがいいと思われます。本件は、色々試していますが、いい解決方法や実装が見つかりません。)

 

 

【変更履歴】

2020/08/13:ブログ移行の関連で、図や例文をページ内で記述。エクセルはファイルそのものを示すから、マクロのテキスト記述へ。(内容自体が陳腐化してるけど、移行での実験ということで、、。)

2009/03/22:2020年の今となっては変更部分??

 

©2005-2020 ほんだ事務所(honda-jimusyo) All rights reserved.