Bagaimana perusahaan besar pengembang perangkat lunak memeriksa bug dalam program mereka?

15

Saya bertanya-tanya bagaimana perusahaan besar pengembang perangkat lunak memeriksa bug dalam program mereka.

Apakah mereka hanya mengujinya di beberapa komputer?

dinbrca
sumber
13
Melepaskan mereka. (Dilihat dari tumpukan kereta .... yang keluar dari institusi utama)
Orbling
Mereka memiliki kampanye penjualan dan pemasaran yang sangat agresif, melakukan outsourcing pengembangan ke negara-negara lain dan lolos dengan bug apa pun yang mereka bisa ... sampai mereka "secara tak terduga" kehilangan pangsa pasar yang sangat besar.
Pekerjaan
Menurut Anda mengapa itu berbeda untuk perusahaan besar daripada perusahaan kecil?
JohnFx

Jawaban:

30

Berikut adalah beberapa teknik yang digunakan Google.

  1. Pekerjakan pengembang yang baik yang cenderung menghasilkan kode yang andal.
  2. Tes unit berat.
  3. Gunakan ulasan kode .
  4. Menyiapkan pembangunan berkelanjutan untuk menangkap masalah integrasi.
  5. Telah mendedikasikan departemen QA. Berarti kedua orang menguji, dan program otomatis (misalnya menggunakan Selenium) yang mensimulasikan pengguna akhir.
  6. Memiliki pemantauan dalam produksi untuk menangkap bukti hal-hal yang tidak pantas.

Saya peringkat ini dalam apa yang saya curigai adalah urutan keefektifan dalam menangkap bug.

btilly
sumber
2
Meskipun bukan jawaban yang buruk, Anda menggunakan banyak terminologi seperti "QA", "unit test", dan "pembangunan berkelanjutan" yang mungkin tidak diketahui oleh orang yang akan mengajukan pertanyaan seperti ini. Akan lebih baik jika Anda menautkan atau memberi definisi.
Gabe
@ Gabe: Saya telah menambahkan pointer ke terminologi yang digunakan.
btilly
3
+1 - Sebenarnya itu adalah urutan yang cukup bagus (1-> 6) ketika itu TERBAIK (mis. Termurah, dalam waktu dan kompleksitas) untuk menangkap bug juga.
ozz
1
mungkin juga pengujian kegunaan, sebelum pita 90% permintaan fitur kata untuk fitur yang sudah dimiliki, pengguna tidak dapat menemukannya
jk.
@ jk: statistik siapa itu? harap kutip.
JBRWilkinson
19

Perusahaan-perusahaan yang lebih besar biasanya memiliki seluruh departemen Q / A yang bertanggung jawab untuk menguji kode dan memastikan itu bekerja seperti yang seharusnya. Biasanya seperti yang Anda gambarkan - sekelompok orang menguji banyak mesin. Kadang-kadang tes otomatis, kadang-kadang tidak. Lihat Jaminan Kualitas - Wikipedia

Sering kali, pengembang sendiri akan menemukan bug selama proses pengembangan. Selain itu, pelanggan sering kali menjadi yang pertama menemukan bug.

Perusahaan kecil, seperti yang saat ini saya bekerja, gunakan praktik Agile Testing

Chad La Guardia
sumber
1
Yup, dan orang-orang QA menyusun rencana pengujian.
Pekerjaan
+1: Ini persis bagaimana kita melakukannya, tim uji (yang saya aktif) menulis rencana pengujian dan menulis semua kode tes dengan pengecualian tes unit sepele (devs menulis itu, beberapa di antaranya berlatih TDD tetapi itu tidak diamanatkan). Kami fokus pada penerimaan, integrasi, dan regresi. Ketika dev menemukan bug, mereka akan mencatatnya, memperbaikinya dan kami akan mengujinya dan menulis otomasi untuknya.
Steven Evers
18

Saya akan mengatakan ini tentang kematangan perusahaan dan bukan ukuran :) Ada perusahaan besar yang memiliki praktik pembangunan yang buruk dan perusahaan kecil yang berada di ujung tombak.

Secara umum, tim pengembang yang matang akan melakukan kegiatan berikut untuk 1; meminimalkan perkenalan bug baru ke sistem dan 2; temukan bug di sistem yang ada.

Pengujian unit: Ini adalah 'driver mini' untuk metode individual untuk memastikan bahwa metode melakukan apa yang dikatakannya. Ini selalu merupakan tes otomatis.

Pengujian integrasi: Pengujian ini bertujuan untuk memeriksa apakah unit fungsionalitas yang lebih besar berfungsi di dalam sistem. Ini mungkin melibatkan pengujian integrasi basis data atau integrasi dengan perpustakaan pihak ketiga. Ini adalah tes otomatis juga.

Pengujian penerimaan: Tes penerimaan ditulis untuk menguji kebutuhan pengguna. Ini biasanya hanya menguji 'jalan bahagia'. Di tim saya, tes ini dirancang untuk menunjukkan bahwa jika pengguna menggunakan fungsionalitas seperti yang dirancang untuk digunakan, mereka tidak akan mengalami masalah. Dapat secara manual atau otomatis.

Pengujian fungsional: Tes-tes ini mirip dengan tes penerimaan, tetapi juga menguji 'jalur tidak bahagia'. Tes ini dimaksudkan untuk menguji skenario yang tidak begitu jelas. Dapat secara manual atau otomatis.

Pengujian regresi: Kami menggunakan istilah ini untuk melakukan 'pengujian penuh' sistem sebelum dirilis ke pelanggan. Manual atau otomatis.

Pengujian gorila: (Hanya manual). Ini adalah jenis pengujian ketika manusia yang sangat pintar sengaja mencoba untuk merusak aplikasi.

Pengujian kinerja Bertujuan untuk memastikan bahwa kinerja dapat diterima dan tidak menurun seiring waktu. Biasanya otomatis.

Pengujian stabilitas: Tes ini dirancang untuk memastikan sistem tetap stabil dari waktu ke waktu. Otomatis.

Integrasi Berkelanjutan: Ini adalah sistem yang secara otomatis memeriksa kode Anda, kompilasi dan menjalankan tes otomatis Anda. Tes Anda yang lebih cepat (unit, integrasi) akan berjalan setiap kali dev melakukan kode. Beberapa yang lain dijalankan setiap malam (penerimaan, fungsional) atau mingguan (kinerja, stabilitas).

Laporan cakupan kode: Menunjukkan seberapa banyak kode Anda diuji. Kode yang tidak memiliki jangkauan pengujian cenderung rusak.

Alat berbeda yang menganalisis kode: Ini biasanya menunjukkan di mana kode perlu difaktorkan ulang agar tidak rentan terhadap bug potensial.

Pairing programming: Dua pengembang bekerja bersama untuk menghadirkan fungsionalitas. "Sepasang yang kohesif lebih baik daripada jumlah bagian-bagiannya."

Yang paling penting untuk diambil adalah: otomatisasi dan integrasi berkelanjutan .

c_maker
sumber
Tidak setuju tentang kedewasaan perusahaan - sangat mungkin bahwa kepala pengembangan perangkat lunak memperhatikan kualitas di perusahaan kecil / muda juga, dan pesan itu didorong dari atas ke bawah. Kematangan para insinyur, ya, itu mungkin.
JBRWilkinson
1
@JBRWilkinson: Saya kira kita bisa mulai berbicara tentang apa artinya bagi perusahaan untuk menjadi 'dewasa'. Saya tidak bermaksud mengatakan itu berkaitan dengan usia, lebih seperti 'kebijaksanaan'. Startup bisa menjadi dewasa / bijaksana meskipun baru berumur satu atau dua tahun.
c_maker
4

Itu tergantung pada perusahaan dan pada produk yang dikembangkannya.

Pertama, banyak perusahaan menerapkan praktik pengkodean seperti ulasan kode dan linting wajib (alat deteksi bug otomatis) untuk mengurangi jumlah kesalahan masuk ke repositori. Banyak perusahaan juga mengadopsi unit testing. Ini adalah kasus di mana saya bekerja (Google). Ketika kode dicek, tes dijalankan terhadap semuanya, untuk memastikan tidak ada kesalahan baru yang diperkenalkan.

Kedua, banyak perusahaan memiliki departemen QA yang bertanggung jawab untuk memvalidasi perilaku. Ini sangat umum di Keuangan (di mana kesalahan bisa mahal dan aturan validasinya rumit), tetapi juga ada di perusahaan yang menjual produk kepada pengguna di mana penarikan bisa mahal (misalnya, Intel, Microsoft, dll.).

Ketiga, kapan pun perusahaan memungkinkan melakukan Dogfooding (mintalah pengguna mereka sendiri menggunakan produk secara internal) dan kemudian merilis beta terbatas. Banyak kesalahan ditangkap pada tahap ini. Misalnya, orang yang bekerja di Microsoft menggunakan versi internal Office dan Windows dan DevStudio yang lebih baru daripada yang Anda miliki di luar. Kemudian kelompok pengguna atau perusahaan yang dikontrak terbatas bisa mengambil sampelnya. Demikian pula, di Google kami menggunakan versi internal GMail dan Documents sebelum dirilis. Perusahaan permainan mengatur beta terbuka untuk menguji produk dan muatannya di server, dll.

Uri
sumber
1

Tentu saja jawabannya adalah "It dpends", tetapi saya akan memberikan sampel dari proyek terbesar saya sejauh ini, yang memiliki waktu puncak sekitar 50 pengembang yang terlibat.

Pengaturan dasar: Perangkat lunak backend untuk memproses sejumlah besar data dengan BizTalk.

Garis pertahanan pertama adalah unit test. Dalam kasus kami, semua ini dieksekusi setiap hari untuk semua hal yang diperiksa ke dalam kontrol sumber dan biasanya beberapa di antaranya dieksekusi secara manual oleh pengembang sebelum check-in. Tes unit terutama ditulis oleh pengembang tetapi kadang-kadang diubah dengan tes tambahan oleh penguji.

Langkah selanjutnya adalah pembuatan PC Virtual mingguan, di mana para penguji menjalankan serangkaian tes end-to-end yang sebagian besar otomatis pada aliran data berdasarkan dokumen spesifikasi untuk setiap komponen.

Setelah itu Virtual PC yang sama diperkaya dengan beberapa data bisnis yang cukup dekat dengan yang asli dan diuji lagi dengan beberapa kasus penggunaan tertentu.

Kemudian Virtual PC disatukan dengan komponen sistem lainnya (juga sebagian besar virtual) dari departemen lain ke siklus uji integrasi berdasarkan pengujian end-to-end dari pengguna memasukkan data ke akhir aliran data.

Di jalur lain paket instalasi diuji oleh penyedia sistem untuk melihat apakah mereka menginstal dengan benar pada lingkungan seperti produksi dan jika mereka dapat dibatalkan jika ada sesuatu yang gagal.

Setelah instalasi pada lingkungan seperti produksi, kami menjalankan tes beban dan stres di sana untuk menguji stabilitas keseluruhan (bukan sesuatu yang dapat dianggap enteng ketika Anda berjalan di 10 server BizTalk, 8 Server SQL dan banyak perangkat keras khusus lainnya seperti akselerator XML dan Arsip khusus - semua terkelompok tentu saja).

Ketika kami puas dengan semua tes, kode dimasukkan ke dalam produksi. Anda mendapatkan latensi yang cukup besar untuk memperbaiki bug dalam kode (seperti 4-6 minggu untuk seluruh siklus pengujian), dan itu mahal untuk melakukan semua tes ini, tetapi stabilitas keseluruhan cukup bagus. Bahkan yang terbaik yang saya lihat sejauh ini. Sekali lagi itu sangat penting pada sistem yang memproses beberapa juta dolar setiap hari. Persyaratan Anda mungkin beragam, tetapi itulah yang kami lakukan dan berhasil.

TToni
sumber
1

Pertanyaan awal tampaknya lebih generik secara konseptual, daripada sebagian besar jawaban yang sangat terperinci yang disediakan.

Mari kita melihatnya dari level yang lebih tinggi (kurang detail). Perangkat lunak dikembangkan untuk memenuhi kebutuhan spesifik dari seseorang (orang, perusahaan, apa pun).

Kebutuhan tersebut perlu dipetakan ke dalam cerita / persyaratan individual yang belakangan ini (dalam tahap konstruksi) diimplementasikan dalam kode sumber.

Memiliki cerita / persyaratan yang terdefinisi dengan baik sangat penting bagi tim Quality Assurance (QA) (penguji perangkat lunak yang sebenarnya) untuk memvalidasi kode akhir, ketika dieksekusi, menghadiri tuntutan cerita dan persyaratan tersebut. Jadi untuk tujuan itu, tim QA menciptakan "testcases" untuk melakukan validasi itu.

Kode, setelah dirilis ke tim QA, kemudian akan diuji dan bug akan diidentifikasi. Bug dari berbagai jenis dan tingkat keparahan. Bug itu dilacak dan pengembang membuatnya ditugaskan untuk akhirnya memperbaikinya.

Penggunaan mesin virtual, saat ini, memungkinkan satu tester untuk menjalankan lingkungan yang berbeda dalam satu perangkat keras nyata yang sama. Tetapi kadang-kadang Anda akhirnya membutuhkan beberapa komputer yang didedikasikan untuk fase QA.

Saya harap ini membantu Anda memahami (secara kasar) keseluruhan proses.

Miguel Mattos
sumber
0

Yah, saya benci untuk bersikap sinis, tetapi dengan jumlah bug terbuka di sistem operasi 'perangkat' tertentu, tampaknya semakin besar dan semakin kaya perusahaan, semakin banyak bug yang mampu mereka buat dan berikan kepada pengguna akhir. Jika perangkat lunaknya agak bekerja dan terlihat keren maka mereka hanya merilisnya saja. Jika manajer berpikir siap, maka siap. Saat itulah bug yang benar-benar jahat mulai keluar dari kayu, dan pengguna akhirnya menjadi kelinci percobaan. Sepuluh tahun kemudian, sebagian besar bug akan diselesaikan (dan beberapa ditambahkan untuk ukuran yang baik) dan perusahaan akan siap untuk beralih ke ide besar berikutnya.


sumber