Kopyala ve yapıştır programlama - Copy-and-paste programming

Kopyala ve yapıştır programlamabazen adil olarak anılır yapıştırma, yüksek oranda tekrarlayan üretimdir bilgisayar Programlama tarafından üretilen kod kopyala ve yapıştır operasyonlar. Öncelikle aşağılayıcı bir terimdir; terimi kullananlar genellikle programlama yeterliliği eksikliğini ima ediyor. Bunun yerine alt yordamlar veya kitaplıklar kullanılacağından, teknoloji sınırlamalarının (örneğin, yeterince ifade edilemeyen bir geliştirme ortamı) sonucu da olabilir. Ancak, kopyala ve yapıştır programlamanın kabul edilebilir veya gerekli olduğu durumlar vardır, örneğin: Basmakalıp, döngü açma (derleyici tarafından otomatik olarak desteklenmediğinde) veya belirli programlama deyimleri ve bazıları tarafından desteklenir kaynak kodu düzenleyicileri şeklinde parçacıklar.

Kökenler

Kopyala ve yapıştır programlaması genellikle sıfırdan kod yazma eylemini zor veya rahatsız edici bulan ve kendi problemleri için temel olarak kullanabilecekleri önceden yazılmış bir çözüm veya kısmi bir çözüm aramayı tercih eden deneyimsiz veya öğrenci programcılar tarafından yapılır. çözme.[1](Ayrıca bakınız Kargo kült programlama )

Kodu kopyalayan deneyimsiz programcılar genellikle aldıkları önceden yazılmış kodu tam olarak anlamazlar. Bu nedenle, sorun daha çok deneyimsizliklerinden ve eksikliklerinden kaynaklanmaktadır. programlamada cesaret kopyalama ve yapıştırma eyleminden daha çok. Kod genellikle arkadaşların veya iş arkadaşlarının kodu gibi farklı kaynaklardan gelir, İnternet forumları, öğrencinin profesörleri / asistanları tarafından sağlanan kod veya bilgisayar Bilimi ders kitapları. Sonuç, birbirinden kopuk bir stil çatışması olma riskini taşır ve artık yeni çözümlere ihtiyaç duyulmayan sorunları çözen gereksiz kodlara sahip olabilir.

Başka bir sorun şudur: böcekler Yeni bir ortama yerleştirildiğinde artık geçerli olmayan ayrı kaynaklarda yapılan varsayımlar ve tasarım seçimleriyle kolayca tanıtılabilir.

Bu tür bir kod, aslında, istemeden de olabilir şaşkın Değişkenlerin, sınıfların, işlevlerin ve benzerlerinin adları, yeni bağlamda amaçları tamamen farklı olsa bile tipik olarak değişmeden bırakıldığından.[1]

Kopyala ve yapıştır programlaması, döngü yapıları, işlevler ve alt yordamlar gibi bilgisayar dillerinde yaygın olan özelliklerin yetersiz anlaşılmasının bir sonucu da olabilir.

Çoğaltma

Tekrarlayan kod olmak yeniden düzenlenmiş kullanarak soyutlama gibi mekanizma işlevi.

Kitaplık kodunu uygulama

Kopyalama ve yapıştırma, genellikle iyi test edilmiş, kullanıma hazır kod parçacıkları ve genel kod parçacıkları içeren kendi kitaplıklarına sahip olan deneyimli programcılar tarafından yapılır. algoritmalar belirli görevlere kolayca uyarlanabilir.[2]

Bir formu olmak kod çoğaltma, kopyala ve yapıştır programlamanın bazı kendine özgü sorunları vardır; kod, kaynak metin ile kopyalar arasında herhangi bir anlamsal bağlantıyı korumazsa bu tür sorunlar daha da artar. Bu durumda, eğer değişiklik gerekirse, tüm yinelenen konumlar için zaman harcanıyor. (Orijinal kod ve / veya kopya doğru şekilde yorumlanırsa bu kısmen hafifletilebilir; ancak, o zaman bile aynı düzenlemeleri birden çok kez yapma sorunu devam eder. Ayrıca, kod bakımı çoğu zaman yorumları güncellemeyi ihmal eder,[3] Uzaktaki kod parçalarının nerede bulunacağını açıklayan yorumlar, güncelliğini yitirmekle meşhurdur.)

Taraftarları nesne odaklı metodolojiler ayrıca kopyalama ve yapıştırmanın "kod kitaplığı" kullanımına itiraz etmektedir. Nesne yönelimli bir yaklaşım, genel bir algoritmanın birden çok mutasyona uğramış kopyasını yapmak yerine Öz algoritma yeniden kullanılabilir hale kapsüllenmiş sınıf. Sınıf, aşağıdakilerin tam desteğiyle esnek bir şekilde yazılmıştır. miras ve aşırı yükleme, böylece tüm çağıran kod, orijinal kodu değiştirmek yerine bu genel kodu doğrudan kullanmak için arayüz oluşturabilir.[4] Ek işlevsellik gerekeceğinden, kitaplık genişletilir ( geriye dönük uyumluluk ). Bu şekilde, orijinal algoritmada düzeltilmesi gereken bir hata varsa veya geliştirilebiliyorsa, onu kullanan tüm yazılımlar fayda sağlayacaktır.

Dallanma kodu

Dallanma kodu büyük takım yazılım geliştirmenin normal bir parçasıdır, her iki dalda paralel geliştirmeye ve dolayısıyla daha kısa geliştirme döngülerine izin verir. Klasik dallanma aşağıdaki niteliklere sahiptir:

  • Tarafından yönetilir sürüm kontrolü dallanmayı destekleyen sistem
  • Paralel geliştirme tamamlandıktan sonra şubeler yeniden birleştirilir.

Kopyala ve yapıştır, klasik dallara ayırmaya göre daha az resmi bir alternatiftir ve genellikle dalların zaman içinde giderek daha fazla farklılaşacağı öngörüldüğünde, örneğin yeni bir ürün mevcut bir üründen ayrılırken kullanılır.

Yeni bir ürünü döndürmenin bir yolu olarak, kopyala ve yapıştır programlamanın bazı avantajları vardır. Çünkü yeni geliştirme girişimi mevcut ürünün koduna dokunmuyor:

  • Gerek yok regresyon testi mevcut ürün, yeni ürün lansmanıyla ilişkili kalite kontrol süresinden tasarruf sağlar ve Market zamanı.
  • Mevcut üründe kurulu kullanıcı tabanını altüst edebilecek hataların oluşma riski yoktur.

Olumsuz yönler:

  • Yeni ürün, mevcut üründen beklendiği kadar sapmazsa, iki kod tabanının desteklenmesi gerekebilir (maliyetin iki katı), birinin yapılacağı yerde. Bu pahalıya yol açabilir yeniden düzenleme ve hat boyunca manuel birleştirme.
  • yinelenen kod baz, her iki üründe de istenebilecek değişiklikleri uygulamak için gereken zamanı iki katına çıkarır; bu artışlar bu tür değişiklikler için pazara sunma süresi ve aslında, kodu ilk etapta dallara ayırarak elde edilen herhangi bir zaman kazanımını ortadan kaldırabilir.

Yukarıdakine benzer şekilde, kopyala ve yapıştır yaklaşımına alternatif modüler bir yaklaşım olabilir:

  • Her iki ürün tarafından kütüphanelerde paylaşılacak kodu dışarıda bırakarak başlayın.
  • Bu kitaplıkları (kod tabanının ikinci bir kopyası yerine) yeni ürünün geliştirilmesinin temeli olarak kullanın.
  • Ürünün ilave bir üçüncü, dördüncü veya beşinci versiyonu öngörülürse, bu yaklaşım çok daha güçlüdür, çünkü hazır kod kitaplıkları, ikinciden sonra herhangi bir ek ürün için geliştirme yaşam döngüsünü önemli ölçüde kısaltır.[5]

Tekrarlayan görevler veya bir görevin varyasyonları

Kopyala-yapıştır programıyla yazılan kodu korumanın zorluğu ve riski

Kopyala ve yapıştır programlamanın en zararlı biçimlerinden biri, tekrarlayan bir görevi yerine getiren kodda veya bazı değişkenlere bağlı olarak aynı temel görevin varyasyonlarında ortaya çıkar. Her örnek yukarıdan kopyalanır ve küçük değişikliklerle tekrar yapıştırılır. Zararlı etkiler şunları içerir:

  • Kopyala ve yapıştır yaklaşımı genellikle büyük yöntemlere (kötü bir kod kokusu ).
  • Her örnek, önceki bölümlerde tartışılan tüm problemlerle, ancak çok daha geniş bir kapsamla bir kod kopyası oluşturur. Çok sayıda tekrarlama yaygındır; yüzlerce mümkündür. Bu tür kodlarda özellikle hata düzeltmeleri çok zor ve maliyetli hale gelir.[6]
  • Bu tür bir kod, her bir tekrar arasında tam olarak neyin farklı olduğunu ayırt etmenin zorluğundan dolayı önemli okunabilirlik sorunlarından da muzdariptir. Bunun, kodun revize edilmesinin riskleri ve maliyetleri üzerinde doğrudan bir etkisi vardır.
  • prosedürel programlama model, tekrar eden görevlere kopyala ve yapıştır yaklaşımını kesinlikle önermemektedir. Prosedürel bir model altında, tekrar eden görevlere tercih edilen bir yaklaşım, görevde tek bir geçiş gerçekleştiren bir işlev veya alt rutin oluşturmaktır; bu alt yordam daha sonra ana yordam tarafından, ya tekrarlı olarak ya da daha iyisi, bir tür döngü yapısıyla çağrılır. Bu tür bir kod "iyi ayrıştırılmış" olarak adlandırılır ve okunması daha kolay ve daha kolay genişletilebilir olması tavsiye edilir.[7]
  • Genel temel kural bu durum için uygulanabilir "kendini tekrar etme ".

Kasıtlı tasarım seçimi

Kopyala ve yapıştır programlama bazen geçerli bir programlama tekniği olarak kabul edilir. Bu, en yaygın olarak sınıf bildirimleri veya standart kitaplıkları içe aktarma gibi standart şablonda veya doldurulacak bir çerçeve olarak mevcut bir kod şablonunu (boş içerik veya saplama işlevleriyle) kullanırken görülür.

Programlama deyimlerinin kullanımı ve tasarım desenleri aynı zamanda formülsel kod kullandıkları için kopyala ve yapıştır programlamaya benzer. Bazı durumlarda bu şu şekilde ifade edilebilir: pasaj, bu kod gerekli olduğunda yapıştırılabilir, ancak genellikle programcının zihninden basitçe hatırlanır. Diğer durumlarda deyimler bir kod şablonuna indirgenemez. Bununla birlikte, çoğu durumda, bir deyim koda indirgenebilse bile, ya bir işleve dönüştürülecek kadar uzun ya da doğrudan girilebilecek kadar kısa olacaktır.

Alt metin programlama dili kes ve yapıştır "suç olmaktan çıkarmayı" amaçlayan bir araştırma projesidir. Bu dili kullanarak, kes ve yapıştır birincil etkileşim modelidir ve bu nedenle bir anti-model olarak kabul edilmez.

Misal

Basit bir örnek, şu şekilde ifade edilebilen bir for döngüsüdür için (int ben=0; ben!=n; ++ben) {}.

Böyle bir for-loop kullanan örnek kod şunlar olabilir:

geçersiz foo(int n) {    için (int ben=0; ben!=n; ++ben) {       /* vücut */    }}

Döngü kodu daha sonra aşağıdaki kod parçacığı tarafından oluşturulmuş olabilir (türleri ve değişken adlarını belirterek):

    için ($tip $loop_var = 0; $loop_var != $Dur; ++$loop_var) {        /* vücut */    }

Ayrıca bakınız

Referanslar

  1. ^ a b "Acemi Programcıların Hatalarını Yeniden İnceleme". acm.org. Alındı 2008-06-04.
  2. ^ "ASP.NET Web Sayfalarını Dinamik Olarak Arka Plan Kodlamasında Oluşturma". codeproject.com. Alındı 2008-06-04.
  3. ^ Spinellis, Diomidis. "Kötü Kod Bulucu Kılavuzu". InformIT.com. Alındı 2008-06-06.
  4. ^ Lewallen, Raymond. "Nesne Tabanlı Programlamanın 4 ana ilkesi". codebetter.com. Arşivlenen orijinal 2010-11-25 tarihinde. Alındı 2008-06-04.
  5. ^ Eriksen, Lisa. "Nesne Tabanlı Yazılım Geliştirmede Kod Yeniden Kullanımı" (PDF). Norveç Bilim ve Teknoloji Üniversitesi, Bilgisayar ve Bilgi Bilimleri Bölümü. Alındı 2008-05-29.
  6. ^ Ashley Marsh. "Kodlama Standartları - Korunabilir Kodlamanın Yolu". MAAN Yazılımları A.Ş.. Alındı 2018-04-10.
  7. ^ "Stanford Üniversitesi, CS 106X (" Programlama Soyutlamaları ") Kurs El Notu:" Ayrıştırma"" (PDF). Stanford Üniversitesi. Arşivlenen orijinal (PDF) 16 Mayıs 2008. Alındı 2008-06-04.

Dış bağlantılar