Saat ini saya sedang mengerjakan proyek yang agak besar, dan saya telah menggunakan JUnit dan EasyMock untuk fungsionalitas unit test yang cukup luas. Saya sekarang tertarik pada jenis pengujian apa yang harus saya khawatirkan. Sebagai pengembang, apakah tanggung jawab saya untuk mengkhawatirkan hal-hal seperti pengujian fungsional, atau regresi? Apakah ada cara yang baik untuk mengintegrasikan ini dengan cara yang bisa digunakan dalam alat-alat seperti Maven / Ant / Gradle? Apakah ini lebih cocok untuk Penguji atau BA? Apakah ada jenis pengujian lain yang bermanfaat yang saya lewatkan?
35
Jawaban:
Adalah tanggung jawab Anda untuk berusaha memberikan kode bebas cacat. Anda harus menulis, membantu menulis, atau memastikan tes ditulis atau dilakukan untuk memberikan Anda kepercayaan pada kode yang Anda berikan.
Catatan: Saya tidak mengatakan Anda diminta untuk memberikan kode bebas cacat. Sebaliknya, Anda harus berusaha menulis kode terbaik yang Anda bisa untuk persyaratan yang Anda berikan. Bagian dari kemampuan melakukan itu berarti kode harus diuji.
Apakah itu berarti Anda bertanggung jawab secara pribadi untuk tes fungsional dan regresi sebagian besar merupakan fungsi dari bagaimana perusahaan Anda diatur. Semua programmer dengan ketrampilan tertinggi yang saya tahu tidak bertanya pada diri sendiri "apakah ini tanggung jawab saya untuk menulis tes tipe X?". Sebaliknya, mereka bertanya pada diri sendiri "apa yang harus saya lakukan untuk memastikan kode saya diuji dengan benar?". Jawabannya mungkin menulis tes unit, atau menambahkan tes ke regresi, atau mungkin berarti berbicara dengan seorang profesional QA dan membantu mereka memahami tes apa yang perlu ditulis. Namun, dalam semua kasus, itu berarti mereka cukup peduli dengan kode yang mereka tulis untuk memastikan kode tersebut diuji dengan benar.
Intinya: Anda harus bertanggung jawab untuk memberikan kode berkualitas tinggi. Jika itu berarti Anda perlu menulis beberapa tes fungsional atau regresi, lakukanlah.
sumber
Ini mungkin membantu Anda:
Q1 ditulis oleh pengembang.
Q2 diotomatisasi oleh pengembang dan ditulis dalam kolaborasi dengan bisnis dan / atau penguji.
sumber
Ada pengujian penerimaan yang saya sarankan kerangka kerja gaya BDD yang menggunakan bahasa Gherkin : JBehave (Java), Mentimun (Ruby), Behat (PHP), dll. Jenis pengujian ini memiliki beberapa keunggulan dibandingkan pengujian unit:
sumber
Tes fungsional dapat diotomatisasi seperti halnya pengujian unit, dan sangat berguna untuk menguji bagaimana berbagai komponen proyek Anda bekerja bersama, dan seberapa baik sistem Anda mencerminkan aturan bisnis.
Juga, tes otomatis ini, berfungsi sebagai paket uji regresi dan penerimaan untuk setiap perubahan besar (atau kecil) yang harus Anda lakukan untuk perangkat lunak (perbaikan bug, refactor, perubahan bisnis, fungsionalitas baru, dll). Ini memberi pengembang lebih percaya diri untuk melakukannya.
Ada beberapa kerangka kerja untuk pengujian semacam ini, kami menggunakan fitnesse dengan hasil yang sangat bagus. Memiliki pustaka yang sangat baik untuk menguji halaman web (kami menggunakannya untuk menguji aplikasi web kami dan layanan web kami) dan terintegrasi dengan sangat baik dengan Maven dan Jenkins .
Kami juga biasa melakukan "pengujian lintas fungsional", di antara pengembang, tetapi pengujian semacam ini tidak "berulang", jadi kegunaannya terbatas ...
sumber
Sebagai seorang pengembang, saya menganggap diri saya bertanggung jawab atas unit yang menguji semua kode saya dan menjamin yang terbaik dari kemungkinan saya yang tidak cacat. Itu sebabnya kami memiliki begitu banyak alat yang dapat digunakan seperti mengejek. Tujuan membuat objek mengejek dalam pengujian Anda adalah untuk mencoba dan mengisolasi kode Anda dari dunia "luar" dan menjamin bahwa itu berfungsi dengan baik dan jika ada sesuatu yang gagal, "itu bukan salah Anda".
Yang sedang berkata, terlepas dari kenyataan bahwa itu bukan kesalahan Anda dan bahwa kode Anda berfungsi sebagaimana mestinya, itu tidak berarti Anda tidak dapat membantu dalam sisa tes. Saya percaya ini juga tanggung jawab Anda untuk membantu dan mengintegrasikan pekerjaan Anda pada pekerjaan yang dibuat oleh orang lain. Tim Pengembangan TI harus bekerja setiap saat sebagai mesin yang diminyaki dengan baik, bekerja bersama dengan departemen lain (seperti QA) sebagai tim yang lebih besar untuk menyediakan perangkat lunak yang andal.
Tapi itu pekerjaan tim, bukan hanya milikmu.
sumber
Jelas tes integrasi ; mereka lebih penting dan lebih sulit untuk ditulis daripada tes unit. Ini seperti membangun rumah; dengan pengujian unit, Anda hanya memastikan fakta bahwa batu bata itu solid dan tahan terhadap tekanan, suhu, kelembaban, dan kondisi lainnya. Tetapi Anda tidak memiliki petunjuk bagaimana rumah terlihat dan berperilaku dengan batu bata disatukan.
Masalah dengan proyek-proyek besar, terutama yang berada di wadah Java adalah bahwa pengujian integrasi sulit. Jadi untuk memfasilitasi tes integrasi sistem dalam proyek-proyek besar, kerangka pengujian diperlukan, dibuat khusus untuk proyek, yang merupakan tugas pengembang untuk mengkodekannya. Baru-baru ini perbaikan besar telah dibuat di bidang ini dan platform seperti Arquillian sangat menyederhanakan penulisan kerangka pengujian (atau bahkan menggantikannya).
sumber
Di dunia nyata Anda hanya bertanggung jawab sebagaimana tim / bos Anda meminta pertanggungjawaban Anda. Jika Anda dibayar atau diminta untuk bekerja keras tanpa henti untuk menemukan setiap sudut dan celah celah dan melompat ke tingkah bos Anda (atau pemasaran yang lebih buruk) interpretasi bug logika bisnis, maka dengan segala cara, Anda bertanggung jawab untuk semua.
Jadi dengan kata lain, lakukan apa yang diminta oleh ruang lingkup yang diberikan kepada Anda. Merupakan tambahan yang bagus untuk menggunakan akal sehat atau melihat orang lain menggunakan produk yang Anda bangun untuk mendapatkan rasa menggunakan kasus dan kemungkinan masalah untuk memperbaiki tetapi membawa ini ke tim atau bos Anda sebelum "memperbaiki". Ini termasuk alat yang Anda pilih. Semua usaha Anda harus menjadi sesuatu yang menjadi perhatian semua orang.
Jika pertanyaan Anda tentang pelacakan bug yang berguna, saya suka bugzilla, google docs, zendesk atau basecamp dalam hal sistem komunikasi.
sumber
Saya tidak berpikir ini sudah dibahas - maaf jika saya melewatkannya.
Salah satu masalah adalah penggunaan waktu pengembang yang efisien.
Pengembang sering tidak memiliki keterampilan untuk menjadi pandai pada jenis pengujian tertentu. Sebagian, ini wajar saja. Itu alasan yang sama mengapa penulis memiliki editor. Sangat sulit untuk melihat kekurangan dalam sesuatu jika Anda terlalu dekat dengannya. Tetapi ini juga tentang keahlian yang berbeda dan spesialisasi yang berbeda.
Karena itu, pengembang menghabiskan waktu pengujian dalam biaya: syarat manfaat. Pengembang itu akan lebih produktif melakukan hal-hal lain, dan penguji spesialis akan lebih produktif melakukan pengujian.
Tentu saja itu membuat berbagai asumsi yang belum tentu valid. Di sebuah perusahaan kecil, misalnya, mungkin tidak masuk akal untuk mempekerjakan orang yang berspesialisasi dalam pengujian. Meskipun mungkin lebih masuk akal untuk mempekerjakan staf pendukung tambahan dan meminta mereka melakukan pengujian, atau setidaknya untuk membuat orang menguji kode yang tidak mereka tulis sendiri.
sumber
Saya percaya ini adalah tanggung jawab kami (pengembang juga) untuk mencakup semua skenario pengujian yang mungkin sebelum dirilis untuk QA. Tujuan QA adalah untuk memvalidasi perangkat lunak. Plus, memalu kode Anda sendiri untuk kesalahan akan selalu membuat Anda terlihat baik datang waktu QA.
sumber
Siapa yang lebih baik daripada pengembang untuk mengetahui kasus uji apa yang paling relevan. Pengembang harus bertanggung jawab untuk melakukan semua pengujian unit, jika memungkinkan pengembang harus membantu untuk menulis dan menjalankan skrip pengujian. Karena ini jarang terjadi dalam proyek besar, waktu harus diberikan kepada pengembang untuk meninjau semua kasus uji. Selain itu pengembang harus memiliki pengetahuan dan menggunakan berbagai alat uji otomatis yang tersedia.
Dalam karir pengembangan saya, saya menemukan bahwa proyek berakhir dengan hasil yang lebih baik jika ada integrasi yang erat antara tim pengembangan dan tim pengujian.
setidaknya satu anggota dari masing-masing tim harus mengikuti rapat perencanaan dan implementasi lainnya.
sumber