Saya bekerja di tempat di mana kami membeli banyak proyek TI. Kami saat ini memproduksi standar untuk persyaratan sistem untuk permintaan proyek di masa depan. Dalam proses itu, kami mendiskusikan apakah kami dapat meminta pengujian unit otomatis dari pemasok kami.
Saya sangat percaya bahwa pengujian unit otomatis yang tepat adalah satu-satunya cara untuk mendokumentasikan kualitas dan stabilitas kode. Semua orang tampaknya berpikir bahwa pengujian unit adalah metode opsional yang hanya menyangkut pemasok. Dengan demikian, kami tidak akan menuntut pengujian unit otomatis, pengujian berkelanjutan, laporan cakupan, inspeksi uji unit atau hal semacam itu. Saya menemukan kebijakan ini sangat membuat frustrasi.
Apakah saya benar-benar di luar garis di sini?
Tolong berikan saya argumen untuk setiap pendapat.
sumber
Jawaban:
Masalahnya adalah Anda tidak akan (atau paling tidak sangat jarang) mendapatkan pengujian unit otomatis yang tepat dengan memaksanya pada orang-orang. Itu cara yang baik untuk mendapatkan tes buruk dan menaikkan biaya proyek.
Secara pribadi, saya akan mencari beberapa permintaan atau SLA yang melibatkan kualitas; terlepas dari bagaimana hal itu dicapai. 10 tahun yang lalu unit test jarang terjadi. Anda tidak ingin memborgol pemasok Anda dalam 10 tahun ketika kami memiliki metode yang lebih baik untuk memastikan kualitas tetapi kebijakan usang Anda mengharuskan mereka menggunakan cara lama.
sumber
Secara pribadi saya berpikir bahwa dalam kasus Anda, Anda harus berpikir dalam hal tes penerimaan sebagai gantinya:
Perhatikan juga bahwa ini masalah kepercayaan. Jika Anda tidak mempercayai pemasok Anda, maka Anda perlu mendapatkan kode sumber, memeriksanya, dan mengompilasinya sendiri. Sesuatu yang kurang dari itu berarti bahwa Anda setidaknya kepercayaan mereka beberapa .
sumber
Ini mengejutkan saya betapa umum pemikiran ini. Otomatis, ya. Unit testing (sendiri), no. Ada jauh lebih banyak untuk pengujian perangkat lunak otomatis daripada tes unit saja. Bagaimana dengan integrasi, sistem, fungsional, QA? Untuk beberapa alasan orang cenderung berpikir, "Oke, jadi kami memiliki unit test yang tepat. Selesai dengan pengujian, sebut saja Jumat malam!" . Pengujian unit hanyalah permulaan.
Bagaimanapun, kembali ke topik. Saya setuju dengan orang lain yang mengatakan bahwa memaksakan sesuatu pada siapa pun mungkin akan menghasilkan hasil yang berlawanan dengan yang diinginkan. Anda tidak pernah tahu cara kerja tim, mungkin mereka mendapat departemen pengujian bernilai jutaan dolar dan tidak pernah menulis uji unit tunggal.
Pada pekerjaan pertama saya, saya dulu bekerja di tempat di mana kami memiliki 0 unit test (kami sekelompok junior melemparkan pada hal-hal yang kurang lebih serius). Percaya atau tidak, itu berhasil. Tentu, tidak ada yang curiga mengapa bug ini diperbaiki, atau apa yang diperbaiki, tetapi berhasil. Ada kalanya beberapa bug yang benar-benar acak akan muncul, tetapi
tongkat bisbol dan risiko apartemen Anda terbakarbeberapa jam tambahan bisa menghasilkan keajaiban. Mungkin pemasok Anda menggunakan teknik serupa ?sumber
Saya sangat meragukan bahwa manajemen Anda akan bersedia membayar untuk pengujian unit yang tepat dalam suatu kontrak. Biaya pengujian unit yang tepat sama seperti kode yang mereka uji, tetapi memberikan sedikit nilai yang dirasakan kepada pengguna akhir sehingga mereka tidak akan dilihat sebagai sama-sama berharga. Tidak ada perusahaan pengembangan kualitas yang mau menghabiskan upaya pengembangan pada tes unit dengan biaya lebih rendah daripada bagian lain, karena mereka tidak melukai pekerjaan, mereka dapat membuat lebih banyak menemukan 2 kontrak yang mengambil jumlah waktu yang sama tanpa persyaratan unit test.
Uji unit yang menuntut kemungkinan akan meningkatkan penawaran harga Anda ke tingkat yang tidak masuk akal, dan kemungkinan akan menjadi konsesi pertama yang dilakukan untuk mendapatkan harga yang lebih rendah.
sumber
Biaya tidak memiliki unit test tergantung pada seberapa banyak Anda akan memperpanjang / mendukung kode Anda sendiri. Menginspeksi bagian-bagian kode untuk mendapatkan gambaran tentang kualitas juga penting.
Jika Anda hanya membeli proyek sehingga Anda dapat menggunakannya seperti perpustakaan pihak ke-3 dan tidak percaya Anda akan memodifikasinya, maka risiko kode berkualitas lebih rendah lebih kecil, asalkan itu benar-benar berfungsi.
Ini pada akhirnya adalah keputusan bisnis, meskipun Anda harus memastikan siapa pun yang membuat keputusan juga sadar akan penilaian teknis. Jika Anda perlu menjelaskannya kepada manajemen, jelaskan itu seperti membeli mobil bekas. Pada akhirnya tergantung pada pembeli untuk memutuskan apakah itu layak, tetapi membawanya ke mekanik adalah ide yang baik sehingga Anda tahu Anda tidak mendapatkan lemon.
sumber
Anda membayar, Anda dapat menuntut apa pun yang Anda inginkan, termasuk salinan / laporan dari semua pengujian unit mereka.
Anda bahkan dapat menulis tes, atau setidaknya spesifikasi tes sendiri.
Saya setuju dengan pandangan Anda karena ini merupakan ukuran kualitas kode yang sangat baik. Jika pemasok menolak permintaan ini, itu akan membunyikan bel alarm, mengapa mereka tidak mau melakukannya - mereka memiliki standar kualitas rendah dan mengambil jalan pintas?
sumber
Anda sepenuhnya benar bahwa proyek Anda memerlukan pengujian unit otomatis, pengujian berkelanjutan, laporan cakupan, dan inspeksi pengujian unit.
Namun, hal-hal yang menuntut tidak akan mencapai hasil yang Anda inginkan seperti yang orang lain perinci.
Tantangan Anda adalah menjelaskan dan membujuk orang - keterampilan yang jauh lebih sulit!
Pada awalnya saya akan mulai dengan manajemen, menjelaskan pro dan kontra pengujian dan imbalannya. Harap berhati-hati untuk tidak mengomunikasikan emosi di balik pernyataan seperti 'Saya menulis tes unit PROPER' (huruf besar milik Anda). Anda tidak ingin 'meneriakkan' kata-kata (seperti yang disiratkan SEMUA CAPS) Anda akan membujuk dan meyakinkan orang sehingga mereka sendiri dapat memilih solusi yang tepat.
Pada akhirnya jika Anda tidak dapat memperkenalkan metodologi ini dan membuat mereka memeluk di mana Anda berada, ditambah jika Anda bersemangat tentang mereka seperti yang Anda nyatakan (yang baik!) Saya akan ke perusahaan yang berbeda karena ada banyak yang menghargai nilai hal-hal ini dan akan menyambut Anda di kapal. Pastikan Anda berada di depan tentang mereka dalam wawancara sehingga mereka tahu di mana gairah hidup Anda dan jika Anda akan cocok.
sumber
Memaksa pengujian otomatis pada seseorang tidak akan mencapai hasil yang Anda inginkan seperti yang ditunjukkan @ Joachim Sauer dan @Telastyn dalam komentar mereka. Bagi banyak orang pengujian unit otomatis adalah perubahan besar dalam pemikiran mereka. Karena banyak orang menulis kode yang berfungsi, tetapi tidak terlalu bisa diuji. Saya bisa menulis halaman web ASP.NET di mana semua logika, kueri database, aturan bisnis, objek, dll. Ada dalam kode di belakang. Apakah halaman akan berfungsi? Iya nih. Apakah dapat diuji menggunakan pengujian unit otomatis? Benar-benar tidak. Jika pemasok tidak memiliki pengujian unit otomatis maka perlu upaya untuk mempelajari cara menulis pengujian unit dengan benar dan sebagai hasil dari mempelajari hal ini, tulis ulang atau masukkan kembali kode mereka untuk membuatnya lebih mudah diuji. Kemungkinan mereka akan memberikan biaya itu kepada Anda.
Faktanya adalah pemasok memberi Anda produk, baik itu aplikasi .dll atau windows, dan Anda mengharapkannya berfungsi 99% dari waktu. Tentu ada bug di sana-sini, tetapi sebagian besar itu seharusnya bekerja. Itu adalah harapan yang masuk akal, terutama jika pemasok ingin mempertahankan bisnis Anda. Jika kotak hitam maka tidak masalah bagaimana mereka membuatnya bekerja, mereka bisa menggunakan gelombang penguji manusia, atau ruangan yang penuh dengan kera yang secara acak mengenai kunci. Selama itu berhasil. Tetapi mereka perlu memberi Anda semacam dokumentasi lain tentang cara menggunakannya.
Namun, jika mereka memberi Anda kode sumber sehingga Anda dapat memodifikasinya, maka saya akan mengharapkan unit test. Saya tidak akan bekerja dengan perusahaan yang tidak menyediakan tes unit. Bagaimana lagi Anda tahu modifikasi yang Anda lakukan tidak menyiratkan semuanya?
sumber
Pengujian unit merupakan indikasi bagaimana pemasok menangani risiko selama siklus pengembangan. Mereka yang menggunakan tes unit menghargai pengurangan risiko dan kualitas tes tersebut merupakan indikasi seberapa banyak risiko telah dikelola.
Dengan itu, unit test tidak menentukan tingkat risiko apa yang sedang berusaha ditangani oleh proyek. Itu juga tidak memainkan peran apa pun dalam pengurangan risiko yang disebabkan oleh praktik pemrograman yang buruk.
Oleh karena itu, Anda dapat memiliki satu pemasok yang memiliki praktik pengujian yang solid di tempat tetapi terus menulis kode yang sangat berisiko sementara pemasok lain yang tidak melakukan pengujian tetapi menulis kode risiko rendah. Jika dua pemasok menawarkan produk yang sama, maka yang terbaik adalah pergi dengan pemasok berisiko rendah.
Ini hanya dapat diukur dengan mewawancarai, membimbing, dan belajar tentang kepribadian dan keterampilan orang-orang yang terlibat dengan pemasok itu.
sumber
Saya menemukan artikel ini tentang membeli perangkat lunak khusus cukup berguna: http://blog.8thlight.com/paul-pagel/2012/06/20/entrepreneurs-guide-to-buying-software.html
Pertanyaan nomor satu yang mereka sarankan untuk diajukan adalah apakah pemasok menulis tes.
sumber
Menyetujui orang lain yang menuntut pengujian unit akan mengarah pada pengujian demi pengujian; sesuatu yang sangat berlawanan dengan apa yang Anda inginkan.
Dalam proses pemeriksaan pemasok Anda; tanyakan kepada mereka apa proses pengembangan mereka karena pengujian hanyalah salah satu bagian dari proses itu.
Apakah mereka memiliki proses pembuatan otomatis? Apakah mereka mengikuti beberapa paradigma manajemen? Apakah mereka memiliki penguji yang terlatih dan tim jaminan kualitas independen ? Bagaimana dengan standar dokumentasi?
Ini akan membantu Anda menilai kualitas keseluruhan proses mereka, dan pada gilirannya kualitas apa yang mereka hasilkan.
sumber
Tampaknya bagi saya bahwa memasukkan persyaratan ini akan memiliki sedikit manfaat praktis, karena tidak mungkin untuk menegakkannya.
Anda dapat meminta kode untuk tes yang sebenarnya, atau laporan tentang tes apa yang sebenarnya berjalan dan berlalu. Jika itu adalah proyek berpemilik, vendor mungkin tidak ingin memasok itu, karena kemungkinan besar akan sangat menyarankan rincian kode, dan mungkin berani dibuat untuk memberikan rincian implementasi tingkat rendah dan mengatakan bagaimana melakukannya. pekerjaan. Pada titik tertentu, harus ada kepercayaan.
Jika tidak, mereka dapat membuat Anda meledak, tetapi hanya dengan mencentang kotak di sebelah "menjalankan serangkaian pengujian unit" untuk memenuhi persyaratan dengan menulis satu tes yang lulus jika utilitas mereka mengkompilasi dan menjalankan atau setengah-sejenisnya upaya.
Jadi, sementara tes unit otomatis adalah praktik yang patut dipuji, saya tidak berpikir itu praktis untuk bersikeras dari vendor luar.
sumber
Seperti yang banyak orang tunjukkan, memaksa vendor untuk menulis tes unit (atau lebih baik, kombinasi unit otomatis dan tes integrasi) untuk memenuhi kontrak mungkin tidak akan menghasilkan hasil yang berkualitas tinggi. Di sisi lain, saya setuju bahwa pengujian otomatis sejauh ini merupakan metode terbaik yang saat ini digunakan untuk memastikan kualitas kode.
Saya pikir kode yang ditulis dengan tes unit jauh lebih mudah dipelihara daripada kode yang ditulis pertama dan memiliki tes unit ditambahkan kemudian. Ini memaksa modularitas dan ketergantungan minimal. Tes integrasi juga diperlukan untuk memverifikasi kebenaran kode, tetapi mereka tidak memiliki dampak yang sama pada kualitas kode seperti yang tertulis. Intinya, tes integrasi otomatis dapat ditambahkan setelah fakta, tetapi tes unit memiliki dampak paling besar ketika ditulis dengan kode asli.
Saran saya untuk situasi Anda adalah mencari vendor yang lebih suka menulis kode dengan tes unit, dan memilih mereka dibandingkan vendor yang cenderung tidak menulis kode dengan tes bersatu. Jika manajemen akan membayar untuk itu, masukkan tes otomatis dalam kontrak tetapi HANYA JIKA VENDER DIGUNAKAN UNTUK MENULIS KODE DENGAN UNIT TES.
sumber
Mari kita dapatkan prioritas langsung ...
Dalam peran Anda sebagai pelanggan, perhatian utama Anda bukanlah pengujian unit
Jika Anda menggunakan pemasok yang menghasilkan perangkat lunak untuk Anda, maka Anda benar-benar tidak perlu khawatir jika mereka menggunakan satu metodologi atau lainnya. Taruhan Anda adalah untuk mendapatkan semacam solusi yang akan membantu mencapai tujuan Anda. Satu-satunya hal yang harus Anda perhatikan adalah apakah solusi itu dapat diterima atau tidak. Itu sebabnya kami memiliki pengujian penerimaan karena terletak pada tanggung jawab Anda untuk memastikan bahwa Anda mendapatkan apa yang Anda inginkan. Pada saat penting penerimaan pelanggan, uang akan ditransaksikan dari kantong perusahaan Anda ke dalam kantong pemasok.
Anda dapat meminta pengujian unit sebagai persyaratan yang dapat dikirim tetapi ada beberapa masalah bawaan pada tes tersebut, yang paling parah adalah tidak ada cara pasti sebelumnya untuk menentukan metrik:
Haruskah ada 10 tes? Bagaimana dengan 100 tes? Bagaimana dengan 1000 tes? Sebenarnya, pada awalnya cukup sulit untuk menentukan berapa banyak tes yang Anda perlukan. Jumlah sebenarnya benar-benar tidak dapat ditentukan ... seperti masalah penghentian ... tapi kami tidak menyelesaikan masalah itu.
Anda hanya ingin perangkat lunak yang memiliki unit-test sehingga Anda dapat melanjutkan pengembangan. Unit-test tidak memberi tahu apa yang telah Anda rusak, tetapi mereka sangat cocok untuk memberi tahu Anda ketika kode memiliki bug regresi.
"100%, tentu saja!" kamu akan berpikir. Sayangnya metrik itu menyesatkan; bahkan jika Anda memiliki cakupan kode 100%, apakah Anda benar-benar yakin semuanya berjalan seperti yang diharapkan? Dimungkinkan untuk memiliki cakupan 100% tetapi tidak dilakukan.
Apa yang benar-benar perlu Anda lakukan adalah pengujian eksplorasi, yaitu menemukan seseorang yang benar-benar pandai memecahkan barang-barang dan membiarkan mereka melakukan pengujian. Untuk menemukan bug yang tidak pernah dipikirkan oleh pengembang.
Juga 100% terkadang tidak dapat dicapai dengan tes unit murni jika Anda memiliki beberapa peretasan kinerja yang diperlukan dan menggunakan pola desain yang sulit untuk diuji (cari "singleton" dan "tdd" di mesin pencari favorit Anda dan Anda akan menemukan beberapa contoh).
Anda ingin perangkat lunak yang dikirim berfungsi dan dokumen spesifikasi adalah satu-satunya garansi yang Anda inginkan .
Anda akan membutuhkan tingkat pengujian yang lebih tinggi
Dokumen spesifikasi Anda harus diverifikasi entah bagaimana. Setiap poin harus dilalui dengan pemasok Anda yang memiliki tujuan dan kriteria penerimaan yang jelas. Organisasi QA yang berfungsi dengan baik (atau penguji yang luar biasa jika Anda memiliki anggaran dan cakupan terbatas) akan memberikan kasus uji untuk memeriksa kriteria penerimaan ini. Anda juga membutuhkan seseorang untuk memverifikasi kriteria penerimaan tersebut.
Ada beberapa cara untuk memverifikasi tujuan Anda, dan jika seseorang memberi tahu saya bahwa Anda tidak dapat menetapkan sasaran kualitas, kinerja, dan efisiensi yang waras, saya akan memahaminya dengan buku-buku besar dan berat tentang eksplorasi, kinerja, dan pengujian kegunaan masing-masing. Mungkin mudah untuk berlebihan dengan tujuan, tetapi pengetahuan dan komunikasi akan membantu Anda menetapkan tujuan yang realistis.
Saya bukan pengacara tetapi sebagian besar kontrak proyek (yang pada dasarnya adalah ibu dari semua spesifikasi untuk proyek) yang saya baca biasanya memiliki kriteria rasio cacat yang menetapkan berapa banyak bug yang dianggap dapat diterima. Bug biasanya ditentukan melalui tingkat keparahan, bug yang berhenti muncul yang ditemukan oleh QA memiliki toleransi yang rendah sedangkan cacat minor memiliki toleransi yang tinggi. Dalam proyek nyata sulit untuk menuntut bahwa perangkat lunak harus memiliki 0 cacat. Tenggat waktu biasanya menghentikan praktik itu. Pada situasi inilah Anda harus mulai menawar ruang lingkup.
Sebagian besar perangkat lunak yang disediakan yang saya lihat biasanya tidak disertai dengan tes unit. Anda dapat berargumen bahwa pemasok harus cukup profesional untuk memberikan ini, namun alasan utama Anda ingin pengujian unit dikirimkan kepada Anda adalah untuk memastikan bahwa Anda tidak mendapatkan bug regresi dan juga memungkinkan refactoring. Dalam kehidupan nyata dengan proyek-proyek dengan tenggat waktu yang ketat, baik pemasok dan pelanggan akan menurunkan ruang lingkup dan tes unit biasanya akan keluar jendela dan dihapus dari daftar hasil yang diperlukan.
Agak menyedihkan bahwa perangkat lunak open source profil tinggi datang diberikan dengan unit-test tetapi pengembang perangkat lunak profesional tidak bisa, kan?
Jadi kapan saya, sebagai pelanggan, peduli dengan pengujian unit?
Saya berpendapat bahwa satu - satunya waktu Anda benar - benar peduli tentang pengujian unit adalah jika perangkat lunak yang dapat dikirim adalah komponen mandiri yang tidak dieksekusi sebagai program yang berdiri sendiri, di mana pengujian paling kasar yang dapat Anda lakukan adalah uji unit . Perpustakaan kelas akan menjadi salah satu jenis produk yang dapat dikirimkan bersama dengan tes unit.
sumber
Bagaimana Anda tahu vendor tidak menulis unit test.
Mungkin manajemen dan vendor mengadakan pertemuan dan vendor berkata, kode harganya $ X dan unit test berharga $ Y. Manajemen mencubit sen mengatakan kami hanya ingin kode.
Vendor memutuskan untuk menulis unit test (karena kualitas) dan tidak membagikannya dengan Anda (karena keunggulan kompetitif).
Sekarang Anda perlu melakukan beberapa penyesuaian besar pada perangkat lunak. Karena Anda memiliki kode, Anda dapat melakukannya sendiri atau menyewanya secara kompetitif (tidak harus ke vendor asli). Tetapi karena Anda tidak membeli unit test, vendor asli akan dapat melakukan pekerjaan berkualitas yang sebanding dengan harga yang lebih murah untuk setiap pesaing.
sumber
Ada banyak proyek yang sangat berhasil walaupun kenyataannya mereka tidak menggunakan tes unit. Lihat saja kernel linux, ini adalah proyek raksasa dengan kompleksitas yang jauh melebihi apa yang Anda temukan dalam proyek normal mana pun, dan masih berfungsi. Jadi, jika hasilnya adalah perangkat lunak yang baik, Anda seharusnya tidak peduli bagaimana mereka mencapainya.
sumber
Tidak, Anda tidak perlu menuntut unit uji yang lengkap dan otomatis. Yang lebih penting adalah mereka memberi Anda dokumen strategi pengujian yang tepat. Kami melakukannya dengan baik dengan cara ini.
sumber