티스토리 뷰

PICT 툴 - Pair-Wise 케이스 생성 프로그램

PICT란

pair-wise 기법에 의해 여러가지 조건 조합을 생성해주는 툴

Pair-Wise 기법이란


http://www.pairwise.org/
위 사이트에 잘 정리되어 있다. 자세한 설명은 생략한다….

PICT 설치하기

위 pairwise.org 사이트 메인화면에서 Available Tools 링크로 들어가면 Pair-wise 조합 생성 프로그램 리스트를 볼 수 있다.

이 중에 PICT를 다운받아 설치하면된다.


기본 경로로 설치했다면 아래와 같이 C:\Program Files (x86)\PICT 폴더에 pict.exe 파일을 찾을 수 있다.


설치과정에서 환경변수가 정상적으로 등록이 되었다면 cmd창에서 아무 경로에서나 pict 를 입력하면 위 화면과 같이 뜬다.
※ 제대로 환경변수가 등록이 되지 않았다면 pict가 설치된 곳에서 사용하던가, pict 실행파일을 복사해서 사용하고자 하는 위치로 옮긴 후 사용해야 한다.

사용법

d:\temp 폴더에 a.txt 파일을 생성한다.
a.txt 파일에 아래와 같이 입력한 후 저장 (조건들을 지정하는 부분)

동작모드:    순차,순차반복,1곡,1곡반복,셔플
설정:    Hold,착신,슬라이드,캡션
이퀄라이저:    Off,Live,Wide,Mild,Pro

cmd창에서 d:\temp 폴더로 이동한 상태에서 아래와 같이 입력한다.(물론 파일의 경로를 모두 적어주면 해당 폴더로 이동하지 않고도 실행시킬 수 있다.-환경변수 등록이 정상적으로 되었다면…)

  • pict 실행 형식
    pict 조건입력파일.txt > 출력파일.txt
    

이렇게 실행시키면 해당 폴더에 a_result.txt 파일이 생성되고 이 파일이 바로 조합 출력 파일이다.
해당 파일의 내용을 살펴보면 아래와 같다.

전체 선택 후 엑셀로 붙여넣기 하여 사용하면 편리하다.

조건 파일 생성 시 아래의 문법을 사용하여 제약 조건을 추가로 만들어 줄 수 있다.
상황에 맞게 사용하면 좀 더 효율적이고 효과적인 테스트 케이스를 생성하는데 도움이 된다.
※ 추가 제약이 없이도 충분히 좋은 기법이긴 하다.

문법 사용 예제

■ IF, THEN
Type:           Primary, Logical, Single, Span, Stripe, Mirror, RAID-5
Size:           10, 100, 500, 1000, 5000, 10000, 40000
Format method:  quick, slow
File system:    FAT, FAT32, NTFS
Cluster size:   512, 1024, 2048, 4096, 8192, 16384, 32768, 65536
Compression:    on, off

IF [File system] = "FAT"   THEN [Size] <= 4096;        #File system이 FAT 일경우 Size는 4096 이하이어야 함
IF [File system] = "FAT32" THEN [Size] <= 32000;    #File system이 FAT32 일경우 Size는 32000 이하이어야 함
■ LIKE
[File system] like "FAT*"    #LIKE is a wildcard-matching operator (* - any character, ? – one character)
■ IN
IF [Cluster size] in {512, 1024, 2048} THEN [Compression] = "Off";    #Cluster size 가 512, 1024, 2048일 경우 Compression은 Off
IF [File system] in {"FAT", "FAT32"}   THEN [Compression] = "Off";    #File system 이 FAT, FAT32 일 경우 Compression은 Off
■ IF, THEN, ELSE 에서 logical operators

NOT, AND, OR

IF [File system] <> "NTFS" OR                #File system 이 NTFS 가 아니거나
 ( [File system] =  "NTFS" AND [Cluster size] > 4096 )    #File system 이 NTFS 이면서, Cluster size 가 4096 보다 클 경우
THEN [Compression] = "Off";                #Compression 은 Off

IF NOT ( [File system] = "NTFS" OR            #오른쪽 괄호 내용이 아니면("File system 이 NTFS" 또는 "File system 이 NTFS 이면서 Cluster size 가 4096 이하가 아닌")
       ( [File system] = "NTFS" AND NOT [Cluster size] <= 4096 ))
THEN [Compression] = "Off";                #Compression Off
■ 매개 변수 비교
#
# Machine 1
#
OS_1:   Win2000, WinXP
SKU_1:  Professional, Server, Datacenter, WinPowered
LANG_1: EN, DE

#
# Machine 2
#
OS_2:   Win2000, WinXP
SKU_2:  Professional, Server, Datecenter
LANG_2: EN, DE

IF [LANG_1] = [LANG_2]                    #매개 변수 LANG_1 과 매개 변수 LANG_2 가 같다면
THEN [OS_1] <> [OS_2] AND [SKU_1] <> [SKU_2];        #OS_1, OS_2가 서로 다르면서 SKU_1, SKU_2도 서로 달라야 한다.
■ 무조건 제약
[OS_1] <> [OS_2] or [SKU_1] <> [SKU_2] or [LANG_1] <> [LANG_2];        #OS_1,2 가 다르거나 SKU_1,2 가 다르거나 LANG_1,2 가 달라야 한다.(최소한 하나 이상 달라야 한다.)
[OS_1] <> [OS_2] and [SKU_1] <> [SKU_2] and [LANG_1] <> [LANG_2];    #OS_1,2 가 다르고 SKU_1,2 가 다르고 LANG_1,2 가 달라야 한다.(모두 달라야 한다.)
■ 매개 변수 유형

숫자 매개 변수는 숫자만 비교할 수 있고, 문자열은 문자만 비교할 수 있다.

Size:  1, 2, 3, 4, 5
Value: a, b, c, d

IF [Size] > 3 THEN [Value] > "b";            #Size 가 3보다 크면 Value 는 b보다 크다(c,d)
■ Aliasing

하나의 값에 여러개의 이름을 지정할 수 있다.
Aliasing은 조합 복잡도에는 관여하지 않으며(테스트케이스가 증가하지 않음)
해당 값(여러개의 이름을 가진)이 들어가는 자리에 여러개의 이름을 로테이션시키며 대입시킨다.
조건 식에 Aliasing 값 이름을 대입시킬 경우 가장 앞에 있는 이름만을 사용할 수 있다.(/a: 옵션으로 모두 사용 가능)

#
# Machine 1
#
OS_1:   Win2000, WinXP
SKU_1:  Professional, Server|AdvServer, Datacenter, WinPowered        #Server|AdvServer 두개의 이름으로 Aliasing
LANG_1: EN, DE

#
# Machine 2
#
OS_2:   Win2000, WinXP
SKU_2:  Professional, Server|AdvServer, Datecenter
LANG_2: EN, DE

#
# WinXP is always Professional in our case
#
if [OS_1] = "WinXP" then [SKU_1] = "Professional";
if [OS_2] = "WinXP" then [SKU_2] = "Professional";

#
# No German WinPowered
#
if [SKU_1] = "WinPowered" then [LANG_1] = "EN";

#
# Let’s not test the same OS on both sides
#
[OS_1] <> [OS_2];
■ 가중치

가중치에 비례해서 TC에 자주 등장하는 것은 아님
TC에서 가장 적은 수를 가진 1차적으로 선택
TC에 균등하게 분포되어 있으면 가중치 비교

#
# Let’s focus on primary partitions formatted with NTFS
#
Type:           Primary (10), Logical, Single, Span, Stripe, Mirror, RAID-5
Format method:  quick, slow
File system:    FAT, FAT32, NTFS (10)                    #NTFS가 FAT,FAT32 보다 10배 자주 나온다는 것은 아님
■ Seeding

꼭 포함시킬 TC를 지정 (빈 매개변수 입력 가능)

  1. 중요한 TC를 지정할 때 사용
  2. 이전 TC를 기반으로 추가할 때 기존에서 크게 변경 시키고 싶지 않을 때 사용

Seeding file tamplate example

Hours    AMPM    Day    Month

12    AM    Thursday    January
7        Saturday    February
    AM        March

Seeding file 사용 시 옵션 사용 : /e:file
…. 음 Seeding은 자세한 사용법을 잘 모르겠음….

■ Model to Test Hardware Configurations
#
# Different machine configurations
#

PLATFORM: x86, ia64, amd64
CPUS:     Single, Dual, Quad
RAM:      128MB, 1GB, 4GB, 64GB
HDD:      SCSI, IDE
OS:       NT4, Win2K, WinXP, Win2K3
IE:       4.0, 5.0, 5.5, 6.0

#
# Separate sub-models for hardware and software parameters make the hardware
# configurations less variant lowering the cost of assembling the machines
#

{ PLATFORM, CPUS, RAM, HDD } @ 2
{ OS, IE } @ 2

#
# Constraints may cross sub-model boundaries; here OS depends on PLATFORM
#

IF [PLATFORM] in {"ia64", "amd64"} THEN [OS] in {"WinXP", "Win2K3"};

#
# Constraints on parameters in the same sub-model are also fine
#

IF [PLATFORM] = "x86" THEN [RAM] <> "64GB";

Constraints Syntax Examples
Constraints   :: =
  Constraint
| Constraint Constraints

Constraint    :: =
  IF Compound THEN Compound ELSE Compound;
| Compound;

Compound      :: =
  Clause
| Clause LogicalOperator Compound

Clause        :: =
  Term
| ( Compound )
| NOT Compound

Term          :: =
  ParameterName Relation Value
| ParameterName LIKE PatternString
| ParameterName IN { ValueSet }
| ParameterName Relation ParameterName

ValueSet       :: =
  Value
| Value, ValueSet

LogicalOperator : :=
  AND
| OR

Relation      :: =
  =
| <>
| >
| >=
| <
| <=

ParameterName : := [String]

Value         :: =
  "String"
| Number

String        :: = whatever is typically regarded as a string of characters

Number        :: = whatever is typically regarded as a number

PatternString : := string with embedded special characters (wildcards):
                   * a series of characters of any length (can be zero)
                   ? any one character