Pergunta

Não consigo pensar em muitas boas razões para usá-lo; no entanto, quais são as desvantagens para ele?

(Além de comprar outro servidor)

Quais são algumas vantagens de se utilizar uma compilação diária em vez disso?

Foi útil?

Solução

(É interessante notar que por "integração contínua" Quero dizer automatizada integração com um automatizada processo de construção e automaticamente executa testes e automaticamente detecta a falha de cada peça.

É importante notar também que a "integração contínua" significa apenas para um servidor tronco ou teste. Não significa "empurrar cada mudança ao vivo".

Existem muitas maneiras de fazer errado integração contínua.)


Eu não posso pensar em qualquer razão para não fazer o teste de integração contínua. Eu acho que eu estou supondo que a "integração contínua" inclui o teste. Só porque ele compila não significa que ele funciona.

Se a sua construção e / ou testes de levar um longo tempo, em seguida, integração contínua pode sair caro. Nesse caso, executar os testes, obviamente, relacionados com a sua mudança antes do commit (ferramentas de análise de cobertura, como Devel :: CoverX :: coberto pode ajudar a descobrir o que testes de ir com o que o código), fazer o seu teste de integração após a confirmação usando algo como SVN :: Notify , e alertar os desenvolvedores se ele falhar. Arquivar os resultados do teste usando algo como Smolder . Isso permite que os desenvolvedores a trabalhar rapidamente, sem ter de se sentar em torno de assistir conjuntos de testes executados, enquanto ainda captura erros no início.

Dito isso, com um pouco de trabalho, você pode muitas vezes você pode acelerar a sua construção e processo de teste. Muitas vezes os testes lentos são o resultado de cada teste ter que fazer muito e configuração apontando desmontagem em um sistema que está muito associada exigindo todo o sistema ser configurado apenas para testar um pequeno pedaço.

A dissociação muitas vezes ajuda, sair sub-sistemas em projetos independentes. O escopo menor faz para a compreensão mais fácil e rápido constrói e testes. Cada commit pode fazer uma compilação completa e teste sem incomodar o programador. Então, todos os sub-projetos podem ser reunidos para fazer testes de integração.

Uma das grandes vantagens de executar o conjunto de testes em todos os cometer, mesmo que seja após a confirmação, é que você sabe exatamente o que quebrou a compilação. Ao invés de "algo que fizemos ontem quebrou a compilação", ou pior "quatro coisas que fizemos ontem quebrou a compilação de maneiras diferentes e agora temos que desembaraçar-lo" É "revisão 1234 quebrou a compilação". Você só tem que analisar que uma revisão para encontrar o problema.

A vantagem de fazer uma compilação diária é que pelo menos você sabe que há um completo, limpo de construção e teste de corrida acontecendo todos os dias. Mas você deve estar fazendo isso de qualquer maneira.

Outras dicas

Eu não acho que existem desvantagens para ele. Mas, para o bem do argumento, aqui é o artigo Eric de Minick em UrbanCode ( "é sobre testes não constrói.") Ele critica as ferramentas que são baseadas em o trabalho de Martin Fowler dizendo que eles não deixam tempo suficiente para testes.

"Para ser verdadeiramente bem sucedido na CI, Fowler afirma que a construção deve ser auto-teste e que estes testes incluem tanto unidade e end-to-end teste. Ao mesmo tempo, a construção deve ser muito rápido - idealmente menos de dez minutos - porque ele deve ser executado em cada commit Se houver um número significativo de testes end-to-end, executando-os em tempo de compilação, mantendo todo o processo menos de dez minutos é irrealista
Adicionar na demanda por uma compilação de todos os cometer, e os requisitos de começar a sentir improvável. As opções são ou retorno mais lento ou a remoção de alguns testes. "

James Shore teve uma grande série de entradas de blog sobre os perigos de pensar que o uso de uma ferramenta de CI como CruiseControl significava que estava fazendo a integração contínua:

Um perigo da criação de um servidor de CI é o deslocamento meta, pensar que o importante é "manter a construção de passar" em oposição a "garantir que temos software de alta qualidade". Então, as pessoas parar de se importar sobre quanto tempo os testes levam a correr. Em seguida, eles levam muito tempo para executar todos eles antes coleira. Em seguida, a construção mantém quebra. Em seguida, a construção está sempre quebrado. Então, as pessoas comentar os testes para fazer o passe de construção. E a qualidade do software vai para baixo, mas hey, a construção está passando ...

Há geralmente dois casos que eu vi integração contínua realmente não faz sentido. Tenha em mente que eu sou um grande defensor da CI e tentar usá-lo quando puder.

O primeiro é quando o roi simplesmente não faz sentido. Eu atualmente desenvolvem várias pequenas aplicações internas. As aplicações são normalmente muito trivial e todo o ciclo de vida do desenvolvimento é de cerca de uma semana ou duas. Para configurar corretamente tudo para CI provavelmente o dobro e eu provavelmente nunca vê que o investimento de volta. Você pode argumentar que eu vou buscá-la de volta em manutenção, mas esses aplicativos são tão propensos a ser descartado como eles são atualizados. Tenha em mente que seu trabalho é, provavelmente, para software navio, não chegar a 100% de cobertura de código.

O outro cenário que ouvi mencionado é que a CI não faz sentido se você não vai fazer nada com os resultados. Por exemplo, se o seu software tem de ser enviada para QA, e os funcionários QA só pode realmente olhar para uma nova versão a cada dois dias, não faz sentido ter constrói a cada poucas horas. Se outros desenvolvedores não estão indo olhar métricas de código e tentar melhorá-los, não faz sentido para rastreá-los. Concedido isso não é culpa do CI não ser uma boa técnica, é uma falta de sua equipe dispostos a abraçar CI. No entanto, a implementação de um sistema de CI no cenário tal não faz sentido.

Ao iniciar, ele leva um tempo para configurar tudo.

Se você adicionar testes, cobertura, inspeções de código estático, pesquisa duplicada, construção de documentação e implanta, pode levar um longo tempo (semanas) para obtê-lo direito. Depois disso, manter a construção pode ser um problema.

por exemplo, se você adicionar testes para solução, você pode ter a construção detectá-los automaticamente com base em alguns critérios ou você tem que configurações de atualização de compilação manualmente. detecção automática é muito mais difícil de acertar. Mesmo para a cobertura. Mesmo da geração de documentação ...

A única boa razão para não fazer integração contínua vem quando você começou o seu trabalho de projeto para o ponto onde seus testes de integração não havia identificado qualquer defeito em um bom longo tempo e eles estão levando muito tempo para executar cada vez que você faz uma compilação. Em outras palavras: você fez integração contínua o suficiente para que você provou para si mesmo que você não precisa mais dela

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top