1 November 2009 2 Komentar

Kisah Peringatan dari Celakalah: The Bug yang berhasil lolos

http://markbeljaars.com/wp-content/plugins/sociofluid/images/digg_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/reddit_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/stumbleupon_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/delicious_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/furl_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/technorati_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/facebook_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/yahoobuzz_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/mixx_48.png http://markbeljaars.com/wp-content/plugins/sociofluid/images/twitter_48.png

Minggu lalu saya merilis versi update dari saya Daftar Isi Pencipta plugin untuk Wordpress. Saya bangga dalam coding saya, penemuan kesalahan dan pengujian kemampuan. Itu semua datang runtuh dalam satu malam.

Untuk memotong cerita panjang pendek, revisi baru memerlukan fungsi pembantu untuk menampilkan entri posting. Fungsi pembantu hanya disebut dengan satu fungsi dan karena itu saya memilih untuk memasukkan fungsi pembantu sebagai anak fungsi itu. Ini adalah praktek umum di banyak bahasa karena rapi paket semua fungsi dan pembantu mereka dalam jarak dekat. Fungsi orangtua dengan cara ini disebut setiap kali halaman ditampilkan dan berakhir segera jika halaman yang tidak termasuk tag peta situs inisiator.

Ok. Berjalannya waktu. Sekarang 02:00. Kode ini sekarang siap untuk menguji. Saya tahu bahwa fungsi orang tua keluar segera jika tidak menemukan tag inisiator. Hal ini sebelumnya telah bekerja, dan aku pergi jauh dari itu, sehingga harus terus bekerja. Benar? Aku memeriksa halaman peta situs, mencoba semua pilihan baru dan lama dan membuktikan bahwa kode tersebut bekerja sebagaimana dimaksud. Aku segera menyinkronkan repositori SVN dan bergegas ke tempat tidur untuk tidur sebelum matahari muncul.

Keesokan paginya, aku memutuskan untuk memeriksa situs besar saya tahu bahwa saya menggunakan plugin. Tidak ada pengganti untuk pengujian dunia nyata. Ya, semuanya terlihat baik. Pada saat itu saya melihat posting dalam peta situs yang tampak menarik. Saya mengklik pada link kategori dan disajikan dengan posting pertama dalam kategori dan kemudian pesan besar buruk php kesalahan. Mmm. Aku menatap lagi situs yang besar. Mmm. Mungkin suatu kebetulan. Mari kita melihat satu lagi. Oh tidak!

Jadi apa yang salah? Ingatlah bahwa fungsi anak? Saya pernah mendengar bahwa anak-anak bisa menjadi jahat dan ternyata benar dalam kasus ini. Jika halaman blog, halaman kategori, halaman tag atau bahkan halaman rumah dipajang, beberapa posting yang ditampilkan pada satu halaman. Wordpress melakukan hal ini dengan berpura-pura bahwa setiap posting adalah sebuah mini-halaman dan link semua mini-halaman bersama-sama untuk membentuk satu halaman besar. Ini berarti bahwa fungsi orang tua saya disebut beberapa kali. Biasanya tidak masalah. Tapi sekarang sebagai fungsi mengandung fungsi anak, anak adalah fungsi-fungsi ini dibuat setiap kali fungsi orang tua disebut (bahkan jika mereka tidak digunakan). Karena itu, ketika kemudian posting kedua ditampilkan, halaman crash dengan pesan kesalahan nama fungsi duplikat. Hasil nett adalah bahwa bug kecil dalam fungsi yang tampaknya tidak berhubungan disebabkan beberapa situs yang sangat besar untuk turun.

Moral dari cerita: jika Anda adalah seorang administrator situs, pastikan Anda menjalankan rangkaian lengkap dari tes setelah setiap update Plugin, tidak peduli seberapa besar atau kecil bahwa plugin mungkin.


SpinChimp Leaderboard 728x90