Saya penggemar berat pengujian. Saya menulis tentang ini di blog dan milis saya, saya membahasnya dengan pengembang lain di waktu senggang saya, saya bahkan membuat kursus pelatihan tentang pengujian di Go.
Namun terlepas dari semua kecintaan saya terhadap pengujian, saya tidak merekomendasikannya untuk pemula.
Kedengarannya liar, kan? Dalam artikel ini, saya akan mengklarifikasi sudut pandang saya secara lebih rinci, tetapi keseluruhan poin, pada akhirnya, turun menjadi dua poin:
- Pemula tidak memiliki pengetahuan yang cukup untuk menulis apa pun selain tes paling sederhana. Ini pasti mengarah ke titik berikutnya ...
- Mencoba melatih keterampilan yang diperlukan untuk menulis tes realistis sambil belajar pemrograman sangat sulit
Saya mengerti bahwa ini pada prinsipnya adalah satu poin. Bagaimanapun, saya memecahnya menjadi dua untuk membuatnya lebih mudah dimengerti.Saya tahu bahwa banyak dari Anda akan tidak setuju dengan saya, tapi tolong baca artikelnya, dan jika setelah membaca Anda tetap tidak yakin, saya akan senang mendiskusikan hal ini dengan Anda. Pada akhirnya, saya di sini untuk belajar
Pemula tidak memiliki pengetahuan untuk menulis apa pun selain tes paling sederhana
Setiap kali seorang pemula menulis kode, tujuan utamanya bukan untuk menguraikan tugas, menghindari variabel global, atau menulis kode uji. Jujur, sebagian besar pemula mungkin tidak tahu apa semua ini. Sebenarnya, tujuan utama mereka sederhana - untuk membuat benda sialan ini bekerja. Itu saja.
Mengkonfirmasi ini tidak mungkin membutuhkan upaya apa pun, lihat saja kode yang ditulis oleh pemula.
Buka aplikasi web? Tentunya mereka menulis pertanyaan SQL di mana saja dan di mana saja dalam kode, dan koneksi ke database hampir dijamin untuk disimpan dalam variabel global.
Aplikasi rel? Tentunya Anda akan melihat logika bisnis dalam pandangan dan banyak kemacetan logika di controller.
Aplikasi web PHP? Saya tidak akan terkejut jika SEMUA logikanya ada dalam satu file php tunggal - parsing formulir, interaksi dengan database, dll.
Bahkan jika kita mengambil sesuatu yang elementer, katakanlah, kalkulator dengan fungsi terbatas, kita masih menemukan contoh seperti yang saya jelaskan. Ini sama sekali bukan karena fakta bahwa pemula tidak peduli, mereka hanya belum tahu bagaimana berbuat lebih baik.
Para pemula tidak tahu apa itu injeksi ketergantungan, mereka tidak mengerti bagaimana variabel global mempersulit pengujian, kemungkinan besar mereka tidak tahu apa itu mock, jadi cukup konyol untuk mengharapkan mereka memahami cara merancang kode yang mudah dikodekan.
Akibatnya, untuk pemula, hanya tes paling sederhana seperti ini yang masuk akal:
func Add(a, b int) int { return a+b }
Meskipun saya tidak memiliki masalah untuk menunjukkan ini kepada pemula dan memberi mereka gambaran tentang apa itu pengujian, saya pikir itu cukup konyol untuk menunjukkan kepada mereka kode ini dan berpura-pura bahwa itu adalah sesuatu seperti tes nyata.
Pada akhirnya, ini mengarah pada fakta bahwa kita mulai mengajar mereka lebih banyak. Kami mencoba menjelaskan apa itu injeksi ketergantungan, mengapa variabel global mempersulit pengujian, seperti waktu. Sekarang () dapat mempersulit memeriksa kasus perbatasan. Dan di tempat ini saya mulai khawatir, karena kami tidak lagi mengajarkan pemula cara menulis kode. Pada saat ini kami mengajarinya cara menulis kode
DAN CARA MENGUJI secara bersamaan. Dan itu membawa saya ke poin kedua ...
Mencoba melatih keterampilan yang diperlukan untuk menulis tes realistis sambil belajar pemrograman sangat sulit
Seperti sebelumnya, saya ingin Anda memikirkan kode yang ditulis oleh pemula, tetapi kali ini saya ingin Anda mengingat beberapa program pertama yang Anda tulis.
Jika Anda seperti saya, aplikasi web pertama Anda mungkin terlihat seperti ini:
<p> <?php
Sebuah karya seni, bukan?
Sekarang bayangkan Anda baru saja menulis kode ini dan seseorang memberi tahu Anda bahwa Anda harus mengujinya. Dan Anda harus menggunakan Bereaksi. Dan kerangka kerjanya. Oh, dan tidak ada salahnya Anda mengubah database dan mungkin GraphQL bekerja dengannya.
Saya tidak tahu mengapa, tetapi
kami para pengembang memiliki kebiasaan menggunakan keterampilan yang diperoleh selama bertahun-tahun pengalaman dan latihan dan mengharapkan orang lain, terutama pemula, untuk melakukan hal yang sama . Ini hanya konyol! Ini diharapkan dari seseorang bahwa ia akan memahami matematika hanya karena Anda sendiri sudah mempelajari trigonometri, aljabar, dan banyak lagi, dan Anda dapat menggunakan matematika untuk menyelesaikan masalah tertentu.
Jika sesuatu bekerja dengan baik untuk Anda, itu tidak berarti bahwa itu akan cocok untuk pemula. Mereka bisa keluar dari konteks, tanpa pengalaman dan praktik yang diperlukan untuk mendapatkan manfaat dari apa yang Anda gunakan. Atau mungkin masalah yang mereka hadapi sebenarnya terlalu sederhana untuk menggunakan semua solusi kompleks ini.
Seolah-olah kita lupa bagaimana kita mempelajari langkah demi langkah bagaimana permintaan HTTP bekerja. Cara kerja header. Kue kering Bentuk. Bagaimana cara kerja POST ke server - atau bahkan ada metode HTTP yang SANGAT berbeda. Dan kami mempelajari semua ini dengan metode coba-coba lama yang baik.
Sebenarnya, saya tidak berpikir bahwa tes itu yang harus disalahkan, masalah sebenarnya adalah bahwa kami sangat yakin bahwa Anda harus belajar pemrograman, pengujian, pembangunan situs web, dan jutaan hal lainnya secara bersamaan. Saya tidak benar-benar tahu bagaimana ini terjadi, tetapi, saya curiga, bagian dari masalahnya adalah bahwa kita tidak repot-repot memikirkan berapa biayanya untuk mempelajari semua ini. Seorang pemula bertanya, "Apa yang harus saya pelajari?" dan kami mulai "belajar pengujian, bereaksi, graphql dan pergi, tetapi hanya menggunakan perpustakaan standar ..."
Tidak, tidak, dan lagi tidak. Berhenti saja.

Ini konyol, karena dalam kondisi lain absurditas pendekatan semacam itu jelas. Jika Anda ingin mengajari seseorang cara bermain sepak bola, Anda akan mulai dengan dasar-dasar seperti mengepak dan menggiring bola. Anda tidak akan memulai dengan mengatakan "Ini adalah cara profesional melakukannya," nyalakan video dari Ronaldo dan pergi. Jadi apa yang kita lakukan dengan pendatang baru dalam pemrograman?
Kami mencoba membenarkan diri sendiri dengan mengatakan, "Ya, tentu saja mereka mengerti bahwa tidak mungkin mempelajari semua ini pada saat yang sama," tetapi mereka tidak mengerti! Situasi ini diperburuk oleh fakta bahwa pengembang pemula, jatuh ke dalam perangkap ini, merasa seperti sampah karena terjebak. Tampaknya bagi mereka bahwa mereka sama sekali tidak memiliki apa yang diperlukan untuk menjadi pengembang dan itu memalukan bagi Anda dan saya, karena banyak dari mereka akan suka pemrograman jika mereka tidak menabrak tembok bata ini.
Dan ini membawa saya pada apa yang sebenarnya ingin saya katakan - banyak dari kita belajar lebih baik jika kita fokus mempelajari beberapa hal sekaligus. Kami ingin tantangan baru, kami ingin mencoba hal-hal baru, tetapi kami tidak ingin bingung dan jatuh pingsan. Belajar tentang pengujian dan hal lainnya - misalnya, cara membuat aplikasi web, cara http, cookie, dll. - adalah cara mudah untuk jatuh ke dalam perangkap ini. Dan sebagai hasilnya, saya biasanya menyarankan Anda mempelajari sisanya terlebih dahulu, dan pengujian terakhir. Anda selalu dapat kembali ke proyek lama Anda dan melihat bagaimana Anda akan membangun kembali sekarang, ketika Anda mempelajari pengujian, tetapi ini hanya mungkin jika Anda tidak kelebihan beban, kesal dan, pada akhirnya, tidak meninggalkan bisnis ini.
Tetapi bagaimana jika saya ingin belajar cara menguji ?! (dan sejuta lainnya “bagaimana jika”)
Maju ke depan! Tentu saja, Anda dapat mempelajari pengujian terlebih dahulu, dan hanya kemudian pengembangan web atau beberapa topik lainnya. Saya yakin beberapa melakukan hal itu dan Anda mungkin lebih suka cara ini. Ketika saya mengatakan bahwa pengujian bukan untuk pemula, saya tidak mengatakan bahwa ini adalah topik yang buruk untuk dipelajari, maksud saya mencoba mempelajari pengujian dan hal lain adalah kesalahan.
Kebanyakan orang ingin mempelajari cara membuat aplikasi web atau sesuatu yang visual terlebih dahulu, tetapi ini tidak berarti bahwa Anda harus mulai dengan ini, Anda bisa memulai dengan pengujian. Anda mungkin tidak akan mulai memahami apa pun sampai Anda mendapatkan benjolan, tetapi jangan biarkan saya menghentikan Anda dari mempelajari apa yang Anda inginkan.
Ini juga tidak berarti bahwa Anda tidak dapat belajar selama pemrograman pasangan atau sesuatu seperti itu. Dengan seorang mentor, Anda dapat mempelajari banyak hal pada saat yang sama dan berhasil menahan beban ini, karena Anda memiliki seseorang yang akan membimbing Anda melalui semua ini. Dalam situasi ini, jika Anda tersesat, Anda tidak akan menemui jalan buntu dan Anda tidak akan merasa gagal, karena akan ada seseorang yang mengatakan, “Anda baik-baik saja, itu terlalu sulit untuk saat ini. Lain kali coba X dan Y sebagai gantinya! ” Sederhananya, dalam skenario ini, Anda tidak akan bingung, kecewa dan berhenti.