![]() | |||
Joel on Software Joel sobre Software
| |||
|
Outros artigos de "Joel on Software" em Português Outros artigos de "Joel on Software" em Inglês |
Por Joel Spolsky Traduzido por Adriana Burgos Editado por TJ Haeser 27 de Janeiro de 2001 Em 1982, minha família recebeu o primeiro IBM-PC de Israel.
Nós fomos até o depósito e esperamos enquanto o nosso PC estava vindo do porto. De alguma maneira eu convenci meu pai
a comprar a versão mais completa, com dois floppy disks, 128K de memória, e tanto uma
impressora matricial (para rascunhos rápidos) quanto uma "impressora margarida"
Brother "Letter-Quality", que fazia o mesmo barulho que uma me Bom, “todo mundo” sabia que
BASIC era uma linguagem de criança que requer que você escreva código espaguete
e transforma seu cérebro em queijo Camembert. Então nós gastamos $600 para
comprar o IBM Pascal, que vinha com 3 disquetes. O primeiro passo da compilação
ficava no primeiro disquete, o segundo passo estava no segundo disquete e o
linker estava no terceiro disquete. Eu escrevi e compilei um programa simples
“hello world” (“olá mundo”). Tempo de compilação: 8
minutos. Humm. Isso é muito tempo.
Eu escrevi um arquivo em lotes para automatizar o processo e reduzi o tempo para
7 minutos e meio. Melhor. Mas quando eu tentei escrever programas maiores, como
minha maravilhosa versão de “Othello” que sempre ganhava de mim, eu
gastava a maior parte do tempo esperando eles compilarem. “É”, um programador
profissional me disse uma vez, “a gente costumava ter uma prancha abdominal no
escritório para fazer abdominais enquanto estávamos compilando alguma coisa.
Depois de alguns meses como programador, eu tinha um abdômen de
ferro.” Um dia, um programa
grã-fino chamado Compas Pascal apareceu da Dinamarca. Philippe Kahn o comprou e
o renomeou Borland Turbo
Pascal. O Turbo Pascal era meio chocante, basicamente porque ele fazia tudo
que o IBM Pascal fazia, só que rodava em 33K de memória, incluindo o editor de texto. Isso não
era nada menos que assombroso. Ainda mais assombroso era o fato de que você
podia compilar um programa pequeno em menos de um segundo. É como se uma
companhia da qual você nunca ouviu falar apresentasse um clone do Buick LeSabre
que podia atingir 1.000.000 km por
hora e andasse ao redor do mundo com tão pouca gasolina que uma formiga podia
tomar sem passar mal. De repente, eu me tornei muito mais
produtivo. Foi aí que eu aprendi o
conceito do loop REP . REP significa “Ler, Avaliar, Imprimir” (do Inglês
“Read, Eval, Print”) , e descreve o que um interpretador lisp faz para viver:
ele “Lê” os dados que você introduziu, os avalia e imprime o resultado. Um
exemplo de loop REP é mostrado abaixo. Eu digito alguma coisa e o interpretador
lisp lê, avalia e imprime o resultado.
Em uma escala um pouco
maior, quando você está programando, você está em uma versão macro do loop REP
chamada “Edit – Compile – Test loop” (loop Edite – Compile - Teste). Você edita seu código, compila, testa e
vê como ele está funcionando. Uma observação crucial aqui
é que você deve percorrer o loop várias vezes para escrever um programa, então
quanto mais rápido o loop Edite-Compile-Teste, melhor será sua produtividade,
até o limite de compiladores instantâneos. Esta é a razão tradicional,
cientificamente falando, porque programadores querem hardware muito
rápido e desenvolvedores de compiladores farão qualquer coisa para conseguir
loops Edite-Compile-Teste super rápidos. O Visual Basic faz a análise gramatical
(“parsing”) e léxica (“lexing”) a cada linha que você digita, para que a
compilação final possa ser super rápida. O Visual C++ faz isso oferecendo
compilação incremental, cabeçalhos pré-compilados e link
incremental. Mas tão logo você começa a
trabalhar em uma equipe maior, com vários desenvolvedores e testadores, você
encontra o mesmo loop de novo, só que maior (é fractal, cara!). Um testador acha um
“bug” no código e reporta o “bug”. O programador conserta o “bug”. Quanto tempo
demora até que o testador ache outro “bug” na nova versão do código? Em algumas
organizações este loop Reporta-Conserta-Testa pode demorar algumas semanas, o
que significa que toda a organização está sendo improdutiva. Para manter o
processo de desenvolvimento funcionando bem, você deve se concentrar em
conseguir que o loop Reporta-Conserta-Testa seja o menor/mais rápido
possível. Uma boa maneira de fazer
isso é fazendo compilações diárias. Uma compilação diária é uma
compilação automatizada, diária,
completa da árvore do código fonte. Automática – porque você configura o
código para ser compilado a uma certa hora, todos os dias, usando “cron jobs” (no UNIX) ou o automatizador de
tarefas (no Windows). Diária – ou até mais freqüente. É
tentador fazer compilações contínuas, mas provavelmente você não pode, por causa
de problemas de controle de versão do código fonte, sobre os quais eu vou falar
em um minuto. Completa – provavelmente seu código tem
várias versões. Versões em diferentes idiomas, diferentes sistemas operacionais
ou uma versão completa/compacta. A compilação diária precisa incluir todas
elas. E precisa compilar cada
arquivo do início, sem se basear na capacidade incremental, provavelmente
imperfeita, do compilador. Aqui estão alguns dos
muitos benefícios de compilações diárias: 1.
Quando um “bug”
é consertado, os testadores têm acesso à nova versão rapidamente e podem
re-testá-la para ver se o “bug” foi eliminado. 2.
Desenvolvedores
sentem-se mais seguros se eles souberem que a mudança que eles fizeram não vai
estragar nenhuma das 1024 versões do sistema que é produzida, sem
necessariamente ter um computador com OS/2 na mesa para testar
nele. 3.
Desenvolvedores
que atualizam suas mudanças no repositório pouco antes da compilação diária
sabem que não vão atrapalhar todo mundo checando algo que vai “quebrar a
compilação” – ou seja, algo que faça com que ninguém consiga compilar o
código. Isso é equivalente a Tela
Azul da Morte para toda a equipe de programação, e acontece muito quando um
programador esquece de adicionar algum arquivo que ele criou ao repositório. A
compilação vai bem na máquina deles,
mas quando alguém checa o código, recebem erros de linker e são impedidos de
continuar qualquer trabalho. 4.
Grupos externos,
como Marketing, clientes beta que precisam usar o produto ainda imaturo, podem
escolher uma compilação que é sabida estar razoavelmente estável e usá-la por
algum tempo. 5.
Mantendo um
arquivo de todas as compilações diárias, quando você descobrir alguma coisa
realmente estranha, um novo “bug”, e você não tem a menor idéia do que pode
estar causando o problema, você pode usar busca binária (“binary search” ) nos
arquivos e apontar exatamente quando o “bug” apareceu pela primeira vez no
código. Isto, aliado a um bom controle de versão da fonte, provavelmente fará
com que você possa checar qual “check-in” (N. do T. “check-in” significa
atualizar a mudança no repositório) causou o problema. 6.
Quando um
testador reporta um problema que o programador acha que foi corrigido, o
testador pode dizer em qual compilação ele viu o “bug”. O programador pode
procurar quando ele implementou a mudança e dizer se o “bug” foi realmente
consertado. Aqui está como fazer isso:
você precisa de um servidor de compilação diária, que provavelmente vai ser o
computador mais rápido no qual você pode colocar suas mãos. Escreva um “script”
que extrai uma cópia completa do código fonte atual do repositório (você está usando controle de versões, não
está?) depois compile do início todas as versões do código que você distribui.
Se você tiver um programa de instalação ou setup, compile ele também. Tudo o que você distribui para seus
clientes deve ser produzido através do processo de compilação diária. Coloque
cada compilação em seu próprio diretório, codificado por datas. Rode o seu
script em uma hora fixa do dia.
Para ler mais sobre o
assunto:
Esse artigo apareceu originalmente em Inglês com o título Daily Builds Are Your Friend | ||
![]() Joel Spolsky é o fundador da Fog Creek Software, uma pequena empresa de software na cidade de Nova York. Formou-se na Universidade de Yale, e trabalhou como programador e gerente na Microsoft, na Viacom e no Juno. | |||
O conteúdo dessas páginas reflete exclusivamente a opinião do autor.
Todo o conteúdo Copyright ©1999-2005 Joel Spolsky. Todos os direitos reservados.