Apa yang harus didahulukan: pengujian atau tinjauan kode?

25

Saya cukup baru untuk memprogram pola desain dan siklus hidup dan saya bertanya-tanya, apa yang harus didahulukan, review kode atau pengujian, mengenai hal itu dilakukan oleh orang yang terpisah?

Dari satu sisi, mengapa repot-repot meninjau kode jika tidak ada yang memeriksa apakah itu berfungsi? Dari yang lain, beberapa kesalahan dapat ditemukan lebih awal, jika Anda melakukan peninjauan sebelum pengujian.

Pendekatan mana yang direkomendasikan dan mengapa?

Cahaya Perak
sumber
1
perhatikan bahwa pertanyaannya adalah tentang urutan langkah-langkah ini, bukan apakah harus dilakukan sama sekali
Richlv
8
Jika Anda menggunakan TDD, pertanyaan Anda bahkan tidak masuk akal.
Edward Strange

Jawaban:

40

Pengujian unit pengembang terlebih dahulu, kemudian review kode, lalu pengujian QA adalah bagaimana saya melakukannya. Kadang-kadang peninjauan kode terjadi sebelum pengujian unit tetapi biasanya hanya ketika peninjau kode benar-benar kebanjiran dan itulah satu-satunya saat dia dapat melakukannya.

HLGEM
sumber
1
Itu cara yang bagus untuk mendekatinya. Hanya ingin menambahkan bahwa itu juga berharga untuk meninjau kode tes itu sendiri (terutama untuk menemukan celah cakupan).
Kevin Hsu
@KevinHsu, titik istimewa
HLGEM
15

Standar kami adalah melakukan tinjauan kode sebelum produk menuju QA. Alasan untuk itu adalah bahwa setelah produk telah diuji dan diverifikasi, ada sedikit insentif untuk melakukan refactoring dan memodifikasi kode internal. Maka semua harus diuji ulang. Perhatikan bahwa kami juga melakukan pengujian unit dalam banyak kasus.

Marcie
sumber
8

Idealnya, di dunia Agile, keduanya :)

Pengembangan yang digerakkan oleh tes adalah metode yang mendorong pengembangan unit test sebelum penulisan kode aktual - dengan cara ini, Anda dapat menangkap spesifikasi dalam kode dan menulis tes yang lulus tes. Setelah itu, tes integrasi otomatis yang memastikan semua berbagai komponen yang berbeda cocok bersama adalah Hal Baik untuk lebih memastikan fungsionalitas aplikasi Anda sesuai dengan yang diharapkan.

Sedangkan untuk ulasan kode, pemrograman pasangan adalah cara yang berguna untuk memiliki pikiran lain yang menghadap kode Anda saat Anda benar-benar menulisnya. Namun, itu belum tentu pendekatan yang praktis. Cara kerjanya di perusahaan saya saat ini adalah bahwa kode ditinjau setelah diuji pada mesin pribadi pengembang, tetapi sebelum kode tersebut digunakan ke server pengembangan bersama.


sumber
6

Peninjauan kode dilakukan untuk "memoles" hal-hal yang sudah berfungsi, untuk memastikan kode memiliki tingkat kualitas yang diinginkan dan memenuhi pedoman kode yang ditentukan oleh perusahaan.

Tinjauan kode juga dapat terjadi sebagai bagian dari kegiatan pengoptimalan umum di masa mendatang di mana Anda melakukan refactor dan meningkatkan kode lama.

Jika Anda berlatih tinjauan kode sebelum melakukan check-in maka review kode jatuh di antara dua tahap pengujian: Anda sebagai pengembang menguji kode Anda terlebih dahulu, rekan Anda melakukan review kode, Anda memeriksanya, kemudian penguji yang berdedikasi akan melakukan individu yang lebih teliti dan tes integrasi.


sumber
4

Tes dulu. Tes terakhir. Tes tes tes.

Ulasan kode bagus untuk dimiliki. Tetapi sulit - bisa menjadi proses yang menyakitkan jika kepribadian terlibat atau berbeda pendapat.

Pengujian sangat jelas: apakah itu berfungsi atau tidak. Jadi uji, uji, uji! Dan review kode jika memungkinkan.

PP
sumber
Dan kapan harus tidur?
4
Ulasan kode dapat menangkap hal-hal yang tidak dapat diuji, dan dapat melibatkan waktu yang jauh lebih sedikit. Paling tidak, ada baiknya untuk membangun hubungan dengan dev lainnya dan meninjau karya masing-masing. Plus Anda belajar banyak dari kode mereka ketika Anda membalas budi!
Ethel Evans
1
Tidak setuju ... Ulasan kode sangat penting, tidak hanya untuk menemukan bug halus tetapi untuk menemukan kesalahan gaya, dan bug kinerja yang dapat dideteksi oleh programmer berpengalaman dengan melihat tetapi akan mengambil banyak waktu pengujian untuk menemukan
Amit Wadhwa
Satu hal yang sering ditinjau kode pengujian bahwa unit testing tidak akan pernah menangkap adalah ketika dev salah menafsirkan persyaratan. Juga hal-hal seperti pengecualian tidak tertangani atau jalur keputusan yang tidak memiliki kode (jika ia lupa menulis kode untuk apa yang terjadi ketika persetujuan tidak disetujui, maka kemungkinan ia tidak memiliki tes juga!)
HLGEM
2

Pada pekerjaan terakhir saya, kami memiliki tiga jenis ulasan kode yang akan kami lakukan pada berbagai tahap siklus hidup produk. Jenis pertama yang kami sebut Sanity Review, dan itu akan terjadi sebelum pengembang bahkan melakukan pengujian unit - bahkan Sanity Review dilakukan bahkan sebelum fitur selesai. Idenya adalah bahwa sepasang anggota tim akan duduk dan hanya membahas beberapa bagian kode acak seperti dalam proses pengembangan, untuk memastikan bahwa perkembangan berjalan dengan baik dan kami tidak akan berakhir dengan raksasa Entri TDWTF begitu fitur siap untuk digabungkan. Hal ini dilakukan terutama untuk orang-orang yang membutuhkan panduan tambahan (pengembang junior, karyawan baru, dan orang-orang yang ditugaskan untuk mengerjakan sesuatu yang mereka kurang akrab dengan anggota tim lainnya), dan umumnya mengadakan rapat singkat yang hanya membahas masalah-masalah mengerikan.

Selanjutnya kami memiliki ulasan unit. Ini umumnya dilakukan dengan tiga pengembang dan akan dilakukan ketika unit / fitur telah diuji dan siap untuk digabungkan ke pohon utama. Ini adalah ulasan yang paling sedikit dan akan membahas sedikit detail. Kami memiliki tiga pengembang untuk ini karena kami memiliki penulis asli kode, pengelola pohon yang harus menandatangani kode sebelum dapat digabungkan, dan pengembang ketiga yang telah dipilih sebagai cadangan untuk pengembang asli (Gagasan bahwa begitu satu bagian kode telah selesai, harus ada transfer pengetahuan penuh ke satu anggota tim lainnya, sehingga selalu ada setidaknya 2 orang di tim yang sepenuhnya merasa nyaman dengan bagian mana pun dari basis kode).

Terakhir, kami mendapat ulasan proyek. Ini mencakup seluruh tim dan akan memakan waktu sekitar satu minggu, dan dilakukan setelah QA dan peluncuran produk, dan tujuannya adalah untuk membuat semua orang duduk dan berjalan melalui semua perubahan pada basis kode seluruh selama siklus rilis terakhir, di mana semua orang bisa berbicara tentang perubahan arsitektur, mengerti, dan memutuskan apa yang perlu di refactored dan diperbaiki sebelum kami memulai pengembangan pada versi proyek selanjutnya.

Cercerilla
sumber
2

Pertama, tulis tes otomatis untuk kode yang akan dikembangkan. Tinjau pengujian untuk memastikan semua persyaratan yang diketahui sedang diuji. Tulis kodenya. Tinjau sesering yang diinginkan.

Jika diperlukan pengujian manual, penting untuk meninjau kode sebelum pengujian manual dilakukan. Jika tidak, perbaikan desain yang disarankan dalam tinjauan kode akan ditolak karena tes manual harus dijalankan kembali.

kevin cline
sumber
Dan bagaimana dengan ulasan? Itu juga harus diulang setelah kode diubah, setelah pengujian (jika kesalahan ditemukan).
Silver Light
2

Mana yang pertama, telur atau ayam?
Tergantung.

Jika Anda baru dan tidak yakin dengan apa yang Anda lakukan, maka mintalah seorang rekan untuk memberi Anda sedikit bantuan. Ini adalah tinjauan kode informal namun sangat serius dan berharga.

Secara umum meskipun saya akan menyarankan Anda melakukan pekerjaan kotor Anda sendiri terlebih dahulu, pastikan Anda telah menyetrika kode, berkomentar dengan baik di tempat yang tepat (yaitu bit yang rumit, bukan yang jelas), setidaknya pada dasarnya bekerja (Anda memiliki diuji pada kasus umum yang sangat minimum dan beberapa kasus atau pengecualian tertentu). Kemudian Anda membawanya ke rekan Anda.

Mendapatkan kode Anda ditinjau terlalu dini bisa berakhir dengan buang-buang waktu rekan kerja Anda. Meninjaunya terlambat dapat berakhir dengan buang-buang waktu Anda. Anda perlu menemukan keseimbangan yang tepat untuk efisiensi tertinggi. Jadi, beberapa tes dilakukan lebih dulu, lalu review, lalu lebih banyak pengujian. Berpotensi Anda mungkin memiliki beberapa ulasan kode, tergantung pada kompleksitas dan iterasi, dengan berbagai tujuan dan fokus.

Semakin tidak yakin Anda semakin banyak ulasan (ketika Anda berada di fase pembelajaran awal Anda, ini normal). Semakin yakin Anda semakin banyak ulasan (tidak pernah baik untuk terlalu yakin pada diri sendiri, itu berarti Anda umumnya tidak sebagus pemain tim dan bisa membuat orang lain dalam masalah, Anda perlu memastikan kode Anda dapat dipahami dan digunakan oleh orang lain). Saat Anda berada di tengah-tengah, ulasan dapat diberi spasi.

Hanya dua sen saya.

pindahkan
sumber
2

Capers-Jones, yang telah mempelajari dan mengukur efisiensi dan kualitas proses pengembangan perangkat lunak yang dihasilkan lebih dari siapa pun, merekomendasikan urutan aktivitas penghilangan cacat berikut :

  • Inspeksi desain
  • Inspeksi kode
  • Tes unit
  • Tes fungsi baru
  • Tes regresi
  • Tes kinerja
  • Tes sistem
  • Tes beta eksternal

Salah satu alasan untuk melakukan inspeksi kode sebelum pengujian adalah agar peninjauan tidak hanya mempertimbangkan kode itu sendiri, tetapi juga kemampuan uji kode.

johnblattner
sumber