IV. White Box

39
WHITE BOX

Transcript of IV. White Box

Page 1: IV. White Box

WHITE BOX

Page 2: IV. White Box

Outline

White box testing Pembuatan flowgraph Pembuatan testcase

Page 3: IV. White Box

White box testing

Adalah testing yang diturunkan dari “pengetahuan” tentang struktur dan implementasi program

Nama lain : glass box, structural, clear box atau open box testing

harus tahu secara detail tentang perangkat lunak yang akan di uji.

Untuk pengujian yang lengkap maka suatu perangkat lunak harus diuji dengan white box dan black box testing

Page 4: IV. White Box

Cont’d

Pembuatan testcase didasarkan pada alur logika

Alur logika : cara dimana suatu bagian dari programtertentu dieksekusi saat menjalankan

program.

Alur logika dapat direpresentasikan dengan menggunakan flowgraph

Page 5: IV. White Box

Kegunaan

Menguji setiap jalur independent Menguji keputusan logic (true atau falsa) Menguji Loops dan batasannya Menguji Data Struktur internalnya

Page 6: IV. White Box

Flowgraph

Page 7: IV. White Box
Page 8: IV. White Box

Komponen flowgrpah

• Nodes (titik) pernyataan (atau sub program) yang akan ditinjau saat eksekusi program.

• Edges (anak panah) jalur alur logika program untuk menghubungkan satu pernyataan (atau sub program) dengan yang lainnya.

• Branch nodes (titik cabang) titik-titik yang mempunyai lebih dari satu anak panah keluaran.

• Branch edges (anak panah cabang) anak panah yang keluar dari suatu titik cabang

• Paths (jalur) jalur yang mungkin untuk bergerak dari satu titik ke lainnya sejalan dengan keberadaan arah anak panah.

Page 9: IV. White Box

Cont’d

Eksekusi suatu test case menyebabkan program untuk mengeksekusi pernyataan-pernyataan tertentu, yang berkaitan dengan jalur tertentu, sebagaimana tergambar pada flow graph.

Cakupan cabang, pernyataan dan jalur dibentuk dari eksekusi jalur program yang berkaitan dengan peninjauan titik, anak panah, dan jalur dalam flow graph.

Page 10: IV. White Box

Cakupan pernyataan

Ditentukan dengan menilai proporsi dari pernyataan-pernyataan yang ditinjau oleh sekumpulan test cases yang ditentukan.

Cakupan pernyataan 100% jika tiap pernyataan pada program ditinjau setidaknya minimal sekali tes

Cakupan pernyataan berkaitan dengan nodes dari suatu flowgraph

Page 11: IV. White Box

Contoh Cakupan Pernyataan

• Pada contoh gambar flow graph di samping terdapat 10 titik.

• Misal suatu jalur eksekusi program melewati titik-titik A, B, D, H, K.

• Berarti ada 5 titik dari 10 titik yang dikunjungi, maka cakupan pernyataan sebesar 50%.

Page 12: IV. White Box

Cakupan cabang

Cakupan cabang ditentukan dengan menilai proporsi dari cabang keputusan yang diuji oleh sekumpulan test cases yang telah ditentukan.

Cakupan cabang 100% adalah bilamana tiap cabang keputusan pada program ditinjau setidaknya minimal sekali tes.

Cakupan cabang berkaitan dengan peninjauan anak panah cabang (branch edges) dari flow graph.

Page 13: IV. White Box

Contoh Cakupan Cabang

• Pada contoh gambar flow graph di samping, terdapat 6 anak panah cabang.

• Mis. suatu jalur eksekusi program melewati titik-titik A, B, D, H, K, maka jalur tersebut meninjau 2 dari 6 anak panah cabang yang ada, jadi cakupannya sebesar 33 %.

Page 14: IV. White Box

Cakupan jalur

Cakupan jalur ditentukan dengan menilai proporsi eksekusi jalur program yang diuji oleh sekumpulan test cases yang telah ditentukan.

Cakupan jalur 100 % adalah bilamana tiap jalur pada program dikunjungi setidaknya minimal sekali tes.

Cakupan jalur berkaitan dengan peninjauan jalur sepanjang flow graph.

Page 15: IV. White Box

Contoh Cakupan Jalur

• Berdasarkan contoh flow graph di atas, terdapat 4 jalur.

• Bila suatu eksekusi jalur pada program melalui titik-titik A, B, D, H, K, maka eksekusi tersebut meninjau 1 dari 4 jalur yang ada, jadi cakupannya sebesar 25%.

Page 16: IV. White Box

Disain cakupan tes

Untuk mendisain cakupan dari tes, perlu diketahui tahap-

tahap sebagai berikut:

1. Menganalisa source code untuk membuat flow graph.

2. Mengidentifikasi jalur tes untuk mencapai pemenuhan tes berdasarkan pada flow graph.

3. Mengevaluasi kondisi tes yang akan dicapai dalam tiap tes.

4. Memberikan nilai masukan dan keluaran berdasarkan pada kondisi.

Page 17: IV. White Box

Basis path testing Merupakan teknik white box testing yang

dikenalkan oleh Tom McCabe [MC76]. Memungkinkan pendisain test cases untuk

melakukan pengukuran terhadap kompleksitas logika dari disain prosedural

Menggunakan ukuran kompleksitas tsb sebagai panduan dalam menentukan kelompok basis dari jalur eksekusi

dimana hal ini akan menjamin eksekusi tiap pernyataan dalam program sekurangnya sekali selama testing berlangsung.

Page 18: IV. White Box

Cont’d

Identifikasi didasarkan pada jalur, struktur atau koneksi yang ada dari suatu sistem (branch testing), karena cabang-cabang dari kode atau fungsi logika diidentifikasi dan dites

Konsep utama basis path :• Tiap basis path harus diidentifikasi, tidak boleh

ada yang terabaikan (setidaknya dites 1 kali).• Kombinasi dan permutasi dari suatu basis

path tidak perlu dites.

Page 19: IV. White Box

Cyclomatic complexity

Adalah pengukuran kuantitatif dari kompleksitas logika program.

Pada konteks metode basis path testing, nilai yang dihitung bagi cyclomatic complexity menentukan jumlah jalur-jalur yang independen dalam kumpulan basis suatu program dan memberikan jumlah tes minimal yang harus dilakukan untuk memastikan bahwa semua pernyataan telah dieksekusi sekurangnya satu kali.

Page 20: IV. White Box

Cont’d

Jalur independen adalah tiap jalur pada program yang memperlihatkan 1 kelompok baru dari pernyataan proses atau kondisi baru.

[Region / Complexity] V(G) = E (edges) – N (nodes) + 2

Page 21: IV. White Box

Pembuatan testcase

Page 22: IV. White Box

Pembuatan test cases dengan menggunakan cyclomatic complexity:Tahapan :

1. Gunakan disain atau kode sebagai dasar, gambarlah flow graph

2. Berdasarkan flow graph, tentukan cyclomatic complexity

3. Tentukan kelompok basis dari jalur independen secara linier

4. Siapkan test cases yang akan melakukan eksekusi dari tiap jalur dalam kelompok basis

Page 23: IV. White Box

Pembuatan flowgraph

Page 24: IV. White Box

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

Page 25: IV. White Box

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

11

Page 26: IV. White Box

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

1

2

1

2

Page 27: IV. White Box

1

2

10

F

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

10

F

1

2

Page 28: IV. White Box

3

1

2

10

F

T

F

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

10

3T

F

10

F

1

2

Page 29: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

4

T

5

T

10

3T

FF

1

2

Page 30: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

10

6

4

T

5

T

3T

FF

1

2

F

Page 31: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

9

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

9

6

4

T

5

T

3T

FF

1

2

F

10

Page 32: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

9

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

7

T

9

6

4

T

5

T

3T

FF

1

2

F

10

Page 33: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

8

F

9

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

8

F

7

T

9

6

4

T

5

T

3T

FF

1

2

F

10

Page 34: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

8

F

9

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

8

F

7

T

9

6

4

T

5

T

3T

FF

1

2

F

10

Page 35: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

8

F

9

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

8

F

7

T

9

6

4

T

5

T

3T

FF

1

2

F

10

Page 36: IV. White Box

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

8

F

9

public static int binarySearch( int key, int[] sequence ) {

int bottom = 0;

int top = sequence.length - 1;

int mid = 0;

int keyPosition = -1;

while( bottom <= top && keyPosition == -1 ) {

mid = ( top + bottom ) / 2;

if( sequence[ mid ] == key ) {

keyPosition = mid;

}

else {

if( sequence[ mid ] < key ) {

bottom = mid + 1;

}

else {

top = mid - 1;

}

}

}

return keyPosition;

}

8

F

7

T

9

6

4

T

5

T

3T

FF

1

2

F

10

Page 37: IV. White Box

Setelah pembuatan flowgraph, tahap selanjutnya adalah menghitung CC untuk menentukan jumlah jalur independen

CC = jml edges-jml nodes+2

CC = 13-10+2

= 5

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

8

F

9

Page 38: IV. White Box

Berdasarkan urutan alurnya, didapatkan suatu kelompok basis flow graph :Jalur 1 = 1-2-10

Jalur 2 = 1-2-3-10

Jalur 3 = 1-2-3-4-6-7-9-2-10

Jalur 4 = 1-2-3-4-6-8-9-2-10

Jalur 5 = 1-2-3-4-5-9-2-10

3

1

2

10

F

T

F

4

T

5

T

6

F

7

T

8

F

9

Page 39: IV. White Box

Tahap selanjutnya adalah menyusun test cases yang akan melakukan eksekusi dari tiap jalur dalam kelompok basis