Aliran lava

chmood


Aliran lava


Antipattern Nama: Lava Flow
Disebut Juga Sebagai: Kode Mati
Kebanyakan Skala Sering: Aplikasi
Refactored Nama Solusi: Manajemen Konfigurasi Arsitektur
Refactored Solusi Jenis: Proses
Penyebab root: Ketamakan, Greed, Sloth
Angkatan seimbang: Pengelolaan Fungsi, Kinerja, Kompleksitas
Anekdot Bukti: "Oh itu Yah Ray dan Emil (mereka tidak lagi dengan perusahaan) menulis bahwa kembali rutin ketika Jim (yang meninggalkan bulan lalu) mencoba solusi untuk kode pengolahan masukan Irene (dia di departemen lain sekarang, terlalu ). saya tidak berpikir itu digunakan di mana saja sekarang, tapi aku tidak benar-benar yakin. Irene tidak benar-benar dokumen itu sangat jelas, jadi kami pikir kami hanya akan meninggalkan begitu saja untuk saat ini. Setelah semua, bloomin 'hal yang karya tidak itu ?! "








Latar belakang
   Dalam ekspedisi data-mining, kami mulai mencari wawasan mengembangkan antarmuka standar untuk jenis tertentu dari sistem. Sistem kami pertambangan sangat mirip dengan yang kita harapkan pada akhirnya akan mendukung standar yang kita kerjakan. Itu juga sistem penelitian-berasal dan sangat kompleks. Seperti kita menggali ke dalamnya, kami mewawancarai banyak pengembang mengenai komponen-komponen tertentu dari jumlah besar halaman kode dicetak bagi kita.

    Lebih dan lebih, kami mendapat jawaban yang sama: "Saya tidak tahu apa kelas yaitu untuk; itu ditulis sebelum saya sampai di sini." Kami secara bertahap menyadari bahwa antara 30 dan 50 persen dari kode aktual yang terdiri sistem yang kompleks ini tidak dipahami atau didokumentasikan oleh salah satu saat bekerja di atasnya.

    Selain itu, karena kami menganalisis itu, kita belajar bahwa kode dipertanyakan benar-benar tidak melayani tujuan dalam sistem saat ini; bukan, itu ada dari usaha-usaha sebelumnya atau pendekatan oleh pengembang lama hilang. Staf saat ini, sementara sangat terang, itu enggan untuk mengubah atau menghapus kode bahwa mereka tidak menulis atau tidak tahu tujuan, karena takut melanggar sesuatu dan tidak tahu mengapa atau bagaimana untuk memperbaikinya.

    Pada titik ini, kita mulai memanggil gumpalan ini kode "lava," mengacu pada sifat cairan di mana mereka berasal dibandingkan dengan kekerasan basaltlike dan kesulitan dalam menghilangkan sekali itu telah dipadatkan. Tiba-tiba, ia sadar kita bahwa kita telah mengidentifikasi antipattern potensial.

    Hampir setahun kemudian, dan setelah beberapa lagi ekspedisi data-mining dan upaya desain antarmuka, kami telah mengalami pola yang sama sehingga sering bahwa kita secara rutin mengacu Lava Flow seluruh departemen.




Bentuk umum
The Lava Flow antipattern umumnya ditemukan dalam sistem yang berasal penelitian namun berakhir di produksi. Hal ini ditandai dengan lavalike "arus" dari versi sebelumnya perkembangan bertebaran lanskap kode, yang kini telah mengeras menjadi basal seperti, bergerak, massa umumnya tidak berguna kode yang tidak bisa mengingat banyak, jika ada, sekitar.
Ini adalah hasil dari sebelumnya (mungkin Jurassic) kali perkembangan saat, sementara dalam mode penelitian, pengembang mencoba beberapa cara untuk mencapai hal-hal, biasanya terburu-buru untuk memberikan semacam demonstrasi, sehingga pengecoran praktek desain suara untuk angin dan mengorbankan dokumentasi.

// This class was written by someone earlier (Alex?) to manager the indexing

// or something (maybe). It's probably important. Don't delete. I don't think it's

// used anywhere - at least not in the new MacroINdexer module which may

// actually replace whatever this was used for.

class IndexFrame extends Frame {

// IndexFrame constructor

// ---------------------------

public IndexFrame(String index_parameter_1)

{

// Note: need to add additional stuff here...

super (str);

}

// ---------------------------

   Hasilnya adalah beberapa fragmen kode, kelas variabel patuh, dan prosedur yang tidak jelas berkaitan dengan sistem secara keseluruhan. Bahkan, aliran ini sering jadi rumit dalam penampilan dan spaghetti seperti itu mereka tampak penting, tapi tidak ada yang benar-benar dapat menjelaskan apa yang mereka lakukan atau mengapa mereka ada.

    Kadang-kadang, tua, pengembang pertapa berambut abu-abu ingat rincian tertentu, tetapi biasanya, semua orang telah memutuskan untuk "meninggalkan cukup baik saja" karena kode tersebut "tidak benar-benar menyebabkan kerusakan apapun, dan mungkin benar-benar penting, dan kami hanya tidak punya waktu untuk main-main dengan hal itu. "

    Meskipun bisa menyenangkan untuk membedah arus ini dan mempelajari antropologi mereka, biasanya ada tidak cukup waktu dalam jadwal untuk meanderings tersebut. Sebaliknya, pengembang biasanya mengambil rute bijaksana dan rapi bekerja di sekitar mereka.

    Antipattern ini, bagaimanapun, sangat umum di toko-toko desain inovatif di mana bukti-of-konsep atau kode prototipe cepat bergerak ke dalam produksi. Ini adalah desain yang buruk, karena beberapa alasan utama: Arus Lava mahal untuk menganalisis, memverifikasi, dan tes. Semua upaya tersebut dikeluarkan seluruhnya sia-sia dan merupakan limbah mutlak. Dalam prakteknya, verifikasi dan uji jarang mungkin. Kode Aliran lava bisa mahal untuk memuat ke dalam memori, membuang-buang sumber daya penting dan mempengaruhi kinerja. Seperti banyak antipatterns, Anda kehilangan banyak keuntungan yang melekat pada desain berorientasi objek. Dalam hal ini, Anda kehilangan kemampuan untuk memanfaatkan modularisasi dan menggunakan kembali tanpa lebih berkembang biak gelembung-gelembung Lava Flow.


Gejala Dan Konsekuensi 
  • Variabel dibenarkan sering dan fragmen kode dalam sistem.
  • Didokumentasikan kompleks, yang tampak penting fungsi, kelas, atau segmen yang tidak jelas berhubungan dengan arsitektur sistem.
  • Sangat longgar, "berkembang" arsitektur sistem.
  • Seluruh blok kode komentar-out tanpa penjelasan atau dokumentasi.
  • Banyak "di fluks" atau "diganti" daerah kode.
  • Terpakai (mati) kode, hanya tersisa di.
  • Antarmuka yang tidak terpakai, bisa dijelaskan, atau usang terletak di file header.
  • Jika kode Aliran Lava yang ada tidak dihapus, itu dapat terus berkembang biak sebagai kode digunakan kembali di daerah lain.
  • Jika proses yang mengarah ke Lava Flow tidak diperiksa, bisa ada pertumbuhan eksponensial sebagai berhasil pengembang, terlalu terburu-buru atau diintimidasi untuk menganalisis arus asli, terus menghasilkan yang baru, arus sekunder ketika mereka mencoba untuk bekerja di sekitar yang asli, senyawa ini masalah.
  • Sebagai arus senyawa dan mengeras, dengan cepat menjadi mustahil untuk mendokumentasikan kode atau memahami arsitektur cukup untuk melakukan perbaikan. 


Penyebab khas
    Kode R & D ditempatkan ke dalam produksi tanpa berpikir ke arah manajemen konfigurasi.
Distribusi yang tidak terkontrol kode yang belum selesai. Pelaksanaan beberapa percobaan pendekatan terhadap pelaksanaan beberapa fungsi.
Single-pengembang (lone wolf) kode yang ditulis.
Kurangnya manajemen konfigurasi atau sesuai dengan kebijakan manajemen proses.
Kurangnya arsitektur, atau pengembangan-non-arsitektur didorong. Hal ini terutama lazim dengan tim pengembangan yang sangat sementara.

    Proses pembangunan berulang. Seringkali, tujuan dari proyek perangkat lunak tidak jelas atau mengubah berulang kali. Untuk mengatasi perubahan, proyek harus ulang, mundur, dan mengembangkan prototipe. Dalam menanggapi demonstrasi tenggat waktu, ada kecenderungan untuk melakukan perubahan tergesa-gesa untuk kode dengan cepat untuk menangani masalah segera. Kode ini tidak pernah dibersihkan, meninggalkan pertimbangan arsitektur dan dokumentasi ditunda tanpa batas waktu.

    Bekas luka arsitektur. Kadang-kadang, komitmen arsitektur yang dibuat selama analisis persyaratan yang ditemukan tidak bekerja setelah beberapa jumlah pembangunan. Arsitektur sistem dapat dikonfigurasi ulang, namun kesalahan-kesalahan inline jarang dihapus. Ini bahkan mungkin tidak layak untuk komentar-kode yang tidak perlu, terutama di lingkungan pengembangan modern di mana ratusan file individual terdiri kode dari suatu sistem. "Siapa yang akan terlihat di semua file tersebut? Hanya menghubungkan em di!”




dikenal pengecualian
    Skala kecil, prototipe sekali pakai di lingkungan R & D yang cocok untuk melaksanakan Lava Flow antipattern. Hal ini penting untuk memberikan cepat, dan hasilnya tidak diperlukan untuk menjadi berkelanjutan...




Solusi refactored

Hanya ada satu cara ampuh untuk mencegah Lava Flow antipattern: Pastikan bahwa arsitektur suara mendahului pengembangan kode produksi. Arsitektur ini harus didukung oleh proses manajemen konfigurasi yang menjamin kepatuhan arsitektur dan menampung "misi merayap" (perubahan kebutuhan).

Jika pertimbangan arsitektur yang terbalaskan di depan, akhirnya, kode dikembangkan yang bukan merupakan bagian dari arsitektur target, dan karena itu berlebihan atau mati. Seiring waktu, kode mati menjadi bermasalah untuk analisis, pengujian, dan revisi.

Dalam kasus di mana Lava Flow sudah ada, menyembuhkan bisa menyakitkan. Prinsip penting adalah untuk menghindari perubahan arsitektur selama pengembangan aktif. Secara khusus, ini berlaku untuk arsitektur komputasi, interface perangkat lunak mendefinisikan solusi integrasi sistem. Manajemen harus menunda pembangunan sampai arsitektur yang jelas telah ditetapkan dan disosialisasikan kepada pengembang.

Mendefinisikan arsitektur mungkin memerlukan satu atau lebih sistem kegiatan penemuan. Penemuan sistem diperlukan untuk menemukan komponen yang benar-benar digunakan dan diperlukan untuk sistem. Penemuan sistem juga mengidentifikasi orang-baris kode yang dapat dengan aman dihapus. Kegiatan ini adalah membosankan; itu dapat memerlukan keterampilan investigasi dari perangkat lunak detektif berpengalaman.

Seperti diduga kode mati dihilangkan, bug diperkenalkan. Ketika ini terjadi, menahan keinginan untuk segera memperbaiki gejala tanpa sepenuhnya memahami penyebab kesalahan. Mempelajari dependensi. Ini akan membantu Anda untuk lebih mendefinisikan arsitektur target.

Untuk menghindari Lava Flow, penting untuk membangun interface perangkat lunak sistem-tingkat yang stabil, didefinisikan dengan baik, dan jelas didokumentasikan. Investasi di depan dalam interface perangkat lunak berkualitas dapat menghasilkan dividen yang besar dalam jangka panjang dibandingkan dengan biaya jackhammering tetesan pergi mengeras kode Lava Flow.

Alat seperti Sumber-Code Control System (SCCS) membantu dalam manajemen konfigurasi. SCCS dibundel dengan lingkungan yang paling Unix dan memberikan kemampuan dasar untuk merekam sejarah update ke file konfigurasi dikendalikan.




Contoh
   Kami baru-baru berpartisipasi dalam situs ekspedisi data-mining di mana kita berusaha untuk mengidentifikasi interface evolusi yang dihasilkan dari arsitektur antarmuka awal bahwa kita berasal dan berada dalam proses update.

    Sistem kami ditambang ditargetkan karena pengembang telah dimanfaatkan arsitektur awal kami dengan cara yang unik yang terpesona kita: Pada dasarnya, mereka membangun sebuah layanan kuasi-acara dari kerangka interapplication generik kami.

    Seperti kita mempelajari sistem mereka, kami mengalami segmen besar kode yang bingung kita. Segmen ini tampaknya tidak berkontribusi pada keseluruhan arsitektur yang kami harapkan untuk menemukan. Mereka agak incohesive dan hanya sangat jarang didokumentasikan, jika sama sekali.

    Ketika kami meminta pengembang saat ini tentang beberapa segmen ini, jawabannya adalah, "Oh itu? Yah kita tidak menggunakan pendekatan itu lagi. Reggie mencoba sesuatu, tapi kami datang dengan cara yang lebih baik. Saya kira beberapa Reggie yang lain kode mungkin tergantung pada hal-hal yang meskipun, jadi kami tidak menghapus apapun. " Seperti kita melihat lebih dalam masalah ini, kita belajar bahwa Reggie tidak lagi bahkan di situs, dan tidak ada di sana untuk beberapa waktu, sehingga segmen kode beberapa bulan.

    Setelah dua hari pemeriksaan kode, kami menyadari bahwa sebagian dari kode yang terdiri sistem itu kemungkinan besar mirip dengan kode yang sudah kita diperiksa: sepenuhnya Aliran Lava di alam.

    Kami diperoleh sangat sedikit yang membantu kami mengartikulasikan bagaimana arsitektur mereka benar-benar dibangun; Oleh karena itu, itu hampir mustahil untuk saya. Pada titik ini, kita pada dasarnya menyerah berusaha untuk menambang kode dan bukan terfokus pada penjelasan pengembang saat ini dari apa yang "benar-benar" terjadi, berharap entah bagaimana menyusun pekerjaan mereka ke ekstensi antarmuka bahwa kita bisa memasukkan ke dalam revisi mendatang kami untuk generik kami Kerangka interapplication.

    Salah satu solusi adalah untuk mengisolasi tunggal, orang kunci yang dipahami sistem yang telah mereka kembangkan, dan kemudian bersama-sama menulis IDL untuk dengan orang itu. Di permukaan, tujuan dari IDL kami bersama-sama menulis adalah untuk mendukung demonstrasi krisis yang minggu lagi.

    Dengan memanfaatkan Api Bor Mini-antipattern, kami mampu untuk mendapatkan pengembang sistem untuk memvalidasi IDL kami dengan menggunakannya untuk cepat membangun wrapper CORBA untuk produk mereka untuk demonstrasi. Banyak orang kehilangan banyak tidur, tapi demonstrasi berjalan lancar. Ada, tentu saja, efek satu sisi ke solusi ini: Kita berakhir dengan antarmuka, di IDL, yang kami telah berangkat untuk menemukan di tempat pertama.

Solusi terkait
   
Dalam dunia yang kompetitif saat ini, sering diinginkan untuk meminimalkan waktu tunda antara R & D dan produksi. Dalam banyak industri, ini sangat penting untuk kelangsungan hidup perusahaan. Di mana hal ini terjadi, inokulasi terhadap Lava Flow kadang-kadang dapat ditemukan dalam proses disesuaikan konfigurasi manajemen (CM) yang menempatkan kontrol membatasi tertentu di tempat pada tahap prototipe, mirip dengan "kait" menjadi, produksi-kelas nyata mengembangkan an tanpa menahan dampak penuh pada sifat eksperimental dari R & D.

   
Bila memungkinkan, otomatisasi dapat memainkan peran besar di sini, tapi kuncinya terletak pada kustomisasi proses kuasi-CM yang dapat mudah ditingkatkan menjadi sistem kontrol CM full-blown sekali produk bergerak ke lingkungan produksi. Isu ini adalah salah satu dari keseimbangan antara biaya CM di menghambat proses kreatif dan biaya mendapatkan cepat kendali CM pembangunan sekali bahwa proses kreatif telah melahirkan sesuatu yang berguna dan berharga.

   
Pendekatan ini dapat difasilitasi oleh pemetaan periodik sistem prototipe menjadi sebuah arsitektur sistem diperbarui, termasuk terbatas, tapi dokumentasi inline standar kode.




Berlakunya Untuk Pandangan Dan Timbangan Lainnya
    Sudut pandang arsitektur memainkan peran penting dalam mencegah Arus Lava awalnya. Manajer juga dapat berperan dalam identifikasi awal Arus Lava atau keadaan yang dapat menyebabkan Arus Lava. Manajer ini juga harus memiliki kewenangan untuk mengerem ketika Lava Flow pertama kali diidentifikasi, menunda perkembangan lebih lanjut sampai arsitektur yang jelas dapat didefinisikan dan disebarluaskan.
 
    Seperti kebanyakan Anti Pola, pencegahan selalu lebih murah daripada koreksi, sehingga muka investasi dalam arsitektur yang baik dan pendidikan tim biasanya dapat memastikan proyek terhadap ini dan paling antipatterns lainnya. Sementara biaya awal ini tidak menunjukkan keuntungan langsung, hal ini tentunya investasi yang baik
,.”

  
 


 






Komentar