En el desarrollo de software , una base de código (o base de código ) es una colección de código fuente que se utiliza para construir un sistema de software , una aplicación o un componente de software en particular . Normalmente, una base de código incluye sólo archivos de código fuente escritos por humanos ; por lo tanto, una base de código generalmente no incluye archivos de código fuente generados por herramientas (archivos generados) o archivos de biblioteca binaria (archivos objeto), ya que pueden construirse a partir del código fuente escrito por humanos. Sin embargo, generalmente incluye archivos de configuración y propiedades, ya que son los datos necesarios para la compilación.
Una base de código generalmente se almacena en un repositorio de control de fuente en un sistema de control de versiones. Para proyectos más pequeños, puede mantenerse como un simple conjunto de archivos (incluso el kernel de Linux se mantuvo como un conjunto de archivos durante muchos años). [1] Un repositorio de código fuente es un lugar donde se guardan grandes cantidades de código fuente, ya sea de forma pública o privada. Los repositorios de código fuente se utilizan principalmente para copias de seguridad y control de versiones, y en proyectos de múltiples desarrolladores para manejar varias versiones de código fuente y proporcionar ayuda para resolver conflictos que surgen de los desarrolladores que envían modificaciones superpuestas. Subversion , Git y Mercurial son ejemplos de herramientas populares utilizadas para manejar este flujo de trabajo, que son comunes en proyectos de código abierto.
Bases de código distintas y monolíticas
Múltiples proyectos pueden tener bases de código distintas e independientes, o pueden tener una única, compartida obase de código monolítica . Este es particularmente el caso de proyectos relacionados, como los desarrollados dentro de la misma empresa. Más detalladamente, una base de código monolítica generalmente implica un único repositorio (todo el código en un solo lugar) y, a menudo, un sistema de compilación común o bibliotecas comunes. El hecho de que el código base se comparta o se divida no depende de la arquitectura del sistema ni de los resultados reales de la construcción; por lo tanto, una base de código monolítica, que está relacionada con el desarrollo real, no implica unsistema monolítico, que está relacionado con la arquitectura del software o un único binario monolítico. Como resultado, una base de código monolítica puede y (para bases de código grandes) a menudo constará de componentes separados, en lugar de llevar un solo sistema o un solo binario; Se puede usar una base de código distribuida (con múltiples componentes) para construir un solo sistema monolítico o incluso un solo binario. Por ejemplo, el kernel de Linux es arquitectónicamente un solokernel monolítico, pero consta de binarios separados (componentes cargables) y se desarrolla en múltiples repositorios distribuidos.
Hay ventajas y desventajas en una base de código monolítica, cuando se compara con una base de código distribuida. [2] [3] De manera más simple, una base de código monolítica simplifica la integración — los cambios a diferentes componentes o la refactorización del código entre componentes se pueden hacer fácil y atómicamente — y permite operaciones en toda la base de código, pero requiere un repositorio más grande y facilita la introducir una amplia deuda técnica . [ dudoso ] Una base de código separada o una base de código distribuida mantiene los repositorios individuales más pequeños y más manejables, haciendo cumplir al mismo tiempo la separación entre los componentes, pero también requiere la integración entre las bases de código (o con el repositorio principal) y complica los cambios que abarcan múltiples bases de código. [4]
En términos de estándares, referirse a múltiples bases de código como "distintas" declara que existen implementaciones independientes sin código fuente compartido y que, históricamente, estas implementaciones no evolucionaron a partir de un proyecto común. Esta puede ser una forma de demostrar la interoperabilidad mostrando dos piezas de software independientes que implementan un estándar determinado. [ dudoso ]
Ejemplos de
Algunas bases de código notablemente grandes incluyen:
- Google : monolítico, mil millones de archivos, 9 millones de archivos de código fuente, 2 mil millones de líneas de código fuente, 35 millones de confirmaciones en total, tamaño total de 86 TB (enero de 2015) [5]
- Facebook : monolítico, 8 GB (repositorio 54 GB incluido el historial, 2014), [6] cientos de miles de archivos (2014) [3]
- Kernel de Linux : distribuido, [7] más de 15 millones de líneas de código (a partir de 2013[actualizar] y la versión del kernel 3.10)
Ver también
Referencias
- ^ "Una breve historia de Git" . git-scm.com . Consultado el 21 de octubre de 2014 .
- ^ J. David Morgenthaler; Misha Gridnev; Raluca Sauciuc y Sanjay Bhansali (2012). "Búsqueda de deuda de construcción: experiencias de gestión de la deuda técnica en Google" . Actas del Tercer Taller Internacional sobre Gestión de la Deuda Técnica . IEEE. págs. 1–6, ( PDF ).CS1 maint: posdata ( enlace )
- ^ a b "Escalando Mercurial en Facebook" . Código de Facebook . 2014-01-07 . Consultado el 29 de abril de 2016 .
- ^ "Git - Flujos de trabajo distribuidos" . git-scm.com . Consultado el 29 de abril de 2016 .
- ^ Potvin, Rachel; Levenberg, Josh (24 de junio de 2016). "Por qué Google almacena miles de millones de líneas de código en un solo repositorio" . Comunicaciones de la ACM . 59 (7): 78–87. doi : 10.1145 / 2854146 .
- ^ @feross (24 de abril de 2014). "El repositorio de git de Facebook es de 54 GB" (Tweet) . Consultado el 29 de abril de 2016 , a través de Twitter .
- ^ Sproull, Lee; Moon, Jae Yun (5 de noviembre de 2000). "Esencia del trabajo distribuido: El caso del kernel de Linux - Moon - First Monday" . Primer lunes . 5 (11) . Consultado el 29 de abril de 2016 .