Sudah diketahui umum bahwa uji end-to-end dan integrasi mahal. Tentu saja jika kita mengembangkan aplikasi di mana orang mungkin mati jika ada yang salah itu adalah investasi yang berharga. Namun dalam aplikasi di mana kesalahan bukanlah akhir dari dunia, bukankah akan lebih murah untuk melewatkan tes E2E dan tes integrasi sama sekali dan bukannya membuat rencana cadangan jika terjadi kesalahan? Suka adalah tes manual cerita pengguna + tes unit + menggunakan bahasa yang diketik secara statis?
Seperti misalnya jika toko web kehilangan pesanan mereka malah bisa mengirim item gratis + item lain sebagai permintaan maaf. Pengguna akhir mungkin berakhir lebih bahagia dengan cara itu dan perusahaan secara keseluruhan menghemat uang.
Saya kira pertanyaan saya adalah, secara umum berapa biaya tes integrasi dan uji E2E dan berapa banyak uang yang dihemat? Apakah ada cara untuk melakukan perhitungan risiko / biaya untuk ini?
Jawaban:
Tidak masalah jika Anda menerapkan tes E2E dan integrasi atau tidak, Anda memerlukan rencana cadangan . Jangan pernah berharap sistem bebas bug hanya karena telah diuji.
Jadi, dalam estimasi biaya Anda, Anda tidak membandingkan biaya untuk menerapkan tes E2E terhadap biaya estimasi rencana cadangan Anda jika terjadi kegagalan, Anda membandingkan:
vs.
Jika Anda dapat menggunakan tes E2E beberapa kali, biasanya akan ada sejumlah tes berjalan di mana biaya mencapai titik impas. Itu harus menjadi metrik yang Anda terapkan ketika ingin merencanakan ke depan yang akan menguji E2E Anda lakukan secara manual, dan yang akan Anda otomatisasi.
Catatan mungkin ada beberapa jenis tes E2E yang dapat diimplementasikan dengan mudah, di mana ROI segera jelas, tetapi ada juga jenis tes E2E di mana pengembangan dan pemeliharaan mungkin lebih mahal daripada melakukannya secara manual selama beberapa tahun.
sumber
Mungkin berlawanan secara intuitif, pengujian otomatis sebenarnya dapat mengurangi waktu pengembangan vs tanpa pengujian. Jadi ini adalah win win.
Idenya adalah bahwa tes berkontribusi pada sejumlah level
Paksa pengumpulan dan spesifikasi persyaratan yang ketat
Ini membuat dampak besar pada kecepatan pembangunan. Tidak akan kembali meminta detail lebih lanjut, tidak ada kesalahpahaman, tidak ada fitur yang tidak dibutuhkan dll
Pengembang tahu kapan fitur selesai
Sebagian besar pengujian dilakukan oleh pengembang selama penulisan kode daripada penguji memeriksa produk jadi. Mengotomatiskan pengujian ini mengurangi beban kerja ini
Bug yang diperkenalkan oleh fitur baru terdeteksi secara instan.
Ini dapat dengan mudah membuat Anda sprint dan memerlukan penulisan ulang seluruh fitur jika tidak terdeteksi.
Siklus rilis lebih cepat
Ini berarti lebih sedikit kode dalam penerbangan, yang berarti lebih sedikit penggabungan, yang berarti lebih sedikit pekerjaan dan kompleksitas bagi pengembang
Terutama jika Anda memiliki pengaturan kerangka pengujian, menulis tes ini membutuhkan waktu lebih sedikit daripada yang Anda hemat dalam efisiensi ini.
Plus, Anda menghemat waktu pengujian manual, plus Anda mendapatkan produk yang lebih baik pada akhirnya.
sumber
Jawabanku? Mungkin, mungkin juga tidak .
Tes EOE bagus ketika mereka sangat sederhana. Jika Anda berencana untuk membahas skenario dasar, Anda dapat mengatur untuk mendapatkan beberapa keuntungan dengan tes EOE. Tetapi jika Anda memiliki aplikasi yang benar-benar kompleks dan besar (mission critical atau tidak), tes EOE ini akan mahal untuk dipelihara dan Anda perlu mengetahui skenario Anda untuk menilai apakah layak.
Beberapa tahun yang lalu Google Testing Blog membahas masalah ini. Saya hanya bisa setuju dengan penulis. Tes yang baik harus cepat , andal , dan mengisolasi kegagalan , fitur-fitur yang tidak bisa diberikan oleh pengujian EOE kepada Anda.
Saya mengerjakan aplikasi yang memiliki lebih dari 12 jam tes ujung ke ujung yang mencakup banyak skenario. Akhirnya kami berhasil mendistribusikan tes ini pada mesin yang berbeda, mengendalikan awal, pelaksanaan, dan akhir pengujian, mengumpulkan dan menggabungkan hasilnya. Aplikasi yang diuji adalah aplikasi monolith (apa yang lebih mudah disiapkan dan dijalankan untuk diuji) dan merupakan mimpi buruk untuk mempertahankan tes.
Sebagian besar waktu kami mempertahankan tes bukannya menangkap bug dari hasil mereka. Menemukan asal bug pada tes ujung ke ujung membutuhkan banyak waktu. Kami juga menangani banyak tes "false-negative" dan sedikit waktu untuk memahami masalah dan memperbaikinya: Java memuat masalah Applet, elemen yang diharapkan tidak ditemukan pada halaman (ditambah masalah lain tentang kecepatan otomatisasi), mempertahankan kode kueri yang hanya digunakan pada tes memori database (karena permintaan asli menggunakan kode spesifik database), dll.
Semua ini membutuhkan orang untuk mempertahankan dan menjalankan. Pada akhirnya kami mulai menghapus beberapa tes EOE dan menggantinya dengan banyak tes unit / integrasi.
Jadi, saran konservatif saya adalah menggunakan piramida pengujian dari Google:
sumber
Dalam pengalaman saya pengujian E2E, terlepas dari kekritisan aplikasi, selalu bijaksana. Saya selalu berpikir dalam hal skenario terburuk, jika segala sesuatunya berubah menjadi pir, apakah Anda merasa nyaman berdiri di depan manajemen dan membenarkan pendekatan Anda? Jika tidak, maka Anda perlu mengubah pendekatan Anda. Banyak organisasi meminimalkan pentingnya dan sumber daya yang dialokasikan untuk pengujian, tetapi yakinlah bahwa ketika ada masalah, semua orang mencari seseorang untuk disalahkan dan jika Anda membuat keputusan untuk membatasi pengujian atau memberikan saran itu, maka Andalah yang akan menembak. baris.
Pengembangan perangkat lunak terlalu sering membutuhkan pengawasan terhadap politik organisasi.
sumber
"Sudah diketahui bahwa tes end-to-end dan integrasi mahal."
Saya pikir saya tidak setuju dengan pernyataan ini.
Pertama, tes E2E adalah hal yang penting bagi pengguna akhir dan dapat menjadi pilihan yang paling hemat waktu / biaya terendah untuk menguji sistem yang kompleks. Misalnya, ketika seseorang membeli mobil, kebanyakan orang tidak menariknya berkeping-keping dan mulai menguji karbohidrat, gearbox, roda secara terpisah. Sebagai gantinya, mereka mengambilnya untuk test drive.
Kedua, dalam hal tooling, E2E tidak cenderung memperlambat evolusi internal produk dan bertahan lebih lama. Jika Anda memikirkannya, permukaan fungsional sebenarnya dari sebagian besar produk jarang berubah sebanyak itu, sementara secara internal ia dapat mengalami berbagai macam perkembangan. Sebagai hasilnya, begitu alat uji aktif dan berjalan, biasanya berlangsung sangat baik. Sebagai contoh, jika kita kembali ke analogi mobil. Kasing "take it for a drive" yang sama akan cukup berfungsi pada Ford Model T seperti pada Tesla. Seperti halnya investasi dalam jalan bergulir, terowongan angin, pengaturan pengujian kebocoran, dll. Berapa banyak pengujian komponen internal yang memiliki ROI yang baik selama masa hidup mereka?
Di mana pengujian E2E cenderung lebih mahal / tidak tepat meskipun dalam pengaturan awal dan jika digunakan untuk mencoba dan menguji semuanya. Secara pragmatis, saya pikir cara terbaik untuk menghindari jebakan ini adalah dengan mengotomatiskan pengujian hal-hal yang:
Gunakan segala bentuk pengujian termasuk E2E yang Anda anggap tepat. Fokus pada hal itu.
sumber
Anda tidak dapat benar-benar membandingkan biaya pengujian integrasi dengan biaya skenario kasus terbaik di mana bug hanya mempengaruhi satu urutan. Bug yang logis mungkin akan memengaruhi banyak pesanan. Katakanlah bug berarti bahwa tidak ada pembayaran yang ditangkap - ini bisa berdampak buruk bagi bisnis apa pun.
Anda harus bertanya apa bug kasus terburuk yang secara realistis dapat berakhir dalam produksi karena kurangnya pengujian E2E. Dan ingat hukum Murphys.
sumber
Saya berasumsi bahwa pertanyaan ini adalah tentang aplikasi web perusahaan.
Rekomendasi saya untuk hal-hal sedang-kritis:
Saya pikir sebagian besar tes harus pada level API atau level komponen. Saya tidak peduli dengan unit test yang hanya menjalankan beberapa fungsi internal.
sumber