O que é?
É uma área do conhecimento da computação voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade.
A Engenharia de Software (ES) surgiu em meados dos anos 1970 numa tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado) ao desenvolvimento de sistemas de software complexos. Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes interconectados entre si, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais.
Áreas de Conhecimento
- Requisitos (Requirements) de Software
- Projeto (Design) de Software
- Construção (Construction) de Software
- Teste (Testing) de Software
- Manutenção (Maintenance) de software
- Gerência de Configuração de Software
- Gerência de Engenharia de Software
- Processos de Engenharia de Software
- Ferramentas e Métodos de Engenharia de Software
- Qualidade (Quality) de Software
Camadas
Modelagem
Conforme Pressman, a Engenharia de Software (ES) é uma tecnologia em camadas. E a base de todas essas camadas é o foco na qualidade do software desenvolvido. Portanto, inclusive do ponto de vista didático, é interessante estudarmos a ES em suas camadas de Processo, Métodos e Ferramentas.
Modelos de Processo de Software
Um modelo de processo de desenvolvimento de software, ou simplesmente modelo de processo, pode ser visto como uma representação, ou abstração dos objetos e atividades envolvidas no processo de software. Além disso, oferece uma forma mais abrangente e fácil de representar o gerenciamento de processo de software e consequentemente o progresso do projeto.
Exemplos de alguns modelos de processo de software;
- Modelos ciclo de vida
- Sequencial ou Cascata (do inglês waterfall) - com fases distintas de especificação, projeto e desenvolvimento.
- Desenvolvimento iterativo e incremental - desenvolvimento é iniciado com um subconjunto simples de Requisitos de Software e interativamente alcança evoluções subseqüentes das versões até o sistema todo estar implementado
- Evolucional ou Prototipação - especificação, projeto e desenvolvimento de protótipos.
- V-Model - Parecido com o modelo cascata, mas com uma organização melhor, que permite que se compare com outros modelos mais modernos.
- Espiral - evolução através de vários ciclos completos de especificação, projeto e desenvolvimento.
- Componentizado - reuso através de montagem de componentes já existentes.
- Formal - implementação a partir de modelo matemático formal.
- Ágil
- RAD
- Quarta geração
Metodologia
O termo metodologia é bastante controverso nas ciências em geral e na Engenharia de Software em particular. Muitos autores parecem tratar metodologia e método como sinônimos, porém seria mais adequado dizer que uma metodologia envolve princípios filosóficos que guiam uma gama de métodos que utilizam ferramentas e práticas diferenciadas para realizar algo.
Assim teríamos, por exemplo, a Metodologia Estruturada, na qual existem vários métodos, como Análise Estruturada e Projeto Estruturado (muitas vezes denominados SA/SD, eAnálise Essencial). Tanto a Análise Estruturada quanto a Análise Essencial utilizam a ferramenta Diagrama de Fluxos de Dados para modelar o funcionamento do sistema.
- Metodologia Estruturada
- Análise Estruturada
- Projeto Estruturado
- Programação Estruturada
- Análise Essencial
- SADT
- DFD - Diagrama de Fluxo de Dados
- MER - Modelo de Entidades e Relacionamentos
- Metodologia Orientada a Objetos
- Orientação a Objetos
- Rational Unified Process ( RUP )
- Desenvolvimento ágil de software
- Feature Driven Development ( FDD )
- Enterprise Unified Process (EUP)
- Scrum (Scrum)
- Crystal (Crystal Clear, Crystal Orange, Crystal Orange Web)
- Programação extrema ( XP )
- Outras Metodologias
- Microsoft Solution Framework ( MSF )
Modelagem
A abstração do sistema de software através de modelos que o descrevem é um poderoso instrumento para o entendimento e comunicação do produto final que será desenvolvido.
A maior dificuldade nesta atividade está no equilíbrio (tradeoff) entre simplicidade (favorecendo a comunicação) e a complexidade (favorecendo a precisão) do modelo.
Para a modelagem podemos citar 3 métodos:
- Análise estruturada, criada por Gane & Searson;
- Análise Essencial, criada por Palmer & McMenamin e Ed. Yourdon;
- UML criada por Grady Booch, Ivar Jacobson & Jaimes Rumbaugh (veja exemplos).
Atualmente a modelagem mais recomendada, e sendo a mais comum, é a utilização da linguagem UML.

