Engenharia de Software
Modelos de Software – Cap 2 - PLT
https://sites.google.com/site/thiagoaalves/
Aula
Modelo em cascata; O modelo de desenvolvimento evolucionário; Prototipação; Espiral ; Modelo de desenvolvimento baseado em componentes.Relembrando
O que é um Processo? processo
substantivo masculino
1. ação continuada, realização contínua e prolongada de alguma atividade;
seguimento, curso, decurso.
2. sequência contínua de fatos ou
operações que apresentam certa
unidade ou que se reproduzem com certa regularidade; andamento,
Relembrando
Processos de Software
“Quando se fornece um serviço ou cria-se
um produto, seja desenvolvendo um software, escrevendo um relatório ou fazendo uma
viagem de negócios, segue-se
costumeiramente uma sequencia de etapas para completar um conjunto de tarefas.”
Processos de Software
Não existe um processo ideal. As organizações devem criar, verificar,
validar e aperfeiçoar seus próprios métodos (CMMI, 2006).
Cascata
O modelo clássico ou cascata, que também é conhecido por abordagem “top-down”, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação geral. Esse modelo foi derivado de modelos de atividade de engenharia com o fim de estabelecer ordem no
desenvolvimento de grandes produtos de software. Comparado com outros modelos de desenvolvimento de software.
Cascata
O modelo cascata é um dos mais
importantes modelos, e é referência para muitos outros modelos, servindo de base para muitos projetos modernos. A versão original deste modelo foi melhorada e
retocada ao longo do tempo e continua sendo muito utilizado hoje em dia.
Cascata
Grande parte do sucesso do modelo
cascata está no facto dele ser orientado para documentação. No entanto deve salientar-se que a documentação
abrange mais do que arquivo de texto, abrange representações
Cascata
Existem três abordagens de modelos de processo de desenvolvimento de
software. Elas tentem colocar ordem numa atividade caótica.
Reflexão
O que São Atividades Caóticas? Por que Projetos Podem ser
Cascata
O modelo Cascata é um modelo de
engenharia projetado para ser aplicado no desenvolvimento do software.
A ideia principal que o dirige é que as diferentes etapas de desenvolvimento seguem uma sequência de eventos.
Cascata
O Funcionamento Básico do Cascata: “a saída da primeira etapa “fluí” para a
segunda etapa e a saída da segunda etapa “fluí” para a terceira e assim por diante. As atividades a executar são agrupadas em tarefas, executadas sequencialmente, de forma que uma tarefa só poderá ter início quando a anterior tiver terminado.”
Cascata
O modelo em cascata tem a vantagem que só avança para a tarefa seguinte quando o cliente valida e aceita as
atividades realizadas na etapa em que se encontra.
Cascata
Pressupõe que o cliente participa
ativamente no projeto e que sabe muito bem o que quer. Este modelo minimiza o impacto da compreensão adquirida no decurso de um projeto, uma vez que se um processo não pode voltar atrás de modo a alterar os modelos e as
conclusões das tarefas anteriores, é normal que as novas ideias sobre o sistema não sejam aproveitadas.
Reflexão
O Cliente realmente participa de todo processo de desenvolvimento?
Cascata
Numa tentativa de resolver este tipo de problema foi definido um novo tipo de processo baseado no clássico em cascata, designado por modelo em cascata revisto, cuja principal diferença consiste em prever a possibilidade de a partir de qualquer tarefa do ciclo se poder regressar a uma tarefa anterior de forma a contemplar alterações funcionais e/ou técnicas que entretanto
tenham surgido, em virtude de um maior conhecimento que entretanto se tenha obtido.
Cascata
Problemas
O ciclo de vida Cascata é o paradigma mais visto e mais amplamente empregue na engenharia de software, porém sua aplicabilidade, em muitos campos, tem
sido questionada. Entre os problemas que surgem quando se aplica o modelo são:
Cascata
◦ Na realidade, os projetos raramente seguem o fluxo sequencial que o modelo propõe. A
interação é sempre necessária e está presente, criando problemas na aplicação do modelo;
◦ Em princípio, é difícil para o cliente especificar os requisitos explicitamente, o que acarreta a
incerteza natural do início de qualquer projeto;
◦ O cliente deve ser paciente, pois uma versão funcional não estará disponível até o final do desenvolvimento. Qualquer erro ou mal
entendido, se não for detectado até que o software seja revisado, pode ser desastroso.
Reflexão
Qual e o maior Problema enfrentado no modelo em cascata? (Não existem
respostas certas e erradas)
Resposta: Dependendo da Alteração
a ser realizada o Custo pode ser elevado demais.
Modelo Evolucionário
O software evolui ao longo do tempo e conforme o desenvolvimento deste
software avança também temos mudanças nas necessidades de negócio e de
Modelo Evolucionário
Isso torna inadequado seguirmos um planejamento em linha reta de um
produto. Os modelos de processo
evolucionário tornaram-se realidade para que possamos desenvolver um produto que evolua ao longo do tempo.
Modelo Evolucionário
Modelos evolucionários são
caracterizados por serem iterativos e apresentarem características que
possibilitem desenvolvermos versões cada vez mais completas do software. Os
processos evolucionários se caracterizam por dois modelos comuns: Prototipação
Modelo Evolucionário
Prototipação: A prototipação é utilizada quando o desenvolver não tem certeza
quanto à eficiência de um algoritmo, ou quanto à adaptabilidade de um
sistema operacional ou ainda quanto à forma em que deva ocorrer a
interação entre o cliente e o sistema.
Modelo Evolucionário
Quando temos essa situação a
prototipação é uma excelente alternativa. Vale ressaltar que a prototipação pode
ser utilizada em qualquer processo de software, visto que a prototipação auxilia os interessados a
compreender melhor o que está para ser construído.
Modelo Evolucionário
A prototipação se dá basicamente com a comunicação que ocorre através de uma reunião com todos os envolvidos afim de definir objetivos gerais do software e
identificar quais requisitos já estão bem conhecidos e esquematizar as áreas que realmente necessitam de uma definição mais ampla.
Modelo Evolucionário
Uma iteração de prototipação deve ser planejada rapidamente e dessa
forma ocorre a modelagem na forma de um projeto rápido. O projeto rápido foca na representação dos aspectos do
software que serão visíveis aos usuários como layout da interface e os formatos de exibição. Esse projeto rápido leva à construção de um protótipo que será avaliado pelo cliente.
Modelo Evolucionário
O cliente por sua vez retornará um
feedback á equipe de software que irá
aprimorar os requisitos. A iteração vai ocorrendo conforme vamos ajustando o protótipo às necessidades dos usuários.
Modelo Evolucionário
De forma geral o protótipo auxilia na
identificação dos requisitos do software. Os protótipos podem ser descartados quando usamo-los apenas para entender um determinado requisito ou pode ser
utilizado como um produto evolucionário que servirá para o cliente.
Reflexão
Qual e a Principal diferença entre um Protótipo e um Layout?
Embora bastante semelhantes o Protótipo e considerado “Funcional” enquanto o
Modelo em Espiral
O famoso modelo espiral foi proposto por Boehm. Esse é um modelo de
processo de software evolucionário que também é iterativo como a prototipação, porém com aspectos sistemáticos e
controlados do modelo cascata. O modelo espiral fornece um grande
potencial para que possamos ter rápido desenvolvimento de versão cada vez mais completas.
Modelo em Espiral
Um modelo espiral possui diversas
atividades definidas pela engenharia de software, onde cada uma dessas
atividades representa um segmento do caminho espiral.
Modelo em Espiral
Sempre iniciamos pelo centro da espiral e prosseguimos no sentido horário.
Os riscos são considerados à medida que cada evolução é realizada. A primeira
atividade se dá com o desenvolvimento de uma especificação de produto, as
próximas passagens podem ser usadas para desenvolver um protótipo e, assim sucessivamente vamos evoluindo para versões cada vez mais sofisticadas do software.
Modelo em Espiral
Cada passagem pela parte de
planejamento, por exemplo, resulta em ajustes no planejamento do projeto.
O custo e o cronograma são sempre ajustados de acordo com o feedback obtido do cliente após uma entrega.
Também teremos um ajuste no número de iterações planejadas para completar o software.
Modelo em Espiral
Podemos notar que diferente de outros modelos que terminam quando o
software é entregue, o modelo espiral
pode ser adaptado a cada entrega. O
projeto finaliza quando o cliente fica
satisfeito, quando o software é retirado de operação ou uma data encerra
Modelo em Espiral
O modelo espiral é largamente utilizado e é considerada uma abordagem realista
Modelo Baseado em Componentes
O modelo baseado em componentes incorpora muitas características do
modelo em Espiral, tendo como base os seguintes pontos:
◦ Baseado na tecnologia de orientação a objetos;
◦ Reaproveitamento de código;
◦ Recursão onde um componente esta presente dentro de outro componente.
Modelo Baseado em Componentes
O modelo compõe aplicações à partir de componentes de software previamente definidos. Um componente é uma
parte independente do sistema, que pode ser substituído, mas que possui uma função clara e bem definida na estrutura do sistema.
Modelo Baseado em Componentes
As atividades de modelagem e construção começam com a identificação de
componentes candidatos. Esses
componentes podem ser projetados
como módulos de software convencional ou como classes ou pacotes de classes orientados a objetos.
Modelo Baseado em Componentes
O modelo de desenvolvimento baseado em componentes incorpora os seguintes passos:
◦ Produtos baseados em componentes disponíveis são pesquisados e avaliados para o domínio da aplicação em questão.
◦ Tópicos de integração de componentes são considerados.
◦ Uma arquitetura de software é projetada para acomodar os componentes.
◦ Componentes são integrados à arquitetura.
◦ Testes abrangentes são realizados para garantir a funcionalidade adequada.
Modelo Baseado em Componentes
O modelo de desenvolvimento baseado em componentes leva ao reuso de software, e a reusabilidade fornece vários benefícios. Com base em estudos de reusabilidade, a QSM
Associates, Inc. relata que o desenvolvimento baseado em componentes leva à redução de 70% do prazo do ciclo de desenvolvimento; uma redução de 84% no custo do projeto; e um índice de produtividade de 26,2,
comparando com o padrão de 16,9 para a indústria.
Modelo Baseado em Componentes
Apesar desses resultados, existe pouca dúvida de que o modelo de
desenvolvimento baseado em
componentes fornece vantagens
significativas para os desenvolvedores de software.
Modelo Baseado em Componentes
Para projetar um sistema baseado em componentes é necessário entender os benefícios e dificuldades da tecnologia, bem como a ferramenta disponível. Os benefícios da componentização estão ligados a manutenabilidade, reuso,
composição, extensibilidade, integração, escalabilidade, entre outros.
Modelo Baseado em Componentes
As dificuldades podem ser separadas em dificuldades do desenvolvimento para
componentização (construção dos componentes e da infra-estrutura) e dificuldades do desenvolvimento com componentização.
Modelo Baseado em Componentes
As primeiras estão ligadas ao esforço inicial de análise, projeto e
desenvolvimento, enquanto as segundas estão ligadas ao esforço despendido no entendimento dos componentes e das ferramentas envolvidas, à perda de
flexibilidade, à dependência de terceiros e à adaptação do processo de
Modelo Baseado em Componentes
Vantagens
Reutilização de Código;
Redução do tempo de desenvolvimento; Redução de Custos de Projetos;
Modelo Baseado em Componentes
Desvantagens
Indisponibilidade de Código Fonte, muitas vezes, componentes comprados os
desenvolvidos não possuem código fonte disponível.
Solução deve ser construida identificando e isolando componentes independentes, com interfaces suficientemente genéricas.
Exercício 30 Minutos
Com Base nos Modelos de Software visto crie em Grupo ( Ate 5 Pessoas) um
Modelo para ser adotado no desenvolvimento.
A criação do Modelo e livre junto com as etapas.
Referencias
SOMMERVILLE, Ian (org.). Engenharia de
Software. 9ª ed. São Paulo: PEARSON, 2011.
PRESSMAN, Roger S.. Engenharia de Software.
7ª ed. São Paulo: Makron Books, 2007.
http://www.api.adm.br/GRS/referencias/t1_g13.m odeloCascata.pdf http://www.univasf.edu.br/~ricardo.aramos/discipli nas/ES_I_2012_2/Aula03_ModelosProcessos.pdf http://www.devmedia.com.br/introducao-aos- processos-de-software-e-o-modelo-incremental-e-evolucionario/29839