Kodun yeniden kullanımı
Bu madde, öksüz maddedir; zira herhangi bir maddeden bu maddeye verilmiş bir bağlantı yoktur. (Ekim 2024) |
Bu madde veya sayfa başka bir dilden kötü bir biçimde tercüme edilmiştir. Sayfa makine çevirisi veya dilde yetkinliği bulunmayan bir çevirmen tarafından oluşturulmuş olabilir. |
Yazılım geliştirme (ve genel olarak bilgisayar programlama) bağlamında, kod tekrar kullanımı, ya da yazılım tekrar kullanımı, mevcut yazılım, veya yazılım bilgisinin yeni yazılımlar oluşturmak için kullanılmasıdır,[1][2](s7) bu süreç yeniden kullanılabilirlik prensiplerine dayanır.
Kod tekrar kullanımı, seçilen programlama dilinin karmaşıklığına bağlı olarak çeşitli yollarla gerçekleştirilebilir ve basit kod kopyalama (örneğin, kod parçaları aracılığıyla) gibi daha düşük seviyeli yaklaşımlardan,[3] basit fonksiyonlar (prosedürler veya alt yordamlar) veya bir dizi nesne veya fonksiyonun modüller (örneğin, kütüphaneler)[4][2]:7 ya da özel ad alanılar, paketler, çerçeveler veya daha yüksek seviyelerde yazılım paketilerle uzanabilir.
Kod tekrar kullanımı, kod bakımını zorlaştırabilecek bağımlılıklar içerir.[kaynak belirtilmeli] En az bir çalışma, kod tekrar kullanımının teknik borçu azalttığını bulmuştur.[5]
Genel bakış
değiştirAd hoc kod tekrar kullanımı, programlamanın ilk günlerinden beri uygulanmaktadır. Programcılar her zaman kodun, şablonların, fonksiyonların ve prosedürlerin bölümlerini tekrar kullanmışlardır. Ancak, yazılım tekrar kullanımı, yazılım mühendisliğinde tanınan bir çalışma alanı olarak yalnızca 1968'de Douglas McIlroy'un Bell Laboratuvarları'nda yeniden kullanılabilir bileşenlere dayanan bir yazılım endüstrisi önerdiği zaman ortaya çıkmıştır. Kod tekrar kullanımı, yazılım ürünü geliştirme sürecinde zaten bir şekilde oluşturulmuş varlıklardan faydalanarak zaman ve kaynak tasarrufu sağlamayı ve aşırılığı azaltmayı hedefler.[6] Tekrar kullanımındaki ana fikir, bir seferde yazılmış olan bilgisayar programı parçalarının, daha sonra yazılacak diğer programların inşasında kullanılabileceği veya kullanılmasının gerektiğidir. Kod tekrar kullanımı, yeniden kullanılabilir varlıkların ayrı bir şekilde bakımının yapılmasını gerektirebilir. Kod, tekrar kullanmak için en yaygın seçilen kaynak olsa da, geliştirme sürecinde üretilen diğer varlıklar da yeniden kullanım fırsatları sunabilir: yazılım bileşenleri, test setleri, tasarımlar, belgeler vb.[7]
yazılım kütüphanesi, kod tekrar kullanımının iyi bir örneğidir. Programcılar, programlarının belirli kısımlarının tekrar kullanılabilmesi için içsel soyutlamalar oluşturmayı seçebilir veya kendi kullanımına yönelik özel kütüphaneler oluşturabilir. Yazılımın daha kolay yeniden kullanılabilir hale gelmesini sağlayan bazı özellikler şunlardır: modülerlik, gevşek bağlılık, yüksek kohezyon, bilgi gizleme ve endişelerin ayrımı.
Yeni yazılmış bir kodun mevcut bir kod parçasını kullanabilmesi için, bir tür arayüz veya iletişim yöntemi tanımlanmalıdır. Bunlar genellikle bir alt yordam, nesne, sınıf veya prototip kullanımını içerir. Kurumlarda, bu tür uygulamalar alan mühendisliği (diğer adıyla yazılım ürün hattı mühendisliği) tarafından resmileştirilir ve standart hale getirilir.
Mevcut bir programın önceki versiyonunu bir sonraki versiyon için başlangıç noktası olarak kullanma genel uygulaması da bir kod tekrar kullanım biçimidir.
Sözde kod "tekrar kullanımı", mevcut bir programdan bir kısmını veya tamamını yeni bir programa kopyalamaktan ibarettir. Bu yaklaşım, organizasyonların yeni bir ürün için pazara çıkma süresi avantajları elde etmesini sağlasa da, sonrasında kes ve yapıştır programlama nedeniyle ortaya çıkan birçok aynı kod tekrarı sorunuyla karşılaşabilirler.
Birçok araştırmacı, tekrar kullanımı daha hızlı, daha kolay, daha sistematik ve programlama sürecinin normal bir parçası haline getirmek için çalışmıştır. Bu, nesne yönelimli programlamanın icadının arkasındaki ana hedeflerden biridir ve bu, resmi olarak yeniden kullanımın en yaygın biçimlerinden biri haline gelmiştir. Biraz daha sonra geliştirilen bir başka icat da generic programmingdir.
Bir diğer, daha yeni yöntem, yazılım "üreticileri" kullanmaktır; bu, kullanıcıların seçtiği bir dizi parametreye dayalı olarak belirli bir türde yeni programlar oluşturabilen programlardır. Bu tür sistemler üzerine yapılan çalışmalar ise üretken programlama ve metaprogramlama alanlarıdır.
Tekrar Kullanım Türleri
değiştirMotivasyon ve etkenler açısından, tekrar kullanım şu şekillerde olabilir:
- Fırsatçı – Bir projeye başlamak üzere hazırlık yaparken, ekip mevcut bileşenlerin yeniden kullanılabileceğini fark eder.
- Planlı – Bir ekip, bileşenleri gelecekteki projelerde yeniden kullanılabilecek şekilde stratejik olarak tasarlar.
Tekrar kullanım daha da sınıflandırılabilir:
- Dahili tekrar kullanım – Bir ekip, kendi bileşenlerini yeniden kullanır. Bu, projenin kritik bir bileşenini kontrol etmek isteyen ekip için bir iş kararı olabilir.
- Harici tekrar kullanım – Bir ekip, üçüncü taraf bir bileşeni lisanslamayı tercih edebilir. Üçüncü taraf bir bileşeni lisanslamak, genellikle ekibe, dahili olarak geliştirmeye kıyasla %1 ila %20 arasında bir maliyet getirir.[8] Ekip ayrıca bileşeni bulma, öğrenme ve entegre etme süresini de göz önünde bulundurmalıdır.
Tekrar kullanımın formu veya yapısı açısından, kod şu şekillerde olabilir:[9]
- Referanslı – İstemci kodu, yeniden kullanılan koda bir referans içerir ve bu nedenle ayrı yaşam döngülerine sahip olabilirler ve farklı versiyonlara sahip olabilirler.
- Fork edilmiş – İstemci kodu, yeniden kullanılan kodun yerel veya özel bir kopyasını içerir ve bu nedenle tek bir yaşam döngüsüne ve tek bir versiyona sahip olurlar.
Fork-edilmiş tekrar kullanımı genellikle teşvik edilmez çünkü bu, kod tekrarının bir biçimidir; bu durumda her hatanın her kopyada düzeltilmesi gerekir ve yeniden kullanılan kodda yapılan iyileştirmelerin her kopyada manuel olarak birleştirilmesi ya da güncel kalmamaları gerekir. Ancak, fork-edilmiş tekrar kullanımın izolasyon, yeniden kullanılan kodu değiştirme esnekliği, daha kolay paketleme, dağıtım ve versiyon yönetimi gibi avantajları olabilir.[9]
Sistematik
değiştirSistematik yazılım tekrar kullanımı, verimliliği artırma ve yazılım endüstrisinin kalitesini iyileştirme stratejisidir. Kavram olarak basit olmasına rağmen, başarılı yazılım tekrar kullanımı uygulaması pratikte zordur. Bunun nedeni, yazılım tekrar kullanımının uygulandığı bağlama bağımlılığıdır. Sistematik yazılım tekrar kullanımı ile ilgili ele alınması gereken bazı sorunlar şunlardır:[10]
- Belirgin ve iyi tanımlanmış bir ürün vizyonu, bir yazılım ürün hattı (SPL) için temel bir gerekliliktir.
- Evrimsel bir uygulama stratejisi, şirket için daha pragmatik bir strateji olacaktır.
- Başarıyı sağlamak için sürekli yönetim desteği ve liderliğine ihtiyaç vardır.
- SPL mühendisliğini destekleyecek uygun bir örgütsel yapı gereklidir.
- Proje odaklı bir şirketten ürün odaklı bir şirkete geçiş zihniyeti önemlidir.
Örnekler
değiştirYazılım Kütüphaneleri
değiştirKodun yeniden kullanımı ile ilgili çok yaygın bir örnek, yazılım kütüphanesinin kullanılmasıdır. Bilgiyi farklı tanınmış formatlar arasında dönüştürmek, harici depolama alanına erişmek, dış programlarla arayüz oluşturmak veya bilgileri (sayılar, kelimeler, isimler, yerler, tarihler vb.) yaygın şekillerde manipüle etmek gibi birçok yaygın işlem, farklı programlar tarafından gereklidir. Yeni program yazarları, bu görevleri yerine getirmek için tamamen yeni kod yazmak yerine, bir yazılım kütüphanesindeki kodu kullanabilirler; bu, "tekerleği yeniden icat etmemek" anlamına gelir. Kütüphane uygulamaları genellikle iyi test edilmiştir ve alışılmadık veya karmaşık durumları kapsama avantajına sahiptir. Dezavantajları arasında ise performansı veya istenen çıktıyı etkileyebilecek detayları ayarlama imkânının olmaması ve kütüphanenin edinilmesi, öğrenilmesi ve yapılandırılmasının zaman ve maliyet gerektirmesi yer alır.[11]
Tasarım Desenleri
değiştirTasarım deseni, tekrarlayan bir probleme genel bir çözüm sunar. Tasarım desenleri, somut olandan çok daha kavramsaldır ve belirli ihtiyaçlara göre değiştirilebilir. Ancak, belirli desenleri uygulamak için soyut sınıflar ve arayüzler yeniden kullanılabilir.
Çerçeveler
değiştirGeliştiriciler, genellikle üçüncü taraf uygulamalar ve çerçeveler aracılığıyla büyük yazılım parçalarını yeniden kullanır; ancak çerçeveler genellikle alan bazlıdır ve yalnızca belirli uygulama ailelerine uygulanabilir[kaynak belirtilmeli].
Yüksek Düzey Fonksiyon
değiştirFonksiyonel programlamada yüksek düzey fonksiyonlar, tasarım desenleri veya çerçevelerin daha önce kullanıldığı birçok durumda kullanılabilir.
Retro Hesaplama
değiştirRetro Hesaplama, eski bilgisayarlarda veya bunlar için emülatörlerde çalıştırılan retro programlar nedeniyle kodun yeniden kullanımını kapsar.
Bilgisayar Güvenliği
değiştirBilgisayar güvenliği alanında, kod yeniden kullanımı bir yazılım istismar yöntemi olarak kullanılır.[12] Bir saldırgan, örneğin W^X gibi kod enjeksiyonu savunmaları bulunduğunda, bir programın kontrol akışını doğrudan değiştiremediğinde, kontrol akışını bellekte mevcut kod dizilerine yönlendirebilir.
Kod yeniden kullanım saldırılarına örnekler arasında return-to-libc saldırısı, return-oriented programming ve jump-oriented programming yer alır.[12][13] Sure! Here’s the translation of the provided text into Turkish:
Bileşenler
değiştirBir bileşen, nesne yönelimli bir bağlamda, bir dizi işbirlikçi sınıfı (ya da yalnızca bir sınıfı) ve onun arayüzlerini temsil eder. Arayüzler, bileşenlerin değiştirilmesini sağlamakla sorumludur. Yeniden kullanılabilir bileşenler, bileşen kaynak kodu yönetim teknolojileri (CSCM) kullanılarak izole edilebilir ve SCM depoları arasında senkronize edilebilirler.[kaynak belirtilmeli]
Bilgisayar Dışında
değiştir" Kodun yeniden kullanımı" kavramı, yazılımın dışındaki mühendislik uygulamalarını da kapsayabilir. Örneğin, parametrik modelleme bilgisayar destekli tasarımda yeniden kullanılabilir tasarımlar oluşturmayı sağlar. Standartlaştırma, birçok bağlamda yeniden kullanılabilecek, birbirleriyle uyumlu parçaların yaratılmasına yol açar.[kaynak belirtilmeli]
Eleştiri
değiştirKodun yeniden kullanımı, yeniden kullanılan bileşene bağımlılık yaratır. Rob Pike, "Biraz kopyalama, biraz bağımlılıktan iyidir" görüşündedir. Google'a katıldığında, şirket kodun yeniden kullanımına büyük önem veriyordu. Google’ın kod tabanının, derleme hızı ve sürdürülebilirlik açısından bu eski politikanın sonuçlarından hâlâ etkilendiğine inanmaktadır.[14]
Yeniden kullanılabilir kod genellikle yazılması ve tasarlanması daha fazla çaba gerektirir. Fred Brooks, bu çabanın neden olduğu önemli maliyetin, "Çamur Tuzağı" ve "Gümüş Mermi Yok" adlı denemelerinde tartışmaktadır. Yanılgı, çabanın çoğunlukla, bu maliyetin nasıl geri kazanılacağı mekanizmaları dikkatlice anlaşılmadan harcandığıdır. Gerekçe genellikle, fiziksel bir üretim sürecindeki yeniden kullanılabilir parçalarla yanlış paraleller çizilerek elde edilir. Yanlış, çünkü kod yazmak, bir ürünün tasarımına benzer, çok sayıda birimin üretilmesine değil.
Ayrıca bakınız
değiştir- Kendini tekrar etme
- Uluslararası Yazılım Yeniden Kullanım Konferansı
- Kalıtım (nesne yönelimli programlama)
- Dil bağlama
- Burada icat edilmedi (zıt anlam)
- Tip çok biçimliliği
- Prosedürel programlama
- Tekerleği yeniden icat etme (zıt anlam)
- Yeniden kullanılabilirlik
- Yeniden kullanım metrikleri
- Tek kaynak gerçeği
- Yazılım çerçevesi
- Sanal kalıtım
Kaynakça
değiştir- ^ Frakes, W.B.; Kyo Kang (July 2005). "Software Reuse Research: Status and Future". IEEE Transactions on Software Engineering. 31 (7). ss. 529-536. CiteSeerX 10.1.1.75.635 $2. doi:10.1109/TSE.2005.85.
- ^ a b Reddy, Martin (2011). API design for C++. Boston: Morgan Kaufmann. ISBN 978-0-12-385004-1. OCLC 704559821.
- ^ Selaolo, Karabo; Hlomani, Hlomani (2016). "Towards An Algorithms Ontology Cluster: for Modular Code Reuse and Polyglot Programming". Advances in Computer Science. Cilt 5. s. 63 – Researchgate vasıtasıyla.
- ^ "4. Code Reuse: Functions and Modules - Head First Python, 2nd Edition [Book]". www.oreilly.com (İngilizce). Erişim tarihi: 26 Ocak 2022.
- ^ Feitosa, Daniel; Ampatzoglou, Apostolos; Gkortzis, Antonios; Bibi, Stamatia; Chatzigeorgiou, Alexander (September 2020). "CODE reuse in practice: Benefiting or harming technical debt" (PDF). Journal of Systems and Software (İngilizce). Cilt 167. s. 110618. doi:10.1016/j.jss.2020.110618.
- ^ Lombard Hill Group. "Yazılım Tekrar Kullanımı Nedir?". lombardhill.com. Lombard Hill Group. 23 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Ekim 2014.
- ^ Lombard Hill Group. "Yazılım Tekrar Kullanımı Nedir?". 23 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Ekim 2014.
- ^ McConnell, Steve (1996). Rapid Development: Taming Wild Software Schedules. Pearson Education. ISBN 978-1-55615-900-8. Geçersiz
|url-erişimi=registration
(yardım) - ^ Champman, M.; Van der Merwe, Alta (2008). "Contemplating Systematic Software Reuse in a Small Project-centric Company". Proceeding SAICSIT '08 Proceedings of the 2008 annual research conference of the South African Institute of Computer Scientists and Information Technologists on IT research in developing countries: riding the wave of technology. doi:10.1145/1456659.1456662. ISBN 978-1-60558-286-3. Geçersiz
|url-erişimi=subscription
(yardım) - ^ "Kodun Yeniden Kullanımı". DocForge. 10 Temmuz 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Ekim 2024.
- ^ a b Bletsch, Tyler (2011). Kod Yeniden Kullanım Saldırıları: Yeni Sınırlar ve Savunmalar. North Carolina State University. ISBN 978-1-124-75297-6.
- ^ Bletsch, Tyler; Jiang, Xuxian; Freeh, Vince W; Liang, Zhenkai (2011). "Jump-oriented programming: a new class of code-reuse attack" (PDF). Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security. ACM. ss. 30-40. doi:10.1145/1966913.1966919. ISBN 978-1-4503-0564-8. 7 Ağustos 2017 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 7 Ağustos 2017.
- ^ The Go Programming Language (1 Aralık 2015), Go Aforizmaları – Rob Pike – Gopherfest – 18 Kasım 2015, 22 Aralık 2021 tarihinde kaynağından arşivlendi, erişim tarihi: 26 Şubat 2016