Tujuan (Objektives)
Testing adalah proses eksekusi program
yang bertujuan untuk menemukan error
Sebuah test yang baik adalah yang
mempunyai kemungkinan besar
menemukan error yang sebelumnya tidak
terdeteksi
Sebuah test dikatakan sukses jika dapat
menemukan error yang tidak ditemukan
sebelumnya
Prinsip Testing
 Semua test seharusnya dapat dilacak dengan
requirement dari customer
 Testing seharusnya direncanakan
 Memenuhi prinsip pareto (80 % error dapat
ditemukan dengan tracing 20 % modul dalam program)
 Dimulai dengan “kecil” dan berlanjut ke yang
“besar”
 Testing yang lengkap (exhaustive) tidak
dimungkinkan
 Agar efektif, testing dapat dilakukan oleh pihak
Testability
 Seberapa mudah sebuah program dapat ditest
 Operability Æ “semakin baik sistem bekerja,
semakin efisien sistem di test”
 Observability Æ “Apa yang Anda lihat adalah
apa yang Anda Test”
 Controllability Æ “semakin baik software dapat
dikontrol, testing semakin dapat diotomasi dan lebih optimal”
 Decomposability Æ Dengan mengontrol scope
dari testing, kita dapat mengisolasi masalah lebih cepat dan melakukan testing ulang
Testability (2)
Simplicity Æ Semakin sedikit yang di test,
semakin cepat kita dapat melakukan
pengetesan
Stability Æ Semakin sedikit perubahan,
semakin sedikit gangguan terhadap
pengetesan
Understanbility Æ semakin banyak
informasi yang kita dapatkan, semakin
smart kita melakukan testing
Good Test [Kaner, Falk & Nguyen]
Probabilitas tinggi menemukan error
Tidak redundant
“best of breed” Æ subset test untuk
mengetes groups of tests yang mirip
Tidak terlalu sederhana dan tidak terlalu
What Testing Shows
errors
Kesesuaian dengan requirement Performance (kinerja)
Siapa Melakukan Testing
developer independent tester
Understands the system Must learn about the system, but, will attempt to break it and, is driven by quality but, will test "gently"
Exhaustive Testing
loop <= 20 X
There are 10 possible paths! If we execute one test per millisecond, it would take 3,170 years to test this program!!
Selective Testing
Selected path
Test Case Design
"Bugs lurk in cornersand congregate at boundaries ..." Boris Beizer OBJECTIVE CRITERIA CONSTRAINT to uncover errors in a complete manner
Software Testing
White-box testing:
Mengetahui internal dari software, design test dijalankan pada semua internal dari software untuk memastikan mereka beroperasi berdasarkan spesifikasi dan design.
Fokus utama: internal structures, logic paths, control flows, data flows internal data structures, conditions, loops, etc.
Black-box testing:
Mengetahui fungsi spesifik dari software, design test untuk
mendemonstrasikan setiap fungsi dan mengecek apakah terjadi error atau tidak
Fokus utama: functions, operations, external interfaces, external data and information
White-Box Testing
 Sering disebut juga glass-box testing, merupakan
metode testing yang menggunakan kontrol struktur dari rancangan prosedural untuk melakukan test case.
 Testing dilakukan untuk memastikan:
1. Semua path independen di eksekusi paling tidak sekali 2. Semua keputusan logikal dieksekusi untuk path yang
benar dan yang salah
3. Semua loop dieksekusi pada semua nilai batasnya
4. Semua struktur data internal dicoba untuk memastikan
kevalidan
Mengapa White-Box Testing ?
Banyak error dalam “special case” code
yang jarang dieksekusi
Control Flow tidak dapat diprediksi secara
akurat dalam black-box testing.
Basis-Path Testing
 Proposed by Tom McCabe
 Bertujuan untuk melakukan pengukuran
kompleksitas logikal dari rancangan prosedur dan menggunakannya sebagai guide untuk
menentukan set dari path yang dieksekusi
 Basic set akan dieksekusi oleh setiap statement
paling tidak sekali
 Isu
w Flow Graph Notation w Cyclomatic Complexity w Deriving Test Cases  Graph Matrices
Flow Graph Notation
 Pada a flow graph:
w Panah disebut edges menggambarkan flow of control
w Lingkaran disebut nodes, menggambarkan satu atau lebih aksi w Area yang dibatasi oleh edges dan nodes diebut regions
w Predicate Nodes adalah nodes yang mengandung kondisi
w Setiap procedural design dapat ditranslasikan ke flow graph
Cyclomatic Complexity
 Memberikan ukuran kuantitatif dari kompleksitas
logikal.
 Nilainya memberikan jumlah dari independent path
dalam basis set dan upper bound dari jumlah test untuk memastikan bahwa setiap statement
dieksekusi paling tidak satu kali.
 Independent path adalah setiap path pada
program yang mengenalkan paling tidak satu set baru statement yang sedang diproses atau kondisi baru (mis. Edge baru)
Cyclomatic Complexity (2)
Example has:
•Cyclomatic Complexity of 4. Dihitung dari:
1.Number of regions of flow graph. 2.#Edges - #Nodes + 2 3.#Predicate Nodes + 1 •Independent Paths: 1.1, 8 2.1, 2, 3, 7b, 1, 8 3.1, 2, 4, 5, 7a, 7b, 1, 8 4.1, 2, 4, 6, 7a, 7b, 1, 8
Cyclomatic complexity menyediakan upper bound untuk jumlah test yang dibutuhkan yg dapat menjamin melingkupi semua statements dalam program.
Deriving Test Case
 Gunakan design atau code, gambarkan flow
graph
 Tentukan cyclomatic complexity dari flow
graph
 Tentukan basis set dari independent path
 Siapkan test case yang akan memaksa
eksekusi dari setiap path dalam basis set Note. Beberapa path mungkin hanya dapat
Matriks Graph
 Dapat mengotomatisasi turunan dari flow
graph dan menentukan set dari basis path
 Graph matrix:
w Adalah bujursangkar dengan #sides sama dengan
#nodes
w Baris dan kolom menggambarkan nodes w Isi matriks menggambarkan edges
w Gunakan nilai 1 untuk menghitung cyclomatic
complexity
w Untuk setiap baris, jumlahkan nilai kolom dan kurangkan
dengan 1
Matriks Graph (2)
Link dapat diberikan bobot, sehingga
dapat menentukan:
 Probabilitas bahwa sebuah link (edge) akan
dieksekusi
 Waktu proses yang dihabiskan selama
mengunjungi sebuah link
 Memory dan resource yang dibutuhkan
Control Structure testing
 Condition Testing
 Condition testing bertujuan untuk melatih seluruh
kondisi logika dalam modul program
 Ddapat mendefinisikan:
w Relational expression: (E1 op E2), dimana E1 dan E2
adalah ekspresi aritmatika.
w Simple condition: variabel Boolean atau ekspresi
relational, kemungkinan didahului dengan sebuah operator NOT.
w Compound condition: Gabungan dari dua atau lebih
kondisi sederhana, operator Boolean dan parentheses.
Control Structure testing
Errors dalam ekspresi dapat berdasarkan
pada:
w Boolean operator error
w Boolean variable error
w Boolean parenthesis error
w Relational operator error
w Arithmetic expression error
Metode condition testing fokus kepada
Control Structure testing
 Strategi meliputi:
 Branch testing – eksekusi setiap branch paling tidak satu kali.
 Domain Testing – menggunakan tiga atau empat test untuk setiap
operator relational.
 Branch and relational operator testing - menggunakan condition
constraints
 Contoh 1: C1 = B1 & B2 dimana B1, B2 adalah
boolean conditions.
w Condition constraint of form (D1,D2) where D1 and D2 can
be true (t) or false(f).
w The branch and relational operator test membutuhkan
constraint set {(t,t),(f,t),(t,f)} yang harus ditemukan dengan eksekusi dari C1.
 Pencakupan constraint set menjamin deteksi dari
Loop Testing
 Fundamental loop bagi banyak algoritma
 Dapat mendefinisikan loop dengan simple,
concatenated, nested, dan unstructured.
Loop Testing
w Simple Loops dengan ukuran n:
 Skip loop entirely
 Only one pass through loop  Two passes through loop
 m passes through loop where m<n.
 (n-1), n, and (n+1) passes through the loop.
w Nested Loops
 Start with inner loop. Set all other loops to
minimum values.
 Conduct simple loop testing on inner loop.  Work outwards
Loop Testing
w Concatenated Loops
 If independent loops, use simple loop testing.  If dependent, treat as nested loops.
w Unstructured loops