SlideShare a Scribd company logo
1 of 46
Download to read offline
Testing dan Implementasi
Sistem
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
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

What's hot

10. model data relasional
10. model data relasional10. model data relasional
10. model data relasionalAbdur Rasyid
 
Materi rekayasa-perangkat-lunak
Materi rekayasa-perangkat-lunakMateri rekayasa-perangkat-lunak
Materi rekayasa-perangkat-lunakoktafianoandreas
 
3 rekayasa kebutuhan
3 rekayasa kebutuhan3 rekayasa kebutuhan
3 rekayasa kebutuhanObey Rohman
 
Testing&implementasi 4 5
Testing&implementasi 4 5Testing&implementasi 4 5
Testing&implementasi 4 5aiiniR
 
Modul 4 representasi pengetahuan
Modul 4   representasi pengetahuanModul 4   representasi pengetahuan
Modul 4 representasi pengetahuanahmad haidaroh
 
Rpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunakRpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunakf' yagami
 
Pertemuan 3 activity
Pertemuan 3 activityPertemuan 3 activity
Pertemuan 3 activityheriakj
 
Memasang Halaman Cover dan Daftar Isi di Issue pada Platform OJS
Memasang Halaman Cover dan Daftar Isi di Issue pada Platform OJSMemasang Halaman Cover dan Daftar Isi di Issue pada Platform OJS
Memasang Halaman Cover dan Daftar Isi di Issue pada Platform OJSRelawan Jurnal Indonesia
 
Koneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi ExtensionKoneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi ExtensionI Putu Hariyadi
 
Pertemuan 6 tabview
Pertemuan 6 tabviewPertemuan 6 tabview
Pertemuan 6 tabviewheriakj
 
Analisa dan-perancangan-sistem-informasi
Analisa dan-perancangan-sistem-informasiAnalisa dan-perancangan-sistem-informasi
Analisa dan-perancangan-sistem-informasiSyam Ancha
 
Abstract Class & Interface
Abstract Class & InterfaceAbstract Class & Interface
Abstract Class & InterfaceYoppy Yunhasnawa
 
Pertemuan 1 gambaran umum komputer
Pertemuan 1 gambaran umum komputerPertemuan 1 gambaran umum komputer
Pertemuan 1 gambaran umum komputerFrance Rhezhek
 
Pembuatan Storyboard Game
Pembuatan Storyboard GamePembuatan Storyboard Game
Pembuatan Storyboard GameKokoy Komariah
 
Sistem input output
Sistem input outputSistem input output
Sistem input outputKruduk Bisa
 

What's hot (20)

10. model data relasional
10. model data relasional10. model data relasional
10. model data relasional
 
Materi rekayasa-perangkat-lunak
Materi rekayasa-perangkat-lunakMateri rekayasa-perangkat-lunak
Materi rekayasa-perangkat-lunak
 
3 rekayasa kebutuhan
3 rekayasa kebutuhan3 rekayasa kebutuhan
3 rekayasa kebutuhan
 
Testing&implementasi 4 5
Testing&implementasi 4 5Testing&implementasi 4 5
Testing&implementasi 4 5
 
Modul Data Warehouse
Modul Data Warehouse  Modul Data Warehouse
Modul Data Warehouse
 
Modul 4 representasi pengetahuan
Modul 4   representasi pengetahuanModul 4   representasi pengetahuan
Modul 4 representasi pengetahuan
 
Rpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunakRpl 5-perencanaan proyek perangkat lunak
Rpl 5-perencanaan proyek perangkat lunak
 
Algoritma penjadwalan proses
Algoritma penjadwalan prosesAlgoritma penjadwalan proses
Algoritma penjadwalan proses
 
Pertemuan 3 activity
Pertemuan 3 activityPertemuan 3 activity
Pertemuan 3 activity
 
Memasang Halaman Cover dan Daftar Isi di Issue pada Platform OJS
Memasang Halaman Cover dan Daftar Isi di Issue pada Platform OJSMemasang Halaman Cover dan Daftar Isi di Issue pada Platform OJS
Memasang Halaman Cover dan Daftar Isi di Issue pada Platform OJS
 
Pertemuan 4 Strategi Testing
Pertemuan 4  Strategi TestingPertemuan 4  Strategi Testing
Pertemuan 4 Strategi Testing
 
Koneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi ExtensionKoneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi Extension
 
Pertemuan 6 tabview
Pertemuan 6 tabviewPertemuan 6 tabview
Pertemuan 6 tabview
 
Analisa dan-perancangan-sistem-informasi
Analisa dan-perancangan-sistem-informasiAnalisa dan-perancangan-sistem-informasi
Analisa dan-perancangan-sistem-informasi
 
Struktur Data Tree
Struktur Data TreeStruktur Data Tree
Struktur Data Tree
 
Abstract Class & Interface
Abstract Class & InterfaceAbstract Class & Interface
Abstract Class & Interface
 
Pertemuan 1 gambaran umum komputer
Pertemuan 1 gambaran umum komputerPertemuan 1 gambaran umum komputer
Pertemuan 1 gambaran umum komputer
 
Pembuatan Storyboard Game
Pembuatan Storyboard GamePembuatan Storyboard Game
Pembuatan Storyboard Game
 
Sistem input output
Sistem input outputSistem input output
Sistem input output
 
3 Linked List
3   Linked List3   Linked List
3 Linked List
 

Similar to OPTIMIZED_TESTING

Analisis Algoritma - Strategi Algoritma Dynamic Programming
Analisis Algoritma - Strategi Algoritma Dynamic ProgrammingAnalisis Algoritma - Strategi Algoritma Dynamic Programming
Analisis Algoritma - Strategi Algoritma Dynamic ProgrammingAdam Mukharil Bachtiar
 
metode-pengujian-whitebox
metode-pengujian-whiteboxmetode-pengujian-whitebox
metode-pengujian-whiteboxIwan Kurniarasa
 
Testing&implementasi 4
Testing&implementasi 4Testing&implementasi 4
Testing&implementasi 4aiiniR
 
Materi 3&4 prosedur
Materi 3&4   prosedurMateri 3&4   prosedur
Materi 3&4 prosedurAlfa Felle
 
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman TerstrukturKelinci Coklat
 
Ch 04 Metode pengujian Black Box dan White Box
Ch 04 Metode pengujian Black Box dan White BoxCh 04 Metode pengujian Black Box dan White Box
Ch 04 Metode pengujian Black Box dan White BoxTri Sugihartono
 
Penggunaan loop sebagai kerangka dasar algoritma
Penggunaan loop sebagai kerangka dasar algoritma Penggunaan loop sebagai kerangka dasar algoritma
Penggunaan loop sebagai kerangka dasar algoritma Fazar Ikhwan Guntara
 
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.LangJeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.LangIndividual Consultants
 
Materi pelatihan java_fundamental
Materi pelatihan java_fundamentalMateri pelatihan java_fundamental
Materi pelatihan java_fundamentalLaode ADB Ali
 
Intruksi Fundamental
Intruksi FundamentalIntruksi Fundamental
Intruksi FundamentalAkmal Fajar
 
Testing Pertemuan 5 (1).pdf
Testing Pertemuan 5 (1).pdfTesting Pertemuan 5 (1).pdf
Testing Pertemuan 5 (1).pdfNovikaEkaSaputra
 

Similar to OPTIMIZED_TESTING (20)

Minggu V
Minggu VMinggu V
Minggu V
 
Analisis Algoritma - Strategi Algoritma Dynamic Programming
Analisis Algoritma - Strategi Algoritma Dynamic ProgrammingAnalisis Algoritma - Strategi Algoritma Dynamic Programming
Analisis Algoritma - Strategi Algoritma Dynamic Programming
 
metode-pengujian-whitebox
metode-pengujian-whiteboxmetode-pengujian-whitebox
metode-pengujian-whitebox
 
Algoritma dan Pemrograman
Algoritma dan Pemrograman Algoritma dan Pemrograman
Algoritma dan Pemrograman
 
Testing&implementasi 4
Testing&implementasi 4Testing&implementasi 4
Testing&implementasi 4
 
Materi 3&4 prosedur
Materi 3&4   prosedurMateri 3&4   prosedur
Materi 3&4 prosedur
 
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
 
P3 depandi enda
P3 depandi endaP3 depandi enda
P3 depandi enda
 
Ch 04 Metode pengujian Black Box dan White Box
Ch 04 Metode pengujian Black Box dan White BoxCh 04 Metode pengujian Black Box dan White Box
Ch 04 Metode pengujian Black Box dan White Box
 
Testing 2
Testing 2Testing 2
Testing 2
 
Penggunaan loop sebagai kerangka dasar algoritma
Penggunaan loop sebagai kerangka dasar algoritma Penggunaan loop sebagai kerangka dasar algoritma
Penggunaan loop sebagai kerangka dasar algoritma
 
Efisiensi algoritma
Efisiensi algoritmaEfisiensi algoritma
Efisiensi algoritma
 
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.LangJeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
 
Bab ii
Bab iiBab ii
Bab ii
 
Pertemuan 3 Desain Test Case
Pertemuan 3 Desain Test CasePertemuan 3 Desain Test Case
Pertemuan 3 Desain Test Case
 
Materi pelatihan java_fundamental
Materi pelatihan java_fundamentalMateri pelatihan java_fundamental
Materi pelatihan java_fundamental
 
Intruksi Fundamental
Intruksi FundamentalIntruksi Fundamental
Intruksi Fundamental
 
RPL_15.pptx
RPL_15.pptxRPL_15.pptx
RPL_15.pptx
 
Testing Pertemuan 5 (1).pdf
Testing Pertemuan 5 (1).pdfTesting Pertemuan 5 (1).pdf
Testing Pertemuan 5 (1).pdf
 
Laporan modul 1
Laporan modul 1Laporan modul 1
Laporan modul 1
 

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

Pertemuan 1 Sistem Basis Data.pptx
Pertemuan 1 Sistem Basis Data.pptxPertemuan 1 Sistem Basis Data.pptx
Pertemuan 1 Sistem Basis Data.pptx
 
Transport layer
Transport layerTransport layer
Transport layer
 
Modul 5 2-ip-address
Modul 5 2-ip-addressModul 5 2-ip-address
Modul 5 2-ip-address
 
Modul 5 1 network layer
Modul 5 1 network layerModul 5 1 network layer
Modul 5 1 network layer
 
Modul 4 1 data link layer
Modul 4 1 data link layerModul 4 1 data link layer
Modul 4 1 data link layer
 
Video
VideoVideo
Video
 
Chapter-audio-dan-suara
Chapter-audio-dan-suaraChapter-audio-dan-suara
Chapter-audio-dan-suara
 
Diferensial dan terapan
Diferensial dan terapanDiferensial dan terapan
Diferensial dan terapan
 
pert - 3 Jaringan dasar
pert - 3 Jaringan dasarpert - 3 Jaringan dasar
pert - 3 Jaringan dasar
 
pert - 1 Jaringan dasar
pert - 1 Jaringan dasarpert - 1 Jaringan dasar
pert - 1 Jaringan dasar
 
Pert 1 - Rekayasa Komputasional
Pert 1 - Rekayasa KomputasionalPert 1 - Rekayasa Komputasional
Pert 1 - Rekayasa Komputasional
 
Sistem multimedia-teknik-informatika
Sistem multimedia-teknik-informatikaSistem multimedia-teknik-informatika
Sistem multimedia-teknik-informatika
 
10.kompresi citra
10.kompresi citra10.kompresi citra
10.kompresi citra
 
9.kompresi teks
9.kompresi teks9.kompresi teks
9.kompresi teks
 
8.animasi
8.animasi8.animasi
8.animasi
 
7.video
7.video7.video
7.video
 
6.suara
6.suara6.suara
6.suara
 
3.proses produksi konten multimedia
3.proses produksi konten multimedia3.proses produksi konten multimedia
3.proses produksi konten multimedia
 
2. konten multimedia
2. konten multimedia2. konten multimedia
2. konten multimedia
 
1. Materi pendahuluan Multimedia
1. Materi pendahuluan Multimedia1. Materi pendahuluan Multimedia
1. Materi pendahuluan Multimedia
 

OPTIMIZED_TESTING

  • 2.
  • 3.
  • 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
  • 10.
  • 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