Testing dan Implementasi
Sistem
whitebox testing
whitebox testing
Outline
n  White box testing
n  Pembuatan flowgraph
n  Pembuatan testcase
White box testing
n  Adalah testing yang diturunkan dari “pengetahuan”
tentang struktur dan implementasi program
n  Nama lain : glass box, structural, clear box atau
open box testing
n  harus tahu secara detail tentang perangkat lunak
yang akan di uji.
n  Untuk pengujian yang lengkap maka suatu
perangkat lunak harus diuji dengan white box dan
black box testing
White Box Testing menggunakan 3 macam
tahapan testing
1. Unit Testing
2. Integration testing
3. Regression Testing
White box testing
White box testing
n  Pembuatan testcase didasarkan pada alur logika
Alur logika : cara dimana suatu bagian dari
program tertentu dieksekusi saat menjalankan
program.
n  Alur logika dapat direpresentasikan dengan
menggunakan flowgraph
Kegunaan
n  Menguji setiap jalur independent
n  Menguji keputusan logic (true atau falsa)
n  Menguji Loops dan batasannya
n  Menguji Data Struktur internalnya
Flowgraph
whitebox testing
Komponen flowgraph
•  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.
Komponen flowgraph
n  Eksekusi suatu test case menyebabkan program
untuk mengeksekusi pernyataan-pernyataan
tertentu, yang berkaitan dengan jalur tertentu,
sebagaimana tergambar pada flow graph.
n  Cakupan cabang, pernyataan dan jalur dibentuk
dari eksekusi jalur program yang berkaitan
dengan peninjauan titik, anak panah, dan jalur
dalam flow graph.
Cakupan pernyataan
n  Ditentukan dengan menilai proporsi dari
pernyataan-pernyataan yang ditinjau oleh
sekumpulan test cases yang ditentukan.
n  Cakupan pernyataan 100% jika tiap pernyataan
pada program ditinjau setidaknya minimal sekali
tes
n  Cakupan pernyataan berkaitan dengan nodes
dari suatu flowgraph
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%.
Cakupan cabang
n  Cakupan cabang ditentukan dengan menilai
proporsi dari cabang keputusan yang diuji oleh
sekumpulan test cases yang telah ditentukan.
n  Cakupan cabang 100% adalah bilamana tiap
cabang keputusan pada program ditinjau
setidaknya minimal sekali tes.
n  Cakupan cabang berkaitan dengan peninjauan
anak panah cabang (branch edges) dari flow
graph.
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 %.
Cakupan jalur
n  Cakupan jalur ditentukan dengan menilai
proporsi eksekusi jalur program yang diuji oleh
sekumpulan test cases yang telah ditentukan.
n  Cakupan jalur 100 % adalah bilamana tiap jalur
pada program dikunjungi setidaknya minimal
sekali tes.
n  Cakupan jalur berkaitan dengan peninjauan jalur
sepanjang flow graph.
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%.
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.
Basis path testing
n  Merupakan teknik white box testing yang dikenalkan oleh
Tom McCabe [MC76].
n  Memungkinkan pendisain test cases untuk melakukan
pengukuran terhadap kompleksitas logika dari disain
prosedural
n  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.
Basis path testing
n  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
n  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.
Cyclomatic complexity
n  Adalah pengukuran kuantitatif dari kompleksitas
logika program.
n  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.
Cyclomatic complexity
n  Jalur independen adalah tiap jalur pada program
yang memperlihatkan 1 kelompok baru dari
pernyataan proses atau kondisi baru.
n  [Region / Complexity] V(G) = E (edges) – N
(nodes) + 2
Pembuatan testcase
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
Pembuatan flowgraph
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;
}
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
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
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
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
3
T
F
10
F
1
2
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
3
T
FF
1
2
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
3
T
FF
1
2
F
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
3
T
FF
1
2
F
10
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
3
T
FF
1
2
F
10
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
3
T
FF
1
2
F
10
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
3
T
FF
1
2
F
10
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
3
T
FF
1
2
F
10
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
3
T
FF
1
2
F
10
n  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
n  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
n  Tahap selanjutnya adalah menyusun test
cases yang akan melakukan eksekusi dari tiap
jalur dalam kelompok basis
n  Testcase jalur 1
nilai bottom valid
dimana nilai record
bernilai false
hasil yang
diharapkan :
sistem melakukan
[return keyPosition]
dan keluar dari
subprogram
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;
}
n  Testcase jalur 3
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;
}
3
1
2
10
F
T
F
4
T
5
T
6
F
7
T
8
F
9
n  Jalur 3 = 1-2-3-4-6-7-9-2-10
nilai bottom dan keyPosition valid dimana nilai record
bernilai True
nilai mid = (top+bottom)/2
nilai sequence[mid] valid dimana nilai record bernilai
False
nilai sequence[mid] valid dimana nilai record bernilai True
hasil yang diharapkan :
nilai bottom = mid+1
sistem keluar dari loop
sistem melakukan [return keyPosition] dan keluar dari
subprogram
n  Buat flowgraph
n  Hitung CC dan tentukan
jalur independen
n  Buatkan satu testcase
berdasarkan jalur
independen yang telah
ditentukan

More Related Content

PDF
Pertemuan 1 Konsep Dasar Testing
PPT
Algoritma Pencarian String matching
PPT
Teori bahasa dan automata7
PPTX
Metode knn
PPTX
Testing&implementasi 3
PDF
queue antrian
PPT
metode-pengujian-whitebox
PPTX
Keamanan Jaringan Komputer
Pertemuan 1 Konsep Dasar Testing
Algoritma Pencarian String matching
Teori bahasa dan automata7
Metode knn
Testing&implementasi 3
queue antrian
metode-pengujian-whitebox
Keamanan Jaringan Komputer

What's hot (20)

PDF
Interaksi Manusia Dan Komputer Soal + Jawaban
PPT
Pertemuan 3 - Digital Image Processing - Spatial Filtering - Citra Digital
PPTX
Notasi Bahasa - P 5,6,7
DOCX
Program lifo-dengan-pascal
PPT
Algoritma penjadwalan proses
PPTX
Ancaman-Ancaman pada Keamanan Jaringan Komputer
PPTX
ALGORITMA MENARA HANOI MENGGUNAKAN FUNGSI REKURSIF
PDF
PDF
Kebaikan Metode Klasifikasi Multiclass Menggunakan Hold-Out Method dan Cross ...
PDF
6 Algoritma Pengurutan Data
PPTX
Testing&implementasi 4 5
PPT
K-Means Clustering.ppt
PPTX
DATA LINK - OSI LAYER
PPTX
SLIDE KE:5 NFA
PPT
Class diagram
PPT
Metode pencarian heuristik
DOCX
Caesar cipher adalah algoritma cipher
DOC
Sistem berkas
PPT
Komputasi Fisika (1) pengantar pemrogramandankomputasi
PPTX
Ragam Dialog :: Interaksi Manusia dan Komputer
Interaksi Manusia Dan Komputer Soal + Jawaban
Pertemuan 3 - Digital Image Processing - Spatial Filtering - Citra Digital
Notasi Bahasa - P 5,6,7
Program lifo-dengan-pascal
Algoritma penjadwalan proses
Ancaman-Ancaman pada Keamanan Jaringan Komputer
ALGORITMA MENARA HANOI MENGGUNAKAN FUNGSI REKURSIF
Kebaikan Metode Klasifikasi Multiclass Menggunakan Hold-Out Method dan Cross ...
6 Algoritma Pengurutan Data
Testing&implementasi 4 5
K-Means Clustering.ppt
DATA LINK - OSI LAYER
SLIDE KE:5 NFA
Class diagram
Metode pencarian heuristik
Caesar cipher adalah algoritma cipher
Sistem berkas
Komputasi Fisika (1) pengantar pemrogramandankomputasi
Ragam Dialog :: Interaksi Manusia dan Komputer
Ad

Similar to whitebox testing (20)

PPT
Minggu V
PDF
Analisis Algoritma - Strategi Algoritma Dynamic Programming
PPTX
Algoritma dan Pemrograman
PDF
Analisis Structural Equiting Model 2024.pdf
PPTX
Testing&implementasi 4
PPT
Materi 3&4 prosedur
PPT
VIII PROSEDUROOOOOOOOOOOOOOOOOOOOOOOO.ppt
PDF
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
DOCX
P3 depandi enda
PPT
Program yahahyesyshahshsshshahshshhshhs.ppt
PDF
Ch 04 Metode pengujian Black Box dan White Box
PPT
MODUL ALG_SDAT_1.ppt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PPTX
Testing 2
PPT
Penggunaan loop sebagai kerangka dasar algoritma
PPTX
Efisiensi algoritma
PDF
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
PDF
Pertemuan 3 Desain Test Case
PDF
Materi pelatihan java_fundamental
DOC
Intruksi Fundamental
Minggu V
Analisis Algoritma - Strategi Algoritma Dynamic Programming
Algoritma dan Pemrograman
Analisis Structural Equiting Model 2024.pdf
Testing&implementasi 4
Materi 3&4 prosedur
VIII PROSEDUROOOOOOOOOOOOOOOOOOOOOOOO.ppt
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
P3 depandi enda
Program yahahyesyshahshsshshahshshhshhs.ppt
Ch 04 Metode pengujian Black Box dan White Box
MODUL ALG_SDAT_1.ppt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Testing 2
Penggunaan loop sebagai kerangka dasar algoritma
Efisiensi algoritma
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
Pertemuan 3 Desain Test Case
Materi pelatihan java_fundamental
Intruksi Fundamental
Ad

More from Rakhmi Khalida, M.M.S.I (20)

PPTX
Pertemuan 1 Sistem Basis Data.pptx
PPT
Transport layer
PPT
Modul 5 2-ip-address
PPT
Modul 5 1 network layer
PPT
Modul 4 1 data link layer
PPT
Chapter-audio-dan-suara
PDF
Diferensial dan terapan
PPT
pert - 3 Jaringan dasar
PDF
pert - 1 Jaringan dasar
PDF
Pert 1 - Rekayasa Komputasional
PDF
Sistem multimedia-teknik-informatika
PDF
10.kompresi citra
PPT
9.kompresi teks
PDF
3.proses produksi konten multimedia
PDF
2. konten multimedia
PDF
1. Materi pendahuluan Multimedia
Pertemuan 1 Sistem Basis Data.pptx
Transport layer
Modul 5 2-ip-address
Modul 5 1 network layer
Modul 4 1 data link layer
Chapter-audio-dan-suara
Diferensial dan terapan
pert - 3 Jaringan dasar
pert - 1 Jaringan dasar
Pert 1 - Rekayasa Komputasional
Sistem multimedia-teknik-informatika
10.kompresi citra
9.kompresi teks
3.proses produksi konten multimedia
2. konten multimedia
1. Materi pendahuluan Multimedia

whitebox testing

  • 4. Outline n  White box testing n  Pembuatan flowgraph n  Pembuatan testcase
  • 5. White box testing n  Adalah testing yang diturunkan dari “pengetahuan” tentang struktur dan implementasi program n  Nama lain : glass box, structural, clear box atau open box testing n  harus tahu secara detail tentang perangkat lunak yang akan di uji. n  Untuk pengujian yang lengkap maka suatu perangkat lunak harus diuji dengan white box dan black box testing
  • 6. White Box Testing menggunakan 3 macam tahapan testing 1. Unit Testing 2. Integration testing 3. Regression Testing White box testing
  • 7. White box testing n  Pembuatan testcase didasarkan pada alur logika Alur logika : cara dimana suatu bagian dari program tertentu dieksekusi saat menjalankan program. n  Alur logika dapat direpresentasikan dengan menggunakan flowgraph
  • 8. Kegunaan n  Menguji setiap jalur independent n  Menguji keputusan logic (true atau falsa) n  Menguji Loops dan batasannya n  Menguji Data Struktur internalnya
  • 11. Komponen flowgraph •  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.
  • 12. Komponen flowgraph n  Eksekusi suatu test case menyebabkan program untuk mengeksekusi pernyataan-pernyataan tertentu, yang berkaitan dengan jalur tertentu, sebagaimana tergambar pada flow graph. n  Cakupan cabang, pernyataan dan jalur dibentuk dari eksekusi jalur program yang berkaitan dengan peninjauan titik, anak panah, dan jalur dalam flow graph.
  • 13. Cakupan pernyataan n  Ditentukan dengan menilai proporsi dari pernyataan-pernyataan yang ditinjau oleh sekumpulan test cases yang ditentukan. n  Cakupan pernyataan 100% jika tiap pernyataan pada program ditinjau setidaknya minimal sekali tes n  Cakupan pernyataan berkaitan dengan nodes dari suatu flowgraph
  • 14. 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%.
  • 15. Cakupan cabang n  Cakupan cabang ditentukan dengan menilai proporsi dari cabang keputusan yang diuji oleh sekumpulan test cases yang telah ditentukan. n  Cakupan cabang 100% adalah bilamana tiap cabang keputusan pada program ditinjau setidaknya minimal sekali tes. n  Cakupan cabang berkaitan dengan peninjauan anak panah cabang (branch edges) dari flow graph.
  • 16. 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 %.
  • 17. Cakupan jalur n  Cakupan jalur ditentukan dengan menilai proporsi eksekusi jalur program yang diuji oleh sekumpulan test cases yang telah ditentukan. n  Cakupan jalur 100 % adalah bilamana tiap jalur pada program dikunjungi setidaknya minimal sekali tes. n  Cakupan jalur berkaitan dengan peninjauan jalur sepanjang flow graph.
  • 18. 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%.
  • 19. 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.
  • 20. Basis path testing n  Merupakan teknik white box testing yang dikenalkan oleh Tom McCabe [MC76]. n  Memungkinkan pendisain test cases untuk melakukan pengukuran terhadap kompleksitas logika dari disain prosedural n  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.
  • 21. Basis path testing n  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 n  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.
  • 22. Cyclomatic complexity n  Adalah pengukuran kuantitatif dari kompleksitas logika program. n  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.
  • 23. Cyclomatic complexity n  Jalur independen adalah tiap jalur pada program yang memperlihatkan 1 kelompok baru dari pernyataan proses atau kondisi baru. n  [Region / Complexity] V(G) = E (edges) – N (nodes) + 2
  • 25. 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
  • 27. 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; }
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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 3 T F 10 F 1 2
  • 32. 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 3 T FF 1 2
  • 33. 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 3 T FF 1 2 F
  • 34. 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 3 T FF 1 2 F 10
  • 35. 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 3 T FF 1 2 F 10
  • 36. 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 3 T FF 1 2 F 10
  • 37. 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 3 T FF 1 2 F 10
  • 38. 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 3 T FF 1 2 F 10
  • 39. 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 3 T FF 1 2 F 10
  • 40. n  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
  • 41. n  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
  • 42. n  Tahap selanjutnya adalah menyusun test cases yang akan melakukan eksekusi dari tiap jalur dalam kelompok basis
  • 43. n  Testcase jalur 1 nilai bottom valid dimana nilai record bernilai false hasil yang diharapkan : sistem melakukan [return keyPosition] dan keluar dari subprogram 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; }
  • 44. n  Testcase jalur 3 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; } 3 1 2 10 F T F 4 T 5 T 6 F 7 T 8 F 9 n  Jalur 3 = 1-2-3-4-6-7-9-2-10
  • 45. nilai bottom dan keyPosition valid dimana nilai record bernilai True nilai mid = (top+bottom)/2 nilai sequence[mid] valid dimana nilai record bernilai False nilai sequence[mid] valid dimana nilai record bernilai True hasil yang diharapkan : nilai bottom = mid+1 sistem keluar dari loop sistem melakukan [return keyPosition] dan keluar dari subprogram
  • 46. n  Buat flowgraph n  Hitung CC dan tentukan jalur independen n  Buatkan satu testcase berdasarkan jalur independen yang telah ditentukan