Base de código
No desenvolvimento de software, uma base de código (do inglês codebase) é uma coleção de código-fonte usada para construir um determinado sistema de software, aplicação ou componente de software. Normalmente, uma base de código inclui apenas arquivos de sistema de código-fonte escritos por humanos; assim, uma base de código geralmente não inclui arquivos de código-fonte gerados por ferramentas (arquivos gerados) ou arquivos de biblioteca binária (arquivos objeto), pois eles podem ser construídos a partir do código-fonte escrito por humanos. No entanto, geralmente inclui arquivos de configuração e propriedades, pois são os dados necessários para a construção.
Uma base de código é normalmente armazenada em um repositório de controle de código-fonte em um sistema de controle de versão. Um repositório de código-fonte é um local onde grandes quantidades de código-fonte são mantidas, pública ou privadamente. Os repositórios de código-fonte são usados basicamente para backups e versionamento, e em projetos com vários desenvolvedores para lidar com várias versões do código-fonte e auxiliar na resolução de conflitos que surgem de desenvolvedores enviando modificações sobrepostas. Subversion, Git e Mercurial são exemplos de ferramentas populares usadas para lidar com esse fluxo de trabalho, comuns em projetos de código aberto. Para projetos menores, seu código pode ser mantido como um conjunto de arquivos não gerenciados (mesmo o núcleo do Linux foi mantido como um conjunto de arquivos por muitos anos).[1]
Bases de código distintas e monolíticas
Múltiplos projetos podem ter bases de código separadas e distintas, ou podem ter uma única base de código compartilhada ou monolítica. Esse é particularmente o caso de projetos relacionados, como os desenvolvidos dentro da mesma empresa. Em mais detalhes, uma base de código monolítica normalmente implica um único repositório (todo o código em um só lugar) e, frequentemente, um sistema de compilação comum ou bibliotecas comuns. Se a base de código é compartilhada ou dividida não depende da arquitetura do sistema e dos resultados de compilação reais; assim, uma base de código monolítica, que está relacionada ao desenvolvimento real, não implica um sistema monolítico, que está relacionado à arquitetura de software ou a um único binário monolítico. Como resultado, uma base de código monolítica pode e (para bases de código grandes) frequentemente consistirá em componentes separados, em vez de carregar apenas um único sistema ou único binário; uma base de código distribuída (com múltiplos componentes) pode ser usada para construir um único sistema monolítico ou mesmo um único binário. Por exemplo, o núcleo do Linux é arquitetonicamente um único núcleo monolítico, mas consiste em binários separados (componentes carregáveis) e é desenvolvido em múltiplos repositórios distribuídos. Existem vantagens e desvantagens em uma base de código monolítica quando comparada a uma base de código distribuída. De forma mais simples, uma base de código monolítica simplifica a integração — mudanças em diferentes componentes ou refatoração de código entre componentes podem ser feitas de forma fácil e atômica — e permite operações em toda a base de código, mas exige um repositório maior e facilita a introdução de dívida técnica de longo alcance.[2][3]
Uma base de código separada ou distribuída mantém repositórios individuais menores e mais gerenciáveis, impondo ao mesmo tempo a separação entre componentes, mas também exige integração entre as bases de código (ou com o repositório principal) e complica as mudanças que abrangem múltiplas bases de código. Em termos de padrões, referir-se a múltiplas bases de código como "distintas" declara que existem implementações independentes sem código-fonte compartilhado e que, historicamente, essas implementações não evoluíram de um projeto comum. Isso pode ser uma maneira de demonstrar interoperabilidade, mostrando dois softwares independentes que implementam um determinado padrão.[4]
Exemplos
Algumas bases de código notavelmente grandes incluem:
- Google: monolítica, 1 bilhão de arquivos, 9 milhões de arquivos de código-fonte, 2 bilhões de linhas de código-fonte, 35 milhões de commits no total, 86 TB de tamanho total (janeiro de 2015)[5]
- Facebook: monolítica, 8 GB (repositório 54 GB incluindo histórico, 2014),[6] centenas de milhares de arquivos (2014)[3]
- Kernel Linux: distribuída,[7] mais de 15 milhões de linhas de código (a partir de 2013 e versão do kernel 3.10)
Ver também
- Codeplex
- Comparação de serviços de hospedagem de software livre
- FishEye (software)
- Forge (software)
- Snippet (programação)
- SourceForge.net
Referências
- ↑ «A Short History of Git». git-scm.com. Consultado em 21 de outubro de 2014
- ↑ J. David Morgenthaler; Misha Gridnev; Raluca Sauciuc; Sanjay Bhansali (2012). Searching for Build Debt: Experiences Managing Technical Debt at Google. IEEE. pp. 1–6. doi:10.1109/MTD.2012.6225994 Parâmetro desconhecido
|livro-título=ignorado (ajuda); Parâmetro desconhecido|nome-lista-style=ignorado (ajuda) - ↑ a b «Scaling Mercurial at Facebook». Facebook Code. 7 de janeiro de 2014. Consultado em 29 de abril de 2016
- ↑ «Git - Distributed Workflows». git-scm.com. Consultado em 29 de abril de 2016
- ↑ Potvin, Rachel; Levenberg, Josh (24 de junho de 2016). «Why Google stores billions of lines of code in a single repository» 7 ed. Communications of the ACM. 59: 78–87. doi:10.1145/2854146
- ↑ @feross (24 de abril de 2014). «Facebook's git repo is 54 GB.» (Tweet). Consultado em 29 de abril de 2016 – via Twitter
- ↑ Sproull, Lee; Moon, Jae Yun (5 de novembro de 2000). «Essence of distributed work: The case of the Linux kernel - Moon - First Monday» 11 ed. First Monday. 5. Consultado em 29 de abril de 2016