Functional dan Non-Functional Testing
--
Dalam sebuah pengembangan aplikasi lunak, melakukan pengujian (testing) sangatlah penting. Pengujian seperti sebuah pintu persetujuan untuk sebuah aplikasi dapat digunakan oleh pengguna. Pengujian juga sebagai sebuah kesiapan jika aplikasi yang dibuat memang sudah sesuai dan tidak ada issue lagi.
Pengujian bukan hanya tanggung jawab QA (Quality Assurance)/tester saja, tetapi tanggung jawab semua tim. Namun, pengujian yang dilakukan antara tiap anggota tim berbeda. Misalnya, sebuah tim saat melakukan pengembangan sebuah aplikasi pasti memiliki programmer dan juga tester. Programmer akan melakukan testing pada kode yang telah ia tulis, apakah sudah sesuai dengan kebutuhan atau tidak, kemudian jika sudah sesuai kebutuhan, maka tester akan melakukan pengujian lebih mendalam terutama melakukan pengujian yang mungkin akan terjadi.
Secara garis besar, pengujian dalam software development dibagi menjadi dua tipe yaitu Functional Testing dan Non-Functional Testing.
Functional Testing
Functional testing lebih berfokus pada hasil eksekusi dari proses setiap fitur di aplikasi sudah bekerja dengan baik berdasarkan kebutuhan klien. Functional testing tidak menitikberatkan pada source code tetapi lebih kepada bisnis proses yang akan berjalan. Sehingga, sangat mudah untuk melakukan pengujian ini secara manual atau secara otomatis menggunakan automated testing.
Functional testing dilakukan sebelum melakukan non-functional testing. Functional testing ini sering menggunakan teknik black-box testing.
Contoh: Berhasil melakukan login ketika inputan data valid.
Tipe Functional Testing
- Unit Testing
Unit testing adalah melakukan pengujian pada sebuah fitur/kompenen. Tujuannya yaitu untuk melakukan validasi setiap fitur/komponen sudah sesuai. - Integration Testing
Integration testing adalah melakukan pengujian pada fitur/komponen yang diintegrasikan. Testing ini bertujuan untuk memeriksa fungsional antara fitur/komponen tersebut saat berinteraksi. - System Testing
Melakukan pengujian secara keseluruhan, yaitu semua fitur/komponen ketika diintegrasikan secara menyeluruh (end-to-end testing). - Smoke Testing
Smoke testing dilakukan setelah pengembangan sebuah fitur/komponen selesai. Smoke testing bertujuan untuk memastikan fungsional fitur/komponen terpenting sudah berjalan dengan baik. Testing ini dilakukan oleh developer atau tester. - Sanity Testing
Testing yang dilakukan setelah smoke testing. Sanity testing melakukan testing setelah ada perubahan/perbaikan pada bug yang telah ditemukan sebelumnya pada smoke testing. - Acceptance Testing
Testing yang dilakukan oleh klien/pengguna. Hasil dari testing ini yaitu apakah aplikasi yang selesai dibuat sudah sesuai dengan proses bisnis dan kebutuhan atau tidak.
Non-Functional Testing
Non-functional testing merupakan pengujian yang melakukan verifikasi pada kebutuhan non-fungsional seperti performa dan kegunaan sebuah aplikasi. Non-functional testing lebih kepada meningkatkan kualitas sebuah aplikasi. Kualitas yang dimaksud yaitu bergantung pada Waktu, Akurasi, Stabilitas, Kebenaran dan Durability di berbagai macam keadaan.
Non-functional testing sulit untuk dilakukan secara manual namun dapat dilakukan dengan bantuan aplikasi automated testing. Non-functional testing menggunakan teknik white-box testing.
Contoh: Loading halaman utama/dashboard hanya 5 detik setelah berhasil login.
Tipe Non-Functional Testing
- Performance Testing
Pada performance testing akan melakukan pengujian pada beberapa aspek performa aplikasi di bawah beban kerja yang diharapkan. Aspek-aspeknya yaitu:
- Speed : Kecepatan aplikasi cepat atau lambat
- Scalability : Jumlah banyaknya pengguna yang dapat aplikasi tangani
- Stability : Apakah aplikasi stabil pada berbagai jumlah pengguna
- Reability : Cara aplikasi menangani jika melebihi beban kerja (overload) - Load Testing
Load Testing adalah pengujian yang merusak aplikasi. Maksudnya yaitu suatu aplikasi akan diberikan beban kerja dengan jangka waktu yang telah ditentukan dan diharapkan mampu menangani beban tersebut.
Pada load testing, beban kerja yang diberikan yaitu beban kerja dari batas kerja yang telah ditentukan. - Stress Testing
Pengujian ini hampir sama dengan load testing. Hanya saja, stress testing memberikan beban kerja lebih dari beban kerja yang seharusnya dapat ditangani. Ini bertujuan untuk melihat bagaimana sebuah aplikasi berjalan ketika diberikan beban kerja yang lebih. - Volume Testing
Melakukan pengujian dengan cara memberikan volume/ukuran data yang besar ke aplikasi. Pengujian ini bertujuan untuk mengetahui performa aplikasi ketika volume data meningkat. - Security Testing
Security Testing ini sangat penting karena untuk menghindari kerugian yang diakibatkan data yang tercuri oleh kejahatan hacking. Fokus dari pengujian ini yaitu menemukan semua celah keamanan dan kelemahan aplikasi yang dapat mengakibatkan data hilang. - Compatibility Testing
Pengujian yang memastikan jika sebuah aplikasi dapat berjalan dengan baik pada berbagai hardware, operating system, software, jaringan, browser, devices, mobile, dan versi. - Usability Testing
Pengujian yang dilakukan dengan pengguna/klien untuk melihat seberapa mudah penggunaan aplikasi yang sudah dibuat ke berbagai kalangan pengguna. Pengujian ini biasanya menggunakan sebuah prototype. Usability testing bertujuan untuk dapat mengidentifikasi sejak awal masalah kegunaan aplikasi, sehingga dapat melakukan perbaikan sebelum desain diimplementasikan.
Namun, dalam melakukan pengujian ini sering kali terjadi kesalahan yaitu terlalu lama atau terlambat dalam mempelajari design process dan jika menunggu desain sampai benar akan memakan waktu dan uang. - Configuration Testing
Pengujian yang memeriksa aplikasi dengan berbagai kombinasi software dan hardware yang berbeda. Tujuannya yaitu untuk mengetahui konfigurasi optimal aplikasi tanpa cacat atau masalah.