Engenharia de Software Modelos de Ciclo de Vida Design Patterns História da Computação Metodologias ...
No final da década de 1960, a indústria da computação vivia um paradoxo: o hardware evoluía em ritmo exponencial, mas a capacidade de produzir software confiável ficava cada vez mais para trás. Projetos atrasavam, orçamentos explodiam e sistemas entregues frequentemente não atendiam às necessidades dos usuários. Esse conjunto de problemas crônicos recebeu o nome de Crise do Software — termo cunhado durante a Conferência de Engenharia de Software da OTAN 📖, realizada em Garmisch, Alemanha, em 1968 [1].
Crise do Software é o nome dado ao conjunto de problemas sistêmicos enfrentados pela indústria de desenvolvimento de software entre as décadas de 1960 e 1990: projetos cronicamente atrasados, custos imprevisíveis, defeitos abundantes e incapacidade de atender aos requisitos dos usuários.
Relatórios da época e estudos posteriores revelaram números alarmantes [2]:
O projeto do OS/360 📖 da IBM é frequentemente citado como caso emblemático: envolveu milhares de programadores, atrasou anos e acumulou inúmeros defeitos, sendo descrito por Frederick Brooks como um "pântano de alcatrão" [3].
A crise se manifestava por cinco sintomas interligados [4]:
O modelo cascata (waterfall) foi o primeiro modelo de ciclo de vida de software formalizado. Descrito por Winston Royce em 1970 [5], propõe que o desenvolvimento avance em fases sequenciais — como água descendo uma cascata — onde cada fase deve ser concluída antes que a próxima se inicie.
Royce nunca defendeu o cascata puro. No artigo original, ele já sugeria ciclos de feedback entre fases — mas a indústria adotou apenas a versão sequencial simplificada [5].
A principal fragilidade é a premissa de que os requisitos podem ser completamente definidos no início [10]. Se um erro só é descoberto na fase de testes, o custo de correção é exponencialmente maior [4].
O cliente só vê o sistema funcionando na etapa final, quando mudanças significativas são quase inviáveis. Essa rigidez motivou a busca por modelos alternativos.
Proposto por Barry Boehm em 1986 [6], o modelo espiral combina o cascata com prototipagem 📖 e adiciona a análise de riscos como atividade central de cada ciclo.
Especialmente adequado para projetos grandes e de alto risco — sistemas militares e aeroespaciais — onde o custo de fracasso é extremamente elevado [10].
Em vez de entregar tudo no final, o sistema é construído em partes. Cada incremento passa por um mini-ciclo completo de análise, projeto, codificação e testes [4].
Na prática, quase sempre se combinam. As metodologias ágeis — Scrum 📖, XP 📖, Kanban 📖 — são a evolução direta desse modelo [9].
Nenhum modelo é universalmente superior — cada um se adequa a contextos diferentes [10]:
| Critério | Cascata | Espiral | Iterativo |
|---|---|---|---|
| Fluxo | Linear, uma passada | Ciclos com análise de risco | Mini-ciclos de entrega |
| Requisitos | Fixos no início | Refinados a cada volta | Evoluem continuamente |
| Entrega | Somente no final | Protótipos + produto final | Incrementos funcionais |
| Feedback | Só na entrega | A cada volta | A cada incremento |
| Custo de mudança | Muito alto | Médio | Baixo |
| Risco | Alto | Controlado | Moderado |
| Ideal para | Requisitos estáveis | Projetos grandes, alto risco | Maioria dos projetos modernos |
Padrões de projeto são soluções reutilizáveis para problemas recorrentes no design de software. O conceito foi popularizado pelo livro de Gamma, Helm, Johnson e Vlissides — o Gang of Four — que catalogou 23 padrões em três categorias [8].
Não são código pronto, mas receitas documentadas que descrevem como estruturar classes e objetos para resolver um tipo específico de problema de forma elegante. Funcionam como um vocabulário compartilhado entre engenheiros.
A Crise do Software nunca teve uma resolução definitiva — como argumentou Brooks, a complexidade essencial do software é irredutível [7].
O que houve foi uma resposta acumulativa: o cascata [5] mostrou que era preciso ter processo; o espiral [6] mostrou que era preciso gerenciar riscos; o modelo iterativo mostrou que era preciso obter feedback rápido; e o Manifesto Ágil [9] combinou tudo com foco em pessoas e adaptação contínua.
Os padrões de projeto [8] contribuíram com um vocabulário compartilhado que permitiu comunicar soluções complexas de forma precisa e eficiente.
A grande lição da Crise do Software é que não basta escrever código — é preciso engenharia: processo, gestão de riscos, feedback, colaboração e reutilização de conhecimento. A crise não acabou; aprendemos a conviver com a complexidade.
- [1] NAUR, Peter; RANDELL, Brian (ed.). Software Engineering: report on a conference sponsored by the NATO Science Committee. Garmisch, Germany: NATO, 7–11 Oct. 1968. Brussels: Scientific Affairs Division, NATO, 1969. Disponível em: http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF. Acesso em: 14 mar. 2026.
- [2] THE STANDISH GROUP. CHAOS Report. Boston: The Standish Group International, 1995.
- [3] BROOKS, Frederick P. The Mythical Man-Month: essays on software engineering. Reading, MA: Addison-Wesley, 1975. ISBN 0-201-00650-2.
- [4] PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software: uma abordagem profissional. 9. ed. Porto Alegre: AMGH, 2020. ISBN 978-85-8055-534-1.
- [5] ROYCE, Winston W. Managing the development of large software systems. In: PROCEEDINGS OF IEEE WESCON, Los Angeles, 1970. Proceedings [...]. New York: IEEE, 1970. p. 1–9.
- [6] BOEHM, Barry W. A spiral model of software development and enhancement. ACM SIGSOFT Software Engineering Notes, New York, v. 11, n. 4, p. 14–24, Aug. 1986. DOI: 10.1145/12944.12948.
- [7] BROOKS, Frederick P. No silver bullet: essence and accidents of software engineering. Computer, Washington, v. 20, n. 4, p. 10–19, Apr. 1987. DOI: 10.1109/MC.1987.1663532.
- [8] GAMMA, Erich; HELM, Richard; JOHNSON, Ralph; VLISSIDES, John. Design Patterns: elements of reusable object-oriented software. Reading, MA: Addison-Wesley, 1994. ISBN 0-201-63361-2.
- [9] BECK, Kent et al. Manifesto for Agile Software Development. 2001. Disponível em: https://agilemanifesto.org/. Acesso em: 14 mar. 2026.
- [10] SOMMERVILLE, Ian. Engenharia de software. 10. ed. São Paulo: Pearson Education do Brasil, 2016. ISBN 978-85-430-1968-2.
- [11] PAULK, Mark C. et al. Capability Maturity Model for Software, Version 1.1. Pittsburgh: Software Engineering Institute, Carnegie Mellon University, 1993. (Technical Report CMU/SEI-93-TR-024). Disponível em: https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=11955. Acesso em: 15 mar. 2026.
- [12] SCHWABER, Ken; SUTHERLAND, Jeff. The Scrum Guide: the definitive guide to Scrum: the rules of the game. 2020. Disponível em: https://scrumguides.org/. Acesso em: 15 mar. 2026.
- [13] BECK, Kent; ANDRES, Cynthia. Extreme Programming Explained: embrace change. 2. ed. Boston: Addison-Wesley, 2004. ISBN 0-321-27865-8.
- [14] ANDERSON, David J. Kanban: successful evolutionary change for your technology business. Sequim, WA: Blue Hole Press, 2010. ISBN 978-0-9845214-0-1.

Comentários