Concrete Logo
Hamburger button

Engenharia de Software, igual e diferente

  • Blog
  • 20 de Julho de 2012
Share

Mudam-se os tempos, mudam-se as vontades,
Muda-se o ser, muda-se a confiança:
Todo o mundo é composto de mudança,
Tomando sempre novas qualidades.

Continuamente vemos novidades,
Diferentes em tudo da esperança:
Do mal ficam as mágoas na lembrança,
E do bem (se algum houve) as saudades.

O tempo cobre o chão de verde manto,
Que já coberto foi de neve fria,
E em mim converte em choro o doce canto.

E afora este mudar-se cada dia,
Outra mudança faz de mor espanto,
Que não se muda já como soía.”

Luís Vaz de Camões, em “Sonetos”

Por muito tempo a Engenharia de Software sofreu com a falta de entendimento sobre o que realmente é fazer software, e em como esta Engenharia se compara com as outras.
Existe algum consenso de que o termo Engenharia de Software surgiu ou se solidificou durante uma conferência em 1968 da OTAN.

O termo, na época, era algo provocador. Um termo que buscava trazer a atenção para uma Engenharia que se tornava cada vez mais influente na sociedade, e que ao mesmo tempo, ainda era rudimentar ao se comparar com as mais antigas e desenvolvidas Engenharias.

Na comparação com a Engenharia Civil, dois pontos em particular chamam a atenção. O primeiro é o que se assume sobre a Engenharia Civil em si. É uma falácia comum que a construção civil trabalha com processos definidos, e que com isso, se torna fácil entender quanto tempo e quais recursos serão consumidos durante uma determinada obra.

Isso é uma falácia em duas partes. A primeira é que ao se comparar os custos de uma construção, o pessoal que efetivamente trabalha na obra e os recursos materiais empregados tem custo significativo quando se computa o custo total da obra. Uma fase de conceito e desenho do que será construído muitas vezes não é nem mesmo computada no cronograma da obra, e os eventuais redesenhos e tempo gasto nessa etapa ficam muitas vezes escondidos.

A segunda parte desta falácia trata da natureza dos empreendimentos sendo realizados. Se um projeto de um prédio não tiver nada de extraordinário ou único, um processo definido é possível e eficiente. Quando fazemos um projeto novo ou único, estamos caminhando por terreno desconhecido, e nesse caso, a eficiência do andamento da obra estará sujeita a um grau de incerteza muito maior.
Vou usar como exemplo o que talvez seja o mais famoso prédio do mundo na atualidade, o Empire State Building, em New York.

A sua construção levou um tempo recorde de pouco mais de 1 ano. Sua construção começou em 5 de Fevereiro de 1930 e terminou no dia 31 de Março de 1931.
Foram utilizados 57.000 toneladas de aço na construção chegando a empregar 3000 homens durante a obra.

Entretanto, durante o desenho do prédio é possível notar como que nem tudo correu de forma tão direta. Com o Chrysler Building ficando pronto meses antes com uma altura de 1,046 pés (319 metros), o plano original do Empire States foi modificado várias vezes.

Se você quiser visitar a mostra sobre a construção do prédio, localizada no seu 80o andar, poderá verificar que a 17a versão do plano, uma torre de 80 andares, foi escolhida em 3 de Outubro de 1929! E não foi esse o prédio escalado por King Kong em 1933?

Não é só isso, durante o mês de Novembro, mais 6 andares foram acrescentados (para superar o Chrysler em 4 pés, cerca de 1 metro), e também um mastro de 200 pés para servir como ponto para atracar dirigíveis aéreos. Com os 86 andares o prédio passou a ter 1,050 pés (320 metros) e com o mastro o Empire States passou para 1,200 pés (366 metros). A maior estrutura vertical construída pelo homem por um período de 30 anos.

Com essas modificações e com os inícios da obra se aproximando, também é fácil notar algumas consequências desta adaptação, como o fato de que para alcançar o 102o andar se precisa de 3 viagens de elevador. A 1a viagem até o 80 andar, a segunda até o 86o e a terceira para o 102o andar, dentro do mastro. Tentativas de se utilizar o mastro para atracar dirigíveis se mostraram sem sucesso, tanto pela força dos ventos quanto pelas correntes verticais causadas pela própria presença do maciço prédio. E como este exemplo único se compara com fazer software?

O mais comum é a comparação do projeto de software com a etapa de construção do prédio. Esse é um erro fundamental. Um dos fatores evidentes hoje, mas que ainda engana muita gente, é que construir software não é equivalente em nada a etapa de construção de um prédio. Fazer software é o equivalente a desenhar o prédio, e uma vez que o prédio está desenhado, o computador constrõe o prédio para você em vez de 3000 homens.

De fato, se o seu projeto se utilizar da prática de Integração Continua, o computador poderá construir e efetivamente “testar o seu prédio” para ver se funciona toda vez que o plano for modificado. Ou seja, podemos “construir” 1 Empire States a cada 5 minutos por meses e ainda descobrir que o elevador não vai até o topo a tempo de corrigir o problema antes do dia da inauguração.

E os 17 planos e posteriores modificações, apresentações e adaptações feitas nos planos do prédio ?
Isso é de fato, o equivalente a fazer o software, e não há muito como fazer melhor sem o processo continuo de fazer, refazer e evoluir.

Parece que demorou bastante tempo para reencontrarmos o caminho de se fazer software, e em muitos aspectos hoje estamos repetindo o que se descobria no inicio da Engenharia de Software, veja um dos comentários da conferência de 1968:
“Hoje trabalhamos por anos, com investimentos tremendos, para descobrir que o sistema, que não era bem compreendido desde o começo, não funciona como esperávamos.
Trabalhamos como os irmãos Wright construíam aviões: construir a coisa toda, empurrar do precipício, e deixar ele se espatifar para começar tudo novamente. A simulação é uma forma de fazer experimentos com tentativa e erro. E se os sistemas são simulados em cada nível do design, erros podem ser encontrados e a performance verificada muito antes.”

Hoje já temos os fatos e os estudos para determinar em que quesitos fazer software é parecido com a construção de um prédio e em que estas engenharias são diferentes.
Fazer software é realizar um processo criativo e de descoberta que é ao mesmo tempo, um trabalho técnico e científico.

O sistema deve ser feito de forma incremental em várias iterações. Com experimentos, tentativa e erro, com validação com seus clientes de forma continua.
Durante toda sua elaboração, o sistema está sempre pronto para entrar em produção, e assim, durante todo o projeto, o sistema deve evoluir. Sempre pronto.
Até que, pela sua geração de valor, se decida que está na hora de colocá-lo em produção. E colocá-lo em produção, o equivalente a construir o prédio com seus planos prontos, deve demorar apenas o clique de um botão.