terça-feira, 24 de abril de 2012

Engenharia de Software Para Concursos - Parte 1 - Introdução e Contextualização

Eu já havia feito alguns resumos de Engenharia de Software (ESW) segundo o Sommerville, mas como ESW é cobrada de forma genérica e de forma individual por autores, resolvi fazer 3 estudos separados. Este é da aula do professor Fernando Pedrosa, que incluem conceitos gerais importantes para as provas.

Lembrando que este é o meu resumo. Fique a vontade para usar, mas não me culpe se algo estiver errado. 

Engenharia de Software (ESW) é uma disciplina de ENGENHARIA (assim como todas as outras engenharias) preocupada com todos os aspectos sobre a produção de software, incluíndo:

Processos, Métodos e Ferramentas.

Os processos racionalizam o desenvolvimento de Software. Diz quem faz o que e quando.
Os métodos são os conhecimentos técnicos (know how). Dizem como fazer.
As ferramentas dão suporte automatizado ou semi-automatizado para processos e métodos (ferramentas case)

Desenvolver software não é só programar. Utiliza-se processos, métodos, ferramentas, aspectos de gestão e outras coisas.

As taxas de sucesso em desenvolvimento de software sempre foram muito baixas e a ESW veio para racionalizar a forma de produção e trazer uma abordagem moderna com qualidade nos artefatos e produtos entregues ao cliente, mesmo assim, a ESW ainda é muito imatura, possui taxas de sucesso muito baixas quando compradas às outras engenharias. 

Objetivos da Engenharia de Software:

Obter software de qualidade - atender as expectativas e deixar os usuários satisfeitos. Obter produtividade no desenvolvimento, manutenção e operação dentro de custos, prazos e níveis de qualidade controlados. Qualidade consome tempo, baixa a produtividade e impõe custos. Logo é preciso achar o melhor custo-benefício entre qualidade e produtividade. 

Engenharia de Software e Engenharia de Sistemas:

Na prática, no dia a dia, são a mesma coisa, mas conceitualmente são coisas diferentes.

A Engenharia de Sistemas está preocupada com todos os apectos de sistemas: software, hardware, processos, pessoas, outros sistemas e etc.

Engenharia de Software é apenas uma parte da Engenharia de Sistemas, que se preocupa somente com o software e que foi criada durante a crise do software no final da década de 60 quando se percebeu um problema de custo e qualidade.

O problema básico era o uso indiscriminado de Go To, que dificultava muito o entendimento e manutenibilidade do código.

Na década de 70 criaram a programação estruturada (linguagens com estrutura de controle) e o projeto estruturado. Foram as primeiras soluções para mitigar os problemas da crise do software (que não terminou até hoje). O projeto estruturado cuidava basicamente da organização do código utilizando os conceitos de coesão e acoplamento.

A partir da década de 80 surgiram as técnicas de análise estruturada e a percepção de que o problema a ser tratado vai além da programação. É preciso entender o problema antes de aplicar uma solução. Surgiram também as primeiras ferramentas CASE.

Eduard Yourdon publicou algumas ténicas muito usadas que abstraiam a tecnologia. A ideia era compreender o domínio. Mas hoje não são muito cobradas porque a Análise Estruturada foi substituída pela Análise OO. Existiam os seguintes artefatos.

Diagrama de Fluxo de Dados (DFD)
Dicionário de Dados
Diagrama de Entidade-Relacionamento
Diagrama de Estados

O paradígma estruturado considerava os dados e o compotamento do sistema separadamente.

Na década de 90 surgiram Análise e Projeto OO, Java, UML e o Processo Unificado. Já existiam as linguagens OO, mas elas se tornaram o padrão do mercado de desenvolvimento de software nesta época. Na orientação a objetos existe uma aproximação maior do mundo real. Os objetos são entidades que encapsulam dados e comportamento em um local só.

Nos anos 2000 as metodologias ágeis ganharam força, assim como novos paradigmas, como SOA, Aspectos e Arquitetura Dirigida a Modelos (MDA), etc.

O que é um Software?
Programa de computador com documentação associada. Desenvolvido para um cliente ou software de prateleira. Podem ser criados do zero ou reutilizar software existente.

O que é um processo?
Uma série de ações para satisfazer um objetivo. Define quem (papeis) está fazendo o quê (atividades), quando e como. Recebe uma entrada, transforma e produz uma saída.

Processo de software:
Conjunto estruturado de atividades para desenvolver um sistema de software.

Especificação, Projeto, Validação, Evolução.