Cut-Dan-Paste Pemrograman
Oleh
chmood
Cut-Dan-Paste Pemrograman
Latar belakang
Cut-and-Paste Pemrograman adalah bentuk yang sangat umum, tetapi merosot dari penggunaan kembali perangkat lunak yang menciptakan mimpi buruk pemeliharaan. Ini berasal dari gagasan bahwa lebih mudah untuk memodifikasi perangkat lunak yang ada dari program dari awal. Ini biasanya benar dan merupakan naluri perangkat lunak yang baik. Namun, teknik ini dapat dengan mudah digunakan lebih.
Bentuk umum
Antipattern ini diidentifikasi oleh kehadiran beberapa segmen yang sama dari kode diselingi seluruh proyek perangkat lunak. Biasanya, proyek berisi banyak programmer yang belajar bagaimana mengembangkan software dengan mengikuti contoh dari pengembang yang lebih berpengalaman.
Namun, mereka belajar dengan kode yang telah terbukti untuk bekerja dalam situasi yang sama memodifikasi, dan berpotensi mengubahnya untuk mendukung tipe data baru atau perilaku yang sedikit disesuaikan. Hal ini menciptakan duplikasi kode, yang mungkin memiliki konsekuensi jangka pendek yang positif seperti meningkatkan metrik menghitung garis, yang dapat digunakan dalam evaluasi kinerja.
Selain itu, mudah untuk memperpanjang kode sebagai pengembang memiliki kontrol penuh atas kode yang digunakan dalam aplikasi nya dan dengan cepat dapat memenuhi modifikasi jangka pendek untuk memenuhi persyaratan baru.
Gejala Dan Konsekuensi
Bug perangkat lunak yang sama reoccurs seluruh software meskipun banyak perbaikan lokal.
Baris kode kenaikan tanpa menambah produktivitas secara keseluruhan.
Ulasan kode dan inspeksi sia-sia diperpanjang.
Menjadi sulit untuk menemukan dan memperbaiki semua contoh kesalahan tertentu.
Kode dianggap mendokumentasikan diri.
Kode dapat digunakan kembali dengan minimum usaha.
Antipattern ini menyebabkan biaya pemeliharaan perangkat lunak yang berlebihan.
Cacat perangkat lunak yang direplikasi melalui sistem.
Aset Reusable tidak diubah menjadi bentuk yang mudah digunakan kembali dan didokumentasikan.
Pengembang membuat beberapa perbaikan untuk bug yang unik dengan ada metode untuk memecahkan variasi dalam memperbaiki standar.
Potong-dan-Paste Pemrograman bentuk reuse menipu mengembang jumlah baris kode yang dikembangkan tanpa pengurangan diharapkan dalam biaya pemeliharaan yang terkait dengan bentuk-bentuk lain dari reuse.
Penyebab khas
Dibutuhkan banyak upaya untuk membuat kode dapat digunakan kembali, dan organisasi menekankan hasil jangka pendek lebih dari investasi jangka panjang.
Konteks atau maksud di balik modul software tidak diawetkan bersama dengan kode.
Organisasi tidak mendukung atau pahala komponen dapat digunakan kembali, dan kecepatan pembangunan membayangi semua faktor evaluasi lainnya.
Ada kurangnya abstraksi antara pengembang, sering disertai dengan pemahaman yang buruk tentang warisan, komposisi, dan strategi pembangunan lainnya.
Organisasi menegaskan bahwa kode harus menjadi pertandingan yang sempurna untuk tugas baru untuk memungkinkan untuk digunakan kembali. Kode diduplikasi untuk mengatasi kekurangan yang dirasakan dalam memenuhi apa yang dianggap satu set masalah yang unik.
Komponen dapat digunakan kembali, sekali diciptakan, tidak cukup didokumentasikan atau dibuat tersedia untuk pengembang.
Sebuah sindrom "tidak ditemukan-di sini" dalam operasi di lingkungan pengembangan.
Ada kurangnya pemikiran atau berpikir ke depan antara tim pengembangan.
Potong-dan-Paste antipattern cenderung terjadi ketika orang tidak terbiasa dengan teknologi baru atau alat; sebagai akibatnya, mereka mengambil contoh kerja dan memodifikasinya, beradaptasi dengan kebutuhan khusus mereka.
Dikenal Pengecualian
Cut-and-Paste Pemrograman antipattern diterima ketika tujuan tunggal adalah untuk mendapatkan kode keluar dari pintu secepat mungkin. Namun, harga yang harus dibayar adalah salah satu peningkatan pemeliharaan.
Solusi refactored
Kloning sering terjadi dalam lingkungan di mana kotak putih reuse adalah bentuk dominan dari ekstensi sistem. Putih-kotak reuse, pengembang memperpanjang sistem terutama meskipun warisan. Tentu saja, warisan merupakan bagian penting dari pengembangan berorientasi objek, tetapi memiliki beberapa kelemahan dalam sistem yang besar.
Pertama, subclassing dan memperluas obyek membutuhkan beberapa pengetahuan tentang bagaimana objek diimplementasikan, seperti kendala dimaksud dan pola penggunaan yang ditunjukkan oleh kelas dasar mewarisi. Kebanyakan bahasa berorientasi objek memberlakukan pembatasan sangat sedikit, jenis ekstensi dapat diimplementasikan dalam kelas turunan dan menyebabkan penggunaan tidak optimal dari subclassing.
Selain itu, biasanya, putih-kotak reuse mungkin hanya pada aplikasi waktu kompilasi (untuk bahasa dikompilasi), karena semua subclass harus sepenuhnya didefinisikan sebelum aplikasi yang dihasilkan.
Di sisi lain, kotak hitam reuse memiliki seperangkat berbeda dari kelebihan dan keterbatasan dan sering pilihan yang lebih baik untuk perpanjangan objek dalam sistem sedang dan besar. Dengan kotak hitam reuse, sebuah objek digunakan sebagai-adalah, melalui antarmuka yang ditentukan. Klien tidak diperbolehkan untuk mengubah bagaimana antarmuka objek diimplementasikan.
Manfaat utama dari kotak hitam reuse adalah bahwa, dengan dukungan alat, seperti bahasa definisi antarmuka, pelaksanaan suatu objek dapat dibuat independen dari antarmuka objek. Hal ini memungkinkan pengembang untuk mengambil keuntungan dari terlambat mengikat dengan memetakan sebuah antarmuka untuk implementasi tertentu pada saat dijalankan. Klien dapat ditulis untuk antarmuka objek statis belum mendapatkan keuntungan dari waktu ke waktu oleh layanan canggih lagi yang mendukung antarmuka objek identik.
Tentu saja, kelemahan adalah bahwa layanan yang didukung adalah terbatas yang didukung oleh antarmuka yang sama. Perubahan antarmuka biasanya harus dilakukan pada waktu kompilasi, mirip dengan antarmuka atau perubahan implementasi dalam kotak putih digunakan kembali.
Perbedaan antara kotak putih dan kotak hitam reuse mencerminkan perbedaan antara pemrograman berorientasi objek (OOP) dan komponen pemrograman berorientasi (COP), di mana kotak putih subclassing adalah tanda tangan tradisional OOP dan dinamis terlambat mengikat antarmuka implementasi adalah pokok di COP.
Restrukturisasi software untuk mengurangi atau menghilangkan kloning memerlukan kode memodifikasi untuk menekankan penggunaan kembali kotak hitam dari segmen software digandakan. Dalam kasus di mana Cut-and-Paste Programming telah digunakan secara luas di seluruh seumur hidup dari proyek perangkat lunak, metode yang paling efektif untuk memulihkan investasi Anda adalah untuk refactor basis kode ke perpustakaan dapat digunakan kembali atau komponen yang berfokus pada penggunaan kembali kotak hitam dari fungsi .
Jika dilakukan sebagai proyek tunggal, proses refactoring ini biasanya sulit, lama, dan mahal, dan membutuhkan sistem arsitek yang kuat untuk mengawasi dan melaksanakan proses dan untuk menengahi diskusi tentang manfaat dan keterbatasan dari berbagai versi diperpanjang dari modul software.
Refactoring efektif untuk menghilangkan beberapa versi melibatkan tiga tahap: Kode pertambangan, refactoring, dan manajemen konfigurasi. Pertambangan kode identifikasi sistematis beberapa versi segmen perangkat lunak yang sama. Proses refactoring melibatkan mengembangkan versi standar segmen kode dan memasukkannya kembali ke dalam basis kode.
Manajemen konfigurasi adalah seperangkat kebijakan disusun untuk membantu dalam pencegahan kejadian masa depan Cut-and-Paste Programming. Untuk sebagian besar, ini membutuhkan pemantauan dan deteksi kebijakan (inspeksi kode, ulasan, validasi), selain upaya pendidikan. Manajemen buy-in sangat penting untuk memastikan pendanaan dan dukungan seluruh tiga tahap.
Contoh
Ada satu bagian dari kode yang kami menduga telah dikloning berulang kali sepanjang beberapa organisasi dan mungkin masih kloning hari ini. Ini bagian dari kode telah diamati beberapa ratus kali di puluhan organisasi. Ini adalah file kode yang mengimplementasikan kelas terkait-daftar tanpa menggunakan template atau macro.
Sebaliknya, struktur data yang disimpan oleh linked list didefinisikan dalam file header, sehingga setiap linked list disesuaikan untuk beroperasi hanya pada struktur data yang ditentukan. Sayangnya, penulis asli dari kode (rumor mengatakan dia awalnya seorang programmer LISP) memperkenalkan cacat dalam kode terkait-daftar: Ia gagal untuk membebaskan memori item ketika dihapus; bukan, itu hanya mengatur kembali pointer.
Pada kesempatan, kode ini telah dimodifikasi untuk memperbaiki cacat ini; Namun, lebih sering daripada tidak, itu masih ada. Ini jelas kode yang sama set; nama-nama variabel, petunjuk, dan bahkan format yang persis sama dalam setiap kasus. Bahkan file biasanya bernama <prefix> link.c, di mana awalan adalah satu atau dua huruf yang samar mengacu pada struktur data yang dikelola oleh daftar.
Solusi terkait
Spaghetti Kode sering berisi beberapa contoh dari Cut-and-Paste Programming antipattern. Karena Spaghetti Kode tidak terstruktur untuk digunakan kembali komponen mudah, dalam banyak kasus, Cut-and-Paste Pemrograman adalah satu-satunya cara untuk menggunakan kembali segmen yang tersedia ada kode.
Tentu saja, ini mengarah ke kode yang tidak perlu mengasapi dan mimpi buruk pemeliharaan, tetapi bukti empiris menunjukkan bahwa Spaghetti Kode tanpa Cut-and-Paste Pemrograman biasanya kekacauan bahkan lebih buruk dari kasus yang menggunakan Cut-and-Paste Programming.
Kloning dapat diminimalkan dalam pengembangan baru melalui pelaksanaan proses reuse software atau organisasi Beberapa derajat kloning tidak bisa dihindari dalam pengembangan perangkat lunak besar; Namun, ketika itu terjadi, harus ada proses formal untuk penggabungan klon menjadi dasar umum.
Antipattern Nama: Cut-and-Paste ProgrammingAnekdot Bukti: "Hei, saya pikir Anda tetap bug yang sudah, jadi mengapa melakukan ini lagi?" "Man, kalian bekerja cepat. Lebih dari 400.000 baris kode dalam tiga minggu adalah kemajuan luar biasa!"
Disebut Juga Sebagai: Clipboard Coding, Software Kloning, Software Dakwah
Kebanyakan Skala Berlaku: Aplikasi
Refactored Solusi Nama: Black Box Reuse
Refactored Solusi Jenis: Software
Penyebab root: Sloth
Angkatan seimbang: Manajemen Sumber Daya, Alih Teknologi
Latar belakang
Cut-and-Paste Pemrograman adalah bentuk yang sangat umum, tetapi merosot dari penggunaan kembali perangkat lunak yang menciptakan mimpi buruk pemeliharaan. Ini berasal dari gagasan bahwa lebih mudah untuk memodifikasi perangkat lunak yang ada dari program dari awal. Ini biasanya benar dan merupakan naluri perangkat lunak yang baik. Namun, teknik ini dapat dengan mudah digunakan lebih.
Bentuk umum
Antipattern ini diidentifikasi oleh kehadiran beberapa segmen yang sama dari kode diselingi seluruh proyek perangkat lunak. Biasanya, proyek berisi banyak programmer yang belajar bagaimana mengembangkan software dengan mengikuti contoh dari pengembang yang lebih berpengalaman.
Namun, mereka belajar dengan kode yang telah terbukti untuk bekerja dalam situasi yang sama memodifikasi, dan berpotensi mengubahnya untuk mendukung tipe data baru atau perilaku yang sedikit disesuaikan. Hal ini menciptakan duplikasi kode, yang mungkin memiliki konsekuensi jangka pendek yang positif seperti meningkatkan metrik menghitung garis, yang dapat digunakan dalam evaluasi kinerja.
Selain itu, mudah untuk memperpanjang kode sebagai pengembang memiliki kontrol penuh atas kode yang digunakan dalam aplikasi nya dan dengan cepat dapat memenuhi modifikasi jangka pendek untuk memenuhi persyaratan baru.
Gejala Dan Konsekuensi
Bug perangkat lunak yang sama reoccurs seluruh software meskipun banyak perbaikan lokal.
Baris kode kenaikan tanpa menambah produktivitas secara keseluruhan.
Ulasan kode dan inspeksi sia-sia diperpanjang.
Menjadi sulit untuk menemukan dan memperbaiki semua contoh kesalahan tertentu.
Kode dianggap mendokumentasikan diri.
Kode dapat digunakan kembali dengan minimum usaha.
Antipattern ini menyebabkan biaya pemeliharaan perangkat lunak yang berlebihan.
Cacat perangkat lunak yang direplikasi melalui sistem.
Aset Reusable tidak diubah menjadi bentuk yang mudah digunakan kembali dan didokumentasikan.
Pengembang membuat beberapa perbaikan untuk bug yang unik dengan ada metode untuk memecahkan variasi dalam memperbaiki standar.
Potong-dan-Paste Pemrograman bentuk reuse menipu mengembang jumlah baris kode yang dikembangkan tanpa pengurangan diharapkan dalam biaya pemeliharaan yang terkait dengan bentuk-bentuk lain dari reuse.
Penyebab khas
Dibutuhkan banyak upaya untuk membuat kode dapat digunakan kembali, dan organisasi menekankan hasil jangka pendek lebih dari investasi jangka panjang.
Konteks atau maksud di balik modul software tidak diawetkan bersama dengan kode.
Organisasi tidak mendukung atau pahala komponen dapat digunakan kembali, dan kecepatan pembangunan membayangi semua faktor evaluasi lainnya.
Ada kurangnya abstraksi antara pengembang, sering disertai dengan pemahaman yang buruk tentang warisan, komposisi, dan strategi pembangunan lainnya.
Organisasi menegaskan bahwa kode harus menjadi pertandingan yang sempurna untuk tugas baru untuk memungkinkan untuk digunakan kembali. Kode diduplikasi untuk mengatasi kekurangan yang dirasakan dalam memenuhi apa yang dianggap satu set masalah yang unik.
Komponen dapat digunakan kembali, sekali diciptakan, tidak cukup didokumentasikan atau dibuat tersedia untuk pengembang.
Sebuah sindrom "tidak ditemukan-di sini" dalam operasi di lingkungan pengembangan.
Ada kurangnya pemikiran atau berpikir ke depan antara tim pengembangan.
Potong-dan-Paste antipattern cenderung terjadi ketika orang tidak terbiasa dengan teknologi baru atau alat; sebagai akibatnya, mereka mengambil contoh kerja dan memodifikasinya, beradaptasi dengan kebutuhan khusus mereka.
Dikenal Pengecualian
Cut-and-Paste Pemrograman antipattern diterima ketika tujuan tunggal adalah untuk mendapatkan kode keluar dari pintu secepat mungkin. Namun, harga yang harus dibayar adalah salah satu peningkatan pemeliharaan.
Solusi refactored
Kloning sering terjadi dalam lingkungan di mana kotak putih reuse adalah bentuk dominan dari ekstensi sistem. Putih-kotak reuse, pengembang memperpanjang sistem terutama meskipun warisan. Tentu saja, warisan merupakan bagian penting dari pengembangan berorientasi objek, tetapi memiliki beberapa kelemahan dalam sistem yang besar.
Pertama, subclassing dan memperluas obyek membutuhkan beberapa pengetahuan tentang bagaimana objek diimplementasikan, seperti kendala dimaksud dan pola penggunaan yang ditunjukkan oleh kelas dasar mewarisi. Kebanyakan bahasa berorientasi objek memberlakukan pembatasan sangat sedikit, jenis ekstensi dapat diimplementasikan dalam kelas turunan dan menyebabkan penggunaan tidak optimal dari subclassing.
Selain itu, biasanya, putih-kotak reuse mungkin hanya pada aplikasi waktu kompilasi (untuk bahasa dikompilasi), karena semua subclass harus sepenuhnya didefinisikan sebelum aplikasi yang dihasilkan.
Di sisi lain, kotak hitam reuse memiliki seperangkat berbeda dari kelebihan dan keterbatasan dan sering pilihan yang lebih baik untuk perpanjangan objek dalam sistem sedang dan besar. Dengan kotak hitam reuse, sebuah objek digunakan sebagai-adalah, melalui antarmuka yang ditentukan. Klien tidak diperbolehkan untuk mengubah bagaimana antarmuka objek diimplementasikan.
Manfaat utama dari kotak hitam reuse adalah bahwa, dengan dukungan alat, seperti bahasa definisi antarmuka, pelaksanaan suatu objek dapat dibuat independen dari antarmuka objek. Hal ini memungkinkan pengembang untuk mengambil keuntungan dari terlambat mengikat dengan memetakan sebuah antarmuka untuk implementasi tertentu pada saat dijalankan. Klien dapat ditulis untuk antarmuka objek statis belum mendapatkan keuntungan dari waktu ke waktu oleh layanan canggih lagi yang mendukung antarmuka objek identik.
Tentu saja, kelemahan adalah bahwa layanan yang didukung adalah terbatas yang didukung oleh antarmuka yang sama. Perubahan antarmuka biasanya harus dilakukan pada waktu kompilasi, mirip dengan antarmuka atau perubahan implementasi dalam kotak putih digunakan kembali.
Perbedaan antara kotak putih dan kotak hitam reuse mencerminkan perbedaan antara pemrograman berorientasi objek (OOP) dan komponen pemrograman berorientasi (COP), di mana kotak putih subclassing adalah tanda tangan tradisional OOP dan dinamis terlambat mengikat antarmuka implementasi adalah pokok di COP.
Restrukturisasi software untuk mengurangi atau menghilangkan kloning memerlukan kode memodifikasi untuk menekankan penggunaan kembali kotak hitam dari segmen software digandakan. Dalam kasus di mana Cut-and-Paste Programming telah digunakan secara luas di seluruh seumur hidup dari proyek perangkat lunak, metode yang paling efektif untuk memulihkan investasi Anda adalah untuk refactor basis kode ke perpustakaan dapat digunakan kembali atau komponen yang berfokus pada penggunaan kembali kotak hitam dari fungsi .
Jika dilakukan sebagai proyek tunggal, proses refactoring ini biasanya sulit, lama, dan mahal, dan membutuhkan sistem arsitek yang kuat untuk mengawasi dan melaksanakan proses dan untuk menengahi diskusi tentang manfaat dan keterbatasan dari berbagai versi diperpanjang dari modul software.
Refactoring efektif untuk menghilangkan beberapa versi melibatkan tiga tahap: Kode pertambangan, refactoring, dan manajemen konfigurasi. Pertambangan kode identifikasi sistematis beberapa versi segmen perangkat lunak yang sama. Proses refactoring melibatkan mengembangkan versi standar segmen kode dan memasukkannya kembali ke dalam basis kode.
Manajemen konfigurasi adalah seperangkat kebijakan disusun untuk membantu dalam pencegahan kejadian masa depan Cut-and-Paste Programming. Untuk sebagian besar, ini membutuhkan pemantauan dan deteksi kebijakan (inspeksi kode, ulasan, validasi), selain upaya pendidikan. Manajemen buy-in sangat penting untuk memastikan pendanaan dan dukungan seluruh tiga tahap.
Contoh
Ada satu bagian dari kode yang kami menduga telah dikloning berulang kali sepanjang beberapa organisasi dan mungkin masih kloning hari ini. Ini bagian dari kode telah diamati beberapa ratus kali di puluhan organisasi. Ini adalah file kode yang mengimplementasikan kelas terkait-daftar tanpa menggunakan template atau macro.
Sebaliknya, struktur data yang disimpan oleh linked list didefinisikan dalam file header, sehingga setiap linked list disesuaikan untuk beroperasi hanya pada struktur data yang ditentukan. Sayangnya, penulis asli dari kode (rumor mengatakan dia awalnya seorang programmer LISP) memperkenalkan cacat dalam kode terkait-daftar: Ia gagal untuk membebaskan memori item ketika dihapus; bukan, itu hanya mengatur kembali pointer.
Pada kesempatan, kode ini telah dimodifikasi untuk memperbaiki cacat ini; Namun, lebih sering daripada tidak, itu masih ada. Ini jelas kode yang sama set; nama-nama variabel, petunjuk, dan bahkan format yang persis sama dalam setiap kasus. Bahkan file biasanya bernama <prefix> link.c, di mana awalan adalah satu atau dua huruf yang samar mengacu pada struktur data yang dikelola oleh daftar.
Solusi terkait
Spaghetti Kode sering berisi beberapa contoh dari Cut-and-Paste Programming antipattern. Karena Spaghetti Kode tidak terstruktur untuk digunakan kembali komponen mudah, dalam banyak kasus, Cut-and-Paste Pemrograman adalah satu-satunya cara untuk menggunakan kembali segmen yang tersedia ada kode.
Tentu saja, ini mengarah ke kode yang tidak perlu mengasapi dan mimpi buruk pemeliharaan, tetapi bukti empiris menunjukkan bahwa Spaghetti Kode tanpa Cut-and-Paste Pemrograman biasanya kekacauan bahkan lebih buruk dari kasus yang menggunakan Cut-and-Paste Programming.
Kloning dapat diminimalkan dalam pengembangan baru melalui pelaksanaan proses reuse software atau organisasi Beberapa derajat kloning tidak bisa dihindari dalam pengembangan perangkat lunak besar; Namun, ketika itu terjadi, harus ada proses formal untuk penggabungan klon menjadi dasar umum.
Category
Komentar