O que é uma ferramenta de construção?


130

Nos últimos 4 anos, tenho programado com o Eclipse (para Java) e o Visual Studio Express (para C #). Os IDEs mencionados sempre pareciam fornecer todas as instalações que um programador poderia solicitar (relacionadas à programação, é claro).

Ultimamente, tenho ouvido falar sobre algo chamado "ferramentas de construção". Ouvi dizer que eles são usados ​​quase em todo o tipo de desenvolvimento do mundo real. O que eles são exatamente? Quais problemas eles foram projetados para resolver? Como é que eu nunca precisei deles nos últimos quatro anos? Eles são tipo de linha de comando despojada de IDEs?

Respostas:


117

O que são ferramentas de construção?

As ferramentas de construção são programas que automatizam a criação de aplicativos executáveis ​​a partir do código-fonte (por exemplo, .apk para aplicativo Android). Building incorpora compilar, vincular e empacotar o código em um formato utilizável ou executável.

Basicamente, a automação de compilação é o ato de criar scripts ou automatizar uma ampla variedade de tarefas que os desenvolvedores de software realizam em suas atividades diárias, como:

  1. Baixando dependências.
  2. Compilando código fonte em código binário.
  3. Empacotando esse código binário.
  4. Executando testes.
  5. Implantação em sistemas de produção.

Por que usamos ferramentas de construção ou automação?

Em pequenos projetos, os desenvolvedores frequentemente invocam manualmente o processo de compilação. Isso não é prático para projetos maiores, onde é muito difícil acompanhar o que precisa ser construído, em que sequência e quais dependências existem no processo de construção. O uso de uma ferramenta de automação permite que o processo de criação seja mais consistente.

Várias ferramentas de compilação disponíveis (nomeando apenas algumas):

  1. Para java - Ant, Maven, Gradle.
  2. Para o .NET framework - NAnt
  3. c # - MsBuild.

Para leituras adicionais, você pode consultar os seguintes links:

1. Automação de compilação

2. Lista de software de automação de construção

Obrigado.


17

As ferramentas de construção são ferramentas para gerenciar e organizar suas construções, e são muito importantes em ambientes onde existem muitos projetos, principalmente se estiverem interconectados. Eles servem para garantir que, onde várias pessoas estão trabalhando em vários projetos, elas não quebrem nada. E para garantir que, quando você fizer suas alterações, elas também não quebrem nada.

A razão pela qual você nunca ouviu falar deles antes é que você não estava trabalhando em um ambiente comercial antes. Há muitas coisas que você provavelmente ainda não encontrou em ambientes comerciais, especialmente se você trabalha em casas de software.

Como outros já disseram, você os usa, no entanto, não precisa considerá-los, porque provavelmente está trabalhando de maneira diferente da maneira comercial usual de trabalhar.


10

As ferramentas de compilação geralmente são executadas na linha de comando, dentro de um IDE ou completamente separadas dele.

A idéia é separar o trabalho de compilar e empacotar seu código da criação, depuração etc.

Uma ferramenta de construção pode ser executada no comando ou dentro de um IDE, ambos acionados por você. Eles também podem ser usados ​​por ferramentas de integração contínua após a verificação do código em um repositório e em uma máquina de construção limpa.

O make foi uma ferramenta de comando antiga usada em ambientes * nix para criar C / C ++.

Como desenvolvedor Java, as ferramentas de compilação mais populares são Ant e Maven. Ambos podem ser executados em IDEs como IntelliJ ou Eclipse ou NetBeans. Eles também podem ser usados ​​por ferramentas de integração contínua como Cruise Control ou Hudson.


6
Agora, Gradle também é usado amplamente
asura

Não de onde eu me sento. Eu não estava ciente de Gradle, então obrigado pela referência.
Duffymo

@duffymo Você poderia elaborar a última linha. O que é integração contínua? Como eles estão relacionados à construção de ferramentas?
Quazi Irfan

4

As ferramentas de construção geralmente transformam o código fonte em binários - organizam o código fonte, definem sinalizadores de compilação, gerenciam dependências ... algumas delas também se integram ao teste de unidade em execução, fazendo análise estática, gerando documentação.

Eclipse ou Visual Studio também são sistemas de compilação (mas mais do que um IDE) e, para o visual studio, é o msbuild subjacente analisar os arquivos de projeto do visual studio sob o capô.

A origem de todos os sistemas de compilação parece o famoso 'make'.

Existem sistemas de construção para diferentes idiomas:

  1. C ++: make, cmake, premake
  2. Java: formiga + hera, maven, gradle
  3. C #: msbuild

Geralmente, construa sistemas usando uma linguagem específica de domínio de propriedade (make, cmake) ou xml (ant, maven, msbuild) para especificar uma construção. A tendência atual é usar uma linguagem de script real para escrever scripts de construção, como lua para pré-criação e groovy para gradle, a vantagem de usar um script é que é muito mais flexível e também permite que você crie um conjunto de padrões APIs (como DSL de compilação).


1

Processo de compilação é um processo de compilação do código-fonte para erros, usando algumas ferramentas de compilação e criando compilações (que são versões executáveis ​​do projeto). Nós (principalmente desenvolvedores) fazemos algumas modificações no código fonte e registramos esse código para que o processo de compilação ocorra. Após o processo de compilação, ele fornece dois resultados: 1. Compile PASSES e você obterá uma versão executável do seu projeto (a compilação está pronta). 2. Ele falha e você obtém certos erros e a compilação não é criada.

Existem diferentes tipos de processos de compilação, como: 1. Compilação noturna 2. Compilação fechada 3. Compilação contínua de integração etc.

As ferramentas de construção ajudam e automatizam o processo de criação de construções.

* O So in Short Build é uma versão do software em formato de pré-lançamento usado pela equipe de desenvolvedor ou desenvolvimento para ganhar confiança no resultado final do produto, monitorando continuamente o produto e resolvendo problemas logo no início do processo de desenvolvimento. *


Você poderia falar um pouco mais sobre as compilações de Integração Noturna, Fechada e Contínua?
Quazi Irfan

@iamcreasy Adicionei outra resposta em relação à sua pergunta para obter explicações sobre as diferentes versões. Você pode encontrar essa explicação abaixo. Também adicionei alguns links para ajudá-lo a entender melhor o processo de compilação.
Prakash

1

Esses são tipos diferentes de processos pelos quais você pode fazer suas compilações.

1. Construção de integração contínua:Nesse processo, principalmente os desenvolvedores fazem check-in de seu código e logo após o check-in, uma compilação é iniciada para compilar as alterações recentes, portanto, devemos saber se as alterações feitas pelo desenvolvedor funcionaram ou não logo após o check-in. Isso é preferido para projetos menores ou componentes dos projetos. Caso várias equipes estejam associadas ao projeto ou exista um grande número não. dos desenvolvedores que trabalham no mesmo projeto, esse cenário se torna difícil de lidar como se houvesse 'n' não. de check-in e a compilação falhar em determinados pontos, torna-se altamente difícil rastrear se toda a quebra ocorreu por causa de um problema ou com vários problemas; portanto, se os problemas mais antigos não forem resolvidos adequadamente, será muito difícil rastrear os posteriores defeitos que ocorreram após essa alteração.

2. Compilações de check-in fechado: nesse tipo de check-in, uma compilação é iniciada logo após o check-in, mantendo as alterações em um conjunto de prateleiras. Nesse caso, se a compilação for bem-sucedida, o check-in com conjunto de prateleiras será confirmado, caso contrário, não será confirmado no Team Foundation Server. Isso fornece uma imagem um pouco melhor da criação da integração contínua, pois apenas os check-in bem-sucedidos podem ser confirmados.

3. Compilações noturnas: também são conhecidas como compilações agendadas. Nesse caso, agendamos as compilações para serem executadas por um tempo específico, a fim de compilar as alterações. Todas as alterações não confirmadas anteriores da última compilação são criadas durante esse processo de compilação. Isso é praticado quando queremos fazer check-in várias vezes, mas não queremos uma compilação toda vez que fazemos check-in de nosso código, para que possamos ter um tempo ou período fixo no qual podemos iniciar a compilação para criar o código de check-in.

Os detalhes sobre essas compilações podem ser encontrados no local abaixo.

Check-Gated em compilações

Construções de integração contínua

Construções noturnas


0

Você os utiliza - o IDE é uma ferramenta de construção. Para a linha de comando, você pode usar coisas como make.

As pessoas usam ferramentas de linha de comando para coisas como uma compilação noturna - assim, de manhã com uma ressaca, o programador percebeu que o código com o qual ele estava mexendo com as versões mais recentes das bibliotecas não funciona!


11
Normalmente, o IDE não é uma ferramenta de construção, mas integra-se com / chama uma ferramenta de construção. Por exemplo, o Visual Studio normalmente chama MSBuild.
31411 Justin

-1

"... é muito difícil acompanhar o que precisa ser construído" - As ferramentas de construção não ajudam com tudo isso. Você precisa saber o que deseja construir. (Citado na resposta de Ritesh Gun)

"Ouvi dizer que eles são usados ​​quase em todo o tipo de desenvolvimento do mundo real" - Por alguma razão, os desenvolvedores de software gostam de trabalhar em grandes empresas. Eles parecem ter diretrizes de trabalho mais claras para cada indivíduo que trabalha lá.

"Como é que eu nunca precisei deles nos últimos quatro anos". Provavelmente porque você é um programador qualificado.

Pseudo, meta. Eu acho que as ferramentas de construção não oferecem nenhum benefício realmente real. Ele serve apenas para adicionar uma sensação de segurança decorrente de práticas inadequadas da empresa, falta de direção - liderança de arquitetura de software ruim que leva a um conhecimento real ruim do projeto. Você nunca deve usar ferramentas de construção (para teste) em seu projeto. Fazer testes aleatórios sem conhecimento do projeto de software não ajuda em nada.

Você nunca deve adicionar algo a um projeto sem saber seu objetivo e como ele funcionará com os outros componentes. Os componentes podem ser funcionais separados, mas não funcionam juntos. (Essa é a responsabilidade do arquiteto de software que assumo).

E se 4-5 componentes forem adicionados ao projeto. Você adiciona um sexto componente. Juntamente com o primeiro componente adicionado, pode estragar tudo. Nenhum automático ajudaria a detectar isso.

Não há outro atalho além de pensar, pensar, pensar.

Depois, há o download automático dos repositórios. Por que você iria querer fazer isso? Você precisa saber o que você baixa, o que você adiciona ao projeto. Como você detecta alterações nas versões dos repositórios? Você precisa saber. Você não pode "auto" nada.

E se testássemos bicicletas e transporte de bebê com os olhos vendados com um graveto e apenas batesse nele aleatoriamente. Essa parece ser a ideia do teste da ferramenta de construção.

Sinto muito, não há atalho https://en.wikipedia.org/wiki/Scientific_method e https://en.wikipedia.org/wiki/Analysis


Sua resposta é incrivelmente tendenciosa do ponto de vista C, onde esse é um problema enorme. As ferramentas de construção são essenciais para algo mais complexo do que executar um compilador (mesmo assim, gcc é uma palavra b maciça) e o gerenciamento de dependências com declarações estritas de dependência é uma dádiva de Deus. Só porque você não usa, não significa que esses são conceitos ruins. Se você está simplesmente usando scripts bash para criar coisas, também é uma ferramenta de construção - mas não muito boa. Se você compilar exclusivamente manualmente ou via ide, talvez Deus esteja com você para compilações complexas e repetíveis em diferentes sistemas.
RecursiveExceptionException
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.