Mengapa programmer membutuhkan pengujian?

Beberapa level berikutnya akan dikhususkan untuk pengujian dengan cara yang dibutuhkan pemrogram . Tapi pertama-tama, mari kita cari tahu apa itu pengujian dan mengapa itu diperlukan.

Sehubungan dengan perangkat lunak, kita dapat mengatakan bahwa tugas pengujian adalah untuk memeriksa apakah program tersebut:

  • melakukan apa yang harus dia lakukan
  • tidak melakukan apa yang seharusnya tidak dia lakukan

Ngomong-ngomong, poin kedua tidak kalah pentingnya dengan yang pertama, tetapi lebih dari itu nanti.

Mari kita mulai dengan poin pertama. Apa yang dimaksud dengan "program melakukan apa yang seharusnya dilakukan"?

Pertama, seseorang perlu membuat daftar semua kasus penggunaan untuk program tersebut. Kedua, mereka perlu menjelaskan bagaimana program seharusnya bekerja, bagaimana perilaku pengguna, dan hasil apa yang diharapkan. Anda tidak dapat melanjutkan lebih jauh.

Segera setelah kami menulis "bagaimana pengguna harus berperilaku", seluruh gagasan untuk menulis dokumentasi yang baik berantakan. Orang bukanlah mesin, terlebih lagi, orang sangat sering berperilaku dengan perangkat lunak sesuka mereka . Tidak ada yang memulai pengenalan mereka dengan teknologi dengan mempelajari instruksinya. Itu adalah fakta.

Oleh karena itu, kami mendapatkan fakta baru: keunikan dari perangkat lunak ini adalah ia memiliki banyak skenario kerja yang berbeda. Beberapa di antaranya jelas, yang lain dapat didokumentasikan, yang lain dapat diasumsikan, yang lain dapat ditebak, dan 50% lainnya bahkan tidak terpikir oleh Anda.

Dari sudut pandang programmer, sebagian besar bug bukanlah bug sama sekali. Kesalahan adalah ketika suatu program tidak berfungsi sebagaimana mestinya atau seperti yang diharapkan. Dan ada banyak situasi ketika tidak jelas bagaimana program harus bekerja, atau skenario yang saling bertentangan ...

Ada banyak sekali skenario, dan akan selalu ada kasus dalam produk ketika program tidak berperilaku seperti yang diharapkan (programmer menulis kode hanya untuk beberapa lusin skenario). Oleh karena itu, dapat dikatakan bahwa selalu ada bug dalam program apa pun dan produk apa pun dapat ditingkatkan tanpa henti .

Setelah itu, semuanya bermuara pada kemanfaatan. Pertama, pemrogram memperbaiki bug terbesar, kemudian bug yang lebih kecil, dan seterusnya. Dan akhirnya, tibalah saatnya pemilik produk percaya bahwa tidak layak secara ekonomi untuk terus mengerjakannya.

Tetapi kembali ke kesalahan yang dikenali oleh semua orang sebagai kesalahan: program jelas melakukan kesalahan, jatuh, merusak sesuatu, dll. Kesalahan tersebut dapat dibagi secara kondisional menjadi 3 kategori: besar, sedang dan kecil.

Dan sangat sering terjadi bahwa seorang programmer sedang memperbaiki bug sedang atau bahkan kecil, meskipun masih banyak masalah yang lebih serius dalam proyek tersebut. Dia hanya tidak menemukan mereka , jadi dia mengerjakan yang terbesar yang dia ketahui.

Oleh karena itu, dalam proyek apa pun harus ada penguji. Orang-orang ini secara khusus belajar untuk melihat produk dari sudut yang berbeda. Sehingga Anda dapat melihat lebih banyak skenario program. Tugas mereka adalah menemukan kesalahan dan menuliskannya (agar tidak menemukan kesalahan yang sama beberapa kali).

Testing adalah proses yang bertujuan untuk menemukan kesalahan. Bug ini harus ditemukan, dijelaskan, dan diprioritaskan. Hanya setelah memprioritaskan kesalahan, kita dapat berbicara tentang proses peningkatan perangkat lunak yang efektif.

Ingat, langkah pertama untuk menyelesaikan masalah adalah mengakui bahwa ada masalah . Anda tidak dapat memperbaiki kesalahan yang tidak Anda ketahui.

Uji Otomasi

Saya pikir kita semua setuju bahwa pengujian itu penting, jadi mari kita lihat pengujian seperti programmer. Bagaimana programmer melihat pengujian? Pemrogram mengotomatiskan pekerjaan orang lain. Profesi terakhir yang menghilang adalah profesi pemrograman.

Kami mengotomatiskan setiap proses yang kami temui. Jadi pengujian perlu diotomatisasi. Dan bagaimana cara mengotomatiskan pencarian kesalahan? Jawaban singkat: tidak. Tetapi di sini sekali lagi fakta bahwa kami adalah pemrogram membantu kami.

Proses pengembangan perangkat lunak terdiri dari perubahan konstan untuk itu. hanya dalam proses membuat perubahan terus-menerus, pemrogram sangat sering merusak sesuatu yang berfungsi dengan baik hingga saat ini.

Dan penguji, alih-alih mencari kesalahan baru, dipaksa untuk terus-menerus memeriksa apakah kami telah merusak sesuatu yang telah berfungsi dengan baik untuk waktu yang lama. Yang disebut pengujian regresi. Jenis pengujian inilah yang dapat dan harus diotomatisasi.

Di sini semua perangkat lunak dapat dibagi menjadi dua bagian:

  • program berinteraksi dengan orang tersebut
  • program berinteraksi dengan program lain

Opsi pertama lebih sulit untuk diotomatisasi, memerlukan penguji automator khusus, mereka juga disebut QA Automation atau Software Test Engineer.

Tetapi opsi kedua dapat dan harus diotomatisasi secara mandiri. Jika Anda memiliki perangkat lunak yang:

  • bekerja dengan baik
  • sudah diuji
  • diimplementasikan sebagai modul terpisah atau blok logis
  • tidak berencana untuk berubah
  • modul atau program lain bergantung padanya
  • kegagalan fungsional itu mahal

Saya merekomendasikan meluangkan waktu untuk menulis tes untuk itu yang menangkap aspek kunci dari fungsinya saat ini. Masuk akal untuk mengalokasikan 5% dari waktu kerja Anda untuk ini , atau 1 hari per bulan.

Tidak perlu menulis tes demi tes.

Tidak ada yang akan mendukung tes Anda. Bukan pemrogram lain, bukan diri Anda sendiri. Tidak ada yang melakukan itu. 99% dari semua tes tertulis ditinggalkan dan/atau dinonaktifkan. Jika Anda tidak dapat menulis tes - jangan menulis. Tulis hanya jika Anda benar-benar tidak dapat melakukannya tanpanya.

Jenis pengujian

Setiap programmer, jika dia belum menjalani pelatihan khusus, akan dapat mengatakan dengan kata-katanya sendiri apa itu pengujian: memeriksa apakah program melakukan apa yang seharusnya. Namun, para profesional di bidang ini membedakan seluruh area (jenis) pengujian.

Semua pengujian benar-benar berkisar pada keandalan dan ketersediaan perangkat lunak, tetapi untuk lebih memahami arah pengujian, mari kita lihat beberapa contoh.

Katakanlah Anda sedang menguji toko online biasa. Kemudian bidang pengujian dapat dibagi menjadi beberapa jenis berikut: pengujian kinerja, pengujian fungsional, pengujian integrasi, dan pengujian unit.

Jika pemilik situs memutuskan untuk meluncurkan kampanye iklan yang serius, maka banyak pengguna akan datang ke situs tersebut pada waktu yang bersamaan. Mungkin saja situs tersebut tidak akan jatuh, tetapi beberapa bagiannya mungkin lambat atau bahkan berhenti berfungsi.

Untuk mencegah hal ini terjadi, Anda perlu mengidentifikasi masalah tersebut terlebih dahulu dan mengambil langkah untuk menghilangkannya. Ini dilakukan dengan menggunakan pengujian beban , atau disebut juga pengujian kinerja.

Anda mungkin juga ingin menguji cara kerja API backend Anda dan menguji setiap fungsinya: pendaftaran, login, tambahkan ke troli, pemrosesan pembayaran, penulisan basis data, dll. Semuanya harus bekerja sesuai dengan TOR. Dalam hal ini, Anda perlu melakukan pengujian fungsional .

Toko online Anda kemungkinan besar terintegrasi dengan layanan pihak ketiga: mengirim surat dan SMS, sistem pembayaran, obrolan dukungan online, mengumpulkan umpan balik dari pengguna, sistem periklanan, dll. Untuk memastikan semua ini berfungsi sebagaimana mestinya, Anda perlu melakukan pengujian integrasi .

Akhirnya, produk kompleks sering dipecah menjadi modul independen. Dari modul semacam itu, Anda dapat merakit produk akhir, seperti dari konstruktor. Jika Anda sedang mengembangkan modul semacam itu atau berinteraksi dengan modul semacam itu, Anda perlu melakukan pengujian unit .

Kesimpulannya, kita dapat mengatakan bahwa pengujian fungsional diperlukan untuk menguji setiap fungsi situs. Integrasi - untuk menguji interaksi modul besar dan sistem produk Anda. Modular - untuk menguji modul terpisah, yah, pengujian kinerja - untuk memeriksa pengoperasian situs Anda yang sedang dimuat.

Ada lebih banyak jenis pengujian: semakin kompleks produk, semakin banyak aspek pengembangannya yang perlu dikontrol.