DRAFT BUKU LAPORAN

advertisement
BAB II
TINJAUAN PUSTAKA
2.1 Software Testing
2.1.1 Pengertian
Software testing atau pengujian perangkat lunak dapat didefinisikan sebagai sebuah proses
atau rangkaian proses yang dirancang untuk memastikan bahwa kode program akan bekerja
sesuai dengan rancangan serta memastikan bahwa program tidak melakukan hal yang tidak
diharapkan [MYE04]. Menemukan error atau kesalahan merupakan hal utama dalam
software testing. Menemukan kesalahan dan memperbaikinya lebih awal akan meminimalkan
cost atau usaha yang diperlukan untuk memperbaiki kesalahan pada tahapan selanjutnya.
2.1.2 Tujuan Software Testing
Software testing dilakukan untuk berbagai tujuan antara lain [PAN99]:
a. Meningkatkan kualitas
Komputer dan perangkat lunak makin memiliki peran besar dalam beberapa aplikasi yang
penting sehingga munculnya bug (kesalahan dalam program) dapat menjadi hal yang fatal.
Munculnya bug dapat menyebabkan kerugian yang besar. Dalam dunia yang sangat
bergantung pada kinerja komputer, kualitas dan reliabilitas dari sebuah perangkat lunak
merupakan persoalan penting.
Perangkat lunak dibangun karena adanya kebutuhan dari user dan diharapkan mampu
mengakomodasi semua kebutuhan user. Perangkat lunak dikatakan berkualitas jika
mampu bekerja sesuai dengan semua kebutuhan yang diinginkan user. Pengujian
dilakukan untuk menjamin bahwa fungsionalitas perangkat lunak sudah sesuai dengan
kebutuhan user, serta menjamin bahwa perangkat lunak terbebas dari error sehingga
menghasilkan perangkat lunak berkualitas tinggi.
b. Berasosiasi dengan proses Verifikasi dan Validasi (V & V)
Verifikasi adalah proses pengecekan atau pengujian terhadap sebuah perangkat lunak
apakah sudah memenuhi spesifikasi yang ditetapkan oleh tim pengembang. Sedangkan
validasi adalah sebuah proses pengujian terhadap perangkat lunak apakah sudah
memenuhi kebutuhan yang disyaratkan oleh pengguna (end users) [PAT05].
II-1
II-2
Proses verifikasi dan validasi dalam lingkup perangkat lunak dapat dilakukan dalam
bentuk software testing. Proses unit testing, integration testing, dan system testing
bertujuan untuk verifikasi sedangkan proses paling akhir yaitu acceptance testing yang
berfungsi sebagai proses validasi karena berhubungan langsung dengan penerimaan
pengguna.
c. Estimasi reliabilitas perangkat lunak
Reliabilitas adalah sebuah ukuran probabilitas atau kemungkinan fungsi yang berjalan
tepat pada penggunaan perangkat lunak, baik penggunaan satu kali maupun penggunaan
pada suatu periode waktu [PEZ08].
Software testing dapat berfungsi sebagai metode untuk mengukur reliabilitas perangkat
lunak, dilihat dari sisi ketepatan program. Pengujian yang dilakukan akan mampu
menghasilkan data statistik dari performansi perangkat lunak sehingga dapat digunakan
untuk estimasi reliabilitas perangkat lunak.
2.1.3 Metode Pengujian Perangkat Lunak
Metode melakukan pengujian perangkat lunak dapat dibagi menjadi dua cara yaitu black box
testing dan white box testing. Kedua metode pengujian ini membedakan sudut pandang
terhadap perangkat lunak saat merancang kasus uji.
a. Black-box Testing
Black-box testing adalah metode pengujian di mana data uji diturunkan dari spesifikasi
tanpa mempertimbangkan struktur internal dari program yang diuji [MYE04]. Perhatian
utama dalam black-box testing adalah fungsionalitas program. Karena itu black-box testing
sering juga disebut sebagai functional testing, yaitu sebuah metode pengujian yang fokus
pada eksekusi fungsi dalam program dan mengamati data input dan output [HOW87].
Dalam melakukan black-box testing, penguji hanya akan memperhatikan data masukan
untuk pengujian dan data keluaran sebagai hasil eksekusi program tanpa melihat perilaku
program dalam mengeksekusi data uji. Data keluaran program akan diperiksa
kesesuaiannya dengan spesifikasi. Untuk mendapatkan tingkat kepercayaan akan kualitas
perangkat lunak yang tinggi maka pada pendekatan black-box sebaiknya digunakan data
uji yang bersifat menyeluruh, mampu mewakili setiap kasus yang mungkin terjadi.
b. White-box Testing
White-box testing adalah metode pengujian yang memeriksa struktur internal dari sebuah
program. Kasus uji diturunkan dari hasil pemeriksaan terhadap logic program [MYE04].
Kasus uji yang dirancang dalam white-box testing memiliki tujuan antara lain [WHI08]:
II-3
1. Menjamin bahwa setiap path (alur jalannya program) dalam sebuah modul telah diuji
minimal satu kali
2. Menguji semua aspek kondisional, baik dari kondisi true maupun false
3. Mengeksekusi semua pengulangan, baik pada batasan yang masih memenuhi kondisi
pengulangan maupun batasan yang sudah termasuk terminasi pengulangan
4. Menguji semua struktur data internal pada program
Dalam melakukan white-box testing diperlukan kemampuan pemrograman untuk mampu
mengamati semua aspek internal program sehingga mampu menghasilkan kasus uji yang
baik dan dapat menguji program secara menyeluruh.
2.1.4 Proses Pengujian Perangkat Lunak
Proses pengujian perangkat lunak dilakukan di setiap tingkatan pengembangan perangkat
lunak, mulai dari tingkat paling awal yaitu unit sampai pada tingkat sistem yang sudah
terintegrasi. Proses pengujian perangkat lunak antara lain: unit testing, integration testing,
system testing, dan user acceptance testing.
Gambar II-1 Tingkatan pengujian perangkat lunak beserta proses
pengujiannya[PEZ08]
2.1.4.1 Unit Testing
2.1.4.1.1
Pengertian
Unit testing adalah sebuah proses untuk menguji sebuah bagian atau komponen tertentu
dalam kode program untuk menentukan apakah komponen tersebut berfungsi dengan benar
[DUS03]. Komponen program yang diuji pada tingkat unit testing adalah subprograms,
subroutines, atau prosedur [MYE04]. Sebuah komponen atau bagian kecil dari kode program
dinyatakan belum lengkap atau sempurna apabila belum dilakukan unit testing. Unit testing
II-4
yang dilakukan dengan benar akan mampu membantu keberhasilan pengujian di tingkat
selanjutnya.
2.1.4.1.2
Tujuan Unit Testing
Beberapa tujuan yang dapat dicapai dengan unit testing antara lain [HUN03]:
a. Menjaga ketepatan jalannya program
Unit testing membantu meyakinkan programmer bahwa kode program yang ditulisnya
adalah kode program yang bisa bekerja sesuai dengan apa yang diinginkan programmer.
b. Memastikan program berjalan dalam tiap kondisi
Pengujian yang dilakukan satu kali dan kode program mampu lolos terhadap kasus uji
tersebut belum merupakan jaminan bahwa program sudah mampu bekerja dengan
sempurna. Berbagai kondisi dalam dunia nyata tidak selalu dapat diasumsikan
mendukung keberjalanan program. Sebagai contoh: munculnya exceptions, media
penyimpanan penuh, jalur komunikasi jaringan yang bermasalah, buffers overflow, dan
adanya bug dalam program.
Berbagai kemungkinan terburuk harus dipertimbangkan dan diatasi lebih dini oleh
programmer. Sama seperti tujuan sebelumnya, selain memastikan bahwa program
berjalan dengan tepat, harus dipastikan juga bahwa ketepatan program akan berjalan
sepanjang waktu dalam kondisi apapun.
c. Menguji batasan program
Setiap perangkat lunak yang dibangun memiliki keterbatasan masing-masing dalam
menangani kasus-kasus tertentu. Programmer sebaiknya mengetahui letak kelebihan
serta keterbatasan kode program yang dibangunnya. Salah satu cara untuk mengetahui
kelebihan dan keterbatasan program adalah dengan melakukan unit testing.
Dengan melakukan unit testing terhadap kode program, ketika programmer menemukan
sebuah kasus yang gagal ditangani oleh programnya maka programmer sudah mampu
mengetahui keterbatasan kode programnya dalam menangani kasus tersebut.
Selanjutnya, programmer dapat mendokumentasikan keterbatasan dari kode program
tersebut dan dapat membuat sebuah penanganan kesalahan untuk kasus-kasus khusus
yang gagal ditangani secara normal oleh program.
II-5
d. Sebagai dokumentasi program
Salah satu keuntungan unit testing adalah bahwa unit testing mampu membantu
programmer dalam mengkomunikasikan maksud penggunaan kode program. Sebuah
unit test mampu berlaku sebagai sebuah dokumentasi executable yang menunjukkan
cara program bekerja pada beberapa kondisi tertentu. Hasil unit testing dapat digunakan
sebagai panduan bagi programmer lain untuk mengetahui cara menggunakan program
tersebut.
Hasil unit testing didapatkan langsung dari eksekusi sebuah kasus uji terhadap kode
program tertentu. Oleh karena itu, dapat dipastikan bahwa hasil unit testing ini akan
selalu benar, tidak jauh menyimpang, sesuai dengan kondisi kode program yang
sebenarnya.
2.1.4.1.3
Test-Case Design
Diperlukan dua jenis informasi untuk merancang test case atau kasus uji untuk unit test yaitu:
spesifikasi modul dan kode program dari modul atau komponen yang akan diuji [MYE04].
Spesifikasi dari sebuah modul biasanya mendefinisikan parameter input dan output, serta
fungsi modul.
Unit testing sebagian besar menggunakan metode white-box testing. Namun dalam membuat
kasus uji digunakan juga metode black-box. Langkah dalam menulis kasus uji untuk unit
testing adalah pertama melakukan analisis terhadap logic atau alur kerja dari program
menggunakan
metode
white-box,
kemudian
kasus
uji
dilengkapi
dengan
cara
mengaplikasikan metode black-box terhadap spesifikasi modul yang akan diuji [MYE04].
Aplikasi metode black-box ini diperlukan karena pengujian akan dilakukan terhadap sebuah
entitas yang besar yaitu keseluruhan program sehingga white-box testing akan semakin sulit
digunakan. Selain itu, proses pengujian lebih berorientasi pada pencarian berbagai macam
errors (kesalahan) pada program.
2.1.4.2 Integration Testing
Integration testing merupakan proses pengujian yang dilakukan setelah unit testing.
Integration testing dilakukan agar tim pengembang mampu mengontrol dan mengamati
kelakuan sekumpulan modul yang diintegrasi [PEZ08].
Dalam tahapan ini, beberapa modul individual perangkat lunak mulai disatukan dan diuji
sebagai sebuah kesatuan. Masukan integration testing adalah beberapa modul yang sudah
melalui proses unit testing, kemudian modul tersebut disatukan dan dilakukan pengujian
II-6
berdasarkan apa yang sudah direncanakan. Sebaiknya pengujian ini dimulai dengan
sekelompok kecil modul yang disatukan untuk mengurangi kompleksitas pengujian [PEZ08].
Sekumpulan modul akan diuji melalui interface-nya dengan menggunakan metode black-box
testing. Penggunaan data secara bersama-sama serta komunikasi antar proses juga diuji.
Kasus uji pada integration testing dirancang agar mampu menguji semua komponen yang
diintegrasikan untuk dapat saling berinteraksi dengan tepat sesuai dengan spesifikasi. Sebagai
contoh adalah interaksi untuk pemanggilan prosedur lintas modul atau interaksi untuk
mengaktifkan sebuah proses.
2.1.4.3 System Testing
System testing adalah pengujian yang dilakukan pada sebuah sistem yang sudah terintegrasi
dengan tujuan untuk mengevaluasi kemampuan sistem dalam memenuhi requirement
[MYE04].
System testing dilakukan dengan metode black-box testing sehingga untuk melaksanakannya
tidak diperlukan pengetahuan mendalam tentang kode program. Semua komponen sistem
yang telah diuji pada integration testing kemudian disatukan menjadi satu kesatuan sistem
dan kemudian dilakukan system testing.
Kasus uji pada system testing dibuat berdasarkan requirement perangkat lunak karena fokus
pada system testing adalah menguji kemampuan sistem dalam memenuhi requirement tanpa
memperhatikan kode program [PEZ08]. Selain itu pada system testing juga diuji beberapa
aspek umum performansi sistem misalnya kecepatan respond sistem. Untuk mendukung hal
ini maka dapat dilakukan simulasi eksekusi sistem pada lingkungan yang menyerupai
lingkungan operasionalnya.
2.1.4.4 User Acceptance Testing
User acceptance testing adalah sebuah proses pengujian yang membandingkan perangkat
lunak dengan requirement awal dan kebutuhan end users [MYE04]. Tujuan utama user
acceptance testing adalah sebagai panduan pengambilan keputusan apakah produk perangkat
lunak sudah dapat dirilis [PEZ08].
User acceptance testing dilaksanakan oleh customer dengan bantuan dari tim programmer.
Pengujian ini merupakan proses pengujian paling akhir dan dilaksanakan sebelum serah
terima perangkat lunak kepada customer. Customer melaksanakan pengujian ini berdasarkan
perencanaan pengujian yang sudah disusun oleh tim pengembang yang diturunkan dari
kontrak awal pembangunan perangkat lunak atau dari user requirements spesification. Hasil
II-7
dari pengujian ini akan memberikan tingkat kepercayaan yang tinggi di customer bahwa
perangkat lunak memiliki performansi yang baik ketika digunakan.
2.2 xUnit Framework
Istilah xUnit mengacu pada kumpulan kelompok Test Automation Frameworks yang
dirancang untuk mengotomatisasi proses pengujian oleh programmer dan memiliki
sekumpulan fitur yang sama [MES07]. Pembangunan xUnit framework didasarkan pada
rancangan Kent Beck yang mengimplementasi SUnit untuk bahasa Smalltalk [MES07]. Total
jumlah xUnit Framework yang sudah ada saat ini mencapai delapan puluh frameworks untuk
lebih dari enam puluh bahasa pemrograman [TES08].
Beberapa contoh anggota kelompok xUnit Frameworks terdapat pada Tabel II-1.
Tabel II-1 Contoh Anggota xUnit Framework
xUnit Framework
Bahasa Pemrograman
JUnit
Java
SUnit
Smalltalk
CUnit
C
CppUnit
C++
JSUnit
JavaScript
NUnit
C#
2.2.1 Tujuan
xUnit Framework dirancang untuk memenuhi beberapa tujuan antara lain [MES07]:
a. Memudahkan tim pengembang untuk menuliskan pengujian tanpa harus mempelajari
bahasa pemrograman baru karena xUnit Framework tersedia dalam berbagai macam
bahasa pemrograman yang sudah banyak digunakan.
b. Memudahkan tim pengembang untuk menguji kelas atau objek secara tersendiri tanpa
harus terlebih dahulu menyelesaikan keseluruhan perangkat lunak.
c. Memudahkan untuk menjalankan satu atau lebih pengujian dengan satu aksi karena dalam
xUnit framework terdapat konsep test suite, yaitu konsep untuk menyatukan beberapa
kasus uji dalam sebuah wadah yang disebut suite. Dalam sebuah test suite dapat berisi
beberapa kasus uji maupun test suite lain.
II-8
2.2.2 Fitur Utama
Anggota kelompok xUnit Framework mengimplementasikan beberapa kumpulan fitur dasar
yang sama. Fitur tersebut memungkinkan untuk dilakukannya beberapa aksi dasar dalam
pengujian misalnya [MES07]:
a. Menspesifikasikan sebuah pengujian sebagai sebuah test method.
Test method
adalah sebuah method atau prosedur yang fungsinya untuk melakukan
pengujian, pada test method terdapat pemanggilan method assertion (dijelaskan pada poin
di bawah).
b. Menspesifikasikan hasil yang diharapkan selama pengujian sebagai bentuk dari
pemanggilan method Assertion.
Assertion adalah method yang bertujuan untuk menentukan berhasil atau tidaknya sebuah
pengujian. Penentuan keberhasilan pengujian ini dilakukan dengan melakukan
perbandingan antara sebuah nilai yang diharapkan akan muncul dengan nilai aktual yang
muncul sebagai hasil program [WEB06].
c. Melakukan agregasi beberapa pengujian ke dalam sebuah test suite yang dapat dijalankan
dalam satu kali eksekusi
d. Menjalankan satu atau lebih pengujian serta mendapatkan report hasil pengujian
2.2.3 Struktur Dasar Pengujian
Sebuah kasus uji pada xUnit Framework tersusun atas empat fase berurutan yaitu [MES07]:
a. Set up
Set up merupakan tahapan awal yang dilakukan sebelum pengujian dijalankan. Set up
dilakukan dengan tujuan untuk menyiapkan lingkungan pengujian sesuai dengan
kebutuhan penguji. Sebagai contoh adalah inisialisasi variabel yang dibutuhkan saat
pengujian.
b. Melakukan pengujian dengan melakukan pemanggilan terhadap method atau prosedur
yang akan diuji
c. Melakukan pengecekan hasil pengujian yang dapat dilakukan dengan method assertion
d. Tear down
Tear down merupakan tahapan terakhir yang dilakukan setelah pengujian selesai.
Berlawanan dengan set up, tear down bertujuan untuk me-reset lingkungan pengujian
yang sebelumnya sudah dibangun pada fase set up sehingga semua kembali sama seperti
keadaan semula.
II-9
2.3 XML
Extensible Markup Language (XML) adalah sebuah standar keluaran World Wide Web
Consortium (W3C) untuk melakukan markup terhadap dokumen [HAR02]. Melakukan
markup artinya menambahkan kode atau penanda tertentu ke dalam dokumen yang bertujuan
untuk menjelaskan bagaimana menginterpretasikan data dalam dokumen tersebut [HOL03].
Dalam sebuah dokumen XML terdapat berbagai tag yang dapat didefinisikan sendiri oleh
pembuat dokumen XML tersebut. Oleh karena itu, XML diklasifikasikan sebagai extensible
language, maksudnya adalah bahasa ini bebas untuk diperluas atau disesuaikan dengan
berbagai keperluan pengguna [HAR02].
Ada dua aturan dalam memodelkan dokumen XML [RAY01] :
a. Well-formed. Sebuah dokumen dikatakan well-formed jika sudah sesuai dengan aturan
penulisan sintaks XML yang dikeluarkan oleh W3C.
b. Valid. Sebuah dokumen dikatakan valid jika sudah sesuai dengan beberapa aturan
semantik XML.
2.3.1 Dokumen Well-Formed
Setiap dokumen XML tanpa terkecuali harus memenuhi syarat well-formed. Beberapa
syaratnya antara lain [HAR02]:
a. Setiap elemen tidak kosong harus memiliki tag pembuka (start tag) harus disertai dengan
tag penutup (end tag) yang sesuai.
Contoh dari dokumen XML yang well-formed adalah sebagai berikut:
<book>Ini adalah sebuah buku...</book>
Sedangkan untuk elemen kosong harus diakhiri dengan tanda slash (/). Elemen kosong
adalah elemen yang tidak memiliki content atau isi. Contoh elemen kosong: <book
title = “Judul buku” />
b. Penyusunan
beberapa elemen XML dalam satu dokumen dilakukan secara nested
(bersarang) dengan benar. Elemen tidak dibolehkan saling mendahului (overlap), harus
ditutup dalam urutan yang benar yaitu berlawanan dengan urutan dibukanya setiap elemen.
Contoh dari penyusunan elemen yang salah:
<title>Book On Logic<author>Aristotle</title></author>
Penulisan yang benar untuk informasi yang sama adalah sebagai berikut:
II-10
<title>Book On Logic</title> <author>Aristotle</author>
c. Dalam satu dokumen wajib terdapat satu elemen root yang bisa beranggotakan berapapun
jumlah elemen XML. Contoh dokumen dengan satu elemen root yaitu document yang
terdiri atas dua elemen employee:
<document>
<employee>
.
</employee>
<employee>
.
</employee>
</document>
d. Nilai atribut harus diapit dengan tanda quote atau tanda petik (“). Contoh:
<document><heading text = “Hello” /></document>
Pada contoh di atas, atribut text memiliki nilai “Hello”.
e. Sebuah elemen tidak diperbolehkan memiliki dua atribut dengan nama yang sama. Contoh
dokumen yang salah:
<message text= “ Hi There!” text=”Hello”>
Untuk informasi yang sama dapat dibuat nama atribut berbeda seperti berikut:
<message Text=”Hi There!” text=”Hello!”>
Hal tersebut diperbolehkan karena XML bersifat case sensitive.
2.3.2 Dokumen Valid
Dokumen XML yang valid adalah dokumen yang mengikuti tata cara penulisan XML schema
(skema XML) yang ada [HOL03]. Terdapat beberapa XML schema misalnya Document Type
Definition (DTD) dan XML Schema yang dikeluarkan oleh W3C. Skema adalah aturan
formal yang mengatur bagaimana content atau data harus ditampilkan dalam dokumen XML
[DYK05]. Dokumen harus mengikuti aturan umum XML untuk memastikan bahwa semua
perangkat lunak yang bersifat XML-aware (mampu memproses XML) akan mampu membaca
dan mengerti pengaturan data dalam dokumen XML.
XML schema mengandung aturan sintaks dengan beberapa constraint (batasan) di dalamnya.
XML schema akan membatasi elemen, nama atribut elemen dan hirarki elemen yang
dibolehkan. Misalnya XML schema hanya memperbolehkan elemen dengan nama “person”
memiliki satu elemen dengan nama “name” . Sebagai contoh dari DTD adalah sebagai
berikut:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
people_list (person*)>
person (name, birthdate?, gender?, socialsecuritynumber?)>
name (#PCDATA)>
birthdate (#PCDATA)>
II-11
<!ELEMENT gender (#PCDATA)>
<!ELEMENT socialsecuritynumber (#PCDATA)>
Dari skema di atas dapat diartikan sebagai berikut:
a. people_list adalah sebuah nama elemen yang valid, people_list berisi elemen
person dan penanda * berarti boleh ada 0 atau lebih elemen person dalam elemen
people_list
b. person adalah sebuah nama elemen yang valid, person berisi elemen name,
birthdate
(optional),
gender
(optional),
dan
socialsecuritynumber
(optional). Penanda ? berarti sebuah elemen bersifat optional.
c. name adalah sebuah nama elemen yang valid, dan name berisi “parsed character
data” (#PCDATA)
d. birthdate adalah sebuah nama elemen yang valid, dan birthdate berisi “parsed
character data” (#PCDATA)
e. gender adalah sebuah nama elemen yang valid, dan gender berisi “parsed
character data” (#PCDATA)
f.
socialsecuritynumber adalah sebuah nama elemen yang valid, dan berisi
“parsed character data” (#PCDATA)
Dari skema di atas, dokumen XML yang bersesuaian dengan skema tersebut adalah sebagai
berikut:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
<person>
<name>Fred Bloggs</name>
<birthdate>27/11/2008</birthdate>
<gender>Male</gender>
</person>
</people_list>
Download