Jumat, 14 Agustus 2015

TESTING DAN IMPLEMENTASI

TEKNIK PENGUJIAN PERANGKAT LUNAK


Pentingnya pengujian perangkat lunak dan implikasinya yang mengacu pada kualitas perangkat lunak tidak dapat terlalu ditekankan seperti yang dikatakan oleh Deutsch dalam Pressman (1997;525)
“Pengembangan sistem perangkat lunak melibatkan sederetan aktivitas produksi, peluang terjadinya kesalahan manusia sangat besar.  Kesalahan dapat mulai terjadi pada permulaan proses, sasaran ditetapkan secara tidak sempurna dan dalam desain dan tahapan pengembangan selanjutnya … Karena ketidakmampuan manusia untuk melakukan dan berkomunikasi dengan sempurna, maka pengembangan perangkat lunak diiringi dengan aktivitas jaminan kualitas”
Pengujian perangkat lunak adalah elemen kritis dari jaminan kualitas perangkat lunak dan mempresentasikan kajian pokok dan spesifikasi, desain dan pengkodean.
Meningkatkan visibilitas (keadaan yang dapat dilihat dan diamati) perangkat lunak sebagai suatu elemen sistem dan biaya yang muncul akibat kegagalan perangkat lunak, memotivasi dilakukannyaperencanaan yang baik melalui pengujian yang teliti.  Hal wajar bagi organisasi pengembangan perangkat lunak untuk meningkatkan 30 % sampai 40 % usaha proyek total pada tahap pengujian.   Secara ekstrim pengujian perangkat lunak human rate (seperti kontrol penerbangan, memonitoring reaktor nuklir) dapat menelan biaya tiga sampai lima kali dari aktivitas rekayasa perangkat lunak lain yang dikombinasikan.

2.1. DASAR-DASAR PENGUJIAN PERANGKAT LUNAK

Pengujian menyajikan anomali yang menarik bagi perekayasa perangkat lunak.  Pada proses perangkat lunak, perekayasa pertama-tama berusaha membangun perangkat lunak dari konsep abstrak ke implementasi yang dapat dilihat, baru kemudian dilakukan pengujian .  perekayasa menciptakan sederetan test case yang dimaksudkan untuk “membongkar” perangkat lunak yang sudah dibangun.  Pada dasarnya, pengujian merupakan satu langkah dalm proses rekayasa perangkat lunak yang dapat dianggap (paling tidak secara psikologis) sebagai hal yang deskruktif daripada konstruktif.
Pengembangan  perangkat lunak, sesuai sifat dasar mereka adalah manusia pembangun.  Pengujian mengharuskan pengembang membuang pemikiran-pemikiran sebelumnya mengenai “kebenaran” perangkat lunak yang baru saja dikembangkan dan mengatasi konflik minat yang terjadi pada saat kesalahan ditemukan Beizer dalam Pressman (1997;526) menggambarkan situasi tersebut dengan mengatakan :
“Ada mitos yang menyatakan bahwa jika kita benar-benar baik dalam pemograman, maka tidak akan terjadi bug.  Jika kita benar-benar dapat berkosentrasi, jika setiap orang menggunakan pemograman terstruktur, desain top-down, tabel keputusan, jika program-program ditulis di dalam SQUISH, jika kita memiliki standar yang benar, maka tidak akan ada bug.  Kalau begitu, teruslah memegang mitos tersebut. Ada bug, kata mitos tersebut, karena kita buruk dalam apa yang kita lakukan dan jika kita buruk dalam hal itu, maka kita harus merasa bersalah karenanya.  Demikianlah, pengujian dan test case merupakan pemakluman terhadap kegagalan, yang tetap meninggalkan rasa bersalah. Rasa bosan dari pengujian hanyalah hukuman terhadap kesalahan kita.  Hukuman untuk apa? Untuk tidak membedakan antara apa yang dipikirkan oleh pemogram lain dan apa yang dikatakannya? Karena gagal menjadi telepatis? Karena tidak memecahkan masalah komunikasi manusia yang telah terjadi … selama 40 dekade?”
Haruskah pengujian meninggalkan rasa bersalah ?  Apakah pengujian benar-benar bersifat merusak ? Jawaban untuk pertanyaan-pertanyaan tersebut adalah “Tidak!” tetapi sasaran pengujian bagaimanapun berbeda dari apa yang kita harapkan.

Sasaran-Sasaran Pengujian

Dalam buku klasiknya mengenai pengujian perangkat lunak,Glen Myers dalam Pressman (1997;526) menyatakan sejumlah aturan yang berfungsi sebagai sasaran pengujian :
1.        Pengujian adalah proses eksekusi suatu program dengan maksud menemukan kesalahan
2.        Test case yang baik adalah test case yang memiliki probabilitas tinggi untuk menemukan kesalahan yang belum pernah diketemukan sebelumnya
3.        Pengujian yang sukses adalah pengujian yang mengungkapkan semua kesalahan yang belum pernah ditemukan sebelumnya
Sasaran tersebut mengimplikasikan adanya perubahan titik pandang yang dramatis.  Sasaran ini berlawanan dengan pandangan yang biasanya dipegang yang menyatakan bahwa pengujian yang berhasil adalah pengujian yang tidak ada kesalahan yang diketemukan.  Sasaran kita adalah mendesain pengujian yang secara sistematis mengungkapkan kelas kesalahan yang berbeda dan melakukannya dengan jumlah waktu dan usaha minimum.
Bila pengujian dilakukan secara sukses (sesuai dengan sasaran tersebut), maka akan ditemukan kesalahan di dalam perangkat lunak.  Sebagai keuntungan sekunder, pengujian menunjukkan bahwa fungsi perangkat lunak bekerja sesuai dengan spesifikasi dan bahwa persyaratan kinerja telah terpenuhi.  Sebagai tambahan, data yang dikumpulkan pada saat pengujian dilakukan memberikan indikasi yang baik mengenai reliabilitas perangkat lunak dan beberapa menunjukkan kualitas perangkat lunak secara keseluruhan.  Tetapi ada satu hal yang tidak dapat dilakukan oleh pengujian.
“Pengujian tidak dapat memperlihatkan tidak adanya cacat, pengujian hanya dapat memperlihatkan bahwa ada kesalahan perangkat lunak”
Penting untuk mengingat statemen tersebut pada saat pengujian dilakukan

Prinsip Pengujian

Sebelum mengaplikasikan metode untuk mendesain test case yang efektif, perekayasa perangkat lunak harus memahami prinsip dasar yang menuntun pengujian perangkat lunak. Davis dalam Pressman (1997;527) mengusulkan serangkaian prinsip pengujian yang telah diadaptasi untuk digunakan :
·           Semua pengujian harus dapat ditelusuri sampai ke persyaratan pelanggan
Sebagaimana telah kita ketahui, sasaran pengujian perangkat lunak adalah untuk mengungkap kesalahan.  Hal ini memenuhi kriteria bahwa cacat yang paling fatal (dari titik pandang pelanggan) adalah cacat yang menyebabkan program gagal memenuhi persyaratannya.
·           Pengujian harus direncanakan lama sebelum pengujian itu mulai
Perencanaan pengujian dapat dimulai segera setelah model persyaratan dilengkapi.  Definisi detail mengenai test case dapat dimulai segera setelah model desain diteguhkan.  Dengan demikian, semua pengujian dapat direncanakan dan dirancang sebelum semua kode dibangkitkan.
·           Prinsip Pareto berlaku untuk pengujian perangkat lunak.
Secara singkat, prinsip Pareto mengimplikasikan bahwa 80 persen dari semua kesalahan yang diketemukan selama pengujian sepertinya akan dapat ditelusuri sampai 20 persen dari semua modul program.  Masalahnya, bagaimana mengisolasi modul yang dicurigai dan mengujinya dengan teliti.
·           Pengujian harus mulai “dari yang kecil” dan berkembang ke pengujian “yang besar”.
Pengujian pertama yang direncanakan dan dieksekusi biasanya berfokus pada modul program individual.  Selagi pengujian berlangsung maju, pengujian mengubah fokus dalam usaha menemukan kesalahan pada cluster modul yang terintegrasi dan akhirnya pada sistem secara keseluruhan.
·           Pengujian yang mendalam tidak mungkin.
Jumlah jalur permutasi untuk program yang berukuran menengah pun sangat besar.  Oleh karena itu maka tidak mungkin mengeksekusi setiap kombinasi jalur skema pengujian.  Tetapi dimungkinkan untuk secara “adekuat” mencakup logika program dan memastikan bahwa semua kondisi dalam desain prosedural telah diuji.
·           Untuk menjadi paling efektif, pengujian harus dilakukan oleh pihak ketiga yang independen.
Yang dimaksud dengan kata “yang paling efektif” adalah pengujian yang memiliki probabilitas tertinggi di dalam menemukan kesalahan (sasaran utama pengujian).  Perekayasa perangkat lunak yang membuat sistem tersebut bukanlah orang yang paling tepat untuk melakukan semua pengujian bagi perangkat lunak.

Testabilitas

Dalam lingkungan yang ideal, perekayasa perangkat lunak mendesain suatu program komputer, sebuah sistem atau suatu produk dengan “testabilitas” di dalam pikirannya.  Hal ini memungkinkan individu yang berurusan dengan pengujian mendesain test case yang efektif secara lebih mudah.  Tetapi apakah “testabilitas” itu ? James Bach dalam Pressman (1997;528) menggambarkan testabilitas dengan cara berikut :
Testabilitas perangkat lunak secara sederhana adalah seberapa mudah sebuah program komputer dapat diuji.  Karena pengujian sangat sulit, perlu diketahui apa yang dapat dilakukan untuk membuatnya menjadi mudah.  Kadang-kadang pemogram bersedia melakukan hal-hal yang akan membantu proses pengujian dan checklist mengenai masalah-masalah desain yang mungkin, fitur dan lain sebagainya dapat menjadi berguna dalam bernegosiasi dengan mereka.
Sebenarnya ada metrik yang dapat digunakan untuk mengukur testabilitas di dalam sebagian besar aspeknya.  Kadang-kadang testabilitas digunakan untuk melihat seberapa “adekuat” serangkaian pengujian tertentu akan mencakup produk. 
Testabilitas juga digunakan oleh pihak militer untuk melihat seberapa mudah suatu piranti dapat diatur dan diperbaiki di lapangan.  Kedua hal tersebut tidak sama dengan “testabilitas perangkat lunak”.  Checklist berikut ini memberikan serangkaian karakteristik yang membawa kepada perangkat lunak yang dapat diuji.
1.        Operabilitas. “Semakin baik dia bekerja, semakin efisien dia dapat diuji”
·      Sistem memiliki beberapa bug (bug menambah analisis dan biaya pelaporan ke proses pengujian)
·      Tidak ada bug yang memblok eksekusi pengujian
·      Produk berkembang di dalam tahapan fungsional (memungkinkan pengembangan dan pengujian secara simultan)
2.        Observabilitas. “Apa yang anda lihat adalah apa yang anda uji”
·      Output yang berbeda dikeluarkan oleh masing-masing input
·      Tahap dan variabel sistem dapat dilihat atau diantrikan selama eksekusi
·      Sistem dan variabel yang lalu dapat dilihat atau didiantrikan(misalnya, log transaksi)
·      Semua faktor yang mempengaruhi output dapat dilihat
·      Output yang tidak benar dapat diidentifikasi dengan mudah
·      Kesalahan internal dideteksi secara otomatis melalui mekanisme self-testing
·      Kesalahan internal dilaporkan secara otomatis
·      Kode sumber dapat diakses
3.        Kontrolabilitas. “semakin baik kita dapat mengontrol perangkat lunak, semakin banyak pengujian yang dapat diotomatisasi dan dioptimalisasikan”
·      Semua output yang mungkin dapat dimunculkan melalui beberapa kombinasi input
·      Semua kode dapat dieksekusi melalui berbagai kombinasi input
·      Keadaan dan variabel perangkat lunak dan perangkat keras dapat dikontrol secara langsung oleh perekayasa pengujian
·      Format input dan output kosisten dan terstruktur
·      Pengujian dapat dispesifikasi, dioptimasi dan di reproduksi dengan baik.
4.        Dekomposabilitas. “Dengan mengontrol ruang lingkup pengujian, kita dapat dengan lebih cepat mengisolasi masalah dan melakukan pengujian kembali secara lebih halus”
·      Sistem perangkat lunak dibangun dari modul-modul independen
·      Modul-modul perangkat lunak dapat diuji secara independen
5.        Kesederhanaan.  “Semakin sedikit yang diuji, semakin cepat kita dapat mengujinya”.
·      Kesederhanaan fungsional (seperti, kumpulan fitur adalah kebutuhan minimum untuk memenuhi persyaratan)
·      Kesederhanaan struktural  (seperti, arsitektur dimodularisasi untuk membatasi penyebaran kesalahan)
·      Kesederhanaan kode (seperti, standar pengkodean diadopsi demi kemudahan inspeksi dan pemeliharaan)
6.        Stabilitas. “Semakin sedikit perubahan, semakin sedikit gangguan dalam pengujian”
·      Perubahan ke perangkat lunak tidak sering
·      Perubahan ke perangkat lunak terkontrol
·      Perubahan ke perangkat lunak memvalidasi pengujian yang sudah ada
·      Kegagalan perangkat lunak dapat diperbaiki dengan baik
7.        Kemampuan untuk dapat dipahami.  “Semakin banyak informasi yang kita miliki, semakin halus pengujian yang akan dilakukan.”
·      Desain dipahami dengan baik
·      Ketergantungan di antara komponen internal, eksternal dan yang dipakai bersama, dipahami dengan baik
·      Perubahan ke desain dikomunikasikan.
·      Dokumentasi teknik dapat diakses dengan cepat
·      Dokumentasi teknik diorganisasikan dengan baik
·      Dokumentasi teknis spesifik dan detail
·      Dokumentasi teknis akurat
Atribut-atribut yang diusulkan oleh James Bach dapat digunakan oleh perekayasa perangkat lunak untuk mengembangkan suatu konfigurasi perangkat lunak (yakni program, data dan dokumen dll) yang dapat dipertanggung jawabkan pada pengujian.
Bagaimana dengan pengujian itu sendiri ? Kaner, Falk dan Nguyen dalam Pressman (1997;530) mengusulkan atribut-atribut dari pengujian yang “baik” sebagai berikut :
1.        Pengujian yang baik memiliki probabilitas yang tinggi untuk menemukan kesalahan.
Untuk mencapai hal ini, penguji harus memahami perangkat lunak dan berusaha mengembangkan gambaran mental mengenai bagaimana perangkat lunak dapat gagal.  Idealnya kelas-kelas kegagalan itu diselidiki.  Sebagai contoh, kelas kegagalan potensial pada GUI (Graphical User Interface) adalah kegagalan untuk mengenali posisi mouse untuk memperlihatkan kesalahan di dalam pengenalan posisi mouse.
2.        Pengujian yang baik tidak redundan.
Waktu pengujian dan sumber daya terbatas.  Tidak ada manfaatnya melakukan pengujian dengan tujuan yang sama dengan pengujian lainnya.  Setiap pengujian harus memiliki tujuan yang berbeda (bahkan meskipun benar-benar berbeda).  Sebagai contoh, modul perangkat lunak safehome (sistem keamanan rumah yang digunakan sebagai aplikasi contoh) didesain untuk mengenali password pemakai untuk mengaktifkan dan mendeaktifkan sistem.  Dalam usaha mengungkapkan kesalahan pada input password, penguji mendesain serangkaian pengujian yang memasukkan serangkaian password.  Password yang berlaku dan tidak berlaku (empat urutan numeris) diinputkan sebagai pengujian yang berbeda.  Tetapi masing-masing password valid / invalid harus memeriksa model kegagalan yang berbeda.  Sebagai contoh, password invalid 1234 tidak boleh diterima oleh sistem yang diprogram untuk mengenali 8080 sebagai password yang valid (berlaku).  Bila 1234 diterima, maka kesalahan muncul.  Pengujian yang lain, katakanlah 1235, akan memiliki tujuan yang sama dengan 1234 sehingga redundan.  Tetapi input invalid 8081 atau 8180 memiliki perbedaan yang jelas, yang berusaha memperlihatkan bahwa suatu kesalahan akan muncul untuk password yang “dekat” tetapi tidak sama dengan password yang valid.
3.        Pengujian yang baik seharusnya “jenis terbaik”.
Dalam suatu kelompok pengujian yang memiliki tujuan yang serupa, batasan waktu dan sumber daya dapat menghalangi eksekusi hanya kelompok kecil dari pengujian tersebut.  Pada kasus semacam ini maka pengujian yang memiliki kemungkinan paling besar untuk mengungkap seluruh kelas kesalahan yang tinggi yang harus digunakan.
4.        Pengujian yang baik tidak boleh terlalu sederhana atau terlalu kompleks.
Meskipun kadang-kadang mungkin untuk menggabungkan serangkaian pengujian ke dalam satu test case secara umum masing-masing test case harus dieksekusi secara terpisah.

2.2. DESAIN TEST CASE

Desain pengujian perangkat lunak dan produk rekayasa lain dapat sama-sama menantang dengan desain awal dari produk itu sendiri.  Tetapi untuk alsan yang telah disebutkan, perekayasa perangkat lunak sering memperlakukan pengujian sebagai pikiran yang timbul kemudian, mengembangkan test case yang mungkin “merasa benar” tetapi tidak menjamin kelengkapannya. Dengan melihat lagi sasaran pengujian, kita harus mendesain yang memiliki kemungkinan tertinggi dalam menemukan kesalahan dengan jumlah waktu dan usaha yang minimum.
Lebih dari dua dekadeterakhir ini telah berkembang berbagai metode desain test case untuk perangkat lunak.  Metode-metode tersebut memberikan kepada pengembang sebuah pendekatan yang sistematik ke pengujian.  Yang lebih penting, metode itu memberikan mekanisme yang dapat membantu memastikan kelengkapan pengujian dan memberikan kemungkinan tertinggi untuk mengungkap kesalahan pada perangkat lunak.
Semua produk yang direkayasa (dan sebagian besar hal lain) dapat  diuji  dengan  satu   atau   dua cara :
4.    Dengan mengetahui fungsi yang ditentukan, produk dirancang untuk melakukannya, pengujian dapat dilakukan untuk memperlihatkan bahwa masing-masing fungsi beroperasi sepenuhnya pada waktu yang sama mencari kesalahan pada setiap fungsi.  Pendekatan pengujian tersebut yang disebut pengujian black-box
5.    Dengan mengetahui kerja internal suatu produk, maka pengujian dapat dilakukan untuk memastikan bahwa “semua roda gigi berhubungan” yaitu operasi internal bekerja sesuai dengan spesifikasi dan semua komponen internal telah diamati dengan baik.  Pendekatan pengujian tersebut yang disebut pengujian white-box.
Jika perangkat lunak komputer dipertimbangkan, maka pengujian black-box berkaitan dengan pengujian yang dilakukan pada interface perangkat lunak.  Meskipun didesain untuk mengungkap kesalahan, pengujian black-box digunakan untuk memperlihatkan bahwa fungsi-fungsi perangkat lunak adalah : operasional; Bahwa input diterima dengan baik dan output dihasilkan dengan tepat dan integritas informasi eksternal (seperti file data) dipelihara.  Pengujian black-box menguji beberapa aspek dasar suatu sistem dengan sedikit memperhatikan struktur logika internal perangkat lunak tersebut.
Pengujian white-box perangkat lunak didasarkan pada pengamatan yang teliti terhadap detail prosedural.  Jalur-jalur logika yang melewati perangkat lunak diuji dengan memberikan test case yang menguji serangkaian kondisi dan atau loop tertentu.  “Status program tersebut” dapat diuji pada berbagai titik untuk menentukan apakah status yang diharapkan atau dituntut sesuai dengan status aktual.
Sekilas sepertinya pengujian white-box yang sangat teliti akan membawa kepada “Program yang benar 100 persen”.  Yang kita perlukan adalah menentukan semua jalur logika, mengembangkan test case untuk mengujinya dan mengevaluasi hasil, yaitu memunculkan test case yang menguji logika program secara mendalam.  Sayangnya, pengujian yang mendalam menimbulkan masalah logistik tertentu. Bahkan untuk program yang kecil, jumlah jalur logika yang mungkin dapat sangat luas.  Sebagai contoh, perhatikan program 100 baris dalam bahasa C.  setelah beberapa deklarasi data, program berisi dua loop tersarang yang masing-masing mengeksekusi dari 1 sampai 20 kali, tergantung kondisi yang ditentukan pada input.  Pada loop bagian dalam, empat bangun if-then-else diperlukan.  Kira-kira ada 1014 jalur yang mungkin yang dapat dieksekusi pada program ini.
Untuk menaruh jumlah tersebut dalam perspektif sebenarnya, kita asumsikan bahwa sebuah prosesor pengujian ajaib (“Ajaib” karena tidak ada prosesor semacam itu) telah dikembangkan untuk pengujian mendalam. Prosesor tersebut dapat mengembangkan suatu test case, mengeksekusi dan mengevaluasi hasilnya dalam satu milidetik.  Dengan bekerja 24 jam sehari, 365 hari satu tahun, prosesor akan bekerja selama 3170 tahun untuk menguji program.  Jelas hal itu akan menyebabkan kerusakan pada sebagian besar jadwal pengembangan.  Pengujian yang mendalam tidak mungkin dilakukan untuk sistem perangkat lunak yang besar.
 Tetapi pengujian white-box tidak boleh dianggap tidak praktis.  Sejumlah terbatas dari jalur logika yang penting dapat dipilih dan digunakan.  Struktur-struktur data yang penting dapat diperiksa validitasnya. Atribut pengujian black-box dan white-box dapat digabungkan untuk memberikan pendekatan yang memvalidasi interface perangkat lunak dan secara selektif menjamin bahwa kerja internal dari perangkat lunak itu benar.

2.3. PENGUJIAN WHITE-BOX

Pengujian white-box, yang kadang-kadang disebut pengujian glass-box, adalah metode desain test case yang menggunakan struktur kontrol desain prosedural untuk memperoleh test case.  Dengan menggunakan metode pengujian white-box, perekayasa sistem dapat melakukan test case yang :
6.        Memberikan jaminan bahwa semua jalur independen pada suatu modul yang telah paling tidak satu kali
7.        Menggunakan semua keputusan logis pada sisi true dan false
8.        Mengeksekusi semua loop pada batasan mereka dan pada batas operasional mereka
9.        Menggunakan struktur data internal untuk menjamin validitasnya.
Pada titik ini, dapat diajukan pertanyaan yang beralasan, yaitu : “Mengapa menghabiskan waktu dan energi untuk mencemaskan (dan menguji) logika jika kita dapat dengan lebih baik memperluas kerja yang dapat memastikan bahwa persyaratan program telah dipenuhi ?”.  Bila dinyatakan dengan cara lain, mengapa kita tidak menggunakan semua energi kita untuk melakukan pengujian black-box ? Jawabannya ada pada sifat cacat perangkat lunak :
·           Kesalahan logis dan asumsi yang tidak benar berbanding terbalik dengan probabilitas jalur program yang akan dieksekusi.
Kesalahan cenderung muncul dalam kerja kita pada saat kita mendesain dan mengimplementasi fungsi, kondisi atau kontrol yang berada di luar mainstream.  Pemrosesan setiap hari cenderung dipahami dengan baik (dan diteliti dengan baik) sementara pemrosesan “kasus khusus” cenderung berantakan.
·           Kita sering percaya bahwa jalur logis mungkin tidak akan dieksekusi bila pada kenyataannya akan dieksekusi pada basis reguler.
Aliran logika dari suatu program kadang-kadang bersifat konterintuitif, yang berarti asumsi kita yang kita tidak sadari mengenai aliran dan data kontrol dapat menyebabkan kita membuat kesalahan desain yang akan terungkap hanya setelah pengujian jalur memulai.
·           Kesalahan tipografis adalah random.
Bila sebuah program diterjemahkan ke dalam kode sumber bahasa pemrograman maka dimungkinkan akan terjadi banyak kesalahan pengetikan.  Beberapa akan ditemukan dengan mekanisme pengecekan sintaks, tetapi yang lainnya akan tetap tidak terdeteksi sampai pengujian mulai.  Dimungkinkan bahwa suatu type akan ada pada suatu jalur logika tidak jelas seperti pada jalur mainstream.
Masing-masing alasan tersebut memberikan suatu argumen untuk melakukan pengujian white-box.  Pengujian black-box, tidak peduli seberapa cermat dilakukan dapat tidak menangkap bentuk kesalahan tersebut.  Seperti dikatakan oleh Beizer dalam Pressman (1997;534) adalah “Bug bersembunyi di sudut-sudut dan berkerumun di perbatasan-perbatasan”.  Tetapi pengujian white-box sangat mungkin untuk menemukannya.

2.4. PENGUJIAN BASIS PATH

Pengujian basis Path adalah teknik pengujian white-box yang diusulkan pertama kali oleh Tom McCabe.  Metode basis path ini memungkinkan desainer test case mengukur kompleksitas logis dari desain prosedural dan menggunakannya sebagai pedoman untuk menetapkan basis set dari jalur eksekusi.  Test case yang dilakukan untuk menggunakan basis set tersebut dijamin untuk menggunakan setiap statemen di dalam program paling tidak sekali selama pengujian.

Notasi Diagram Alir

Sebelum metode basis path dapat diperkenalkan, notasi sederhana untuk representasi aliran kontrol yang disebut diagram alir (atau grafik program), harus diperkenalkan. 
Untuk menggambarkan grafik alir, perhatikan representasi desain prosedural pada gambar 2a di sini bagan alir digunakan untuk menggambarkan struktur kontrol program. 
Gambar 2b. memetakan bagan alir tersebut ke dalam grafik alir yang sesuai (dengan mengasumsikan bahwa tidak ada kondisi senyawa yang diisikan di dalam diamond keputusan dari bagan alir tersebut.  Pada gambar 2b. masing-masing lingkaran, yang disebut simpul grafik alir, mempresentasikan satu atau lebih statemen prosedural.  Urutan kotak proses dan permata keputusan dapat memetakan simpul tunggal. Anak panah pada grafik alir tersebut, yang disebut edges atau links, mempresentasikan aliran kontrol dan analog dengan anak panah bagan alir. Edge harus berhenti pada suatu simpul, meskipun bila simpul tersebut tidak mempresentasikan statemen prosedural (misalnya, lihat simpul untuk bangun if-then-else).  Area yang dibatasi oleh edge dan simpul disebut region.  Pada saat menghitung region, kita memasukkan area di luar grafik dan menghitungnya sebagai sebuah region.

Setiap representasi desain prosedural dapat diterjemahkan ke dalam suatu grafik alir.                            Pada gambar 3. diperlihatkan segmen PDL dan grafik alirnya yang sesuai.  Perhatikan bahwa statemen PDL telah diberi nomor dan penomoran yang sesuai digunakan untuk grafik alir tersebut.
Bila ada kondisi gabungan dalam desain prosedural, maka pembuatan grafik alir menjadi sangat rumit.  Kondisi gabungan terjadi bila satu atau lebih operator Boolean (logika OR, AND, NAND, NOR) ada pada statemen kondisional.  Gambar 4. menunjukkan sebuah segmen PDL menerjemahkan ke dalam grafik alir.  Perhatikan bahwa simpul (node) yang terpisah diciptakan untuk masing-masing kondisi a dan b pada statemen IF a OR b.  Masing-masing simpul yang berisi sebuah kondisi disebut simpul predikat dan ditandai dengan dua atau lebih edge yang berasal darinya.

 Kompleksitas Siklomatis
Kompleksitas Siklomatis adalah metriks perangkat lunak yang memberikan pengukuran kuntitatif terhadap kompleksitas logis suatu program.  Bila metriks ini digunakan dalam konteks metode pengujian basis path, maka nilai yang terhitung untuk kompleksitas siklomatis menentukan jumlah jalur independen dalam basis set suatu program dan memberi batas atas bagi jumlah pengujian yang harus dilakukan untuk memastikan bahwa semua statemen telah dieksekusi sedikitnya satu kali.
Jalur independen adalah jalur yang melalui program yang mengintroduksi sedikitnya satu rangkaian statemen proses baru atau suatu kondisi baru.  Bila dinyatakan dengan terminologi grafik alir, jalur independen harus bergerak sepanjang paling tidak satu edge yang tidak dilewatkan sebelum jalur tersebut ditentukan. 
Sebagai contoh serangkaian jalur independen untuk grafik alir yang ditunjukkan pada gambar 2b. adalah :
Jalur 1 : 1 – 11
Jalur 2 : 1-2-3-4-5-10-1-11
Jalur 3 : 1-2-3-6-8-9-10-1-11
Jalur 4 : 1-2-3-6-7-9-10-1-11
Perhatikan bahwa masing-masing jalur baru memperkenalkan sebuah edge baru.
Jalur 1-2-3-4-5-10-1-2-3-6-8-9-10-1-11
Tidak dianggap jalur independen karena merupakan gabungan dari jalur-jalur yang sudah ditentukan dan tidak melewati beberapa edge baru.
Jalur 1, 2, 3 dan 4 yang ditentukan di atas terdiri dari sebuah basis set untuk grafik alir pada gambar 2b. bila pengujian dapat dilakukan untuk memaksa adanya eksekusi dari jalur-jalur tersebut (sebuah basis set), maka setiap statemen pada program tersebut akan dieksekusi paling tidak satu kali dan setiap kondisi sudah akan dieksekusi pada sisi true dan false – nya.  Perlu dicatat bahwa basis set tidaklah unik.  Pada dasarnya, semua jumlah basis set yang berbeda dapat diperoleh untuk suatu desain prosedural yang diberikan.
Bagaimana kita tahu banyaknya jalur yang dicari? Komputasi kompleksitas siklomatis memberikan jawaban.  Fondasi kompleksitas siklomatis adalah teori grafik dan memberi kita metriks perangkat lunak yang sangat berguna.  Kompleksitas dihitung dalam salah satu dari tiga cara berikut :
10.    Jumlah region  grafik alir sesuai dengan kompleksitas siklomatis
11.    Kompleksitas siklomatis, V(G), untuk grafik alir G ditentukan sebagai V(G) = E – N + 2 dimana E adalah jumlah edge grafik alir dan N adalah jumlah simpul grafik alir
12.    Kompleksitas siklomatis, V(G), untuk grafik alir G juga ditentukan sebagai V(G) = P + 1 dimana P adalah jumlah simpul predikat yang diisikan dalam grafik alir G.
Lihat sekali lagi grafik alir pada gambar 2b. kompleksitas siklomatis dapat dihitung dengan menggunakan masing-masing dari algoritma yang ditulis di atas :
1.        Grafik alir mempunyai 4 region
2.        V(G) = 11 edge – 9 simpul + 2 = 4
3.        V(G) = 3 simpul yang diperkirakan + 1 = 4
Dengan demikian, kompleksitas siklomatis dari grafik alir pada gambar 2b. adalah 4.
Yang lebih penting, nilai untuk V(G) memberi kita batas atas untuk jumlah jalur independen yang membentuk basis set dan implikasinya, batas atas jumlah pengujian yang harus didesain dan dieksekusi untuk menjamin semua statemen program.

Melakukan Test Case

Metode pengujian basis pat dapat diaplikasikan pada desain prosedural atau kode sumber.  Pada subbab ini akan disajikan pengujian basis path sebagai sederetan langkah.  Average prosedur yang digambarkan dalam PDL pada gambar 5, akan digunakan sebagai contoh untuk menggambarkan masing-masing langkah pada metode desain test case.  Perhatikan bahwa average, meskipun merupakan suatu algoritma yang sederhana, berisi kondisi gabungan dan loop.
PROCEDURE Average
·         This procedure computes the everage of 100 or fewer
Number that lie between bounding values; it also computes
The sum and the total number valid
            INTERFACE RETURNS average, total.input, total.valid;
            INTERFACE ACCEPTS 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 tital.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 

Gambar 5. PDL untuk desain test case dengan simpul-simpul yang diidentifikasi
1.        Dengan menggunakan atau kode sebagai dasar, gambarkan sebuah grafik alir yang sesuai.
Grafik alir diciptakan dengan menggunakan simbol dan aturan konstruksi yang disajikan pada notasi diagram Alir. Lihat PDL untuk average pada gambar 5. Grafik aliran diciptakan dengan menomori statemen-statemen PDL yang akan dipetakan ke dalam simpul grafik aliran yang sesuai.  
2.        Tentukan kompleksitas siklomatis dari grafik alir resultan.
Kompleksitas  siklomatis, V(G), ditentukan dengan mengaplikasikan satu dari algoritma-algoritma yang telah digambarkan di atas.  Perlu dicatat bahwa V(G) dapat ditentukan tanpa mengembangkan grafik alir dengan menghitung semua statemen kondisional dalam PDL (Program Description Language) (untuk average prosedur, kondisi gabungan menghitung 2) dan penambahan 1.
V(G) = 6 Region
V(G) = 18 edge – 14 simpul + 2 = 6
V(G) = 5 simpul predikat + 1 = 6

3.        Tentukan sebuah basis set dari jalur independen secara linier.
Harga V(G) memberikan jumlah jalur independen secara linier melalui struktur kontrol program.  Dalam kasus average prosedur, kita dapat menentukan 6 jalur adalah :
Jalur 1 : 1-2-10-11-13
Jalur 2 : 1-2-10-12-13
Jalur 3 : 1-2-3-10-11-13
Jalur 4 : 1-2-3-4-5-8-9-2-…
Jalur 5 : 1-2-3-4-5-6-8-9-2-…
Jalur 6 : 1-2-3-4-5-6-7-8-9-2-…

Elips (…) yang mengikuti jalur 4, 5 dan 6 menunjukkan bahwa sembarang jalur yang peringatan struktur kontrol dapat diterima.  Seringkali berguna untuk mengidentifikasi simpul predikat sebagai peranti dalam derivasi test case.  Pada kasus ini, simpul 2, 3, 5, 6 dan 10 adalah simpul predikat.

4.        Siapkan test case yang akan memaksa adanya eksekusi setiap basis set.
Data harus dipilih sehingga kondisi pada simpul-simpul predikat terpasang secara tepat pada saat masing-masing jalur diuji. Test case yang memenuhi basis set yang digambarkan di atas adalah :
Test case jalur 1 :
Harga (k) = input valid, dimana k<I yang ditetapkan di bawah
Harga (i) =  - 999, dimana 2 ≤ i ≤ 100
Hasil yang diharapkan : rata-rata yang benar berdasarkan nilai k dan total yang tepat
Catatan : jalur 1 tidak dapat diuji sendiri karena harus diuji sebagai bagian dari pengujian    jalur 4, 5 dan 6 

Test case jalur 2 :
Harga (i) = - 999
Hasil yang diharapkan : rata-rata = - 999; total yang lain pada nilai awal

Test case jalur 3 :
Usahakan untuk memproses 101 nilai atau lebih
100 nilai pertama harus valid
Hasil yang diharapkan : sama seperti test case 1

Test case jalur 4 :
Nilai (i) = input valid, dimana i < 100
Nilai (k) < minimum, dimana k < i
Hasil yang diharapkan : rata-rata yang benar berdasarkan nilai-nilai k dan total yang tepat.

Test case jalur 5 :
Nilai (i) = input valid, dimana i < 100
Nilai (k) > minimum, dimana k ≤ i
Hasil yang diharapkan : rata-rata yang benar berdasarkan nilai-nilai n dan total yang tepat.

Test Case jalur 6 :
Nilai (i) = input valid, dimana i < 100
Hasil yang diharapkan : rata-rata yang benar berdasarkan nilai-nilai n dan total yang tepat.

Masing-masing test case dieksekusi dan dibandingkan untuk mendapatkan hasil yang diharapkan.  Sekali semua test case telah dilengkapi maka penguji dapat yakin bahwa semua statemen pada program telah dieksekusi paling tidak satu kali.
Penting untuk dicatat bahwa beberapa jalur independen (misalnya, jalur 1 pada contoh tersebut) tidak dapat diuji secara terpisah (sendiri), karena kombinasi aliran normal dari program.  Dalam kasus semacam ini, jalur-jalur itu diuji sebagai bagian dari pengujian jalur yang lain.

Matriks Grafik

Prosedur untuk mendapatkan grafik alir dan bahkan menentukan serangkaian basis path cocok dengan mekanisasi.  Untuk mengembangkan peranti perangkat lunak yang membantu pengujian basis path, struktur data yang disebut matriks grafis dapat sangat berguna.
Matriks grafis adalah matriks bujur sangkar yang ukurannya (yakni jumlah baris dan kolom) sama dengan jumlah simpul pada grafik alir.  Masing-masing baris dan kolom sesuai dengan simpul yang diidentifikasikan dan entri matriks sesuai dengan edge di antara simpul.  Contoh sederhana grafik alir dan matriks grafisnya yang sesuai diperlihatkan pada gambar 7.
Pada gambar tersebut, masing-masing simpul pada grafik alir diidentifikasi oleh bilangan, sementara masing-masing edge diidentifikasi dengan huruf.  Entri huruf dibuat di dalam matriks tersebut untuk cocok dengan koneksi di antara dua simpul.  Sebagai contoh, simpul 3 disambungkan dengan simpul 4 oleh edge b.

Terhubung ke simpul
Simpul

1
2
3
4
5
1


a


2





3

d

b

4

c


f
5

g
e



Gambar 7. Matriks Koneksi
Untuk titik ini, matriks grafis tidak lebih dari sekedar representasi tabuler dari grafik alir.  Tetapi dengan menambahkan sebuah link weight pada masing-masing entri matriks, maka matriks grafisdapat menjadi alat yang sangat kuat untuk mengevaluasi struktur kontrol program selama pengujian.  Link weight memberikan informasi tambahan mengenai aliran kontrol.  Dalam bentuknya yang paling sederhana, link weight adalah 1 (ada hubungan) atau 0 (tidak ada hubungan) tetapi link weight dapat diterapkan lain, yaitu properti yang lebih menarik :
·           Probabilitas sebuah link (edge) akan dieksekusi
·           Waktu pemrosesan yang digunakan selama pelewatan sebuah link
·           Memori yang diperlukan selama pelewatan link, dan
·           Sumber daya yang diperlukan selama pelewatan link
Untuk menggambarkan, kita gunakan pembebanan sederhana untuk menunjukkan hubungan (0 atau 1).  Matriks grafis pada gambar 7 digambarkan lagi seperti yang ditunjukkan pada gambar 8. Masing-masing huruf telah diganti dengan dengan angka 1yang menunjukkan bahwa ada hubungan (nil telah dihilangkan supaya jelas).  Dengan bentuk seperti itu, matriks grafis disebut matriks koneksi.  Pada gambar 8, masing-masing baris dengan dua entri atau lebih mempresentasikan sebuah simpul predikat.  Dengan demikian, dengan mengerjakan aritmatika yang diperlihatkan di sebelah kanan sambungan matriks akan memberi kita metode lain untuk menentukan kompleksitas siklomatis.

Terhubung ke simpul

Simpul

1
2
3
4
5
Koneksi
1


1


1 – 1 = 0
2






3

1

1

2 – 1 = 1
4

1


1
2 – 1 = 1
5

1
1


2 – 1 = 1


Matriks Grafik
3 + 1 = 4
Kompleksitas
Siklomatis
Gambar 8. Matriks Koneksi
Beizar dalam Pressman (1997;544) memberikan perlakuan yang terliti dari algoritma matematika tambahan yang dapat diaplikasikan pada matriks-matriks grafis.  Dengan menggunakan teknik tersebut, maka analisis yang diperlukan untuk mendesain test case dapat diotomasi sebagian atau sepenuhnya.

2.5. PENGUJIAN STRUKTUR KONTROL

Teknik pengujian basis path yang digambarkan adalah satu dari sejumlah teknikuntuk pengujian struktur kontrol.  Meskipun pengujian basis path adalah sederhana dan sangat efektif, tetapi pengujian itu tidak memadai.  Dalam subbab ini akan dibahas variasi lain pada pengujian struktur kontrol.  Hal ini memperluas kupasan pengujian dan meningkatkan kualitas pengujian white-box.

Pengujian Kondisi

Pengujian kondisi adalah sebuah metode desain test case yang menggunakan kondisi logis yang ada pada suatu program.  Kondisi sederhana adalah variabel Boolean atau suatu persamaan hubungan, dapat didahului dengan satu operator NOT (“­­¬”).  Persamaan relasional mengambil bentuk : E1 (Operator-relasional) E2
Dimana E1 dan E2 merupakan persamaan aritmatika dan (operator relasional) adalah salah satu dari operator berikut ini : “<”, “≤”, “=”, “≠”, (“­­¬ =”) (pertidaksamaam), “>” atau “≥”.              Kondisi gabungan terdiri dari dua atau lebih kondisi sederhana, operator Boolean dan tanda kurung.  Diasumsikan nahwa operator Boolean yang diijinkan dalam suatu kondisi gabungan meliputi OR (“|”), AND (“&”) dan NOT (“­­¬”).  Kondisi tanpa persamaan relasional disebut persamaan Boolean.
Dengan demikian, tipe-tipe komponen yang mungkin di dalam suatu kondisi meliputi operator Boolean, sebuah variabel Boolean, sepasang tanda kurung Noolean (yang mengelilingi suatu kondisi gabungan atau sederhana), sebuah operator relasional atau sebuah persamaan aritmatika.
Bila suatu kondisi tidak benar, maka paling tidak satu komponen dari kondisi itu salah.  Dengan demikian, tipe kesalahan pada suatu kondisi meliputi berikut ini :
·           Kesalahan operator Boolean (adanya operator Boolean yang salah / hilang / ekstra)
·           Kesalahan variabel Boolean
·           Kesalahan tanda kurung Boolean
·           Kesalahan operator relasional
·           Kesalahan  persamaan aritmatika
Metode pengujian kondisi berfokus pada pengujian masing-masing kondisi di dalam program.  Strategi pengujian kondisi biasanya memiliki dua keuntungan :
13.    Pengukuran kupasan pengujian dari suatu kondisi adalah sederhana
14.    Cakupan pengujian terhadap kondisi di dalam suatu program memberikan pedoman untuk melakukan pengujian tambahan untuk program tersebut.
Tujuan pengujian kondisi adalah mendeteksi tidak hanya kesalahan di dalam kondisi program, tetapi juga kesalahan lain pada program.  Jika pengujian ditentukan untuk program P efektif untuk mendeteksi kesalahan pada kondisi yang ada pada P, maka kemungkinan besar pengujian itu juga efektif untuk mendeteksi kesalahan lain pada P.  sebagai tambahan, jika strategi efektif untuk mendeteksi kesalahan-kesalahan pada suatu kondisi maka kemungkinan besar strategi tersebut juga efektif untuk mendeteksi kesalahan pada suatu program.
Sejumlah strategi pengujian kondisitelah diusulkan.  Pengujian cabang mungkin merupakan strategi pengujian kondisi yang paling sederhana.  Untuksuatu kondisi gabungan C, cabang-cabang tru dan false dari C dan setiap kondisi sederhana pada C perlu dieksekusi paling tidak satu kai.
Pengujian domain membutuhkan tiga atau empat pengujian untuk dilakukan untuksebuah persamaan rasional karena persamaan relasional mengambil bentuk : E1 (Operator relasional) E2 maka diperlikan tiga pengujian untuk membuat nilai E1 lebih tinggi daripada, sama dengan atau kurang dari nilai E2 secara berurutan.  Bila (operator relasional) salah dan E1 dan E2 benar. Maka ketiga pengujian itu menjamin pendeteksian kesalahan operator relasional.  Untuk mendeteksi kesalahan pada E1 dan E2, maka tes yang membuat harga E1 lebih besar atau kurang dari harga E2 harus membuat perbedaan antara dua harga itu menjadi sekecil mungkin.
Untuk persamaan Boolean dengan n variabel, semua 2n pengujian yang mungkin ( n > 0) perlu dilakukan.  Strategi itu dapat mendeteksi operator, variabel dan kesalahan tanda kurung Boolean tetapi hanya praktis jika n kecil.
Pengujian error-sensitive untuk persamaan Boolean dapat juga dilakukan.  Untuk persamaan Boolean tunggal (persamaan Boolean masing-masing variabel Boolean terjadi hanya sekali) dengan n variabel Boolean (n > 0), kita dapat dengan mudah memunculkan serangkaian pengujian dengan kurang dari 2n pengujian sehingga rangkaian pengujian itu menjamin pendeteksian kesalahan operator Boolean bertingkat secara efektif untuk mendeteksi kesalahan-kesalahan yang lain.
Tai dalam pressman (1997;547) mengusulkan strategi pengujian kondisi yang didasarkan atas teknik yang sidah diuraikan.  Disebut pengujian BRO (Branch and Relational Operator), teknik tersebut menjamin pendeteksian kesalahan cabang dan operator relasional dengan kondisi bahwa semua variabel Boolean dan operator relasional pada kondisi itu terjadi hanya sekali dan tidak memiliki variabel umum.
Strategi BRO menggunakan batasan kondisi bagi suatu kondisi C.  batasan kondisi untuk C dengan n kondisi sederhana ditentukan sebagai (D1, D2, …, Dn), dimana Di (0 < i  ≤ n) merupakan simbol yang menentukan batasan pada hasil akhir dari kondisi sederhana ke-i dalam kondisi C.  batasan kondisi D untuk kondisi C dikatakan dipenuhi oleh eksekusi dari C bila selama eksekusi dari C, hasil akhir dari masing-masing kondisi sederhana di dalam C memenuhi batasan yang bersesuaian di dalam D.
Untuk variabel Boolean, B, kita menentukan batasan pada hasil akhir B yang menyatakan bahwa B harus true (t) atau false (f) dengan cara yang sama, untuk suatu persamaan relasional, simbol-simbol >, = dan < digunakan untuk menentukan batasan pada hasil akhir persamaan.               
Sebagai contoh, perhatikan kondisi bentuk C2 : B1 & (E3 = E4), dimana B1 adalah persamaan Boolean dan E3 dan E4 adalah persamaan aritmatika.  Batasan kondisi untuk C2 adalah bentuk (D1, D2), dimana D1 adalah “t” atau “f” dan D2 adalah >, = atau < karena C2 sama seperti C1 kecuali bahwa kondisi sederhana kedua di dalam C2 adalah persamaan relasional, kita dapat membangun himpunan batasan untuk C2 dengan memodifikasi himpunan pembatas [(t, t), (f, t), (t, f)] yang ditentukan untuk C1.  Perhatikan bahwa “t” untuk (E3 = E4) mengimplikasikan “=” dan bahwa “f” untuk (E3 = E4) mengimplikasikan “<” atau “>”.  Dengan menggantikan (t, t) dengan (t, =) dan (f, t) dengan (f, =) dan dengan menggantikan (t, f) dengan (t, <) \< >) dan (t, >) maka hasil himpunan batasan untuk C2 adalah {(t, =), (t, <), (t, >).  Cakupan himpunan batasan tersebut akan menjamin pendeteksian Boolean dan kesalahan-kesalahan operator relasional pada C2.
Sebagai contoh ketiga, perhatikan kondisi bentuk : C3 : (E1 > E2) & (E3 =E4), di mana E1, E2, E3 dan E4 adalah persamaan aritmatika. Pembatas kondisi untuk C3 adalah bentuk (D1, D2), di mana masing-masing dari D1 dan D2 adalah >, = atau <, karena C3 sama seperti C2 kecuali bahwa kondisi sederhana yang pertama pada C3 adalah persamaan relasional, maka kita dapat membangun himpunan batasan untuk C3 dengan memodifikasi himpunan batasan untuk C2 dan akan diperoleh : {(>, =), (=, =), (<, =), (>, >), (>, <)} cakupan dari himpunan batasan tersebut akan menjamin pendeteksian kesalahan operator relasional pada C3.

Pengujian Aliran Data

Metode pengujian aliran data memilih jalur pengujian dari suatu program sesuai dengan lokasi definisi dan menggunakan variabel-variabel pada program.  Sejumlah pengujian aliran data telah dipelajari dan dibandingkan.
Untuk menggambarkan pendekatan pengujian aliran data, diasumsikan bahwa masing-masing statemen pada suatu program diberi nomor statemen yang unik dan setiap fungsi tidak memodifikasi parameter atau variabel globalnya.  Untuk statemen dengan S sebagai nomor statemennya.
DEF(S) = {X | statemen S berisi sebuah definisi dari X}
USE(S) = {X | statemen S berisi suatu penggunaan dari X}
Bila statemen S adalah statemen if atau loop, maka himpunan DEF-nya kosong dan himpunan Use-nya didasarkan pada kondisi statemen S.  Definisi variabel X pada statemen S dinyatakan hidup pada statemen S’ jika ada suatu jalur dari statemen S ke statemen S’ yang tidak berisi definisi yang lain dari X.
Rantai definition-use (atau rantai DU) dari variabel X berbentuk [X, S, S’], di mana S dan S’ adalah nomor statemen, X pada DEF(S) dan USE(S’) dan definisi X pada statemen S hidup pada statemen S’.
Strategi pengujian aliran data sederhana adalah untuk mengharuskan agar setiap rantai DU dicakup paling tidak satu kali.  Strategi ini disebut strategi pengujian DU.  Telah diperlihatkan bahwa pengujian DU tidak menjamin pencakupan semua cabang sebuah program.  Akan tetapi, satu cabang tidak dijamin dicakup oleh pengujian DU hanya pada situai jarang seperti konstruksi if-then-else di mana bagian then tidak memiliki definisi mengenai sembarang variabel dan bagian else tidak ada.  Dalam situasi seperti itu, cabang else dari statemen if tersebut tidak perlu dicakup oleh pengujian DU.
Strategi pengujian aliran data berguna untuk memilih jalur pengujian dari satu program yang berisi statement if dan loop yang tersarang.  
Untuk membuat strategi pengujian DU memilih jalur pengujian dari diagram aliran kontrol, kita perlu tahu definisi dari penggunaan masing-masing kondisi atau blok pada PDL.  Anggap bahwa variabel X didefinisikan pada statemen terakhir dari blok B1, B2, B3, B4 dan B5 dan digunakan dalam statemen pertama dari blok B2, B3, B4, B5 dan B6.  Strategi pengujian DU memerlukan eksekusi jalur terpendek dari masing-masing dari Bi, 0 < i ≤ 5, ke masing-masing dari Bj,                       1 < j ≤ 6.   (Pengujian semacam itu juga mencakup banyak penggunaan variabel X dalam kondisi C1, C2, C3 dan C4).  Meskipun ada 25 rantai DU dari variabel X, kita hanya membutuhkan lima jalur untuk mencakup rantai-rantai DU tersebut. Alasannya adalah diperlukan lima jalur untuk mencakuprantai-rantai DU X dari Bi, 0 < i ≤ 5, ke B6 dan rantai DU yang lain dapat dicakup dengan membuat lima jalut tersebut berisi iterasi dari loop.
Perhatikan bahwa bila kita mengaplikasikan strategi pengujian cabang untuk memilih jalur pengujian dari PDL tersebut di atas, kita tidak memerlukan informasi tambahan. Untuk memilih jalur dari diagram pengujian BRO, kita perlu tahu struktur masing-masing kondisi atau blok (setelah pemilihan suatu jalur dari suatu program, kita harus menentukan apakah jalur tersebut mungkin dikerjakan dengan mudah untuk program itu; misalnya apakah ada paling tidak satu input yang menggunakan jalur tersebut).
Karena statemen pada suatu program berhubungan satu dengan yang lainnya sesuai dengan definisi dan penggunaan variabel, maka pendekatan aliran data efektif untuk perlindungan dan kesalahan.  Tetapi, masalah cakupan pengujian pengukuran dan pemilihan jalur pengujian untuk pengujian aliran data lebih sulit daripada masalah yang berhubungan dengan pengujian kondisi.

Pengujian Loop

Loop adalah batu pertama untuk mayoritas algoritma yang diimplementasikan pada perangkat lunak.  Seringkali sedikit saja perhatian yang kita berikan pada loop, sementara melakukan pengujian perangkat lunak.
Pengujian loop merupakan teknik pengujian white-box yang secara ekslusif berfokus pada validitas konstruksi loop.  Empat kelas loop yang berbeda dapat didefinisikan, yaitu loop sederhana, loop terangkai, loop tersarang dan loop tidak terstruktur terlihat pada gambar 9.

Loop Sederhana
Himpunan pengujian berikut harus diaplikasikan pada loop sederhana, di mana n adalah jumlah maksimum yang diijinkan melewati loop tersebut.
1.        Abaikan keseluruhan loop
2.        Hanya satu yang melewati loop
3.        Dua yang melewati loop
4.        m melewati loop di mana m < n
5.        n-1, n, n+1melewati loop
Loop tersarang
Bila kita ingin memperluas pendekatan pengujian bagi loop sederhana ke loop tersarang.  Jumlah pengujian mungkin akan berkembang secara geometris sesuai tingkatan pertambahan persarangan sehingga sejumlah pengujian menjadi tidak praktis.  Beizer dalam pressman (2002;551) mengusulkan suatu pendekatan yang membantu mengurangi jumlah pengujian :
1.        mulai pada loop yang paling dalam.  Atur semua loop ke nilai minimum.
2.        Lakukan pengujian loop sederhana untuk loop yang paling dalam sementara menjaga loop yang paling luar pada nilai parameter iterasi minimumnya (misalnya, pencacah loop).  Tambahkan pengujian yang lain untuk nilai out-of-range atau nilai yang tidak diperbolehkan
3.        Bekerja menuju ke luar, dengan melakukan pengujian untuk loop selanjutnya, tetapi menjaga semua loop bagian luar yang lain pada nilai minimumnya dan loop tersarang lainnya pada harga “tertentu”.
4.        Lanjutkan sampai semua loop telah bersarang.
Loop Terangkai.
Loop terangkai dapat diuji dengan menggunakan pendekatan yang ditentukan untuk loop sederhana bila masing-masing dari loop itu independen terhadap yang lain.  Tetapi bila dua loop dirangkai dan pencacah loop untuk loop 1 digunakan sebagai harga awal untuk loop 2, kemudian loop tersebut menjadi tidak independen, maka pendekatan yang diaplikasikan ke loop tersarang direkomendasikan.
Loop tidak terstruktur
Kapan saja memungkinkan kelas loop ini harus didesain lagi untuk mencerminkan penggunaan konsepsi pemograman terstruktur.

2.6. PENGUJIAN BLACK-BOX

Pengujian Black-box berfokus pada persyaratan fungsional perangkat lunak.  Dengan demikian, pengujian black-box memungkinkan perekayasa perangkat lunak mendapatkan serangkaian kondisi input yang sepenuhnyamenggunakan semua persyaratan fungsional untuk suatu program.  Pengujian black-box bukan merupakan alternatif dari teknik white-box, tetapi merupakan pendekatan komplementer yang kemungkinan besar mampu mengungkap kelas kesalahan daripada metode white-box.
Pengujian black-box berusaha menemukan kesalahan dalam kategori sebagai berikut :
15.    Fungsi-fungsi yang tidak benar atau hilang
16.    Kesalahan interface
17.    Kesalahan dalam struktur data atau akses database eksternal
18.    Kesalahan kinerja
19.    Inisialisasi dan kesalahan terminasi
Tidak seperti pengujian white-box yang dilakukan pada saat awal proses pengujian, pengujian black-box cenderung diaplikasikan selama tahap akhir pengujian.  Karena pengujian balck-box memperhatikan struktur kontrol maka perhatian berfokus pada domain informasi.  Pengujian didesain untuk menjawab pertanyaan-pertanyaan berikut :
·           Bagaimana validitas fungsional diuji?
·           Kelas input apa yang akan membuat test case menjadi baik?
·           Apakah sistem sangat sensitif terhadap harga input tertentu?
·           Bagaimana batasan dari suatu data diisolasi?
·           Kecepatan data apa dan volume data apa yang dapat ditolerir oleh sistem?
·           Apa pengaruh kombinasi tertentu dari data terhadap operasi sistem
Dengan mengaplikasikan teknik black-box, maka kita menarik serangkaian test case yang memenuhi kriteria berikut :
1.        Test case yang mengurangi dengan harga lebih dari satu, jumlah test case tambahan yang harus didesain untuk mencapai pengujian yang dapat dipertanggung jawabkan
2.        Test case yang memberitahu kita sesuatu mengenai kehadiran atau ketidak hadiran kelas kesalahan dari pada memberitahu kesalahan yang berhubungan hanya dengan pengujian spesifik yang ada.

Metode Pengujian Graph-Based

Langkah pertama pada pengujian black-box (pengujian behaviour atau pengujian partisi) adalah memahami objek yang dimodel di dalam perangkat lunak dan hubungan yang akan menghubungkan objek tersebut.  Setelah itu dilakukan, maka langkah selanjutnya adalah menentukan sederetan pengujian yang membuktikan bahwa “semua objek memiliki hubungan yang diharapkan satu dengan yang lainnya”.  Dengan kata lain, pengujian perangkat lunak dimulai dengan membuat grafik dari objek-objek yang penting dan hubungan objek-objek serta kemudian memikirkan sederatan pengujian yang mencakup grafik tersebut sehingga masing-masing objek dan hubungan digunakan dan kesalahan ditemukan.  Untuk melakukan langkah tersebut, perekayasa perangkat lunak memulainya dengan membuat suatu grafik – sekumpulan simpul yang mempresentasikan objek; link yang mempresentasikan hubungan antar objek; node weight yang menggambarkan properti dari suatu simpul (misalnya, nilai data tertentu atau tingkah laku keadaan dan links weight yang menggambarkan beberapa karakteristik suatu link.
Representasi simbolik dari grafik diperlihatkan pada gambar 10a. simpul-simpul dipresentasikan sebagai lingkaran yang dihubungkan oleh link yang memakai sejumlah bentuk yang berbeda.  Link terarah (direpresentasikan oleh sebuah anak panah) yang menunjukan bahwa hubungan bergerak hanya dalam satu arah.  Link dua arah yang disebut juga link simetris, mengimplikasikan bahwa hubungan tersebut berlaku dalam dua arah.  Link paralel digunakan pada saat sejumlah hubungan yang berbeda dibangun di antara simpul-simpul grafik.
Sebagai contoh sederhana perhatikan bagiandari suatu grafik untuk aplikasi pengolahan kata gambar 10b. di bawah ini :
Gambar 10. (a) Notasi Grafik  (b) Contoh Sederhana

Objek #1 = New file menu select
Objek #2 = document window
Objek #3 = document text
Seperti dilihatkan pada gambar, pemilihan menu New File menghasilkan Document Window.  Node weight dari Document Window memberikan daftar atribut window tersebut yang akan diharapkanpada saat window dimunculkan.  Link weight menunjukkan bahwa window harus dimunculkan dalam kurang dari 1,0 detik.  Link tak terarah membangun hubungan simetris di antara New File Select Menu dan Text Document dan link paralel menunjukkan hubungan antara Document Window dan Document Text.
Kenyataannya grafik yang jauh lebih lebih detail harus dimunculkan sebagai pendahuluan ke desain test case.  Perekayasa perangkat lunak kemudian melakukan test case dengan melewatkan grafik tersebut dan mencakup masing-masing dari hubungan yang diperlihatkan. Test case itu didesain untuk menemukan kesalahan pada berbegai hubungan.
Beizer dalam pressman (2002; 554) menggambarkan sejumlah metode pengujian behavioral yang dapat menggunakan grafik :
1.        Pemodelan Aliran Transaksi
Simpul-simpul mempresentasikan langkah-langkah pada beberapa transaksi (misalnya, langkah yang diperlukan untuk membuat reservasi pesawat dengan menggunakan layanan on-line) dan link mempresentasikan hubungan logis di antara langkah-langkah (misalnya, flight.information.input diikuti oleh validation/availibility-processing).  Diagram aliran data dapat digunakan untk membantu menciptakan grafik tipe ini.
2.        Pemodelan Keadaan Terbatas
Simpul-simpul mempresentasikan keadaan perangkat lunak yang dapat diamati oleh pemakai yang berbeda (misalnya, masing-masing “layar” muncul sebagai sebuah juru tulis entri order yang mengambil urutan telepon) dan link mempresentasikan transisi yang terjadi untuk bergerak dari satu keadaan ke keadaan lainnya (misalnya, order-information diperiksa selama inventory-availibility-look-up diikuti dengan customer-billing-information-input).  Diagram transisi keadaan dapat digunakan untuk membantu membuat grapik tipe ini.
3.        Pemodelan Aliran Data
Simpul-simpul merupakan objek data, sementara link adalah transformasi yang terjadi untuk menerjemahkan satu objek data ke objek data yang lain.  Contoh, simpul FICA.tax.withheld (FTW) dihitung dari Gross.Wages (GW) dengan menggunakan hubungan FTW = 0,062 X GW.
4.        Pemodelan Timing
Simpul-simpul mempresentasikan objek program dan link adalah hubungan sekuensial antara objek-objek tersebut.  Link weight digunakan untuk menentukan waktu eksekusi yang dibutuhkan pada saat program mengeksekusi.
Pengujian graph-base dimulai dengan definisi semua simpul dan node weight, objek dan atribut diidentifikasi.  Model data dapat digunakan sebagai titik awal, tetapi penting untuk dicatat bahwa banyak simpul dapat merupakan objek program (tidak secara eksplisit dipresentasikandalam model data).  Untuk memberikan indikasi dari titik mulai dan berhenti untuk grafik tersebut berguna sekali bila simpul masuk dan keluarnya ditentukan.
Sekali simpul diidentifikasi maka link dan link weight harus dibangun.  Secara umum, link harus diberi nama, meskipun link yang mempresentasikan aliran kontrol di antara objek program tidak perlu diberi nama.
Dalam banyak kasus, model grafik dapat memiliki loop (yaitu, jalur melalui grafik, satu simpul atau lebih ditemui lebih dari satu kali).  Pengujian loop juga dapat diaplikasikan pada tingkat tingkah laku (black-box).  Grafik tersebut akan membantu mengidentifikasi loop-loop yang memerlukan pengujian tersebut.
Masing-masing hubungan dipelajari secara terpisah sehingga test case dapat dilakukan.  Transitivitas hubungan sekuensial dipelajari untuk menentukan bagaimana pengaruh hubungan tersebut menyebar pada objek yang ditentukan pada suatu grafik.  Transitivitas dapat digambarkan dengan memperhatikan tiga objek X, Y dan Z.  perhatikan hubungan berikut ini :
X diperlukan untuk menghitung Y
Y diperlukan untuk menghitung Z
Sehingga dibangun hubungan transitif antara X dan Z :
X diperlukan untuk menghitung Z
Berdasarkan hubungan transitif ini, pengujian untuk menemukan kesalahan dalam perhitungan Z harus mempertimbangkan berbagai harga untuk X maupun Y.
Simetri hubungan (link grafik) juga merupakan panduan penting ke desain test case.  Bila suatu link benar-benar dua arah (simetris), maka penting untuk menguji fitur tersebut.  Fitur UNDO pada berbagai aplikasi personal komputer mengimplementasikan simetri yang terbatas, yaitu bahwa UNDO mengijinkan suatu aksi dihapuskan setelah aksi itu diselesaikan.  Hal itu harus diuji secara mendalam dan semua perkecualian (yakni tempat UNDO tidak dapat digunakan) harus dicatat. Akhirnya, setiap simpul pada grafik harus memiliki hubungan yang mengarahkepada dirinya sendiri; pada dasarnya adalah loop “no action” atau “action null”.  Hubungan refleksif itu juga harus diuji.
Pada saat desain test case dimulai, maka sasaran pertamanya adalah mencapai cakupan simpul (node coverage). Ini berarti bahwa pengujian harus didesain untuk memperlihatkan bahwa tidak ada simpul yang dengan sembrono diabaikan dan bahwa node weight (atribut objek) adalah benar.
Selanjutnya, menekankan cakupan link. Masing-masing hubungan diuji berdasarkan propertinya.  Misalnya, hubungan simetri diuji untuk memperlihatkan bahwa pada pada dasarnya hubungan itu memiliki dua arah.  Hubungan transitif diuji untuk memperlihatkan bahwa ada transitivitas.  Hubungan refleksif diuji untuk memastikan bahwa loop null ada.  Bula link weight telah ditentukan, pengujian dilakukan untuk menunjukkan bahwa weight itu valid.  Akhirnya, pengujian loop dipanggil.

Partisi Ekivalensi

Partisi ekivalensi adalah metode pengujian black-box yang membagi domain input dari suatu program ke dalam kelas data, test case dapat dilakukan.  Test case yang ideal mengungkap kelas kesalahan (misalnya, pemrosesan yang tidak benar terhadap semua data karakter) yang akan memerlukan banyak kasus untuk dieksekusi sebelum kesalahan umum diamati.  Partisi ekivalensi berusaha menentukan sebuah test case yang mengungkap kelas-kelas kesalahan sehingga mengurangi jumlah total test case yang harus dikembangkan.
Desain test case untuk partisi ekivalensi didasarkan pada evaluasi terhadap kelas ekivalensi untuk suatu kondisi input.  Dengan menggunakan konsep yang telah dijelaskan pada bagian sebelumnya, bila serangkaian objek dapat di-link oleh hubungan yang simetris, transitif dan refleksif, maka ada kelas ekivalensi.  Kelas ekivalensi mempresentasikan serangkaian keadaan valid atau invalid untuk kondisi input.  Secara khusus, suatu kondisi input dapat berupa harga numeris, suatu rentang harga atau serangkaian harga terkait atau sebuah kondisi Boolean.  Kelas ekivalensi dapat ditentukan sesuai pedoman berikut ini :
1.        Bila kondisi input menentukan suatu range, maka satu kelas ekivalensi valid dan dua yang invalid ditentukan
2.        Bila suatu kondisi input membutuhkan suatu harga khusus, maka satu kelas ekivalensi valid dan dua yang invalid ditentukan
3.        Bila suatu kondisi menentukan anggota suatu himpunan, maka satu kelas ekivalensi valid atau dua yang invalid ditentukan
4.        Bila suatu kondisi input adalah Boolean, maka satu kelas valid dan satu yang invalid ditentukan.
Sebagai contoh, perhatikan data yang dijaga sebagai bagian dari suatu aplikasi perbankan otomatis.  Pemakai dapat “menghubungi” bank tersebut dengan menggunakan komputer personalnya, sebuah password enam digit dan diikuti dengan serangkaian perintah kata kunci yang memicu berbagai fungsi perbankan.  Perangkat lunak yang dipasok untuk aplikasi perbankan menerima data dalam bentuk :
Kode area
Kosong atau tiga nomor digit
Prefik
Tiga nomor digittidak mulai dengan 1 atau 0
Sufik
Empat nomor digit
Password
Enam nilai alphanumerik digit
perintah
“cek”, “deposit”, “bayar pajak” dan sebagainya

Kondisi input yang sesuai dengan masing-masing elemen data untuk aplikasi perbankan dapat ditentukan sebagai :
Kode area
:
Kondisi input, Boolean – kode area mungkin atau mungkin tidak ada kondisi
Input, range – nilai yang ditentukan antara 200 dan 999, dengan pengecualian khuhus
Prefik
:
Kondisi input, range – harga yang ditetapkan > 200 dengan tanpa digit 0
Sufik
:
Kondisi input, harga – panjang empat digit
Password
:
Kondisi input, Boolean – password dapat ada atau tidak ada
Kondisi input, harga – antrian enam karakter
perintah
:
Kondisi input, himpunan – berisi perintah yang sudah ditulis di atas

Dengan mengaplikasikan pedoman untuk derivasi kelas ekivalensi, test case untuk masing-masing item data domain input dapat dikembangkan dan dieksekusi.  Test case dipilih sehingga jumlah atribut yang terbesar dari suatu kelas ekivalensi digunakan saat itu juga.

Analisis Nilai Batas

Karena alasan yang tidak sangat tidak jelas, jumlah kesalahan yang lebih besarcenderung terjadi pada batas domain imput daripada di “pusat”.  Karena itulah analisis nilai batas / boundary value analysis (BVA) telah  dikembangkan sebagai teknik pengujian.  Analisis nilai batas memunculkan pemilihan test case yang menggunakan nilai batas.
Analisis nilai batas adalah teknik desain proses yang melengkapi partisi ekivalensi.  Daripada memilih sembarang elemen kelas ekivalensi, BVA lebih mengarah kepada pemilihan test case pada “edge” dari kelas.  Daripada hanya berfokus pada kondisi input, BVA melakukan test case dari domain output.
Dalam banyak hal, pedoman untuk BVA sama dengan yang diberikan untuk partisi ekivalensi adalah :
1.        Nila suatu kondisi input mengkhususkan suatu range dibatasi oleh nilai a dan b, maka test case harus didesain dengan nilai a dan b, persis di atas dan di bawah a dan b, secara bersesuaian
2.        Bila suatu kondisi input mengkhususkan sejumlah nilai, maka test case harus dikembangkan dengan menggunakan jumlah minimum dan maksimum.  Nilai tepat di atas dan di bawah minimum dan maksimum juga diuji
3.        Pedoman 1 dan 2 diaplikasikan ke kondisi output.  Contohnya, dianggap bahwa suhu vs. tabel tekanan diperlukan sebagai output dari program analisis rekayasa. Test case harus didesain untuk menciptakan laporan output yang menghasilkan jumlah minimum (dan maksimum) entri tabel yang diijinkan
4.        Bila struktur data program telah memesan batasan (misalnya, suatu array memiliki suatu batas yang ditentukan dari 100 entri), pastikan untuk mendesain test case yang menggunakan struktur data pada batasannya.
Sebagian besar perekayasa perangkat lunak secara intuitif melakukan BVA sampai beberapa tingkatan.  Dengan mengaplikasikan pedoman tersebut, pengujian batasan akan lebih lengkap sehingga kemungkinan untuk berhasil mendeteksi kesalahan menjadi lebih besar.

Pengujian Perbandingan

 Adanya banyak situasi (seperti avionik pesawat terbang, kontrol sumber tenaga nuklir), reliabilitas perangkat lunaknya sangat kritis.  Dalam aplikasi semacam itu, perangkat lunak dan perangkat keras redundan sering digunakan untuk meminimalkan kemungkinan kesalahan.  Pada saat perangkat lunak redundan dikembangkan, tim rekayasa perangkat lunak yang terpisah mengembangkan versi-versi independen dari suatu aplikasi dengan menggunakan spesifikasi yang sama. Dalam situasis semacam itu, setiap versi dapat diuji dengan data uji yang sama untuk memastikan bahwa semua versi memberikan output yang identik.  Kemudian semua versi dieksekusi secara paralel dengan perbandingan real time hasil untuk memastikan konsistensi.
Dengan pelajaran mengenai sistem redundan, para peneliti (misalnya, mengusulkan agar versi perangkat lunak independen dikembangkan bagi aplikasi kritis, bahkan bila hanya sebuah versi tunggal saja yang akan digunakan pada sistem berbasis komputer yang disampaikan.  Versi independen membentuk basis teknik pengujian balck-box yang disebut pengujian perbandingan atau pengujian back-to-back.
Bila implementasi bertingkat dari spesifikasi yang sama telah dihasilkan, maka test case yang didesain dengan menggunakan teknik black-box yang lain (misalnya partisi ekivalensi) diberikan sebagai input untuk masing-masing versi perangkat lunak tersebut.  Bila output dari masing-masing versi sama, maka diasumsikan bahwa implementasinya benar.  Bila outputnya berbeda, maka masing-masing dari aplikasi itu diperiksa untuk menentukan cacat pada suatu versi atau perbedaan itu dapat lebih jelas.  Pada sebagian besar kasus, perbandingan output dapat dilakukan dengan suatu piranti yang diotomatisasi.
Pengujian perbandingan tidaklah mudah.  Bila spesifikasi dari semua fungsi telah dikembangkan mengandung kesalahan, maka semua versi kemungkinan besar merefleksikan kesalahan.  Lagi pula, jika masing-masing versi independen identik tetapi tidak benar, maka pengujian kondisi akan gagal mendeteksi kesalahan.

2.7. PENGUJIAN UNTUK APLIKASI DAN LINGKUNGAN KHUSUS

Pada saat perangkat lunak komputer menjadi semakin kompleks, maka kebutuhan akan pendekatan pengujian yang khusus juga semakin berkembang.  Metode pengujian black-box dan white-box dapat diaplikasikan pada semua lingkungan, arsitektur dan aplikasi, tetapi kadang-kadang dalam pengujian diperlukan pedoman dan pendekatan yang unik.  Pedoman pengujian bagi lingkungan, arsitektur dan aplikasi khusus yang umumnya diketahui oleh para perekayasa perangkat lunak.

Pengujian GUI

Graphical User Interfaces (GUIs) menyajikan tantangan yang menarik bagi para perekayasa.  Karena komponen reusable berfungsi sebagai bagian dari lingkungan pengembangan GUI, pembuatan interface pemakai telah menjadi hemat waktu dan lebih teliti.  Pada saat yang sama, kompleksitas GUI telah berkembang, menimbulkan kesulitan yang lebih besar di dalam desain dan eksekusi test case.
Karena GUI modern memiliki bentuk dan cita rasa yang sama, maka dapat dilakukan sederetan pengujian standar.  Pertanyaan berikut dapat berfungsi sebagai panduan untuk serangkaian pengujian generik untuk GUI adalah :
Untuk Windows :
·           Apakah window akan membuka secara tepat berdasarkan tipe yang sesuai atau perintah berbasis menu?
·           Dapatkah window di-resize, digerakkan atau digulung?
·           Apakah semua isi data yang diisikan pada window dapat dituju dengan tepat dengan sebuah mause, function keys, anak panah penunjuk dan keyboard?
·           Apakah window dengan cepat muncul kembali bila dia ditindih dan kemudian dipanggil lahi?
·           Apakah semua fungsi yang berhubungan dengan window dapat diperoleh bila diperlukan?
·           Apakah semua fungsi yang berhubungan dengan window operasional?
·           Apakah semua menu pull-down, toolbar, scrollbar, kotak dialog, tombol, ikon dan control yang lain dapat diperoleh dan dengan tepat ditampilkan untuk window tersebut?
·           Pada saat window bertingkat ditampilkan, apakah nama window tersebut direpresentasikan secara tepat?
·           Apakah window yang aktif disorot secara tepat?
·           Bila multitasking digunakan, apakah semua window diperbaharui pada waktu yang sesuai?
·           Apakah pemilihan mouse bertingkat atau tidak benar di dalam window menyebabkan efek samping yang tidak diharapkan?
·           Apakah audio prompt dan atau color prompt ada di dalam window atau sebagai konsekuensi dari operasi window disajikan menurut spesifikasi?
·           Apakah window akan menutup secara tepat?
Untuk menu pull-down dan operasi mouse :
·           Apakah menu bar yang sesuai ditampilkan di dalam konteks yang sesuai?
·           Apakah menu bar aplikasi menampilkan fitur-fitur yang terkait dengan sistem (misalnya tampilan jam)?
·           Apakah operasi menu pull-down bekerja secara tepat?
·           Apakah menu breakway, pallete dan toolbar bekerja secara tepat?
·           Pakah semua fungsi menu dan subfungsi pull-down didaftar secara tepat?
·           Apakah semua fungsi menu dapat dituju secara tepat oleh mouse?
·           Apakah typeface, ukuran dan format teks benar?
·           Memungkinkah memanggil masing-masing fungsi menu dengan menggunakan perintah berbasis teks alternatif?
·           Apakah fungsi menu disorot (atau dibuat kelabu) berdasarkan konteks operasi yang sedang berlangsung di dalam suatu window?
·           Apakah semua menu function bekerja seperti diiklankan?
·           Apakah nama-nama menu function bersifat self-explanatory?
·           Apakah help dapat diperoleh untuk masing-masing item menu, apakah dia sensitif terhadap konteks?
·           Apakah operasi mouse dikenali dengan baik pada seluruh konteks interaktif?
·           Bila klik ganda diperlukan, apakah operasi dikenali di dalam konteks?
·           Jika mouse mempunyai tombol ganda, apakah tombol itu dikenali sesuai konteks?
·           Apakah kursor, indikator pemrosesan (misalnya, sebuah jam atau hour glass), dan pointer secara tepat berubah pada saat operasi yang berbeda dipanggil?
Entri data :
·           Apakah entri data alphanumerik dipantulkan dan diinput ke sistem?
·           Apakah mode grafik dari entri data (seperti slidebar) bekerja dengan baik?
·           Apakah data invalid dikenali dengan baik?
·           Apakah pesan input data sangat pintar?
Sebagai tambahan untuk pedoman tersebut, grafik pemodelan keadaan yang terbatas dapat digunakan untuk melakukan sederetan pengujian yang menekankan objek program dan data spesifik yang relevan dengan GUI.
Karena sejumlah besar permutasi yang bersesuaian dengan operasi GUI, maka pengujian harus didekati dengan menggunakan piranti otomatis.  Sudah ada banyak piranti pengujian GUI yang muncul di pasar selama beberapa tahun terakhir.

Pengujian Arsitektur Client / Server

Arsitektur client/server (C/S) (misalnya, menghadirkan tantangan yang berarti bagi para penguji perangkat lunak.  Sifat terdistribusi dari lingkungan C/S, masalah kinerja yang berhubungan dengan pemrosesan transaksi, kehadiran potensial dari sejumlah platform perangkat keras yang berbeda, kompleksitas komunikasi jaringan, kebutuhan akan layanan client multiple dari suatu database terpusat (atau dalam beberapa kasus, terdistribusi) dan persyaratan koordinasi yang dibebankan pada server, semua secara bersama-sama membuat pengujian terhadap arsitektur C/S dan perangkat lunak yang ada didalamnya menjadi jauh lebih sulit daripada pengujian aplikasi yang berdiri sendiri.  Kenyataannya, studi industri yang terakhir menunjukkan pertambahan berarti di dalam waktu pengujian dan biaya ketika lingkungan C/S dikembangkan.

Pengujian Dokumentasi dan Fasilitas Help

Istilah “pengujian perangkat lunak” memunculkan citra terhadap sejumlah besar test case yang disiapkan untuk menggunakan program komputer dan data yang dimanipulasi oleh program.  Dengan melihat kembali definisi perangkat lunak, penting dicatat bahwa pengujian harus berkembang ke elemen ketiga dari konfigurasi perangkat lunak – dokumentasi.
Kesalahan dalam dokumentasi dapat menghancurkan penerimaan program seperti halnya kesalahan pada data atau kode sumber.  Tidak ada yang lebih membuat frustasi dibandingkan mengikuti tuntutan pemakai secara tepat dan mendapatkan hasil atau tingkah laku yang tidak sesuai dengan yang diprediksi oleh dokumen.  Karena itulah pengujian dokumentasi harus menjadi suatu bagian yang berarti dari setiap rencana pengujian perangkat lunak.
Pengujian dokumentasi dapat didekati dalam dua fase adalah :
20.    Kajian teknis formal, yang menguji kejelasan editorial dokumen
21.    Live test, menggunakan dokumentasi dalam kaitannya dengan penggunaan program aktual
Mengejutkan bahwa live test untuk dokumentasi dapat didekati dengan menggunakan teknik yang analog dengan berbagai metode pengujian black-box.  Pengujian graph-based dapat digunakan untuk menggambarkan penggunaan program tersebut.  Partisi ekivalensi dan analisis nilai batas dapat digunakan untuk menentukan berbagai kelas input dan interaksi yang sesuai.  Kegunaan program kemudian ditelusuri pada seluruh dokumen :
·           Apakah dokumen tersebut secara akurat menggambarkan bagaimana menyelesaikan masing-masing metode penggunaan?
·           Apakah deskripsi dari masing-masing urutan interaksi akurat?
·           Apakah contoh-contoh akurat?
·           Apakah terminologi, gambaran menu dan respon sistem konsisten dengan program aktual?
·           Apakah relatif mudah untuk menempatkan panduan di dalam dokumentasi?
·           Dapatkah trouble shooting dilakukan dengan mudah dengan dokumentasi?
·           Apakah tabel dolumen dari isi dan indeks akurat dan lengkap?
·           Apakah desain dolumen (layout, typeface, indentasi, grafik) kondusif untuk pemahaman dan asimilasi cepat terhadap informasi?
·           Apakah semua pesan kesalahan ditampilkan bagi pemakai dan digambarkan secara lebih detail di dalam dokumen?
·           Bila link hiperteks digunakan, apakah mereka akurat dan lengkap?
Satu-satunya cara yang dapat berjalan untuk menjawab pertanyaan-pertanyaan tersebut adalah dengan menggunakan bagian ketika yang independen (misalnya, pemakai yang diseleksi) yang menguji dokumentasi di dalam konteks kegunaan program.  Semua diskrepansi dicatat dan area ambiguitas atau kelemahan dokumen ditentukan untuk penulisan ulang yang potensial.

Pengujian Sistem Real-Time

Sifat asinkron dan tergantung waktu yang ada pada banyak aplikasi real-time.  Menambahkan elemen baru yang sulit dan potensial untuk bauran pengujian – waktu. Tidak hanya desainer test case yang harus mempertimbangkan test case black-box dan white-box, tetapi juga penanganan kejadian (yakni pemrosesan interupsi), timing data dan paralelisme tugas-tugas (proses) yang menangani data.  Pada banyak situasi, data pengujian yang diberikan pada saat sebuah sistem real-time ada dalam suatu keadaan akan menghasilkan pemrosesan yang baik, sementara data yang sama yang diberikan pada saat sistem berada dalam keadaan yang berbeda dapat menyebabkan kesalahan.
Contohnya, perangkat lunak real-time yang mengontrol alat foto-kopi yang baru menerima interupsi operator (yakni operator mesin menekan kunci kontrol seperti “reset” atau “darken”) dengan tanpa kesalahan pada saat mesin sedang membuat kopian ( di dalam keadaan “copying”).  Interupsi operator yang sama ini, bila diinputkan pada saat mesin ada dalam keadaan “jammed” akan menyebabkan sebuah kode diagnostik yang menunjukkan lokasi jam yang akan hilang (sebuah kesalahan).
Sebagai tambahan, hubungan erat yang ada di antara perangkat lunak real-time dan lingkungan perangkat kerasnya dapat juga menyebabkan masalah pengujian. Pengujian perangkat lunak harus mempertimbangkan pengaruh kegagalan perangkat keras pada pemrosesan perangkat lunak.  Kesalahan semacam itu dapat sangat sulit untuk bersimulasi secara realistis.
Metode desain test case yang komprehensif untuk sistem real-time harus berkembang.  Tetapi strategi empat langkah berikut ini dapat diusulkan :
1.        Pengujian Tugas
Langkah pertama dalam pengujian perangkat lunak real-time adalah mengujimasing-masing tugas secara independen yaitu pengujian white-box dan black-box yang didesain dan dieksekusi bagi masing-masing tugas. Masing-masing tugas dieksekusi secara independen selama pengujian ini.  Pengujian tugas mengungkap kesalahan di dalam logika dan fungsi, tetapi tidak akan mengungkap timing atau kesalahan tingkah laku.

2.        Pengujian Tingkah Laku
Dengan menggunakan model yang diciptakan dengan piranti CASE dimungkinkan untuk mensimulasi tingkah laku sistem real-time dan menguji tingkah lakunya sebagai konsekuensi dari event eksternal. Aktivitas analisis ini dapat berfungsi sebagai dasar bagi desain test case yang dilakukan pada saat perangkat lunak real-time dibangun.  Dengan menggunakan teknik yang sama dengan partisi ekivalensi event-event (misalnya, interupsi, signal kontrol, data) dikategorikan untuk pengujian.  Sebagai contoh, event untuk mesin fotokopi dapat merupakan interupsi pemakai (misalnya pencacah reset), interupsi mekanis (misalnya, paper jammed), interupsi sistem (misalnya, tone rendah) dan mode kegagalan (misalnya, roller yang terlalu panas).  Masing-masing event tersebut diuji secara individual dan tingkah laku sistem yang dapat dieksekusi diperiksa untuk mendeteksi kesalahan yang terjadi sebagai akibat pemrosesan yang terkait untuk event tersebut.  Perilaku model sistem (dikembangkan selama aktivitas analisis) dan perangkat lunak yang dapat dieksekusi dapat dibandingkan untuk penyesuaian.   Sekali masing-masing kelas event telah diuji, maka vent-event disajikan pada sistem dalam urutan acak dan dengan frekuensi acak.  Perilaku sistem diuji untuk mendeteksi kesalahan perilaku.

3.        Pengujian Antar Tugas
Setelah kesalahan-kesalahan pada tugas-tugas individual dan pada perilaku sistem diisolasi, maka pengujian beralih kepada kesalahan yang berkaitan dengan waktu.  Tugas-tugas asinkron yang dikenali untuk saling berkomunikasi diuji dengan tingkat data yang berbeda dan pemrosesan dipanggil untuk menentukan apakah kesalahan sinkronisasi antar tugas akan terjadi.  Sebagai tambahan, tugas-tugas yang berkomunikasi melalui antrian pesan atau penyimpanan data diuji untuk menemukan kesalahan dalam ukuran area penyimpanan data tersebut.
4.        Pengujian Sistem
Perangkat lunak dan perangkat keras diintegrasi dan suatu rentang penuh dari pengujian sistem dilakukan di dalam usaha mengungkap kesalahan pada interface perangkat lunak / perangkat keras.
Sebagian besar sistem real-time memproses interupsi, karena itu pengujian penanganan terhadap kejadian-kejadian Boolean ini merupakan hal yang penting, dengan menggunakan diagram keadaan-transisi dan spesifikasi kontrol.  Pengujian mengembangkan daftar semua interupsi yang mungkin dan pemrosesan yang terjadi sebagai konsekuensi dari interupsi.  Kemudian pengujian didesain untuk menilai karakteristik sistem berikut ini :
·           Apakah prioritas interupsi ditetapkan dan ditangani secara tepat?
·           Apakah pemrosesan untuk masing-masing interupsi ditangani dengan tepat?
·           Apakah kinerja (misalnya, waktu pemrosesan) dari masing-masing prosedur penanganan interupsi sesuai dengan persyaratan?
·           Apakah volume interupsi yang tinggi yang terjadi pada waktu kritis menimbulkan masalah di dalam fungsi atau kinerja?
Sebagai tambahan, area data global juga digunakan untuk mentransfer informasi sebagai bagian dari pemrosesan interupsi yang harus diuji untuk menilai potensi munculnya efek samping.

2.8. RANGKUMAN

Sasaran utama desain test case adalah untuk mendapatkan serangkaian pengujian yang memiliki kemungkinan tertinggi di dalam pengungkapan kesalahan pada perangkat lunak.  Untuk mencapai sasaran tersebut, digunakan dua kategori yang berbeda dari teknik desain test case yaitu pengujian white-box dan pengujian blackbox.
Pengujian white-box berfokus pada struktur kontrol program.  Test case dilakukan untuk memastikan bahwa semua statemen pada program telah dieksekusi paling tidak satu kali selama pengujian dan bahwa semua kondisi logis telah diuji.  Pengujian basis path, teknik pengujian white-box, menggunakan grafik program (atau matriks grafik) untuk melakukan serangkaian pengujian yang independen secara linear yang akan memastikan cakupan.  Pengujian aliran data dan kondisi lebih lanjut menggunakan logika program dan pengujian loop menyempurnakan teknik white-box yang lain dengan memberikan sebuah prosedur untuk menguji loop dari tingkat kompleksitas yang bervariasi.
Hetzel dalam pressman (2002;565) menggambarkan pengujian white-box sebagai “pengujian kecil”.  Implikasinya, pengujian white-box secara khusus diaplikasikan ke dalam komponen program yang terkecil (misalnya,modul atau kelompok kecil dari modul),  tetapi pengujian white-box memperluas fokus kita dan akan disebut :pengujian luas”
Pengujian black-box didesain untuk mengungkap kesalahan pada persyaratan fungsional tanpa mengabaikan kerja internal dari suatu program.  Teknik pengujian black-box berfokus pada domain informasi dari perangkat lunak dengan melakukan test case dengan mempartisi domain input dan output dari suatu program dengan cara yang memberikan cakupan pengujian yang mendalam.  Metode pengujian graph-based mengeksplorasi hubungan antara dan tingkah laku objek-objek program.  Partisi ekivalensi membagi domain input ke dalam kelas data yang mungkin untuk melakukan fungsi perangkat lunak tertentu.  Analisis nilai batas memeriksa kemampuan program untuk menangani data pada batas yang dapat diterima.
Metode pengujian yang terspesialisasi meliputi sejumlah luas kemampuan perangkat lunak dan area aplikasi.  Graphical User Interfaces, Arsitektur C/S, dokumentasi dan fasilitas help dan sistem real-time, masing-masing membutuhkan pedoman dan teknik khusus untuk pengujian perangkat lunak.
Pengembangan perangkat lunak yang berpengalaman sering mengatakan, “pengujian tidak akan pernah berakhir.  Pengujian hanya berpindah dari Anda (perekayasa perangkat lunak) ke pelanggan Anda.  Setiap kali pelanggan Anda menggunakan program tersebut, berarti suatu pengujian sedang dilakukan”.  Dengan mengaplikasikan desain test case, perekayasa perangkat lunak dapat mencapai pengujian yang lebih lengkap sehingga dapat mengungkap dan melakukan koreksi sebelum “pengujian pelanggan” dimulai.

Tidak ada komentar:

Posting Komentar