Anda di halaman 1dari 9

Tugas Kuliah Perancangan Perangkat Lunak:

Software Testing: Basis Path Testing


Nama : Chandra Kusuma Dewa
NIM : 08/275888/PPA/2696
Kuliah : Perancangan Perangkat Lunak/Kelas B
Dosen : Drs. Agus Harjoko, M.Sc. Ph.D

Permasalahan
Diberikan sebuah listing prosedur untuk menghitung rata-rata sebagai berikut

PROCEDURE average

/*
*Prosedur ini berfungsi menghitung rata-rata dari seratus angka atau kurang
*yang nilainya terletak diantara batasan-batasan nilai yang telah
*ditentukan. Prosedur ini juga menghitung jumlah seluruh angka serta
*banyaknya angka yang valid sesuai batasan-batasan prosedur ini.
*/

INTERFACE RETURNS average, total.input, total.valid;


INTERFACE ACCEPTS value, minimum, maximum;

TYPE value[1:100] IS SCALAR ARRAY;


TYPE average, total.input, total.valid, minimum, maximum, sum IS SCALAR;
TYPE i IS INTEGER;

i=1;
total.input=total.valid=0;
sum=0;
DO WHILE value[i] <> -999 AND total.input < 100
increment total.input by 1;
IF value[i] >= minimum AND value[i] <= maximum
THEN increment total.valid by 1;
sum=sum + value[i]
ELSE skip;
ENDIF
increment i by 1;
ENDDO
IF total.valid > 0
THEN average = sum / total.valid;
ELSE average = -999;
ENDIF

END average

Listing 1. Prosedur Average

Lakukan Basis Path Testing untuk prosedur diatas!

Halaman 1 dari 9
Pembahasan

1. Gambaran Umum
Basis path testing merupakan salah satu metode software testing yang ditemukan oleh
McCabe (1970) dan termasuk kedalam white box testing. Dalam white box testing,
seorang tester diasumsikan telah mengetahui struktur data internal serta algoritma dari
sebuah listing program/prosedur/fungsi. Dapat pula dikatakan disini bahwa white box
testing merupakan metode perancangan pembuatan test case yang memanfaatkan
control structure dari perancangan prosedural untuk menurunkan test case tersebut.

Basis path testing sendiri merupakan metode identifikasi yang didasarkan pada jalur,
struktur atau koneksi pada sebuah kode program. Metode basis path testing juga dapat
disebut sebagai branch testing, hal ini dekarenakan nantinya cabang-cabang dari kode
atau fungsi logika akan diidentifikasi dan dites berdasarkan basis path-nya. Dalam
metode ini, harus dapat dijamin bahwa terdapat pembentukan test case yang akan
mengeksekusi setiap statement didalam program setidaknya sekali. Terdapat beberapa
langkah dalam metode ini, diantaranya;

1. Membentuk graf dari alur program.


2. Menghitung nilai cyclomatic complexity.
3. Menentukan basis set untuk path-path independen.
4. Membangkitkan test case untuk setiap path-path independen tersebut.

Makalah ini nantinya akan membahas keempat langkah diatas untuk melakukan basis
path testing dengan objek kode program pada lisitng 1.

2. Bentuk Graf dari Alur Program


Sebelum dibentuk graf yang dapat menggambarkan alur dari program, langkah
pertama yang akan dilakukan disini adalah memberikan identitas terhadap sebuah
ataupun beberapa baris program dengan menggunakan penomeran. Penomeran disini
dilakukan berdasarkan control structure dari alur program sebagaimana ciri dari white
box testing yang memanfaatkan control structure dari alur program untuk
menurunkan test case. Selanjutnya penomeran identitas mengikuti langkah-langkah
yang dijabarkan pada gambar 1.

Dari gambar tersebut dapat dilihat bahwa berdasarkan alurnya, program pada listing 1
memiliki 13 state. Dari ketiga belas state tersebut inilah nantinya akan dapat
ditentukan basis set untuk path-path independent berdasarkan perhitungan cyclomatic
complexity yang dijabarkan dari alur diagram graf listing tersebut yang akan
dijelaskan kemudian.

Setelah penomeran identitas dari baris-baris kode berdasarkan control structure-nya


selesai dilakukan, maka langkah selanjutnya adalah mulai membentuk diagram graf
dari alur program tersebut. Diagram graf dari alur program selanjutnya disajikan pada
gambar 2.

Halaman 2 dari 9
i=1;
total.input=total.valid=0; 1
sum=0;

2 3
DO WHILE value[i] <> -999 AND total.input < 100

increment total.input by 1; 4

5 6
IF value[i] >= minimum AND value[i] <= maximum
THEN increment total.valid by 1;
sum=sum + value[i] 7
ELSE skip;
ENDIF
increment i by 1; 8
ENDDO 9
10
IF total.valid > 0

THEN average = sum / total.valid; 11


ELSE average = -999; 12
ENDIF

END average 13

Gambar 1. Penomeran Identitas Alur Program

Gambar 2. Diagram Graf Alur Program

Halaman 3 dari 9
3. Nilai Cyclomatic Complexity
Langkah selanjutnya setelah diagram graf alur program selesai digambarkan adalah
menentukan nilai cyclomatic complexity berdasarkan diagram graf alur yang sudah
digambarkan sebelumnya. Dalam hal ini akan digunakan dua cara untuk menghitung
nilai tersebut agar terdapat pembanding, yakni dengan menghitung jumlah region
yang dihasilkan, serta dengan menghitung nilai tersebut berdasarkan predicate nodes.
Meskipun demikian, seharusnya nilai yang dihasilkan oleh kedua perhitungan tersebut
adalah sama, jika tidak berarti terdapat kesalahan pada hitungan pertama atau pada
perhitungan kedua atau bahkan pada kedua perhitungan tersebut.

1) Nilai Cyclomatic Complexity Berdasarkan Region


Berdasarkan diagram graf alur program diatas, terlihat bahwa terdapat enam
buah region yang dihasilkan, yakni region pertama yang dibentuk antara node-
node 10, 11, 12 dan 13, region kedua yang dibentuk antara node-node 2, 3 dan
10, region ketiga yang dibentuk antara node-node 5, 6 dan 8, region keempat
yang dibentuk antara node-node 6, 7 dan 8, region kelima yang dibentuk
antara node-node 2,3,4,5,6,7,8 dan 9 serta region keenam yang dibentuk antara
node-node 2, 3, 4, 5, 8 dan 9. Dari jumlah region tersebut maka dapat
disimpulkan bahwa nilai cyclomatic complexity = V(G) = jumlah region = 6.

2) Nilai Cyclomatic Complexity Berdasarkan Predicate Nodes


Predicate nodes disini yang dimaksudkan adalah jumlah dari decision node
yang ada pada diagram graf alur program. Jika kita amati diagram graf diatas,
maka akan terlihat bahwa terdapat lima buah predicate node yakni node 2, 3,
5, 6 serta 10. Dari hal tersebut dapat disimpulkan bahwa nilai cyclomatic
complexity = V(G) = jumlah predicate nodes + 1 = 5 + 1 = 6.

Dari kedua perhitungan diatas, terlihat bahwa kedua nilai cyclomatic complexity yang
dihasilkan adalah sama, yakni enam.

4. Basis Set Untuk Path-Path Independen


Setelah pada tahapan sebelumnya telah berhasil dihitung nilai cyclomatic complexity
dari kode program pada listing 1, maka langkah selanjutnya adalah menentukan basis
set untuk path-path independen sesuai jumlah dari nilai cyclomatic complexity. Dalam
hal ini, basis set untuk path-path independen diartikan terlewatinya seluruh node
dalam testing, setidaknya sekali. Berikut disajikan list untuk basis set dari path-path
independen

1) Path 1: 1-2-10-11-13
2) Path 2: 1-2-10-12-13
3) Path 3: 1-2-3-10-11-13
4) Path 4: 1-2-3-4-5-8-9-2-......
5) Path 5: 1-2-3-4-5-6-8-9-2-......
6) Path 6: 1-2-3-4-5-6-7-8-9-2-......

Tanda (…...) mengindikasikan perulangan yang diperbolehkan

Halaman 4 dari 9
5. Test Case Untuk Setiap Path-Path Independen
Langkah terakhir untuk melakukan basis path testing adalah dengan men-generate
test case untuk masing-masing path-path independen. Sebelum melangkah pada
tahapan ini lebih jauh, maka akan terlebih dahulu dibahas mengenai kode pada listing
1. Hal ini beralasan mengingat apakah kode yang akan di test sudahkah benar ataukah
tidak adalah disesuaikan dengan asumsi terhadap listing program yang digunakan.

Jika kita cermati kode program pada lisitng 1 diatas, terlihat bahwa kode tersebut
adalah sebuah fungsi yang memiliki parameter-parameter input berupa variabel value
yang merupakan array bertipe skalar, variabel minimum yang bertipe skalar serta
variabel maximum yang bertipe skalar pula. Sementara itu, prosedur tersebut memiliki
parameter-parameter output berupa variabel average yang bertipe skalar yang
merupakan nilai balikan dari fungsi serta variabel total.input dan variabel total.valid
yang bertipe skalar pula. Pada fungsi tersebut diatas, variabel average akan
mengembalikan nilai rata-rata dari value untuk angka-angka valid yang sudah
dimasukkan sebelumnya. Selain itu, fungsi tersebut juga akan mengembalikan jumlah
dari input value yang dimasukkan oleh user serta mengembalikan jumlah dari input
yang valid menurut batasan yang sudah dijabarkan dalam dalam fungsi ini.

5.1. Test Case Path Pertama


Seperti sudah disebutkan pada point sebelumnya, path pertama mengikuti alur 1-2-10-
11-13, yakni dapat pula dikatakan bahwa alur langsung meloncat dari node 2 ke node
10 yang artinya kondisi untuk predicate node 2 bernilai false. Selain itu, node
meloncat dari node 10 ke node 11, yang artinya kondisi untuk predicate node 10
bernilai true.

Untuk memenuhi syarat pertama dari kondisi diatas, yakni kondisi untuk predicate
node 2 bernilai false maka disini diambil nilai value[i] = -999. Masalah kemudian
muncul ketika kondisi kedua harus tetap terpenuhi, yakni predicate node 10 bernilai
true, yang artinya nilai total.valid harus lebih dari nol, atau dengan kata lain nilai i
disini harus lebih besar dari 1 serta lebih kecil atau sama dengan 100 (nilai -999
bukan angka pertama dari isi variabel value) atau memenuhi syarat 2 ≤ i ≤ 100. Untuk
memenuhi kondisi tersebut, maka testing pada path pertama tidak bisa dilakukan
secara stand-alone. Pengujian untuk path ini harus dilakukan sebagai bagian dari uji
path 4, 5 dan 6.

Sebagai simulasi, andaikan kita memiliki empat buah nilai yang sudah ada dalam
variabel value, yakni

a) value[1] = 1;
b) value[2] = -2;
c) value[3] = 3;
d) value[4] = -999;

Sementara itu, asumsi yang digunakan untuk nilai minimum adalah 1 serta nilai
maximum adalah 500, maka pada saat nilai i = 4 didapati nilai variabel total.input =

Halaman 5 dari 9
3, nilai variabel total.valid = 2 serta nilai average = 2 sehingga disini alur program
akan meloncat dari node 2 langsung ke node 10 kemudian ke node 11, dalam hal ini
tidak ada perubahan nilai pada variabel i, variabel total.input serta variabel total.valid.
Pada node 11 selanjutnya fungsi akan mengembalikan nilai average tetap seperti
semula, yakni average = 2.

Dari output yang dihasilkan, maka terlihat bahwa nilai average adalah benar, jika
dianggap bahwa nilai -999 adalah bukan input melainkan digunakan sebagai angka
untuk memberhentikan perhitungan (terminate value). Konsekuensi dari hal tersebut
adalah tidak ada pemrosesan perhitungan rata-rata selanjutnya setelah didapati
terminate value. jika terdapat angka yang mengikuti -999 (value[5] = 30, semisal)
maka perhitungan tidak akan pernah dilakukan pada angka 30 tersebut. Hal ini
beralasan mengingat ketika dalam fungsi didapati sebuah terminate value, maka
proses looping akan dihentikan.

5.2. Test Case Path Kedua


Untuk kasus path kedua, hampir mirip dengan alur pada path pertama, yakni nilai
value[i] = -999, hanya saja disini kondisi dari predicate node 10 adalah false (belum
ada nilai dalam value yang dianggap valid) sehingga fungsi akan mengembalikan nilai
average = -999. Dalam pengujian ini, selanjutnya akan diujikan dua buah kasus untuk
path kedua yaitu nilai value[i] = -999 dengan i = 1 serta nilai value[i] = -999 dengan i
>1.

Untuk kasus pertama, asumsikan kita memiliki tiga buah nilai untuk variabel value
sebagai berikut

a) value[1] = -999;
b) value[2] = 20;
c) value[3] = -3;

Sementara itu, asumsi yang digunakan untuk nilai minimum adalah 1 serta nilai
maximum adalah 500, maka pada saat nilai i = 1 didapati nilai variabel total.input =
total.valid = 0 serta nilai average = -999. Seperti sudah dibahas pada pengujian path
sebelumnya, nilai -999 dianggap sebagai terminate value, sehingga jika nilai dari
value[1] = terminate value maka fungsi tidak akan pernah melakukan pemrosesan
perhitungan rata-rata selanjutnya.

Untuk kasus kedua, asumsikan kita memiliki tiga buah nilai untuk variabel value
sebagai berikut

a) value[1] = -3;
b) value[2] = -999;
c) value[3] = 20;

Sementara itu, asumsi yang digunakan untuk nilai minimum adalah 1 serta nilai
maximum adalah 500, maka pada saat nilai i = 2 didapati nilai variabel total.input =
1, nilai total.valid = 0 serta nilai average = -999.

Halaman 6 dari 9
5.3. Test Case Path Ketiga
Alur pada path ketiga hampir dapat dikatakan mirip dengan alur pada path pertama,
hanya saja pada path ini kondisi dari predicate node 2 adalah true, sehingga alur
program akan meloncat ke node 3. Sementara itu, kondisi dari predicate node 3
adalah false, sehingga selanjutnya alur program akan meloncat ke node 10, 11 serta
13.

Agar kondisi tersebut diatas dapat terpenuhi, maka disini akan diambil nilai dari
value[i] = 20, sementara itu jumlah dari elemen nilai yang dimiliki oleh variabel
value diambil lebih dari 100, disini diambil nilai total.input = 101. Jika hal ini
dilakukan, maka kemungkinan program akan menampilkan pesan error, hal ini
disebabkan karena pada variabel value dari fungsi sudah dideklarasikan bahwa range
untuk variabel ini adalah dari 1 sampai 100. Selain itu, karena alur untuk path ini
hampir mirip dengan alur untuk path pertama, maka pengujian untuk path ini juga
harus dilakukan sebagai bagian dari uji path 4, 5 dan 6.

5.4. Test Case Path Keempat


Alur yang dimiliki oleh path keempat adalah 1-2-3-4-5-8-9-2-...... Agar alur tersebut
daapt terbentuk, maka kondisi dari predicate node 2 dan 3 adalah bernilai true,
sementara itu kondisi dari predicate node 5 adalah bernilai false.

Untuk memenuhi kondisi diatas, maka disini akan diambil nilai value[i] yang tidak
sama dengan -999 serta jumlah k elemen yang dimiliki oleh variabel value tidak
melebihi 100. Selain itu, nilai dari value[i] harus lebih kecil dari batasan minimum
yang telah ditentukan. Sebagai simulasi, asumsikan kita memiliki nilai untuk variabel
value sebagai berikut

a) value[1] = 3;
b) value[2] = 2;
c) value[3] = 10;
d) value[4] = -2;

Sementara itu, asumsi yang digunakan untuk nilai minimum adalah 1 serta nilai
maximum adalah 500, maka pada saat nilai i = 4 didapati bahwa nilai variabel
total.input = 4, nilai total.valid = 3 serta nilai average = 5. Dari hasil tersebut
terlihat bahwa fungsi mampu menghasilkan rata-rata serta total input dan total
valid yang benar mengingat bahwa pada nilai elemen keempat dari variabel value
memuat angka yang tidak valid, yakni angka yang berada dibawah batasan minimum
angka yang diperbolehkan.

5.5. Test Case Path Kelima


Test case pada path kelima sebenarnya cukup mirip dengan test case pada path
sebelumnya (kondisi predicate nodes 2 dan 3 bernilai true), hanya saja disini kondisi
dari predicate node 5 adalah bernilai true, sehingga alur program akan meloncat ke
node 6. Sementara itu, kondisi dari predicate node 6 adalah bernilai false.

Halaman 7 dari 9
Untuk memenuhi kondisi tersebut, maka selanjutnya akan diambil nilai value[i] yang
bukan -999, serta jumlah k elemen yang dimiliki oleh variabel value kurang dari 100.
Selain itu, nilai dari value[i] harus lebih besar atau sama dengan batasan minimum
yang telah ditentukan sebelumnya, namun nilai value[i] harus lebih besar dari batasan
maksimum yang telah ditentukan.

Sebagai simulasi untuk lebih memperjelas, asumsikan kita memiliki nilai untuk
variabel value sebagai berikut

a) value[1] = -2
b) value[2] = 13;
c) value[3] = 1;
d) value[4] = 520;

Sementara itu, asumsi yang digunakan untuk nilai minimum adalah 1 serta nilai
maximum adalah 500, maka pada saat nilai i = 4 didapati bahwa nilai variabel
total.input = 4, nilai total.valid = 2 serta average = 7. Dari hasil tersebut, maka
terlihat bahwa fungsi dapat menghasilkan rata-rata serta total input dan total
valid yang benar mengingat bahwa pada elemen pertama variabel value diatas
terdapat nilai yang tidak valid karena berada dibawah batasan minimum, serta pada
elemen terakhir memuat nilai yang tidak valid pula karena berada diatas batasan nilai
maksimum.

5.6. Test Case Path Keenam


Pengujian test case terakhir adalah pengujian untuk path keenam. Sebenarnya, alur
untuk path keenam ini adalah menyerupai pengujian untuk test case sebelumnya,
yakni test case path kelima (kondisi predicate nodes 2, 3 dan 5 adalah bernilai true).
Meskipun demikian, untuk path keenam ini kondisi predicate node 6 adalah bernilai
true.

Untuk memenuhi kondisi tersebut diatas, maka dalam hal ini akan diambil nilai
value[i] yang tidak sama dengan -999, jumlah k elemen yang dimiliki oleh variabel
value kurang dari 100, nilai dari value[i] harus lebih besar atau sama dengan batasan
minimum yang telah ditentukan sebelumnya serta nilai value[i] harus lebih kecil atau
sama dengan batasan maksimum yang telah ditentukan.

Seperti langkah-langkah pada test case untuk path-path sebelumnya, selanjutnya kita
akan menggunakan simulasi dengan asumsi bahwa nilai untuk variabel value adalah
sebagai berikut

a) value[1] = 2;
b) value[2] = 3;
c) value[3] = -2;
d) value[4] = 4;

Sementara itu, asumsi yang digunakan untuk nilai minimum adalah 1 serta nilai
maximum adalah 500, maka pada saat nilai i = 4 didapati bahwa nilai variabel

Halaman 8 dari 9
total.input = 4, nilai total.valid = 3 serta average = 3. Dari hasil tersebut, maka
terlihat bahwa fungsi dapat menghasilkan rata-rata serta total input dan total
valid yang benar mengingat bahwa pada elemen ketiga variabel value diatas,
terdapat nilai yang tidak valid dikarenakan nilai tesebut berada dibawah batasan
minimum yang telah ditentukan sebelumnya.

6. Kesimpulan
Setelah dilakukan testing pada kode fungsi average yang didefinisikan pada listing 1
diatas menggunakan metode basis path testing, maka dapat disimpulkan beberapa hal,
diantaranya adalah sebagai berikut;

• Pada prosedur average tersebut terdapat sebuah terminate value yang harus
dihindari, yakni angka -999. Jika terdapat nilai -999 pada nilai dari variabel
value, maka proses penghitungan nilai rata-rata akan dihentikan serta
perhitungan selanjutnya tidak akan dilakukan. Hal ini akan bermasalah jika
terdapat nilai -999 di awal nilai variabel value.

• Jika selain nilai terminate value yang dimasukkan kedalam variabel value,
maka dari pengujian terlihat bahwa prosedur average tersebut akan
menghasilkan nilai rata-rata serta jumlah total input dan total valid yang benar.

Halaman 9 dari 9