Buscar

VA Engenharia Software 02

Prévia do material em texto

Tema 2
Abordagem e fases de 
desenvolvimento de software
Engenharia de Software I
Prof. Adriano Sepe
Devemos compreender que o processo de 
software corresponde às atividades necessárias 
para a produção de um produto de software. 
A aplicação dessas atividades, pode produzir 
um novo aplicativo, entenda como um software 
criado do zero, em quaisquer linguagens 
de programação.
Fases de desenvolvimento de software
Mas algo muito comum na construção de uma 
aplicação direcionado aos negócios está no fato 
de que ela possivelmente será construída por 
meio da extensão e modificação de um sistema 
existente, ou então pela configuração e 
integração com componentes do sistema.
Fases de desenvolvimento de software
Segundo Sommerville (2011), existem muitos 
processos diferentes, mas que todos incluem 
quatro importantes atividades para a 
engenharia de software:
§ Especificação de software;
§ Projeto e implementação de software;
§ Validação de software;
§ Evolução de software.
Fases de desenvolvimento de software
Também existem atividades relacionadas ao processo, 
na função de apoiá-lo, como a documentação e 
gerenciamento de configuração de software.
Se avaliarmos as atividades que devem ser 
executadas, precisaremos descrever os 
processos de execução, e estes podem 
incluir os seguintes elementos:
§ Produtos
§ Papéis
§ Pré/pós condições
Fases de desenvolvimento de software
Segundo Sommerville (2011), os processos são 
complexos, pois envolvem intelecto e criatividade e 
são executados por pessoas. Ainda, ele ponderou que 
não existe um processo ideal, ficando a cargo das 
organizações o desenvolvimento de um processo, 
compatível com a realidade individual.
Percebe-se a evolução dos processos, focados a 
tirarem o melhor das pessoas e 
das organizações, assim como 
das características dos sistemas 
em desenvolvimento
§ Agilidade ou processo?
Fases de desenvolvimento de software
Compreendemos o modelo de processo de software 
como uma representação simplificada do processo, 
também de software. 
Conforme apresentou Sommerville (2011), 
cada modelo representa uma perspectiva 
particular de um processo e, portanto, fornece 
informações parciais sobre ele. 
Por exemplo: um modelo de 
atividade do processo pode 
mostrar as atividades e sua 
sequência, mas não mostrar 
os papéis das pessoas envolvidas.
Modelos de processo de software
Discutiremos alguns modelos gerais de processos, 
que também são referenciados em algumas 
bibliografias como paradigmas de processos, 
todos na perspectiva de sua arquitetura. 
Esses modelos são tratados como genéricos, pois 
não apresentam uma descrição definitiva dos 
processos de software, apenas partem para uma 
abstração, que são utilizadas 
para descrever diferentes 
abordagens no 
desenvolvimento de softwares.
Modelos de processo de software
Podemos observar esses modelos genéricos como 
sendo frameworks de processo que podem ser 
aplicados e até adaptados para, então, criamos 
processos de engenharia de software 
especializados (SOMMERVILLE, 2011).
Modelos de processo de software
Continuando...
Abordagem e fases de 
desenvolvimento de software
Este modelo genérico foi o primeiro a ser publicado 
para o processo de desenvolvimento de software e 
ele foi derivado de processos mais gerais da 
engenharia de sistemas. 
A sua execução, por conta do encadeamento entre 
uma fase e outra, originou o termo associado ao 
seu nome, “modelo em cascata” ou 
clico de vida de software. 
Este modelo enfatiza a etapa de 
planejamento, quando, a princípio, 
devemos planejar e programar 
todas elas.
Modelo em cascata
Conforme Sommerville (2011), os principais estágios 
do modelo em cascata refletem diretamente as 
atividades fundamentais do desenvolvimento:
§ Análise e definição de requisitos;
§ Projeto de sistema e software;
§ Implementação e teste unitário;
§ Integração e teste de sistema;
§ Operação e manutenção.
Modelo em cascata
Modelo em cascata
Fonte: Sommerville, 2011.
Baseado na ideia de desenvolver uma implementação 
inicial, apresentá-la para observação e comentários 
dos usuários e, então, continuar por meio da criação 
de novas versões, até que o sistema adequado na 
perspectiva dos seus usuários, esteja concluído. 
As atividades de especificação, desenvolvimento e 
validação são intercaladas, e contínuas, e por não 
estarem separadas, proporcionam 
um feedback mais rápido 
entre todas elas.
Desenvolvimento incremental
As abordagens de desenvolvimento ágeis, que 
abordaremos mais a frente neste material, tem 
como parte fundamental o desenvolvimento 
incremental de software. 
Considere que a abordagem proporcionada pelo 
desenvolvimento incremental traz vantagem 
quando comparado à abordagem em cascata, 
isso para a maioria dos sistemas 
de negócios, e-commerce e 
sistemas pessoais.
Desenvolvimento incremental
Um fator que potencializa o uso dessa abordagem 
está no fato de que a utilizamos para resolver 
problemas no nosso dia a dia. Observe: quando nos 
deparamos com um problema, dificilmente 
elaboramos todo um planejamento para a sua 
resolução, diferentemente agimos a partir de 
pequenas ações até alcançarmos a real solução –
e isso nos ajuda também a lidar 
mais facilmente com ações mal 
planejadas, pois o feedback 
do resultado será mais rápido 
(SOMMERVILLE, 2011).
Desenvolvimento incremental
Esse conhecimento empírico pode ser levado para o 
desenvolvimento de software, cujo uso da perspectiva 
de pequenos incrementos proporcionará economias 
financeiras. Caso haja necessidade de mudanças, elas 
serão aplicadas mais rapidamente pela continuidade 
das atividades e feedback imediato.
Considere o seguinte raciocínio, 
os incrementos às novas versões, 
incluem novas funcionalidades 
solicitadas pelo cliente, 
baseando-se em critérios.
Desenvolvimento incremental
Ao compararmos o modelo incremental com o 
modelo em cascata, algumas vantagens serão 
percebidas, com destaque para estas 
(SOMMERVILLE, 2011):
§ Custo;
§ Feedback;
§ Agilidade.
Modelo incrementa X
Desenvolvimento incremental
Existem também pontos negativos para a 
abordagem incremental, com destaque aos 
seguintes problemas:
§ Visibilidade;
§ Degradação.
Desenvolvimento incremental
Percebe-se que, para sistemas de vida-longa, 
grandes e complexos, onde várias equipes 
diferentes desenvolvem partes dele, o modelo 
incremental pode trazer problemas críticos. 
Desenvolvimento incremental
Sistemas de grande porte, necessitam de um 
framework e de estabilidade em sua arquitetura 
e, ainda, clareza nas responsabilidades das 
equipes, com um forte apreço ao padrão e à 
arquitetura. Isso tudo deve ser planejado com 
antecedência e não desenvolvido de forma 
incremental (SOMMERVILLE, 2011).
Desenvolvimento incremental
Desenvolvimento incremental
Fonte: Sommerville, 2011.
Finalizando...
Abordagem e fases de 
desenvolvimento de software
É comum que, em projetos de software, haja 
algum tipo de reuso. Isso consiste na reutilização 
de partes, elementos ou módulos já desenvolvidos, 
com uma perspectiva inicial diferente daquela que 
deseja-se reutilizar. 
Isso é possível quando as pessoas envolvidas no 
projeto procuram meios e condições para 
facilitarem o processo de 
modificação e incorporação 
de elementos desenvolvidos, 
em seus sistemas.
Engenharia de software orientada a reuso
A reutilização ocorre independentemente do 
processo de software envolvido. Porém, a partir do 
século XXI, processos de desenvolvimento com foco 
no reuso de software existente, tornaram-se 
amplamente utilizados. 
Essas abordagens, conhecidas como abordagens 
orientadas a reuso, foi definidapor Sommervile 
(2011) como dependente de uma 
ampla base de componentes 
reusáveis de software e de um 
framework de integração para a 
composição desses componentes. 
Engenharia de software orientada a reuso
Este modelo possui estágio de especificação de 
requisitos iniciais e, ainda, estágio de validação, 
ambos comparáveis aos outros processos de software, 
mas quando analisado os estágios intermediários, 
percebe-se que são diferentes (SOMMERVILLE, 2011) 
§ Análise de componentes;
§ Modificação de requisitos;
§ Projeto do sistemas com reuso;
§ Desenvolvimento e integração.
Engenharia de software orientada a reuso
Segundo Sommerville (2011), a engenharia de 
software orientada a reuso tem a vantagem óbvia de 
reduzir a quantidade de software a ser desenvolvido e, 
assim, reduzir os custos e riscos. Geralmente, também 
proporciona a entrega mais rápida do software. 
Atualmente, podemos projetar um software a partir 
do processo orientado a reuso e utilizar três tipos 
diferentes de componentes:
§ Web services;
§ Coleção de objetos; e 
§ Software standalone.
Engenharia de software orientada a reuso
Engenharia de software orientada a reuso
Fonte: Sommerville, 2011.
Avaliando Sommervile (2011) a respeito do 
modelo espiral, ele afirmou que um framework de 
processo de software dirigido a riscos (o modelo 
em espiral) foi proposto por Boehm (1988).
Perceba que o processo de software é 
representado como uma espiral, diferente de 
outros modelos onde uma sequência de atividades 
com alguns retornos 
de uma para outra.
Modelo espiral
Uma volta no espiral representa uma fase do 
processo de software e, assim, uma volta 
mais interna, mais próxima do centro, pode 
preocupar-se com a viabilidade do sistema; 
o ciclo seguinte, com definição de requisitos; 
o seguinte, com o projeto do sistema, e 
assim por diante.
Modelo espiral
Uma característica fundamental do modelo em 
espiral é que existe a combinação de prevenção e 
tolerância a mudanças, pois existe a concepção de 
que as mudanças são um resultado de riscos de 
projeto, então de forma explicita há atividades 
focadas no gerenciamento de riscos para sua 
redução (SOMMERVILLE, 2011).
Modelo espiral
São quatro setores projetados para cada ciclo:
§ Definição de objetivos;
§ Avaliação e redução de riscos;
§ Desenvolvimento e validação;
§ Planejamento.
Com destaque, o modelo espiral apresenta uma 
abordagem de processo de software, 
com o reconhecimento explícito 
do risco, fator que não ocorre 
em outros processos 
de softwares. 
Modelo espiral
Modelo espiral
Fonte: Sommerville, 2011.