Engenharia de Software - Conceitos e Modelos de Desenvolvimento

Post on 19-May-2015

10.626 views 3 download

Transcript of Engenharia de Software - Conceitos e Modelos de Desenvolvimento

Conceitos e modelos de desenvolvimento

Engenharia de Software

Prof: Sérgio Souza Costa

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

O que iremos aprender hoje ?

O que iremos aprender hoje ?

Conceitos sobre Engenharia de Software

O que iremos aprender hoje ?

Conceitos sobre Engenharia de Software

Modelos de desenvolvimento

O que iremos aprender hoje ?

Conceitos sobre Engenharia de Software

Qual o primeiro conceito ? Por onde devemos começar ? O que vocês acham ?

O que é software ?

O que é software?

Resposta não é obvia, segundo Pressman, em 1970 menos de 1% dos profissionais poderiam ter definido o que é software.

O que é software?

Produto que os engenheiros de software projetam e constroem.

O que é software?

Produto que os engenheiros de software projetam e constroem. Englobando:

O que é software?

1) Instruções (programas de computadores, código executável) que produzem algum resultado desejado.

Produto que os engenheiros de software projetam e constroem. Englobando:

O que é software?

2) Estruturas de dados que permitem que os programas manipulem adequadamente a informação.

Produto que os engenheiros de software projetam e constroem. Englobando:

O que é software?

3) Documentação que descrevem o uso dos programas.

Produto que os engenheiros de software projetam e constroem. Englobando:

Produto que os engenheiros de software projetam e constroem. Englobando:

O que é software?

3) Documentação que descrevem o uso dos programas.

SIM. Documentação, aquela parte que os programadores não morrem de amor.

Então, software é um produto do engenheiro de software, como um hardware é um produto de um engenheiro eletrônico ? O que diferencia estes produtos?

Então, software é um produto do engenheiro de software, como um hardware é um produto de um engenheiro eletrônico ? O que diferencia estes produtos?

Software é lógico.

Hardware é físico.

Então, software é um produto do engenheiro de software, como um hardware é um produto de um engenheiro eletrônico ? O que diferencia estes produtos?

Software é lógico.

Hardware é físico.Vamos ver melhor estas diferenças, e como isto reflete na sua construção.

CARACTERÍSTICAS DO SOFTWARE

Qual a diferença entre Hardware e Software ?

1. Desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico.

Projeto (modelo conceitual)

Artefatos (esquemas, plantas, mapas ... )

Fabricação (manufaturado)

Hardware - manufaturado

Mundo Lógico

Mundo físico

1. Desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico.

Projeto (modelo conceitual)

Artefatos (diagramas, documentos ..)

Programa – modelo de implementação

Software

Mundo Lógico

Alto nível

Baixo nível

Mo

del

os

1. Desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico.

1. Desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico.

Projeto (modelo conceitual)

Artefatos (diagramas, documentos ..)

Programa – modelo de implementação

Software

Mundo Lógico

Alto nível

Baixo nível

Mo

del

os

Relaxem. Iremos entender melhor isso durante o curso, na carreira, em algum momento …

1. Desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico.

Projeto (modelo conceitual)

Artefatos (diagramas, documentos ..)

Programa – modelo de implementação

Software

Mundo Lógico

Alto nível

Baixo nível

Mo

del

os

Relaxem. Iremos entender melhor isso durante o curso, na carreira, em algum momento …

A engenharia ainda está entendendo melhor estas diferenças.

No desenvolvimento de um software conceitualmente não existe um processo manual, todos os envolvidos exercem um trabalho intelectual.

Porém, onde e quem exerce o trabalho mais similar a um trabalho “manual” em um software ?

No desenvolvimento de um software conceitualmente não existe um processo manual, todos os envolvidos exercem um trabalho intelectual.

2. Software não se desgasta como nos hardware.

Como é a manutenção em um hardware ? e em um software?

Mortalidade infantil

Associada a falhas de fabricação e ou projeto.

Desgaste

Males ambientais, poeiras, vibrações.

Todo hardware tem um tempo de vida.

Mortalidade infantil

Curva de falha do hardware

Desgaste

Tempo

Falh

a

E no software, como vocês acham que é esta curva ? Lembrem-se de que no software não existe uma processo manufaturado, não existem peças que se desgastam.

Curva de falha do software

Tempo

Falh

a

Mudança

Curva real

Curva idealizada

Curva de falha do software

Tempo

Falh

a

Mudança

Curva real

Curva idealizada

Curva de falha do software

Tempo

Falh

a

Mudança

Curva real

Contraditorio ? Consegueriam explicar ?

Curva idealizada

Curva de falha do software

Tempo

Falh

a

Mudança

Curva real

Incremento devido os efeitos

colaterais

Curva idealizada

Efeitos colaterais, o pesadelo de todo desenvolvedor de software.

Correção de erros, tendem a gerar novos erros.

Efeitos colaterais, o pesadelo de todo desenvolvedor de software.

Correção de erros, tendem a gerar novos erros.

Desenvolvedores temem modificações, tentam a evitá-las.

Efeitos colaterais, o pesadelo de todo desenvolvedor de software.

Correção de erros, tendem a gerar novos erros.

Desenvolvedores temem modificações, tentam a evitá-las.

Porém, mudanças são inevitáveis e temos que lidar com isso.

Efeitos colaterais, o pesadelo de todo desenvolvedor de software.

Correção de erros, tendem a gerar novos erros.

Desenvolvedores temem modificações, tentam a evitá-las.

Porém, mudanças são inevitáveis e temos que lidar com isso.

Requisitos de softwares sempre mudam.

Efeitos colaterais, o pesadelo de todo desenvolvedor de software.

Correção de erros, tendem a gerar novos erros.

Desenvolvedores temem modificações, tentam a evitá-las.

Porém, mudanças são inevitáveis e temos que lidar com isso.

Requisitos de softwares sempre mudam.

Vamos ver durante o curso, mecanismo que tentam tornar esse processo menos dolorosos.

3. A maioria é feita sob medida em vez de ser montada a partir de componentes existentes.

3. A maioria é feita sob medida em vez de ser montada a partir de componentes existentes.

O reuso de “componentes de software” ainda não é equivalente a outras engenharias, como no hardware. Padrões ainda estão sendo desenvolvidos.

3. A maioria é feita sob medida em vez de ser montada a partir de componentes existentes.

Existem diversos componentes padronizado para a montagem de um hardware, parafusos, placas, transistores, diodos, etc.

O reuso de “componentes de software” ainda não é equivalente a outras engenharias, como no hardware. Padrões ainda estão sendo desenvolvidos.

EVOLUÇÃO DO SOFTWARE

Evolução do Software

Os primeiros anos- ORIENTAÇÃOBATCH- DISTRIBUÍÇÃOLIMITADA- SOFTWARECUSTOMIZADO

1950 1960 1970 1980 2000

Evolução do Software

Os primeiros anos

A segunda era

- ORIENTAÇÃOBATCH- DISTRIBUÍÇÃOLIMITADA- SOFTWARECUSTOMIZADO

- MULTIUSUÁRIO- TEMPO REAL- BANCO DE DADOS- PRODUTOS DE SOFTWARE

1950 1960 1970 1980 2000

Evolução do Software

Os primeiros anos

A segunda era

- ORIENTAÇÃOBATCH- DISTRIBUÍÇÃOLIMITADA- SOFTWARECUSTOMIZADO

- MULTIUSUÁRIO- TEMPO REAL- BANCO DE DADOS- PRODUTOS DE SOFTWARE

1950 1960 1970 1980 2000

Crise do software

Evolução do Software

Os primeiros anos

A segunda era

A terceiraera

- ORIENTAÇÃOBATCH- DISTRIBUÍÇÃOLIMITADA- SOFTWARECUSTOMIZADO

- SISTEMAS DISTRIBUÍDOS-INTELIGÊNCIA EMBUTIDA-HARDWARE DE BAIXO CUSTO- IMPACTO DECONSUMO

- MULTIUSUÁRIO- TEMPO REAL- BANCO DE DADOS- PRODUTOS DE SOFTWARE

1950 1960 1970 1980 2000

Crise do software

Evolução do Software

Os primeiros anos

A segunda era

A terceiraera

- ORIENTAÇÃOBATCH- DISTRIBUÍÇÃOLIMITADA- SOFTWARECUSTOMIZADO

- SISTEMAS DISTRIBUÍDOS-INTELIGÊNCIA EMBUTIDA-HARDWARE DE BAIXO CUSTO- IMPACTO DECONSUMO

- SISTEMAS DE DESKTOPPODEROSOS- TECNOLOGIASORIENTADASA OBJETOS- SISTEMASESPECIALISTAS- REDES NEURAISARTIFICIAIS- COMPUTAÇÃOPARALELA

- MULTIUSUÁRIO- TEMPO REAL- BANCO DE DADOS- PRODUTOS DE SOFTWARE

1950 1960 1970 1980 2000

A quartaeraCrise do software

A crise do software

+ Complexidade - Confiabilidade

Aumento crescente por sistemas de Informação

Sistemas mais e mais sofisticados exigem mais recursos (humanos e máquinas)

Mais dependência do software nos procedimentos normais do cotidiano

Sistemas devem ser mais e mais seguros.

A crise do software

•Imprecisão nas especificações iniciais do projeto•Muitas modificações exigidas pelo cliente•Rotatividade acentuada da equipe de projeto•Informações não muito bem documentadas•Custo elevado nos estágios finais de projeto

Manutenabilidade

Temos muitos PROBLEMAS, a quem podemos recorrer ?

Temos muitos PROBLEMAS, a quem podemos recorrer ?

ENGENHARIA

ENGENHARIA DE SOFTWARE de acordo com IEEE é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

ENGENHARIA DE SOFTWARE de acordo com IEEE é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

Sistemática por que parte do princípio de que existe um processo de desenvolvimento definindo as atividades que deverão ser executadas.

ENGENHARIA DE SOFTWARE de acordo com IEEE é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

Sistemática por que parte do princípio de que existe um processo de desenvolvimento definindo as atividades que deverão ser executadas.

Disciplinada por que parte do princípio de que os processos definidos serão seguidos

ENGENHARIA DE SOFTWARE de acordo com IEEE é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

Sistemática por que parte do princípio de que existe um processo de desenvolvimento definindo as atividades que deverão ser executadas.

Disciplinada por que parte do princípio de que os processos definidos serão seguidos

Quantificável por que se deve definir um conjunto de medidas a serem extraídas do processo

ENGENHARIA DE SOFTWARE de acordo com IEEE é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

Sistemática por que parte do princípio de que existe um processo de desenvolvimento definindo as atividades que deverão ser executadas.

Disciplinada por que parte do princípio de que os processos definidos serão seguidos

Quantificável por que se deve definir um conjunto de medidas a serem extraídas do processo

Desenvolvimento, operação e manutenção são fases do processo de software.

ENGENHARIA DE SOFTWARE de acordo com IEEE é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

Sistemática por que parte do princípio de que existe um processo de desenvolvimento definindo as atividades que deverão ser executadas.

Disciplinada por que parte do princípio de que os processos definidos serão seguidos

Quantificável por que se deve definir um conjunto de medidas a serem extraídas do processo

Desenvolvimento, operação e manutenção são fases do processo de software.

Mas o que é um processo ?

ES – Uma tecnologia em camadas

Ferramentas

Métodos

Processo

Foco na qualidade

Adaptado de Roger Pressman

Ferramentas

Métodos

Processo

Foco na qualidade

Adaptado de Roger Pressman

ES – Uma tecnologia em camadas

Foco na qualidade

• A busca pela qualidade é o objetivo de usar qualquer engenharia (não apenas da ES).

• Ela deve ser buscada em cada fase do processo de desenvolvimento.

• Permite ao – gerente um controle e ao– desenvolvedor uma referência.

Ferramentas

Métodos

Processo

Foco na qualidade

Adaptado de Roger Pressman

ES – Uma tecnologia em camadas

Métodos

Os detalhes de “como fazer” para construir o software, existem métodos para as diferentes tarefas.

Planejamento e estimativa de projeto

Análise de requisitos

Projeto da estrutura de dados

Codificação, teste, manutenção

Ferramentas

Métodos

Processo

Foco na qualidade

Adaptado de Roger Pressman

ES – Uma tecnologia em camadas

Ferramentas

As ferramentas de engenharia de software proporcionam apoio automatizado ou semi-automatizado aos métodos.

Se elas são integradas (troca de informação), chamamos de ferramentas

• CASE (Computer-Aided Software Engineering), em português Engenharia de Software Auxiliada por Computador.

Cada tarefa, pode ter uma ou mais ferramenta auxiliando.

Ferramentas

Métodos

Processo

Foco na qualidade

Adaptado de Roger Pressman

ES – Uma tecnologia em camadas

Processo

O processo é a camada mais importante da ES, esta camada constitui o elo de ligação entre as ferramentas e os métodos. Um processo define :

Processo

O processo é a camada mais importante da ES, esta camada constitui o elo de ligação entre as ferramentas e os métodos. Um processo define :

A seqüência em que os métodos serão aplicados.

Quais os responsáveis por cada tarefa.

Quando e como o software será entregue.

Possibilitam aos gerentes de software avaliar o progresso do desenvolvimento.

Processo

O processo é a camada mais importante da ES, esta camada constitui o elo de ligação entre as ferramentas e os métodos. Um processo define :

A seqüência em que os métodos serão aplicados.

Quais os responsáveis por cada tarefa.

Quando e como o software será entregue.

Possibilitam aos gerentes de software avaliar o progresso do desenvolvimento.

Uma empresa pode usar métodos e ferramentas e não seguir nenhum processo estabelecido. Existem até classificações para empresas quanto ao uso de processos.

Modelos de processo

Um processo é representado por um MODELO

prescritivo.

Um modelo prescritivo, nos dá uma referência, porem sempre existe a necessidade de adaptá-lo a cada projeto:– O pessoal que vai executar o trabalho e o ambiente no

qual o trabalho vai ser conduzido.

Modelos de processo

Um processo é representado por um MODELO

prescritivo.

Um modelo prescritivo, nos dá apenas uma referência, porem sempre existe a necessidade de adaptá-lo a cada projeto:– O pessoal que vai executar o trabalho e o ambiente no

qual o trabalho vai ser conduzido.

Modelos prescritivos são versões simplificadas, não sao processos.

Modelos de processos

• Existem diversos modelos de processo como:– Cascata

– Incremental

– Protótipo

– Espiral

– Formal

– 4º geração

– ...

Modelos de processo

• Independente do modelo de processo, inclui-se as seguintes atividades:– Comunicação

– Planejamento

– Modelagem

– Construção

– Implantação

“Existem muitos modos de ir para frente, mas apenas um modo de ficar parado.”

Franklin D. Rosevelt

Modelo em cascata

Conhecido como “ciclo de vida clássico”. Sugere

uma abordagem sistemática e seqüencial.

Filosofia: O resultado de uma fase se constitui na entrada da outra e uma fase só começa, após o termino da anterior.

O modelo mais antigo e ainda muito utilizado, porém existem diversas variações.

Modelo em cascata

ComunicaçãoIniciação do projeto, levantamento de requisitos

Comunicação

Os serviços, restrições e objetivos do sistema são definidos por meio de consulta aos usuários do sistema.

A especificação do sistema:

Quais informações os sistemas deverá prover

Quais informações os sistemas não deverá prover

Comunicação

Os serviços, restrições e objetivos do sistema são definidos por meio de consulta aos usuários do sistema.

A especificação do sistema:

Quais informações os sistemas deverá prover

Quais informações os sistemas não deverá prover

Isto é documentado e “assinado”. Faz parte do contrato.

Comunicação

Exemplo de requisitos:

Em pequenos sistemas, uma ferramenta de planilhas pode ser suficiente:

Ref:

Comunicação

Exemplo de requisitos:

Em pequenos sistemas, uma ferramenta que planilhas pode ser suficiente:

Veremos sobre engenharia de requisitos, capitulo 7.

Ref:

Modelo em cascata

ComunicaçãoIniciação do projeto, levantamento de requisitos

PlanejamentoEstimativas, cronogramas, monitoração

Planejamento

O planejamento define o tempo estimado de entrega.

Nele, deve ser definido o cronograma de execução de cada atividade.

Além disso, deve se ter mecanismo que permita a monitoração do projeto.– Será que o projeto irá atender as estimativas,

sobre custo e tempo.

Planejamento

Ferramentas que auxilia, MSProject e OpenProject.

Modelo em cascata

Comunicação

ModelagemIniciação do projeto, levantamento de requisitos

Análise e projeto

PlanejamentoEstimativas, cronogramas, monitoração

Modelagem

A análise e o projeto estabelecerá a arquitetura geral do sistema e envolve:

Identificar e descrever as abstrações fundamentais do sistema de software e suas relações.

Modelagem

Nessa fase, se estivermos fazendo uso da UML, precisaremos de ferramentas que construam os seus diagramas.

Gato

RaçaTamanhoCor

caçarbrincar

Modelagem

Nessa fase, se estivermos fazendo uso da UML, precisaremos de ferramentas que construam os seus diagramas.

Veremos estes diagramas em outra disciplina.

Gato

RaçaTamanhoCor

caçarbrincar

Modelo em cascata

Comunicação

ModelagemIniciação do projeto, levantamento de requisitos

Análise e projeto

Codificação, teste

PlanejamentoEstimativas, cronogramas, monitoração

Construção

Codificação e teses

O projeto de software é traduzido para um conjunto de programas ou unidades (funções, objetos, componentes, etc).

Nesta fase, são feitos testes unitários, que envolve a verificação de que cada unidade atende sua especificação.

Codificação e teses

Nesta fase, é usual utilizar uma IDE (Integrated Development Environment), ou ambiente integrado de desenvolvimento, por exemplo o Eclipse.

No Java existe a JUnit para testes de unidade

Modelo em cascata

Comunicação

Modelagem

Implantação

Iniciação do projeto, levantamento de requisitos

Análise e projeto

Codificação, testeEntrega,

manutenção, feedback

PlanejamentoEstimativas, cronogramas, monitoração

Construção

Implantação

As unidades individuais de programa e ou programas, são integrados e testados buscando garantir os requisitos de software foram atendidos.

Após os testes o sistema é entregue e implantado para o cliente.

Manutenção, envolve a correção de erros não detectados.

Além da ampliação dos serviços do sistema á medida que novos requisitos são identificados

Implantação

As unidades individuais de programa e ou programas, são integrados e testados buscando garantir os requisitos de software foram atendidos.

Após os testes o sistema é entregue e implantado para o cliente.

Manutenção, envolve a correção de erros não detectados.

Além da ampliação dos serviços do sistema á medida que novos requisitos são identificados

Como é a implantação em sistemas desktop e em sistemas Web?

Implantação

As unidades individuais de programa e ou programas, são integrados e testados buscando garantir os requisitos de software foram atendidos.

Após os testes o sistema é entregue e implantado para o cliente.

Manutenção, envolve a correção de erros não detectados.

Além da ampliação dos serviços do sistema á medida que novos requisitos são identificados

Como é a implantação em sistemas desktop e em sistemas Web?

Requisitos sempre mudam

Modelo cascata

• Pontos fortes

Modelo cascata

• Pontos fortes– Mais antigo e testado modelo de processo

– Enfoque sistemático e sequencial das tarefas

– Muitas melhorias e variações,

– É o arcabouço de referência a diversos outros modelos de processos.

Modelo cascata

• Pontos fracos

Modelo cascata

• Pontos fracos– Projetos reais raramente seguem um fluxo seqüencial.

– Os Clientes e Usuários não conseguem estabelecer de forma clara e completa os requisitos de sistema no início do desenvolvimento.

– Grande demora até a entrega do produto ao cliente (primeira apreciação).

– Alto custo da correção das especificações quando na fase da integração e teste.

Modelo incremental

Combina elementos do modelo em cascata, aplicado de maneira iterativa.

Aplica seqüência lineares, de modo cada sequencia produz incrementos do software.

Modelo incremental

Combina elementos do modelo em cascata, aplicado de maneira iterativa.

Aplica seqüência lineares, de modo cada sequencia produz incrementos do software.

Um incremento, é um produto operacional.

Modelo incremental

Combina elementos do modelo em cascata, aplicado de maneira iterativa.

Aplica seqüência lineares, de modo cada sequencia produz incrementos do software.

Um incremento, é um produto operacional.

Os primeiros incrementos são versões simplificadas.

Modelo incremental

Comunicação

Planejamento

Modelagem

Construção

Implantação

Incremento 1

Tempo decorrido

Fun

cio

nal

idad

es

Modelo incremental

Comunicação

Planejamento

Modelagem

Construção

Implantação

Incremento 1

Incremento 2

Tempo decorrido

Fun

cio

nal

idad

es

Modelo incremental

Comunicação

Planejamento

Modelagem

Construção

Implantação

Incremento 1

Incremento 2

Incremento N

Tempo decorrido

Fun

cio

nal

idad

es

Modelo incremental

• Enfoque para sistemas modulares ou baseado em subsistemas.

• Utilizado como estratégia para projetos muito grandes.

• Evita problemas de perda de controle: custo e prazos.

• É um modelo evolucionário.

Modelo incremental

• Enfoque para sistemas modulares ou baseado em subsistemas.

• Utilizado como estratégia para projetos muito grandes.

• Evita problemas de perda de controle: custo e prazos.

• É um modelo evolucionário.

Por exemplo, os modelos unificados que vocês verão em orientação objeto tem como referência o modelo incremental.

Modelo incremental

• Enfoque para sistemas modulares ou baseado em subsistemas.

• Utilizado como estratégia para projetos muito grandes.

• Evita problemas de perda de controle: custo e prazos.

• É um modelo evolucionário.

Por exemplo, os modelos unificados que vocês verão em orientação objeto tem como referência o modelo incremental.

Já ouviram falar em métodos ágeis ? Eles tambem são incrementais.

Pontos chaves: Conceitos ES

• Software, são os 1) programas, 2) estruturas de dados e 3) documentação.

• A ES nasce pra resolver diversos problemas que foram agravados com o incremento na quantidade e complexidade dos softwares.

• ES é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software.

• Um processo define que métodos e quais ferramentas usar para atingir um nível de qualidade.

Pontos chaves: Modelos

• Um modelo descreve uma visão simplificada do processo.

• Um modelo deve ser ajustado as necessidades do projeto específico.

• Um modelo de processo genérico inclui: comunicação, planejamento, modelagem, construção e implantação.

• Existem diversos modelos, vimos hoje o modelo em cascata, conhecido como ciclo de vida clássico.

• E o modelo incremental, que é baseado no modelo em cascata, porém divide o sistemas em incrementos, que possui uma funcionalidade e seu próprio cronograma

http

://ww

w.p

rojectcarto

on

.com

/cartoo

n/58

Como o cliente definiu.

Como o lider do projeto entendeu.

Como o analista projetou.

Como o programador escreveu.

Como o projeto foi documentado.

Como o projeto foi instalado.

Como o cliente pagou

O que o cliente realmente precisava.

• As atividades deverão ser enviadas por email antes do início da próxima aula.

Exercitando o cérebro....