Rabu, 14 Juli 2010

Tugas 7 (Pengujian Perangkat Lunak)

PENGUJIAN PERANGKAT LUNAK

Pengujian perangkat lunak (Software Testing) adalah elemen kritis dari jaminan kualitas perangkat lunak dan merepresentasikan kajian pokok dari spesifikasi, desain, dan pengkodean.

Pentingnya pengujian perangkat lunak dan implikasinya yang mengacu pada kualitas perangkat lunak tidak dapat terlalu ditekan karena melibatkan sederetan aktivitas produksi di mana peluang terjadinya kesalahan manusia sangat besar dan arena ketidakmampuan manusia untuk melakukan dan berkomunikasi dengan sempurna maka pengembangan perangkat lunak diiringi dengan aktivitas jaminan kualitas.

Meningkatnya visibilitas (kemampuan) perangkat lunak sebagai suatu elemen sistem dan “biaya” yang muncul akibat kegagalan perangkat lunak, memotivasi dilakukannya perencanaan yang baik melalui pengujian yang teliti. Pada dasarnya, pengujian merupakan satu langkah dalam proses rekayasa perangkat lunak yang dapat dianggap sebagai hal yang merusak daripada membangun.

Sejumlah aturan yang berfungsi sebagai sasaran pengujian pada perangkat lunak adalah:
- Pengujian adalah proses eksekusi suatu program dengan maksud menemukan kesalahan.
- Test case yang baik adalah test case yang memiliki probabilitas tinggi untuk menemukan kesalahan yang belum pernah ditemukan sebelumnya.
- Pengujian yang sukses adalah pengujian yang mengungkap semua kesalahan yang belum pernah ditemukan sebelumnya.

Sasaran itu berlawanan dengan pandangan yang biasanya dipegang yang menyatakan bahwa pengujian yang berhasil adalah pengujian yang tidak ada kesalahan yang ditemukan. 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, yaitu pengujian tidak dapat memperlihatkan tidak adanya cacat, pengujian hanya dapat memperlihatkan bahwa ada kesalahan perangkat lunak.

Sebelum mengaplikasikan metode untuk mendesain test case yang efektif, perekayasa perangkat lunak harus memahami prinsip dasar yang menuntun pengujian perangkat lunak, yaitu:
Ø semua pengujian harus dapat ditelusuri sampai ke persyaratan pelanggan, maksudnya mengungkap kesalahan dari cacat yang menyebabkan program gagal.
Ø Pengujian harus direncanakan lama sebelum pengujian itu mulai, maksudnya semua pengujian dapat direncanakan dan dirancang sebelum semua kode dijalankan.
Ø Prinsip Pareto berlaku untuk pengujian perangkat lunak, maksudnya dari 80% kesalahan yang ditemukan selama pengujian dapat ditelusuri sampai 20% dari semua modul program.
Ø Pengujian harus mulai “dari yang kecil” dan berkembang ke pengujian “yang besar”, Selagi pengujian berlangsung maju, pengujian mengubah focus dalam usaha menemukan kesalahan pada cluster modul yang terintegrasi dan akhirnya pada sistem.
Ø Pengujian yang mendalam tidak mungkin karena tidak mungkin mengeksekusi setiap kombinasi jalur skema pengujian dikarenakan jumlah jalur permutasi untuk program menengah pun sangat besar.
Ø Untuk menjadi paling efektif, pengujian harus dilakukan oleh pihak ketiga yang independent.

Dalam lingkungan yang ideal, perekayasa perangkat lunak mendesain suatu program computer, sebuah sistem atau produk dengan testabilitas dalam pikirannya. Hal ini memungkinkan individu yang berurusan dengan pengujian mendesain test case yang efektif secara lebih mudah. Testabilitas adalah seberapa mudah sebuah program computer dapat diuji. Karena sangat sulit, perlu diketahui apa yang dapat dilakukan untuk membuatnya menjadi lebih mudah. Procedural dan menggunakannya sebagai pedoman untuk menetapkan basis set dari jalur eksekusi.

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 4 kategori yang berbeda dari tehnik desain test case: Pengujian White-Box, Pengujian Black-Box, Integrasi Bottom-Up dan Integrasi Top-Down.

Pengujian White-Box berfokus pada struktur control 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 basic path, tehnik pengujian white-box, menggunakan grafik (matriks grafiks) untuk melakukan serangkaian pengujian yang independent secara linear yang akan memastikan cakupan.

Pengujian aliran data dan kondisi lebih lanjut menggunakan logika program dan pengujian loop menyempurnakan tehnik white-box yang lain dengan memberikan sebuah prosedur untuk menguji loop dari tingkat kompleksitas yang bervariasi. Pengujian black-box didesain untuk mengungkap kesalahan pada persyaratan fungsional tanpa mengabaikan kerja internal dari suatu program.

Pengujian Black-Box berfokus pada domain informasi dari perangkat lunak, dengan melakukan test case dengan menpartisi domain input 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 memeriksaa kemampuan program untuk menangani data pada batas yang dapat diterima.

Metode pengujian yang terspesialisasi meliputi sejumlah luas kemampuan perangkat lunak dan area aplikasi. GUI, arsitektur client/ server, dokumentasi dan fasilitas help dan sistem real time masing-masing membutuhkan pedoman dan tehnik khusus untuk pengujian perangkat lunak.

Integrasi Top-Down adalah pendekatan incremental dengan menggerakkan ke bawah melalui hirarki control, dimulai dengan control utama. Strategi intergrasi top-down memeriksa control mayor atau keputusan pada saat awal di dalam proses pengujian. Pada struktur program yang difaktorkan dengan baik, penarikan keputusan terjadi pada tingkat hirarki yang lebih tinggi sehingga terjadi lebih dulu.

Strategi top-down kelihatannya tidak sangat rumit, tetapi di dalam praktenya banyak menimbulkan masalah logistic. Biasanya masalah ini terjadi jika dibutuhkan pemrosesan di dalam hirarki pada tingkat rendah untuk menguji secara memadai tingkat yang lebih tinggi.

Integrasi Bottom-Up memulai konstruksi dan pengujian dengan modul atomic (modul pada tingkat paling rendah pada struktur program). Karena modul diintegrasikan dari bawah ke atas, maka pemrosesan yang diperlukan untuk modul subordinate ke suatu tuingkat yang diberikan akan selalu tersedia dan kebutuhan akan stub dapat dieliminasi. Strategi integrasi bottom-up dapat diimplementasi dengan langkah-langkah:
- modul tingkat rendah digabung ke dalam cluster (build) yang melakukan subfungsi perangkat lunak spesifik.
- Driver (program control untuk pengujian) ditulis untuk mengkoordinasi input dan output test case
- cluster diuji
driver diganti dan cluster digabungkan dengan menggerakkannya ke atas di dalam struktur program.

Selain 4 kategori pengujian diatas, masih ada jenis pengujian lain yang bisa digunakan, yaitu : Pengujian Graph Metrik, Pengujian Loop, Structural Testing, Path testing, Pengujian Integrasi, Pengujian Interface, Pengujian Validasi dan Pengujian Stress.

Pengujian Graph Metrik merupakan perangkat lunak bantu yang dikembangkan untuk membantu uji coba basis path atau struktur data. Graph metrik adalah matrik empat persegi yang mempunyai ukuran (sejumlah baris dan kolom) yang sama dengan jumlah mode pada flowgraph. Masing-masing baris dan kolom mempunyai hubungan dengan node yang telah ditentukan dan pemasukan data matrik berhubungan dengan hubungan (edge) antar mode.

Pengujian Loop merupakan kendala yang sering timbul untuk menerapkan algoritma dengan cepat. Uji coba loop merupakan tehnik uji coba white box yang fokusnya pada validitas dari loop.

Ada empat kelas dari loop antara lain :

1. Simple Loop, Uji coba dapat dilakukan dengan mudah, dimana n jumlah maksimum yang diperbolehkan untuk dilewati loop. Aturan uji coba sebagai berikut :
 Lewati loop secara keseluruhan.
 Hanya satu yang dapat melalui loop.
 M dapat melalui loop dimana m < n.

2. Nested loop, Pada uji coba nested loop dapat digunakan pendekatan simple loop. Adapun petunjuk uji coba pada nested loop sebagai berikut :
 Mulailah dari loop yang paling dalam, set seluruh loop yang lain dengan nilai yang terkecil.
 Kerjakan dengan prinsip simple loop untuk loop yang paling dalam sementara tahan loop yang diluar pada parameter yang terkecil atau nilai counter yang terkecil.
 Kemudian lanjutkan untuk loop yang diatasnya.
 Teruskan sampai semua loop selesai diujikan.

3. Connected Loop, Pada uji coba connected loop dapat digunakan pendekatan simple loop.

4. Unstructured Loop, Jika memungkinkan untuk loop ini dirancang kembali dengan menggunakan struktur program.

Pengujian Struktural (Structural Testing), merupakan pendekatan terhadap pengujian yang diturunkan dari pengetahuan struktur dan implementasi perangkat lunak. Pendekatan ini kadang-kadang disebut pengujian “Kotak Putih” (“White Box” Testing), Pengujian “Kotak Kaca”, atau “Pengujian Kotak Jernih” untuk membedakannya dari Pengujian Kotak Hitam.

Pengujian struktural biasanya diterapkan untuk unit program yang relatif kecil seperti subroutine atau operasi yang terkait dengan suatu objek. Sebagaimana ditunjukkan oleh namanya, penguji dapat menganalisa kode dan menggunakan pengetahuan mengenai struktur komponen untuk menurunkan data uji. Analisa kode dapat digunakan untuk menemukan berapa kasus uji yang dibutuhkan untuk menjamin bahwa semua statement pada program atau komponen dieksekusi paling tidak satu kali pada proses pengujian.

Pengujian Jalur (Path Testing) adalah strategi pengujian struktural yang bertujuan untuk melatih setiap jalur eksekusi independen melalui komponen atau program. Jika setiap jalur independen dieksekusi, maka semua statement pada komponen harus dieksekusi paling tidak satu kali. Lebih jauh lagi, semua statement kondisional diuji untuk kasus true dan false.

Teknik pengujian jalur dengan demikian paling banyak dipakai pada tahap pengujian unit dan pengujian modul pada proses pengujian jalur tertentu mungkin masih ada bahkan ketika semua statement program dieksekusi paling tidak satu kali.

Titik awal pengujian jalur merupakan grafik alir (flow graph) program, ini merupakan model rangka semua jalur melalui program. Grafik alir terdiri dari node mewakili keputusan dan edge yang menunjukkan aliran kontrol.

Kesulitan utama yang muncul pada Pengujian Integrasi adalah lokalisasi error yang ditemukan pada saat proses tersebut. Terdapat interaksi yang rumit antara komponen sistim dan ketika ditemukan output yang menyimpang, mungkin sulit untuk menemukan sumber error tersebut. Untuk memudahkan lokalisasi error, anda harus selalu menggunakan pendekatan inkremental terhadap integrasi dan pengujian sistim. Pada awalnya, anda harus mengintegrasi konfigurasi sistim minimal dan menguji sistim ini, kemudian menambahkan komponen pada konfigurasi minimal ini serta mengujinya setelah setiap inkremen ditambahkan.

Tujuan Pengujian Interface adalah mendeteksi kesalahan yang telah masuk kedalam sistim yang disebabkan oleh error interface atau asumsi invalid mengenai inteface. Berbagai jenis eror interface yang dapat terjadi diantaranya adalah :
1. Interface Parameter, merupakan interface tempat data atau kadang-kadang referensi fungsi dikirim dari satu komponen ke komponen yang lainnya.
2. Interface Memori Bagi Pakai, merupakan interface dengan satu blok memori dipakai bersama antar subsistim. Dimana data ditempatkan pada memori oleh satu subsistim dan diambil dari memori tersebut oleh subsistim lain.
3. Interface Prosedural, merupakan interface dengan satu subsistim yang mengkapsulasi satu set prosedur yang dapat dipanggil oleh subsistim lain.
4. Interface Message Passing, merupakan interface tempat satu subsistim meminta layanan dari subsistim lainnya dengan mengirimkan message kepadanya. Beberapa bentuk sistim berorientasi objek memiliki bentuk inteface ini sebagaimana sistim client server.

Adapun penggolongan error-error interface ini digolongkan kedalam tiga kategori antara lain :
1. Penyalahgunaan Interface, jenis error ini terutama umum dengan interface parameter dengan parameter yang mungkin berjenis salah, mungkin diberikan dengan urutan yang salah atau jumlah pengiriman yang salah.
2. Kesalahpahaman Interface, komponen pemanggil salah memahami spesifikasi interface komponen yang dipanggil dan membuat asumsi mengenai perilaku komponen yang dipanggil, sedangkan komponen yang dipanggil tidak berperilaku sebagaimana yang diharapkan akibatnya perilaku yang tidak diharapkan pada komponen pemanggil. Sebagai contoh routine search biner mungkin dipanggil dengan array yang tidak urut yang akan disearch, akibatnya search akan gagal.
3. Error Timing, terjadi pada saat waktu nyata yang menggunakan memori bagi pakai atau interface pengirim message.

Setelah integration testing dilakukan serta kesalahan-kesalahan yang diketemukan sudah diperbaiki, langkah berikutnya adalah Validasi Testing (Pengujian Validasi). Uji coba validasi dapat dikatakan berhasil apabila fungsi-fungsi yang ada pada perangkat lunak sesuai dengan yang diharapkan oleh pemakai. Validasi perangkat lunak merupakan kumpulan seri uji coba black box yang memperlihatkan atau menunjukkan sesuai dengan yang diperlukan. Garis besar rencana uji coba dikerjakan dan prosedur uji coba didefinisikan dengan test case yang spesifik dimana akan digunakan untuk menunjukkannya sesuai dengan yang diperlukan. Rencana dan prosedur dirancang untuk menjamin seluruh keperluan fungsional telah terpenuhi, seluruh perfomansi dapat dicapai, dokumentasi dilakukan dengan benar.

Setelah uji coba dikerjakan ada satu kemungkinan dari dua kondisi yang ada yaitu:
1. Karakteristik perfomansi fungsi sesuai dengan spesifikasi dan dapat diterima.
2. Penyimpangan dari spesifikasi ditemukan dan daftar penyimpangan dibuat.

Pengujian Stress melanjutkan uji-uji ini melewati beban rancangan maksimum sistim sampai sistim gagal. Jenis pengujian ini memiliki dua fungsi antara lain :
1. Pengujian stress menguji perilaku kegagalan sistim. Mungkin timbul suatu keadaan melalui kombinasi event yang tidak diharapkan ketika beban yang ada pada sistim melebihi beban maksimum yang diantisipasi. Pada keadaan penting bahwa kegagalan sistim tidak menyebabkan kerusakan data atau kerugian yang tidak diharapkan dari layanan user. Pengujian stress memeriksa apakah memberi beban yang lebih kepada sistim menyebabkannya “kegagalan lunak” dan bukan runtuh dengan bebannya.
2. Pengujian stress memberi tekanan pada sistim dan dapat menyebabkan munculnya cacat yang biasanya tidak mewujudkan diri mereka. Walaupun dapat diperdebatkan bahwa cacat ini tidak mungkin mengakibatkan kegagalan sistim dalam pemakaian normal, mungkin ada kombinasi yang tidak biasa dari keadaan normal yang direplikasi oleh pengujian stress.



CONTOH

Contoh untuk salah satu pengujian perangkat lunak, yaitu yang terlihat pada pembuatan Perangkat Lunak Sistem e-commerce.

Ada 2 uji coba perangkat lunak yang dipakai, yaitu Uji Coba White Box dan Uji coba Black Box.

1. Uji coba white box merupakan metode perancangan procedural guna memperoleh test case. Tes ini dipergunakan untuk meramal cara kerja perangkat lunak secara rinci. Perangkat lunak akan dites dengan menyediakan tes case yanag akan mengerjakan kumpulan kondisi dan pengulangan secara spesifik.

Pada blog ini terdapat program yang dapat diuji coba dengan menggunakan white box, yaitu pada saat user melakukan registrasi yang kemudian akan menginputkan data ke tabel user ,tabel ini berfungsi untuk penyimpan data user yang telah melakukan proses registrasi. Program ini berfungsi untuk memeriksa apakah username dan email sudah digunakan sebelumnya sehingga tidak ada data yang sama dengan sebelumnya.

Script untuk mengecek user sudah terdaftar atau belom.

$perintah=mysql_query("select * from user where username='$username' ") or
die(mysql_error()."perintah select username");

$perintah=mysql_query("select * from user where email='$email' ") or
die(mysql_error()."perintah select email");

Setelah user dinyatakan belum terdaftar maka proses berlanjut yaitu proses insert ke data user.

$perintah=mysql_query("insert into user(username,password,nama,alamat,email,no_telp,no_hp)
values('$username','$password','$nama','$alamat','$email','$no_telp','$no_hp') ") or
die(mysql_error()."perintah insert user");

2. Uji coba black box dilakukan pada tampilan interface perangkat lunak, yang bertujuan untuk menunjukkan fungsi perangkat lunak mengenai cara pengoperasiannya, apakah input dan output data telah berjalan sebagaimana yang diharapkan.

Salah satu contoh uji coba black box yaitu uji coba validasi. Uji coba ini dapat dikatakan berhasil jika fungsi – fungsi yang ada pada perangkat lunak sesuai dengan harapan pemakai. Contohnya pada saat memasukkan data login sebagai user, seorang member diwajibkan untuk memasukkan username dan password. Jika salah satu dari form tersebut tidak diisi, maka akan muncul pesan kesalahan, yang menyatakan salah satu diantara form tidak diisi, contoh pesan kesalahan tersebut adalah berikut :

if(isset($_POST['login'])){
$username = mysql_escape_string(strip_tags($_POST['username']));
$password = md5($_POST['password']);
$sql = mysql_query("SELECT * FROM user WHERE username='$username' && password='$password'");
$num = mysql_num_rows($sql);
if($num==1) {
while ($hasil=mysql_fetch_array($sql))
{
$_SESSION['Id_user']=$hasil['Id_user'];
$_SESSION['nama']=$hasil['nama'];
header("Location:index.php");
}
} else {
// jika login salah //
header("Location:index.php?error=1");
}

Senin, 12 Juli 2010

Tugas 6 (Contoh Dasar Bahasa Pemograman dan Pengkodean)

Contoh Dasar Bahasa Pemograman dan Pengkodean

Bahasa Pascal

Struktur Bahasa Pemograman Pascal

1. {Blok komentar / comment}

Blok ini bersifat tidak wajib, tidak di eksekusi oleh program, hanya diabaikan saja Cuma sebagai identitas program contohnya :

(*komentar 1*)è(*perhitungan aritmatika*)

(*komentar 2*)è{dibuat oleh Mr. MTQ}

2. {Blok judul / title)

Kaidah – kaidah penulisan blok judul adalah :

- Harus diawali dengan huruf alpabet

- Panjang maksimal judul program 255 karakter / huruf

- Dalam judul program tidak boleh ada spasi kosong

- Diberi karakter garis kebawah

Program judul_program;

Contohnya = program latihan_pertama;

3. {Blok Pengenalan / decralation}

- Blok ini berfungsi untuk mengenali item-item yang ada dalam program

- Bentuk-bentuk blok pengenalan :

a. Uses

Uses berfungsi untuk mengenalkan piranti kepada komputer/pascal yang dipakai dibelakangnya.]

Piranti adalah perangkat keras, tapi tidak harus perangkat keras, sistempun juga merupakan piranti yang bersifat global bisa diraba dan tidak bisa diraba.

Uses ènama_piranti 1, nama_piranti 2,…,(;) wajib di buat.

Contoh-contoh Uses yaitu :

o Dos (disk operating system) merupakan sistem operasi yang berfungsi untuk mengenali perintah-perintah dos.

o Graph biasanya mempunyai sebuah bidang grapik yang berfungsi agar pascal bisa menggunakan fungsi-fungsi grafik.

o Printer merupakan piranti output yang berfungsi untuk mencetak.

o Sistem berbentuk seperti RAM dan ROM yang berfungsi untuk pengaturan tanggal /jam dan sebagainya. Salah satu komponen sistem yaitu CMOS.

Cmos merupakan extensi dalam CPU yang berfungsi untuk menyimpan bios.

o Exsistensi adalah sebuah identitas file yang letaknya dibelakang titik yang terdiri dari tiga huruf. Contohnya : DOS, XCL, PAS.

b. Label

Label berbentuk sebagai identitas atau alamat garis perintah program biasanya sering digunakan go to. Label tidak disarankan dipakai karena sering lompat-lompat sehingga tidak terstruktur.

Bentuk label :

Nama_label 1,

Nama_label 2,…;

Contohnya : label awal, akhir;

c. Constanta

Constanta mendeclarasikan identitas dengan nilainya yang diakhiri titik koma (;) yang merupakan nilai tetap / pasif.

Bentuk constanta :

nama_const 1 = nilai ;

nama_const 2 = nilai ;

Contohnya : const A = 100 ;

B = ‘Mr. MTQ’;

d. Type

Type berfungsi untuk membuat informasi data baru yang type data identitasnya dikonstantakan.

e. Var

Var mendecrelasikan identitas dengan nilainya sama dengan konstanta bedanya var (variable) sifatnya berubah-ubah sedangkan konstanta tetap.

Penulisan declarasi sama dengan kaidah penulisan program.

Bentuk variable :

Nama_var 1,nama_var2 : type_data 1;

Nama_var3 : type_data 2;

Contoh var yaitu :

1. var kata, kalimat : String;

2. var angka, nilai : integer;

f. Procedure

Bentuk procedure yaitu :

àNama_prosedur (parameter : type_data);

Tipe Data / Jenis Data

v Macam-macam tipe data yaitu :

  1. Data huruf dan kata/kalimat
    1. Data huruf dalam pascal dideclerasikan dengan char (caracter) yang meliputi huruf alpabet (A sampai Z). Tipe data ini merupakan string. Contohnya : B:= ‘4’;
    2. Tipe data kalimat/kata dalam pascal dideclerasikan dengan : string;

Contohnya A:= ‘231’;

B:= ‘STiMIK’;

C:= ‘A+B’;

Perbedaan char dan string adalah tipe data char dapat disebut string karena string kumpulan char sedangkan char tidak dapat disebut string karena string berbentuk kata / kalimat.

  1. Tipe Data bilangan (numeric)

Tipe data ini dibagi menjadi dua yaitu tipe data bilangan cacah/bilangan bulat (integer)dan tipe bilangan decimal/bilangan pecahan/bilangan pakai koma (real).


{ Program   : Input dari keyboard dan Menghitung operasi matematika }


uses Crt;
var
x,y,z : longint;
lagi : char;
namak : string[20];

begin
lagi := 'y';
while (lagi = 'y') or (lagi = 'Y') do
begin
clrscr;
write('Siapa Nama Anda..?'); ReadLn(namak);
writeLn;
write('Hallo ',namak,', Coba kamu');
WriteLn(' masukan nilai x,y dan z ');
writeLn('pada operasi matematika ini.');
writeLn;
writeLn('Operasi matematika X^2 + y^2 + z =..... ');
write('masukan nilai x..= '); ReadLn(x);
write('masukan nilai y..= '); ReadLn(y);
write('masukan nilai z..= '); ReadLn(z);
writeLn;
writeLn('nilai operasi x^2 + y^2 + z adalah : ',x*x+y*y+z);
writeLn;
write('Mau hitung lagi apa tidak (y/t), ',namak,' ? ');
readLn(lagi);
end;
end.