Fundamentos da Computação

<<Engenharia de Software>>



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.

Histórico
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

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.



Referência

http://www.inf.ufes.br/~falbo/download/aulas/es-g/2005-1/NotasDeAula.pdf
http://www.inf.ufpr.br/silvia/ES/SweES/SweESalunos.pdf
http://www.facape.br/jocelio/es/material_em_pdf_conceitual/ESConceitos.pdf