Saya telah melakukan pemrograman situs web selama 15 tahun dan PHP selama 5 tahun terakhir. Saya selalu menulis kode yang solid. NAMUN, saya punya klien yang bersikeras 80% dari kode yang diuji unit. Karena klien SELALU BENAR, saya berencana menggunakan PHP_CodeSniffer untuk memastikan kode saya terlihat benar dan PHPUnit melakukan pengujian unit saya. Saya berharap untuk belajar sesuatu melalui pengalaman ini.
Apakah ini alat yang tepat untuk digunakan? Berapa banyak waktu yang terlibat dalam mengatur PHPUnit dan menulis kode tambahan? Perlu waktu sekitar 8 minggu untuk menulis halaman web dan swa-uji seperti yang telah saya lakukan di masa lalu. Jika saya menambahkan 4 hari tambahan (10%) untuk pengujian unit (PHPUnit), apakah itu cukup? Pikiran? Saran? Terima kasih.
Jawaban:
Dalam satu baris: itu tergantung bagaimana Anda bekerja. Saya sangat berpikir bahwa 10% terlalu sedikit. Setidaknya harus 25%, jika tidak 40%, jika tidak 60%, jika tidak lebih.
Pertama, saya sangat setuju dengan klien Anda di sana. Tes unit adalah bagian penting dari produk yang kuat, mudah dirawat, mudah didebug.
Saya akan berbicara dari apa yang saya tahu. Saya menggunakan TDD (Test-Driven Development) untuk sebagian besar proyek. TDD pada dasarnya membuat Anda menulis tes sebelum kode aktual. Mereka menetapkan seperangkat kriteria penerimaan yang harus dipenuhi oleh produk akhir. Biasanya, Anda akan menghabiskan 50% hingga 70% dari tes menulis waktu Anda, dan sisanya untuk menerapkan kode untuk membuatnya lulus.
Walaupun mungkin terdengar tidak masuk akal dan / atau luar biasa, saya dapat meyakinkan Anda bahwa itu tidak masuk akal. Inilah alasannya:
PHPUnit adalah alat de facto untuk pengujian unit PHP, dan itu sangat bagus. Saya belum menggunakan PHP_CodeSniffer banyak. Namun, saya pikir jika Anda bekerja sendirian, Anda mungkin tidak membutuhkannya. Ini lebih berguna dalam tim untuk memastikan kode terlihat sama tidak peduli siapa yang mengkodekannya.
sumber
Alat untuk Anda karena memiliki sikap bahwa Anda akan belajar sesuatu dari pengalaman ini. Aku yakin kamu akan.
Hal pertama yang harus Anda pelajari adalah perlunya pengujian unit tidak ada hubungannya dengan seberapa berpengalaman Anda . Pengembang terbaik akan menjadi salah satu unit-penguji terbaik, juga:
Dari http://www.artima.com/intv/refactorP.html
Saya biasa menulis PHP tanpa pengujian unit. Kemudian, setelah bertahun-tahun berlatih pengujian unit di Jawa, saya menemukan bahwa saya tidak dapat mengerjakan sesuatu yang jauh lebih rumit daripada halaman tunggal di PHP tanpa pengujian unit. Alasannya? Produktivitas . Tanpa pengujian unit, saya tidak dapat menolak dengan percaya diri - ini berarti bahwa baik A) saya harus merobohkan lebih banyak dan mengerjakan semuanya dari awal lagi, atau B) , saya harus berurusan dengan kode warisan yang jelek.
Ketika Anda mengajukan penawaran, apakah Anda perlu memperhitungkan waktu untuk menguji? Ya . Apakah tampak intuitif bahwa itu akan membutuhkan lebih banyak waktu? Ya, sekali lagi . Anda mungkin akan, karena beberapa jawaban lain telah memperkirakan kasar, perlu memperkirakan 50-100% lebih besar daripada tanpa tes unit.
Namun!...
Dan sebagai hasilnya, perkiraan Anda akan lebih akurat . Jika Anda menagih per jam, Anda akan lebih mengesankan klien Anda dan dapat menaikkan tarif Anda. Jika Anda menagih tarif tetap, Anda akan menghasilkan lebih banyak uang per jam.
Tanpa pengujian, perkiraan Anda kemungkinan besar adalah omong kosong. Bug, perubahan-pesanan, dan redefinisi semuanya mengerikan untuk memperkirakan secara akurat. Pengujian adalah kunci untuk meminimalkan dampak ketiganya!
sumber
Tidak ada jawaban yang mudah untuk berapa lama Anda.
Tetapi sebagai aturan dasar, jika ini adalah proyek singkat: Saya akan mengatakan bahwa pengembangan bersama dengan pengujian unit yang baik akan memakan waktu 1,75-2 kali selama pengembangan tanpa pengujian unit. Untuk proyek yang lebih lama, mungkin 25-30%?
Saya sarankan untuk membuat unit test sebelum Anda menulis kode Anda. Diambil dengan cara ini, membangun perancah uji unit benar-benar menjadi bagian dari proses desain Anda, dan karenanya Anda tidak boleh menganggap bahwa Anda kehilangan waktu untuk pengujian unit, melainkan bahwa pembangunan unit test membantu Anda mendesain produk hebat dan keberadaan tes itu setelah Anda membuatnya membuatnya lebih mudah bagi Anda untuk memastikan bahwa itu tetap seperti itu. Harus menulis unit test terlebih dahulu adalah luar biasa dalam membantu untuk fokus pada persyaratan nyata, memberi kita cara yang jelas untuk menguji apakah kita sudah selesai (lulus unit test) dan membantu kita untuk "menguji awal dan sering menguji".
Sedangkan untuk PHPUnit .... Sudah lama sejak saya menggunakannya, kesan saya sangat kuat tapi mungkin perlu beberapa pekerjaan lagi sebelum benar-benar dipoles.
Namun, jika ada satu hal yang ingin saya komunikasikan di sini: Tolong jangan lihat Unit Testing sebagai formalitas belaka di akhir proyek Anda. Jika hanya itu, menurut saya, itu tidak berharga.
sumber
Jawabannya sejauh ini cukup menyeluruh sehingga saya hanya akan menambahkan satu poin yang tidak dibahas: waktu tambahan karena menggunakan PHPUnit akan
Kelas model pengujian unit yang tidak berhubungan dengan presentasi cukup mudah. Anda menulis tes untuk setiap kelas, dan dalam kasus-kasus tes tersebut Anda dapat langsung instantiate dan mengkonfigurasi objek untuk menguji metode / fitur tertentu. Setelah Anda menyiapkan dan menjalankan PHPUnit, Anda akan dapat menjalankan tes ini dengan cepat.
Unit pengujian halaman web bisa lebih rumit. Jika Anda menggunakan Zend Framework, Symfony, Smarty atau mesin MVC lainnya, membuat PHPUnit dapat bermain dengan baik bersama mereka dapat membutuhkan waktu lebih lama. Kami menggunakan Zend Framework dan saya menghabiskan banyak waktu membangun kelas dasar untuk menguji pengontrol dan melihat skrip secara terpisah. Mengingat ukuran proyek ini, Anda mungkin lebih baik memulai dengan
ControllerTestCase
.sumber