Nos últimos dias a Microsoft anunciou que irá comprar a empresa GitHub, companhia que hospeda e desenvolve o software Git SCM, por 7 bilhões de dólares. Mas, você sabe o que é um sistema SCM?
O SCM, ou Sistema de Controle de Código Fonte (do inglês Source Code Management), é um padrão utilizado por desenvolvedores de software para agilizar a criação e distribuição de códigos. A ideia do sistema é evitar a utilização de meios físicos (como CD ou até mesmo pen drive) para a distribuição dos fontes em desenvolvimento.
As vantagens de utilizar um sistema SCM
Uma das principais vantagens dos sistemas SCM é o controle de versões (SVC/CVS ou Source Version Control), que permite a visualização do histórico das alterações efetuadas no código, possibilitando, assim, encontrar quando um determinado problema foi resolvido e o que foi alterado para o resolver.
Os sistemas de SVC guardam os fontes separados por “tags” e “branches”. Os tags representam versões onde o código foi enviado para produção e branches onde o mesmo está em ativo desenvolvimento.
Normalmente, códigos guardados em tags não devem ser alterados, pois representam uma versão oficial do software naquele momento. Durante o processo de desenvolvimento, os fontes são enviados para as branches, que depois são juntadas (operação conhecida como merge) e viram uma tag.
Outra vantagem é sua flexibilidade, podendo operar utilizando regras de negócio (como filtros e restrições) ou até mesmo integrar outros sistemas externos, como um sistema de Integração Contínua (CI) ou um sistema de gestão de chamados/helpdesk.
Implementações disponíveis no mercado
O padrão SCM possui diversas implementações que foram desenvolvidas ao longo dos anos por diferentes pessoas e empresas, cada uma para resolver um determinado problema que ocorria durante o desenvolvimento dos softwares principais.
Alguns dos sistemas de controle de versão mais utilizados são:
• Subversion (ou SVN) – Desenvolvido pela Apache Software em 2000 (empresa criadora do Tomcat, servidor web utilizado por diversos sistemas WEB), inicialmente para substituir e melhorar o sistema CVS (Concurrent Versions System) que está em desuso.
• Git – Criado por Linus Torvalds (criador do Kernel Linux), em 2005. Foi desenvolvido para substituir o sistema BitKeeper que era utilizado para o controle de fontes do Linux na época, pois o mesmo havia sido privatizado. Atualmente, é o sistema mais famoso de controle de versão, sendo utilizado por milhares de empresas ao redor do mundo.
• Mercurial (ou Hg) – Criado por Matt Mackall em 2005 para ser uma alternativa ao BitKeeper, podendo ser utilizado por outros projetos open-source da época, como o próprio Linux.
• Team Foundation Server (TFS) – Desenvolvido pela Microsoft em 2005 para atender sua demanda interna (e externa) de controle de fontes, o sistema guarda os códigos em nuvem e é ligado diretamente com um sistema de Integração Contínua também desenvolvido pela empresa.
Por que utilizar um sistema SCM?
A guarda dos fontes é algo importante tanto para desenvolvedores de software quanto para empresas que possuem sistemas internos e customizações, uma vez que:
• Organiza o armazenamento dos fontes, evitando discrepâncias de código (por exemplo: entre máquinas de dois desenvolvedores) e
• Atua como backup ativo caso a máquina do desenvolvedor venha a falhar.
Os sistemas de SCM também permitem a restauração e verificação de versões anteriores, fato que pode auxiliar na resolução de problemas de maneira eficaz (através da “desatualização” ou até mesmo por auxiliar a encontrar as alterações realizadas), assim, reduzindo o tempo off-line dos serviços em produção.
Acima de tudo, os sistemas de SCM mantém os fontes organizados, já que separam diferentes versões do mesmo produto em diferentes “tags” e “branches”, possibilitando a rápida consulta e análise do progresso das alterações.
Neomind
Aqui na Neomind nós utilizamos o Subversion (SVN) e o GIT como ferramentas de controle de fontes, pois atendem de maneira eficiente a nossa demanda interna. A Neomind também oferece serviços de guarda dos fontes e customizações para seus clientes com processo de build e integração com testes automatizados. Para saber mais, entre em contato.