engenharia de software - conceitos e modelos de desenvolvimento
Post on 19-May-2015
10.630 Views
Preview:
TRANSCRIPT
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....
top related