1 2 Dua Aspek yang dipertimbangkan: Apakah implementasi sudah sesuai dengan spesifikasi ? Apakah spesifikasi sesuai dengan kebutuhan user ? Validasi Apakah sistem yang dikembangkan sudah benar? Pengujian dimana sistem ketika diimplementasikan sesuai dengan yang iharapkan Verifikasi Apakah sistem dikembangkan dengan cara yang benar ? Pengujian apakah sistem sudah sesuai dengan spesifikasi Unit testing Pengujian masing-masing unit komponen program untuk meyakinkan bhw sudah beroperasi secara benar Module Testing Pengujian terhadap koleksi unit-unit komponen yang saling berhubungan. Sub-system Testing Pengujian terhadap koleksi module-module yang membentuk suatu sub-system (aplikasi)
3 System Testing Pengujian terhadap integrasi sub-system, yaitu keterhubungan antar sub-system Acceptance Testing Pengujian terakhir sebelum sistem dipakai oleh user. Melibatkan pengujian dengan data dari pengguna sistem. Biasa dikenal sebagai alpha test (beta test untuk software komersial, dimana pengujian dilakukan oleh potensial customer) 4 5 Unit Testing Module Testing Sub-system Testing System Testing Acceptance Testing Component Testing Integration Testing User Testing Component testing Pengujian komponen-komponen program Biasanya dilakukan oleh component developer (kecuali untuk system kritis) Integration testing Pengujian kelompok komponen-komponen yang terintegrasi untuk membentuk sub-system ataupun system Dilakukan oleh tim penguji yang independent Pengujian berdasarkan spesifikasi sistem 6 7 Proses testing Deskripsi fase-fase utama dalam pengujian Pelacakan Kebutuhan Semua kebutuhan user diuji secara individu Item yg diuji Menspesifikasi komponen sistem yang diuji Jadual Testing Prosedur Pencatatan Hasil dan Prosedur Kebutuhan akan Hardware dan Software Kendala-kendala Mis: kekurangan staff, alat, waktu dll.
8 9 Spesifikasi Kebutuhan Spesifikasi System Perancangan System Detail Perancangan Acceptance Test plan System Integration Test plan Sub-System Integration Test plan Module and Unit code and test Acceptance test System Integration test Sub-System Integration test Service Failure: output yang tidak benar/tidak sesuai ketika sistem dijalankan Fault: kesalahan dalam source code yang mungkin menimbulkan failure ketika code yg fault tsb dijalankan 10 Failure Class Deskripsi Transient Muncul untuk input tertentu Permanent Muncul untuk semua input Recoverable Sistem dapat memperbaiki secara otomatis Unrecoverable Sistem tidak dapat memperbaiki secara otomatis Non-corrupting Failure tidak merusak data Corrupting Failure yang merusak sistem data 11 1: input A,B 2: A>0? 3: C :=0 4: C := A*B 5: B>0? 6: X := C*(A+2*A) 7: X := A+B 8: output X Suppose node 6 should be X:= C*(A+2*B) Failure-less fault: executing path (1,2,4,5,7,8) will not reveal this fault because 6 is not executed nor will executing path (1,2,3,5,6,8) because C = 0 Need to make sure proper test cases are selected the definitions of C at nodes 3 and 4 both affect the use of C at node 6 executing path (1,2,4,5,6,8) will reveal the failure, but only if B /= 0 Hanya test yang lengkap yg dapat meyakinkan sistem terbebas dari kesalahan, tetapi hal ini sangat sulit dilakukan. Prioritas dilakukan terhadap pengujian kemampuan sistem, bukan masing-masing komponennya. Pengujian untuk situasi yg tipikal lebih penting dibandingkan pengujian terhadap nilai batas. 12 Test data: Input yang yang direncanakan digunakan oleh sistem.
Test cases: Input yang digunakan untuk menguji sistem dan memprediksi output dari input jika sistem beroperasi sesuai dengan spesifikasi. 13 Disebut juga white-box testing Penentuan test case disesuaikan dengan struktur sistem. Knowledge program digunakan untuk mengidentifikasi test case tambahan. Tujuannya untuk menguji semua statement program (debug). 14 15 Component code Test outputs Test data Derives Tests Tujuannya meyakinkan bahwa himpunan test case akan menguji setiap path pada suatu program paling sedikit satu kali. Titik awal untuk path testing adalah suatu program flow graph yang menunjukkan node-node yang menyatakan program decisions (mis.: if-then-else condition) dan busur menyatakan alur kontrol Statements dengan conditions adalah node- node dalam flow graf. 16 Menggambarkan alur kontrol. Setiap cabang ditunjukkan oleh path yg terpisah dan loop ditunjukkan oleh arrows looping kembali ke loop kondisi node. Digunakan sebagai basis untuk menghitung cyclomatic complexity Cyclomatic complexity = Jumlah edges Jumlah Node +2 Cyclomatic complexity menyatakan jumlah test untuk menguji control statements 17 1 2 3 4 6 5 7 while bottom <= top if (elemArray [mid] == key (if (elemArray [mid]< key 8 9 bottom > top 1, 2, 3, 8, 9 1, 2, 3, 4, 6, 7, 2 1, 2, 3, 4, 5, 7, 2 1, 2, 3, 4, 6, 7, 2, 8, 9 Test cases harus ditentukan sehingga semua path tsb tereksekusi. 19 Pengujian keseluruhan system atau sub- system yang terdiri dr komponen yg terintegrasi. Test integrasi menggunakan black-box dengan test case ditentukan dari spesifikasi. Kesulitannya adalah menemukan/melokasikan Penggunaan Incremental integration testing dapat mengurangi masalah tersebut. 20 21 T3 T2 T1 T4 T5 A B C D T2 T1 T3 T4 A B C T1 T2 T3 A B Test sequence 1 Test sequence 2 Test sequence 3 Top-down testing Berawal dari level-atas system dan terintegrasi dengan mengganti masing-masing komponen secara top-down dengan suatu stub (program pendek yg mengenerate input ke sub-system yg diuji). Bottom-up testing Integrasi components di level hingga sistem lengkap sudah teruji. Pada prakteknya, kebanyakan test integrasi menggunakan kombinasi kedua strategi pengujian tsb. 22 23 Level 2 Level 2 Level 2 Level 2 Level 1 Level 1 Testing sequence Level 2 stubs Level 3 stubs . . . 24 Level N Level N Level N Level N Level N Level N1 Level N1 Level N1 Testing sequence Test drivers Test drivers Architectural validation Top-down integration testing lebih baik digunakan dalam menemukan error dalam sistem arsitektur. System demonstration Top-down integration testing hanya membatasi pengujian pada awal tahap pengembangan system. Test implementation Seringkali lebih mudah dengan menggunakan bottom-up integration testing 25 Dilakukan kalau module-module dan sub- system terintegrasi dan membentuk sistem yang lebih besar Tujuannya untuk medeteksi fault terhadap kesalahan interface atau asumsi yg tidak valid terntang interface tsb. Sangat penting untuk pengujian terhadap pengembangan sistem dgn menggunakan pendekatan object-oriented yg didefinisikan oleh object-objectnya 26 27 Test cases B A C Parameter interfaces Data dikirim dari satu procedure ke procedure lainnya. Shared memory interfaces Block of memory dishare diantara procedure- procedure Procedural interfaces Sub-system mengencapsulasi sekumpulan procedure-procedure yang akan dipanggil oleh sub-system lainnya Message passing interfaces Sub-systems meminta services dari sub- systems lainnya 28 Interface misuse componen pemanggil memanggil component lainnya dan membuat suatu kesalahan dalam penggunaan interfacenya (mis.: parameter dg urutan yg tidak sesuai). Interface misunderstanding component pemanggil salah dalam mengasumsikan behaviour component yg dipanggil. Timing errors Component yg memanggil dan yg dipanggil beroperasi pada kecepatan yg berbeda sehingga dimungkinkan mengakses informasi yg tidak uptodate (synchronization problem). 29 Merancang test dimana parameter ke procedure yg dipanggil berada pada nilai batas extrim Test Menggunakan null pointer Perancangan tests sehingga component yg di test akan fail. Menggunakan stress testing pada message passing Pada shared memory systems, variasikan urutan dimana komponen diaktifkan. 30 Menguji sistem dengan nilai yg melebihi maksimum load. Stressing suatu system menyebabkan tidak mudah kerusakan. Stressing suatu system test failure behaviour. Systems seharusnya tidak gagal total. Stress testing mencek kehilangan service yg tidak diduga ataupun data yg hilang. Khusus untuk sistem terdistribusi dapat menyebabkan degradasi jaringan sehingga overload. 31 Components yang diuji adalah class object yang diinstantiate ke object. Lebih besar dibandingkan pengujian sebuah function sehingga pendekatan white-box testing perlu diperluas. Tidak jelasnya top suatu system untuk top- down integration dan testing 32 Testing operations pada objects Testing object classes Testing clusters cooperating objects Testing OO system secara lengkap 33 Complete test yang menguji class melibatkan Testing semua operations suatu object Setting dan interrogating semua attribute object Menguji object untuk semua state(keadaan) yg mungkin Inheritance akan mengakibatkan sulitnya perancangan object class tests seperti information yg diuji sulit dilokalisasi. 34 Test cases dibutuhkan untuk semua operations Menggunakan state model untuk mengidentifikasi state transitions testing Contoh testing sequences Shutdown Waiting Shutdown Waiting Calibrating Testing Transmitting Waiting Waiting Collecting Waiting Summarising Transmitting Waiting
35 identifier reportWeather () calibrate (instruments) test () startup (instruments) shutdown (instruments) WeatherStation Levels integrasi sedikit berbeda untuk sistem yang berorientasi object. Cluster testing digunakan untuk test integrasi and testing clusters terhadap cooperating objects Identifikasi clusters menggunakan knowledge dari operation objects dan system features yang diimplementasikan oleh cluster tersebut.
36 Use-case atau scenario testing Testing berdasarkan pada interaksi user dengan sistem. Keuntungannya diujikan oleh user yg berpengalaman. Object interaction testing Tests barisan interaksi object yang berhenti ketika suatu operation object tidak memanggil service dari object lain. 37 Identifikasi scenarios dari use-cases dan menambahkannya dengan diagram interaksi yang menunjukkan object-object yang terlibat dalam scenario Lihat contoh scenario berikut ini pada sistem weather station ketika suatu report dibuat 38 39 Thread pengeksekusian methode CommsController:request WeatherStation:report WeatherData:summarise Inputs dan outputs Input report request dengan acknowledge yg sesuai serta output report akhir Dapat diujikan dengan membuat raw data dan meyakinkan bahwa dapat menghasilkan kesimpulan (summarize) yg sesuai. Gunakan raw data yg sama untuk menguji object WeatherData
40 Testing merupakan suatu proses yg cukup mahal. Testing workbenches menyediakan tool-tool untuk mereduksi waktu yg dibutuhkan dan total cost pengujian Kebanyakan testing workbenches merupakan open systems karena kebutuhan testing membutuhkan tergantung dr spesifikasi organisasi Sulit diintegrasikan dengan closed design dan analysis workbenches 41 42 Dynamic analyser Program being tested Test results Test predictions File comparator Execution report Simulator Source code Test manager Test data Oracle Test data generator Specification Report generator Test results report Scripts dibuat untuk user interface simulator dan model test data generator Test outputs harus disiapkan secara manual sebagai pembanding. Special-purpose file comparators harus dibuat 43