Respostas
Resposta:
Em artigo seminal, publicado em 2006, e intitulado “A Viewof 20th and 21st Century Software Engineering” (Uma Visão da Engenharia de Software dos Séculos 20 e 21)
Prof. Barry Boehm, um dos mais respeitados profissionais da Engenharia de Software do mundo, apontou algumas das mais importantes fases da evolução das práticas desta área, identificando os fenômenos que influenciaram nesta evolução. Para fazer isto, ele se utilizou da hipótese do filósofo Hegel, de que o entendimento humano crescia seguindo um caminho de uma tese (ou seja, porque as coisas acontecem da forma como acontecem); antítese (a tese falhou em alguns importantes aspectos: aqui está uma explicação melhor); e síntese (a antítese rejeitou muito da tese original; aqui está um híbrido que captura o melhor de ambos, ao tempo em que evitar seus defeitos). E, deste modo, apontou a evolução da engenharia de software desde os anos 50 até o presente.
Para o Prof. Boehm a tese dos anos 50 era que a Engenharia do Software era como a Engenharia do Hardware. Ou seja, naquela época o entendimento prevalecente era:“produza software como você produz hardware”. A antítese veio nos anos 60 (a do Artesanato do Software), quando as pessoas descobriram que a fenomenologia do software diferia da fenomenologia do hardware. Como o software era mais fácil de modificar do que hardware, ele não requeria linhas de produção custosas para fazer cópias de produtos. Logo, emergiu o enfoque “codeandfix” (codifique e resolva) para o desenvolvimento do software.
Os anos 70 foram os anos da síntese e da antítese dos Processos de Formalidade e do Waterfall. As principais reações ao enfoque do codifique e resolva envolveram processos em que a codificação era mais cuidadosamente organizada e era precedida pelo projeto, e o projeto era precedido pela engenharia dos requisitos. Este movimento fez emergir dois campos temáticos: a) um foi o dos “métodos formais”, que focava na corretude dos programas, seja por prova matemática, ou por construção via cálculo de programação; e. b) o outro, menos formal, misturava métodos técnicos com gerenciais, “estrutura de programação de cima para baixo com times de programação chefiados”.
A síntese dos anos 80 (com as questões de Produtividade e Escalabilidade) foi representada pelo número de iniciativas desenvolvidas para enfrentar os problemas dos anos 70. E neste momento o Prof. Boehm apresenta uma figura representativa da linha do tempo da área de engenharia de software dos anos 50 até os atuais.
A antítese dos anos 90 (a dos Processos Concomitantes versus Sequenciais) observou um forte momentum dos métodos orientados-a-objeto, os quais foram fortalecidos por avanços tais como os padrões de projeto, as arquiteturas de software e as linguagens de descrição de arquiteturas, e o desenvolvimento da UML (UnifiedModelingLanguage, uma linguagem de modelagem não proprietária de terceira geração). A expansão continuada da Internet e a emergência da World-Wide-Web fortaleceram tanto os métodos orientados-a-objeto quanto a importância crítica do software para a competição no mercado. Algumas questões ganharam ênfase, como o time-to-market, a interatividade com o usuário, o controle da concomitância, o desenvolvimento do open-source, e a usabilidade e a interação home-computador.
A antítese e a síntese parcial dos anos 2000, na opinião do Prof. Boehm, são a Agilidade e o Valor. O rápido passo das mudanças em tecnologias de informação (com Google, suporte colaborativo baseado em Web), e em organizações (fusões, aquisições, startups), causou crescente frustração com plantas pesadas, especificações, e outras documentações impostas pela inércia contratual, bem como cumprimento de critérios de modelos maturidade. Estes fatos deram margem à emergência de um número de métodos ágeis ([1]) bem como às questões de valor (preferências do consumidor e custos) no desenvolvimento de software.
Finalmente, a visão dos anos 2010 e adiante do Prof. Boehm é principalmente permeada pela emergência pelos fenômenos da conectividade global e pela existência dos massivos sistemas (intensivos de software) de sistemas.