Saya telah berada di banyak tim yang mencoba berlatih metodologi Agile dan seringkali tim-tim ini berpusat pada tes. Apakah menguji bagian penting dari mempraktikkan metodologi Agile atau hanya praktik XP yang telah dilakukan selama bertahun-tahun?
Saya telah berada di banyak tim yang mencoba berlatih metodologi Agile dan seringkali tim-tim ini berpusat pada tes. Apakah menguji bagian penting dari mempraktikkan metodologi Agile atau hanya praktik XP yang telah dilakukan selama bertahun-tahun?
Jawaban:
Pengujian sangat penting untuk gesit, terutama karena gesit didasarkan pada peningkatan bertahap: kesulitannya adalah terkadang sulit untuk melihat bagaimana perubahan saat ini akan memengaruhi kode lama Anda. Cara terbaik untuk yakin bahwa Anda belum merusak sesuatu adalah dengan mengujinya, dan untuk mengetahui BAGAIMANA mengujinya. Dengan cara itu Anda segera menemukan bug, bukan di ujung jalan ketika Anda lupa persis apa yang Anda lakukan ketika Anda menulis kode yang merusak beberapa fitur lama.
Alasannya berbeda dari pemrograman tipe desain top-down yang lebih tradisional adalah bahwa dalam lingkungan itu a) sangat sulit untuk diuji sampai Anda memiliki produk jadi b) secara teori Anda mempertimbangkan semua kriteria desain pada saat yang sama, dan jadi Anda cenderung membuat keputusan desain yang melanggar keputusan desain sebelumnya.
Anda mungkin berbicara tentang pengujian otomatis, pengujian unit, tes integrasi dll. Ini lebih penting untuk gesit daripada pengujian manual (dengan penguji dan semacamnya) karena mereka terlalu lambat, sehingga tidak mungkin untuk menguji setiap perubahan kecil yang Anda buat. Karena lincah adalah tentang iterasi kecil yang cepat, memiliki tes yang memverifikasi kebenaran dalam hitungan detik atau menit, bukan jam atau hari, sangat berguna.
Jika Anda tidak memiliki tes, bagaimana Anda tahu kode Anda berfungsi?
Sunting: pernyataan bahwa tes tidak dapat membuktikan bahwa kode berfungsi gagal untuk mendefinisikan satu istilah penting, yaitu berfungsi . Apa artinya bagi suatu program untuk bekerja? Jika Anda mempertahankan istilah ini tidak jelas, maka tidak ada cara sama sekali untuk membuktikan atau memastikan bahwa program apa pun berfungsi. Pernah.
Di sisi lain, Anda dapat mendefinisikan karya sebagai "berperilaku sesuai dengan spesifikasi". Sekarang Anda tidak hanya dapat menggunakan tes untuk menunjukkan bahwa kode berfungsi, tetapi tes itu sendiri dapat berfungsi sebagai spesifikasi yang dapat dieksekusi dari perilaku kode Anda. Dengan kata lain, test suite yang ditulis dengan baik menentukan apa yang berfungsi .
Cara berpikir ini juga memaksa Anda untuk memeriksa kembali makna bug . Jika kode Anda lulus semua tes, maka tidak ada bug dalam kode. Jika, meskipun demikian, sistem tidak berperilaku sebagaimana mestinya, maka perilakunya tidak ditentukan dengan benar. Saya. E. bug ada di spec, ditentukan oleh tes.
Pendekatan pengembangan perangkat lunak ini memisahkan spesifikasi fungsional suatu sistem dari implementasinya, yang, menurut setiap buku rekayasa perangkat lunak di dunia, adalah hal yang sangat baik. Pada saat yang sama, pendekatan ini memastikan bahwa implementasi Anda selalu sesuai dengan spesifikasi fungsional.
Prinsip - prinsip Agile tidak mengatakan apa pun secara langsung tentang pengujian.
Dengan komitmen Agile terhadap proses yang berkelanjutan, pengiriman berkelanjutan / bertahap, dan kualitas perangkat lunak, pengujian otomatis adalah solusi terbaik yang saat ini tersedia untuk sebagian besar proyek
Pengecualian (seperti dicatat oleh Jörg W Mittag) termasuk alat pengembangan yang terbukti benar, sistem pemrograman meta yang menghasilkan kode, dkk. Tetapi sistem semacam ini jarang terjadi.
Agile dan XP mencoba menghindari Big Design Up Front . Dalam BDUF, persyaratan dikumpulkan, spesifikasi formal dibuat, kemudian pengkodean dilakukan, kemudian pengujian dilakukan. Ini masuk akal untuk sistem yang didefinisikan dengan baik, misi dan kehidupan yang kritis seperti peralatan medis, wahana antariksa, dll.
Agile menghindari aliran ini karena tidak berfungsi dengan baik untuk masalah yang tidak terdefinisi dengan baik, misalnya "perubahan apa pun yang diminta klien untuk minggu ini". Kami masih memerlukan spesifikasi formal, jadi kami tahu apa yang harus dilakukan dan kapan kami selesai, tetapi alih-alih semacam dokumen tertulis, kami menggunakan kode dalam bentuk tes otomatis.
Tes unit otomatis cepat untuk menulis, cepat dijalankan dan sangat modular / dipisahkan. Ini membuat mereka cara cepat untuk secara resmi menentukan dan memeriksa persyaratan.