Kod tabanı - Codebase

İçinde yazılım geliştirme, bir kod tabanı (veya kod tabanı) bir koleksiyondur kaynak kodu alışığım inşa etmek belirli yazılım sistemi, uygulama veya yazılım bileşeni. Tipik olarak, bir kod tabanı yalnızca insan tarafından yazılmış kaynak kodu Dosyalar; bu nedenle, bir kod tabanı genellikle araçlar (oluşturulan dosyalar) veya ikili kitaplık dosyaları (nesne dosyaları) tarafından oluşturulan kaynak kodu dosyalarını içermez, çünkü bunlar insan tarafından yazılmış kaynak kodundan oluşturulabilir. Ancak, derleme için gerekli veriler olduklarından genellikle yapılandırma ve özellik dosyalarını içerir.

Bir kod tabanı tipik olarak bir kaynak kontrolü bir depoda sürüm kontrolü sistemi. Daha küçük projeler için, basit bir dosya seti olarak tutulabilir (hatta Linux çekirdeği yıllarca bir dizi dosya olarak tutuldu).[1] Bir kaynak kodu deposu, büyük miktarlarda kaynak kodun kamuya açık veya özel olarak saklandığı bir yerdir. Kaynak kodu havuzları, temelde yedeklemeler ve sürüm oluşturma için ve çeşitli kaynak kodu sürümlerini işlemek ve geliştiricilerin çakışan değişiklikler göndermesinden kaynaklanan çakışmaların çözümüne yardımcı olmak için çok geliştiricili projelerde kullanılır. Yıkım, Git ve Mercurial açık kaynaklı projelerde yaygın olan bu iş akışını gerçekleştirmek için kullanılan popüler araçlara örneklerdir.

Farklı ve monolitik kod tabanları

Birden çok proje ayrı olabilir, farklı kod tabanları, ya da tek olabilir, paylaşılan veya monolitik kod tabanı. Bu, özellikle aynı şirket içinde geliştirilenler gibi ilgili projeler için geçerlidir. Daha ayrıntılı olarak, monolitik bir kod tabanı tipik olarak tek bir depoyu (tüm kod tek bir yerde) ve genellikle ortak bir derleme sistemi veya ortak kitaplıkları gerektirir. Kod tabanının paylaşılıp paylaşılmayacağı, sistem mimarisine ve gerçek derleme sonuçlarına bağlı değildir; bu nedenle, gerçek gelişimle ilgili olan monolitik bir kod tabanı, bir monolitik sistem, yazılım mimarisi veya tek bir monolitik ikili ile ilgili. Sonuç olarak, bir monolitik kod tabanı (büyük kod tabanları için) yalnızca tek bir sistem veya tek bir ikili taşımak yerine ayrı bileşenlerden oluşabilir ve oluşacaktır; dağıtılmış bir kod tabanı (birden çok bileşenli) tek bir monolitik sistemi veya hatta tek bir ikili sistemi oluşturmak için kullanılabilir. Örneğin, Linux çekirdeği mimari olarak tek bir monolitik çekirdek, ancak ayrı ikili dosyalardan (yüklenebilir bileşenler) oluşur ve birden çok dağıtılmış depolarda geliştirilmiştir.

Dağıtılmış bir kod tabanı ile karşılaştırıldığında, monolitik bir kod tabanının hem avantajları hem de dezavantajları vardır.[2][3] Daha basit bir ifadeyle, monolitik bir kod tabanı entegrasyonu basitleştirir - - farklı bileşenlerde değişiklikler veya bileşenler arasında kodun yeniden düzenlenmesi, kolayca ve atomik olarak yapılabilir - ve tüm kod tabanı genelinde işlemlere izin verir, ancak daha büyük bir havuz gerektirir ve geniş kapsamlı sunmayı kolaylaştırır teknik borç.[şüpheli ] Ayrı bir kod tabanı veya dağıtılmış bir kod tabanı, ayrı depoları daha küçük ve daha yönetilebilir kılar, aynı zamanda bileşenler arasında ayrımı zorlar, ancak aynı zamanda kod tabanları arasında (veya ana havuzla) entegrasyon gerektirir ve birden çok kod tabanını kapsayan değişiklikleri karmaşıklaştırır.[4]

Standartlar açısından, birden çok kod tabanına "ayrı" olarak atıfta bulunmak, paylaşılan kaynak kodu olmayan bağımsız uygulamaların olduğunu ve tarihsel olarak bu uygulamaların ortak bir projeden gelişmediğini belirtir. Bu, belirli bir standardı uygulayan iki bağımsız yazılım parçası göstererek birlikte çalışabilirliği göstermenin bir yolu olabilir.[şüpheli ]

Örnekler

Bazı önemli ölçüde büyük kod tabanları şunları içerir:

  • Google: monolitik, 1 milyar dosya, 9 milyon kaynak kodu dosyası, 2 milyar satır kaynak kodu, toplam 35 milyon işlem, 86 TB toplam boyut (Ocak 2015)[5]
  • Facebook: monolitik, 8 GB (geçmiş dahil 54 GB repo, 2014),[6] yüz binlerce dosya (2014)[3]
  • Linux çekirdeği: dağıtılmış,[7] 15 milyon satırdan fazla kod (2013 itibariyle ve çekirdek sürümü 3.10)

Ayrıca bakınız

Referanslar

  1. ^ "Git'in Kısa Tarihi". git-scm.com. Alındı 21 Ekim, 2014.
  2. ^ J. David Morgenthaler; Misha Gridnev; Raluca Sauciuc ve Sanjay Bhansali (2012). "Borç Oluşturma Arayışı: Google'da Teknik Borçları Yönetme Deneyimleri". Üçüncü Uluslararası Teknik Borç Yönetimi Çalıştayı Bildirileri. IEEE. s. 1–6, (PDF ).
  3. ^ a b "Facebook'ta Mercurial'i Ölçeklendirme". Facebook Kodu. 2014-01-07. Alındı 29 Nisan 2016.
  4. ^ "Git - Dağıtılmış İş Akışları". git-scm.com. Alındı 29 Nisan 2016.
  5. ^ Potvin, Rachel; Levenberg, Josh (24 Haziran 2016). "Google neden milyarlarca satır kodu tek bir depoda depoluyor?". ACM'nin iletişimi. 59 (7): 78–87. doi:10.1145/2854146.
  6. ^ @feross (24 Nisan 2014). "Facebook'un git deposu 54 GB" (Cıvıldamak). Alındı 29 Nisan 2016 - üzerinden Twitter.
  7. ^ Sproull, Lee; Ay, Jae Yun (2000-11-05). "Dağıtılmış çalışmanın özü: Linux çekirdeğinin durumu - Ay - İlk Pazartesi". İlk Pazartesi. 5 (11). Alındı 29 Nisan 2016.