Pentingnya Testing dalam Pengembangan Software di Industri

Mengenal Testing dalam Dunia Pengembangan Software

Membangun dan mengembangkan sebuah software atau aplikasi biasanya dilakukan bertahap melalui beberapa fase hingga software atau aplikasi tersebut bisa rilis dan digunakan oleh publik. Proses tersebut dikenal dengan software development life cycle (SDLC). Dalam SDLC, ada fase testing atau pengujian. 

Biasanya fase testing dilakukan setelah fase sebelumnya, yaitu fase development, telah selesai dilakukan untuk memastikan bahwa software yang dibangun telah berjalan dan berfungsi dengan baik sebelum akhirnya digunakan secara luas.

Klasifikasi Software Testing

Secara garis besar, software testing dikelompokkan menjadi dua jenis, yaitu functional testing dan non-functional testing.

💻 Mulai Belajar Pemrograman

Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.

Daftar Sekarang

Functional Testing

Functional testing adalah jenis testing yang menitikberatkan pada pengujian fungsionalitas utama atau business-logic dari sebuah software. Berikut adalah beberapa teknik yang dapat dilakukan untuk menjalankan functional testing.

  • Unit testing adalah jenis testing untuk memastikan komponen terkecil dari software dapat berjalan dan berfungsi dengan baik. Contohnya adalah menguji sebuah komponen form password yang memiliki beberapa validasi, seperti panjang maksimal setidaknya 8 karakter dan mengandung karakter spesial.
  • Integration testing adalah jenis testing yang memiliki cakupan lebih luas dari unit testing. Ini bertujuan untuk memastikan integrasi antara satu komponen dan komponen lainnya berjalan serta berfungsi dengan baik. Contohnya adalah menguji integrasi antara komponen product item card dengan halaman cart atau keranjang belanja pada aplikasi e-commerce.
  • System/End-to-End testing adalah jenis testing yang memiliki cakupan menyeluruh terhadap sebuah software. Ini bertujuan untuk memastikan sistem sudah berjalan dengan baik dan benar serta business-logic yang dibangun telah sesuai dengan system requirements yang dirancang.
  • Acceptance testing adalah jenis testing pada yang menitikberatkan pada proses verifikasi dan validasi terhadap software yang telah dikembangkan sebelum akhirnya benar-benar dirilis ke publik. Tujuan acceptance testing hampir sama dengan system/end-to-end testing. Perbedaannya adalah acceptance testing dilakukan secara eksternal baik kepada pemangku kebijakan (stakeholders) maupun kepada pengguna (end-user) secara langsung guna memastikan software tersebut sudah dapat memenuhi kebutuhan. Acceptance testing memiliki beberapa jenis, di antaranya adalah alpha testing, beta testing, dan user acceptance testing (UAT).

Non-Functional Testing

Non-functional testing adalah jenis testing yang menitikberatkan pada pengujian aspek-aspek penting lainnya di luar fungsionalitas dari software itu sendiri. Berikut adalah beberapa jenis non-functional testing yang dapat dilakukan.

  • Security testing adalah jenis testing yang menitikberatkan pada keamanan sebuah software. Tujuannya adalah memastikan tidak adanya celah keamanan yang bisa berdampak terhadap data pengguna yang sifatnya sangat sensitif.
  • Performance testing adalah jenis testing yang menitikberatkan pada performa software ketika dijalankan dengan beban kerja berbeda-beda. Contohnya adalah menguji sebuah website untuk memastikan bahwa ia masih dapat berjalan dengan baik ketika jumlah pengguna melonjak dalam waktu yang bersamaan.
  • Usability testing adalah jenis testing yang menitikberatkan pada user experience (UX) sebuah software. Aspek-aspek yang diuji seperti kemudahan dalam pengoperasian, kemudahan untuk dipelajari pada saat pertama kali digunakan, dan kepuasan pengguna.
  • Compatibility testing adalah jenis testing yang dilakukan untuk memastikan software yang dikembangkan dapat berjalan dengan baik pada keadaan berbeda-beda. Contohnya sebuah website seharusnya memiliki tampilan yang responsif ketika digunakan pada desktop, tablet, dan mobile dengan spesifikasi layar berbeda.

Manual Testing vs Automated Testing

Software testing dapat dilakukan secara manual dan otomatis. Manual testing melibatkan individu yang secara langsung melakukan pengujian terhadap software tersebut secara menyeluruh. 

Manual testing dilakukan untuk menguji aspek dalam sebuah software yang tidak memungkinkan untuk diuji secara otomatis. Namun, manual testing memiliki beberapa kekurangan, di antaranya membutuhkan sumber daya dan waktu yang lebih banyak, serta memungkinkan terjadinya human-error

Automated testing, di sisi lain, dilakukan secara otomatis oleh sistem. Developer atau tester hanya butuh menuliskan script pengujian untuk dijalankan. Tentu automated testing akan membutuhkan sumber daya dan waktu yang lebih sedikit serta kecil kemungkinan terjadinya human-error

Akan tetapi, tidak semua aspek dalam software dapat diuji dengan menggunakan automated testing, contohnya usability testing yang sangat bergantung terhadap peran manusia. Untuk memaksimalkan proses pengujian, metode manual testing dan automated testing dapat dilakukan secara berdampingan.

Test Driven Development (TDD)

Test-driven development (TDD) adalah sebuah pendekatan yang digunakan dalam proses pengembangan sebuah perangkat lunak atau aplikasi dan pengembang diharuskan untuk melakukan pengujian atau testing terlebih dahulu sebelum mengembangkan fungsionalitas dari aplikasi tersebut.

Dalam test-driven development, pengembang akan terlebih dahulu menulis skenario pengujian unit (unit testing). Unit adalah bagian terkecil dari perangkat lunak yang dapat diuji (testable). Pada pemrograman berorientasi objek, unit umumnya dapat berupa class, method, atau procedure.

Alur kerja dari test-driven development bersifat iteratif, dimulai dengan penulisan skenario dan menjalankan pengujian. Pada tahap ini, pengujian akan gagal karena kode implementasi belum ditulis. Kemudian, proses dilanjutkan dengan menulis kode implementasi seminimal mungkin. Tujuannya untuk membuat kode pengujian sebelumnya berhasil. 

Setelah itu, kode implementasi dan kode pengujian akan dioptimasi (refactor) untuk meningkatkan kualitas dan keterbacaan kode tanpa mengubah fungsionalitas atau perilakunya. Proses test driven development diakhiri dengan melakukan pengujian kembali. Ini untuk memastikan kode implementasi sudah sesuai dengan hal yang diharapkan dalam skenario pengujian. Proses tersebut dikenal dengan istilah red-green-refactor.

Manfaat Test Driven Development (TDD)

Berikut adalah manfaat dari TDD.

  • Proses development menjadi lebih terarah karena skenario pengujian fitur-fitur dalam software telah dirancang terlebih dahulu sebelum software tersebut mulai dibangun.
  • Kode sumber software yang dihasilkan memiliki kualitas yang lebih baik karena dalam test driven development terdapat proses refactor yang dilakukan setelah skenario pengujian terpenuhi. Kode sumber yang baik akan selalu berbanding lurus dengan kualitas dari software yang dihasilkan sehingga dapat meningkatkan kepercayaan diri dari developer dan tim.

Perlu diperhatikan juga bahwa melakukan metode test driven development membutuhkan waktu yang relatif lebih lama karena developer perlu menuliskan kode testing dan kode implementasi. Metode ini akan lebih efektif jika dilakukan dalam sebuah proyek yang kompleks dengan tim yang memiliki sumber daya yang besar.

Kesimpulan

Jadi, itulah pembahasan mengenai software testing yang merupakan bagian dari software development life cycle (SDLC). Apakah kamu sudah paham sekarang? Intinya adalah testing merupakan tahapan yang sangat penting untuk diperhatikan ketika mengembangkan sebuah software. Ini demi menghasilkan software yang baik, bebas dari bugs, dan disukai oleh pengguna. Semoga bermanfaat dan sampai jumpa dalam artikel berikutnya!


Belajar Pemrograman Gratis
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.