Aula 3 - Processos de Software.pptx aula
Aula 3 – Processos de
Software
Gestão de Times –
Métodos Ágeis
Prof. David Wilber Silva Daltro
Processos de Software
Um processo de software é um conjunto de atividades relacionadas que levam à produção de um sistema
de software.
Existem muitos tipos diferentes de sistemas de software, porém, não há um método universal de
engenharia de software que seja aplicável a todos eles.
Consequentemente, não existem processos de software universalmente aplicáveis. O processo utilizado nas
diferentes empresas depende do tipo de software que está sendo desenvolvido, dos requisitos do cliente e
das habilidades das pessoas que o desenvolvem.
Processos de Software
No entanto, embora existam muitos processos de software diferentes, todos eles devem incluir. de alguma
forma. as quatro atividades fundamentais da engenharia de software:
• Especificação - A funcionalidade do software e as restrições sobre sua operação devem ser definidas
• Desenvolvimento - O software deve ser produzido para atender à especificação.
• Validação - O software deve ser validado para garantir que atenda ao que o cliente deseja.
• Evolução - O software deve evoluir para atender às mudanças nas necessidades dos clientes.
Processos de Software
Quando descrevemos e discutimos os processos, normalmente falamos sobre as atividades nesses
processos - especificar um modelo de dados e projetar uma interface com o usuário, por exemplo - e sobre
a sequência correta dessas atividades.
Podemos identificar o que as pessoas fazem para desenvolver um software, mas, quando se trata de
processos de software, é importante descrever também quem está envolvido, o que está sendo produzido e
quais condições influenciam a sequência dessas atividades.
Processos de Software
Os processos de software são complexos e, como processos intelectuais e criativos, dependem da tomada
de decisão e do julgamento das pessoas. Uma vez que não existe um processo universal que valha para
todos os tipos de software, a maioria das empresas produtoras de software concebeu seus próprios
processos de desenvolvimento.
Estes evoluíram e passaram a aproveitar a capacidade dos desenvolvedores de software em uma
organização e as características dos sistemas que estão sendo desenvolvidos. No caso dos sistemas críticos
em segurança, é necessário um processo de desenvolvimento muito estruturado e que registros
detalhados sejam mantidos. Nos sistemas de negócio, com requisitos que mudam rapidamente, talvez seja
melhor adotar um processo mais flexível e ágil.
Processos de Software
Embora não haja um processo de software universal, há espaço para a melhoria dos processos em muitas
organizações. Os processos podem incluir técnicas ultrapassadas ou não tirar proveito da prática mais
recomendada na engenharia de software industrial. Na realidade, durante seus processos de
desenvolvimento, muitas organizações ainda não se valem dos métodos de engenharia de software.
Modelos de Processo de
Software
Um modelo de processo de software - às vezes chamado de ciclo de vida do desenvolvimento de software
(ou modelo SDLC, do inglês Software Development Life Cycle) - é uma representação simplificada de um
processo de software. Cada modelo representa um processo a partir de uma perspectiva particular e, desse
modo, fornece apenas informações parciais sobre esse processo.
Modelos de Processo de
Software
Por exemplo, um modelo de atividades do processo mostra as atividades e sua sequência, mas não os
papéis das pessoas envolvidas nelas. Veremos uma série de modelos de processo bem genéricos (às vezes
chamados de paradigmas de processo) partindo de urna perspectiva arquitetural, ou seja, vemos a
estrutura do processo, mas não os detalhes de suas atividades.
Modelos de Processo de
Software
Os principais modelos genéricos são:
• Modelo em cascata - Representa as atividades fundamentais do processo. como especificação,
desenvolvimento, validação e evolução, na forma de fases de processo distintas, como especificação de
requisitos, projeto de software, implementação e testes
• Desenvolvimento incremental - Intercala as atividades de especificação, desenvolvimento e validação. O
sistema é desenvolvido como uma série de versões (incrementos), com cada uma delas acrescentando
funcionalidade à versão anterior.
• Integração e configuração - Baseia-se na disponibilidade de componentes ou sistemas reusáveis. O
processo de desenvolvimento de sistemas se concentra na configuração desses componentes. para que
sejam utilizados em um novo contexto, e na integração deles em um sistema.
Modelos de Processo de
Software
Como dito anteriormente, não existe modelo de processo universal aplicável a todos os tipos de
desenvolvimento de software. O processo correto depende do cliente e dos requisitos que regulam o
software, do ambiente em que esse software será utilizado e do tipo de software que está sendo
desenvolvido.
Os sistemas críticos em segurança, por exemplo, são normalmente desenvolvidos a partir de um processo
em cascata, já que é necessária uma grande quantidade de análise e de documentação antes de começar
sua implementação. Por sua vez, os produtos de software são, atualmente, desenvolvidos a partir de um
modelo de processo incremental. Os sistemas de negócio são desenvolvidos, cada vez mais, por meio da
configuração dos sistemas preexistentes e da integração entre eles, a fim de criar um novo sistema com a
funcionalidade exigida.
Modelos de Processo de
Software
Na prática, a maior parte dos processos de software se baseia em um modelo genérico, mas
frequentemente incorpora características de outros modelos. Isso vale particularmente para a engenharia
dos grandes sistemas. Neles, faz sentido combinar algumas das melhores características de todos os
processos genéricos.
Modelos de Processo de
Software
É preciso ter informações sobre os requisitos de sistema essenciais para projetar uma arquitetura de
software que apoie esses requisitos, e não dá para desenvolver isso de modo incremental.
Os subsistemas dentro de um sistema maior podem ser desenvolvidos por meio de abordagens diferentes
partes do sistema que sejam bem compreendidas podem ser especificadas e desenvolvidas usando um
processo em cascata ou podem ser adquiridas como sistemas de prateleira para configuração. Outras
partes do sistema, difíceis de especificar antecipadamente, devem ser sempre desenvolvidas a partir de
uma abordagem incremental. Em ambos os casos, os componentes de software provavelmente serão
reusados.
Modelos de Processo de
Software
Várias tentativas têm sido feitas para desenvolver modelos de processo "universais" baseados em todos
esses modelos genéricos. Um dos mais conhecidos é o Rational Unified Process - RUP, que foi desenvolvido
pela Rational, uma empresa de engenharia de software norte-americana.
O RUP é um modelo flexível, que pode ser instanciado de diferentes maneiras para criar processos que se
assemelhem a qualquer um dos modelos de processo genéricos discutidos aqui. O RUP foi adotado por
algumas grandes empresas de software (principalmente pela IBM - International Business Machines
Corporation), nas não conquistou uma ampla aceitação.
O Modelo em Cascata
O primeiro modelo de processo de desenvolvimento de software a ser publicado é derivado dos modelos
utilizados na engenharia de grandes sistemas militares. Ele apresenta o processo de desenvolvimento de
software como uma série de estágios.
Devido à cascata de uma fase para outra, esse modelo é conhecido como modelo em cascata ou ciclo de
vida do software.
O modelo em cascata é um exemplo de processo dirigido por plano. A principio, pelo menos, é necessário
planejar e criar um cronograma de todas as atividades de processo antes de começar o desenvolvimento
do software.
O Modelo em Cascata
A figura a seguir exemplifica o modelo cascata:
O Modelo em Cascata
Os estágios do modelo em cascata refletem diretamente as atividades fundamentais do desenvolvimento
de software:
1. Análise e definição dos requisitos - Os serviços. as restrições e as metas do sistema são estabelecidos
por meio de consulta aos usuários. Depois, eles são definidos em detalhes e servem como uma
especificação do sistema.
2. Projeto do sistema e do software - O processo de projeto do sistema reparte os requisitos entre
requisitos de sistemas de hardware e de software, e estabelece uma arquitetura global do sistema. O
projeto de software envolve a identificação e a descrição das abstrações fundamentais do sistema de
software e seus relacionamentos.
O Modelo em Cascata
3. Implementação e teste de unidade - Durante essa etapa, o projeto do software é realizado como um
conjunto de programas ou unidades de programa. O teste de unidade envolve a verificação de cada
unidade. conferindo se satisfazem a sua especificação.
4. Integração e teste de sistema - As unidades de programa ou os programas são integrados e testados
como um sistema completo a fim de garantir que os requisitos de software tenham sido cumpridos.
Após os testes, o sistema de software é entregue ao cliente.
5. Operação e manutenção - Normalmente, essa é a fase mais longa do ciclo de vida. O sistema é instalado
e colocado em uso. A manutenção envolve corrigir os erros que não foram descobertos nas primeiras
fases do ciclo de vida, melhorar a implementação das unidades do sistema e aperfeiçoar os serviços do
sistema à medida que novos requisitos são descobertos.
O Modelo em Cascata
A principio, o resultado de cada fase no modelo em cascata consiste em um ou mais documentos que são
aprovados. A fase seguinte não deve começar até que a fase anterior tenha terminado. No
desenvolvimento de hardware, que envolve altos custos de produção, isso faz sentido.
No entanto, no desenvolvimento de software, esses estágios se sobrepõem e alimentam uns aos outros
com informações. Durante o projeto (design), são identificados problemas com os requisitos; durante a
codificação, são encontrados problemas com o projeto, e assim por diante. O processo de software, na
prática, nunca é um modelo linear simples, pois envolve feedback entre as fases.
O Modelo em Cascata
A necessidade de comprometimento inicial e retrabalho quando as mudanças são feitas significa que o
modelo em cascata é adequado somente para alguns tipos de sistema. tais como:
Sistemas embarcados - nos quais o software deve interagir com sistemas de hardware. Em virtude da
inflexibilidade do hardware, normalmente não é possível postergar as decisões sobre a funcionalidade do
software até que ele seja implementado.
Sistemas críticos - nos quais há necessidade de ampla análise da segurança (safety) e segurança da
informação (security) da especificação e do projeto do software. Nesses sistemas, os documentos de
especificação e de projeto devem estar completos para que a análise seja possivel. Geralmente, é muito
caro corrigir, durante a fase de implementação, os problemas relacionados à segurança na especificação e
no projeto.
O Modelo em Cascata
Grandes sistemas de software - que fazem parte de sistemas de engenharia mais amplos, desenvolvidos
por várias empresas parceiras. O hardware nos sistemas pode ser desenvolvido a partir de um modelo
similar, e as empresas preferem usar um modelo comum para o hardware e o software. Além disso, quando
várias empresas estão envolvidas, podem ser necessárias especificações completas para permitir o
desenvolvimento independente dos diferentes subsistemas.
O Modelo em Cascata
Podemos concluir que o modelo em cascata não é recomendado para situações em que a comunicação
informal do time é possível e nas quais os requisitos de software mudam rapidamente Para esses sistemas,
o desenvolvimento iterativo e os métodos ágeis são melhores.
Desenvolvimento Incremental
O desenvolvimento incremental se baseia na ideia de desenvolver uma implementação inicial, obter
feedback dos usuários ou terceiros e fazer o software evoluir através de várias versões, até alcançar o
sistema necessário. As atividades de especificação, desenvolvimento e validação são intercaladas, em vez
de separadas, com feedback rápido ao longo de todas elas.
Desenvolvimento Incremental
A figura abaixo mostra como funciona o desenvolvimento incremental:
Desenvolvimento Incremental
O desenvolvimento incremental, em alguma de suas formas, é atualmente a abordagem mais comum para
o desenvolvimento de aplicações e produtos de software. Essa abordagem pode ser dirigida por plano ou
ágil; na maioria das vezes, uma mistura de ambas. Em uma abordagem dirigida por plano, os incrementos
do sistema são identificados antecipadamente; se for adotada uma abordagem ágil, os incrementos iniciais
são identificados, mas o desenvolvimento dos incrementos finais depende do progresso e das prioridades
do cliente.
Desenvolvimento Incremental
O desenvolvimento incremental de software, que é parte fundamental dos métodos ágeis, é melhor do que
urna abordagem em cascata para os sistemas cujos requisitos estão propensos a mudar durante o
processo de desenvolvimento. É o caso da maioria dos sistemas de negócio e dos produtos de software.
O desenvolvimento incremental reflete a maneira como solucionamos os problemas: raramente
elaboramos uma solução completa para os problemas com antecedência: em vez disso, caminhamos para
uma solução em uma série de passos, retrocedendo quando percebemos que cometemos um erro. Ao
desenvolver um software de modo incremental, é mais barato e fácil fazer alterações nele durante o
processo de desenvolvimento.
Desenvolvimento Incremental
Cada incremento ou versão do sistema incorpora parte da funcionalidade necessária para o cliente.
Geralmente, os incrementas iniciais incluem a funcionalidade mais importante ou a mais urgente. Isso
significa que o cliente ou usuário pode avaliar o sistema em um estágio relativamente precoce no
desenvolvimento para ver se ele entrega o que é necessário Se não entrega, então o incremento atual
precisa ser alterado e, possivelmente, uma nova funcionalidade deve ser definida para os incrementas
posteriores.
Desenvolvimento Incremental
O desenvolvimento incremental tem três grandes vantagens em relação ao modelo em cascata:
1. O custo de implementação das mudanças nos requisitos é reduzido. A quantidade de análise e
documentação que precisa ser refeita é significativamente menor do que a necessária ao modelo em
cascata.
2. É mais fácil obter feedback do cliente sobre o trabalho de desenvolvimento. Os clientes podem
comentar as demonstrações de software e ver o quanto foi implementado. Para eles. é mais difícil julgar
o progresso a partir dos documentos do projeto (design) de software.
3. A entrega e a implantação antecipadas de um software útil para o cliente são passiveis, mesmo se toda
a funcionalidade não tiver sido incluída. Os clientes são capazes de usar o software e de obter valor a
partir dele mais cedo do que com um processo em cascata.
Desenvolvimento Incremental
Do ponto de vista da gestão, a abordagem incremental tem dois problemas:
1. O processo não é visível. Os gerentes precisam de resultados regulares para medir o progresso_ Se os
sistemas forem desenvolvidos rapidamente, não é econômico produzir documentos que reflitam cada
versão do sistema.
2. A estrutura do sistema tende a se degradar à medida que novos incrementos são adicionados.
Mudanças regulares deixam o código bagunçado, uma vez que novas funcionalidades são adicionadas
de qualquer maneira possível. Fica cada vez mais difícil e caro adicionar novas características a um
sistema. Para reduzir a degradação estrutural e a bagunça generalizada no código. os métodos ágeis
sugerem que se refatore (melhore e reestruture) o software regularmente.
Desenvolvimento Incremental
Cada incremento ou versão do sistema incorpora parte da funcionalidade necessária para o cliente.
Geralmente, os incrementas iniciais incluem a funcionalidade mais importante ou a mais urgente. Isso
significa que o cliente ou usuário pode avaliar o sistema em um estágio relativamente precoce no
desenvolvimento para ver se ele entrega o que é necessário Se não entrega, então o incremento atual
precisa ser alterado e, possivelmente, uma nova funcionalidade deve ser definida para os incrementas
posteriores.
Desenvolvimento Incremental
Os problemas do desenvolvimento incremental se tomam particularmente críticos nos sistemas grandes.
complexos e de vida longa, nos quais diferentes times desenvolvem partes distintas do sistema. Os
sistemas grandes precisam de um framework ou de uma arquitetura estáveis, e as responsabilidades dos
diferentes times trabalhando no sistema precisam ser claramente definidas em relação a essa arquitetura.
Isso deve ser planejado antecipadamente em vez de desenvolvido de modo incremental.
Integração e Configuração
Na maioria dos projetos há algum reuso de software. Com frequência. isso acontece informalmente quando
as pessoas que trabalham no projeto conhecem ou procuram algum código similar ao necessário. Elas
procuram por esse código, modificam-no conforme a necessidade e integram-no ao novo código que
desenvolveram.
Integração e Configuração
Esse reuso informal ocorre independentemente do processo de desenvolvimento utilizado. No entanto,
desde os anos 2000. processos de desenvolvimento de software que se concentram no reuso de código
existente passaram a ser amplamente utilizados. As abordagens orientadas ao reuso contam com bases de
componentes de software reusáveis e um framework de integração para a composição desses
componentes.
Integração e Configuração
Três tipos de componentes de software são reusados frequentemente:
1. Sistemas de aplicação stand-alone configurados para utilização em um ambiente particular. Esses
sistemas são de uso geral e possuem muitas características, mas precisam ser adaptados para uso em
uma aplicação específica.
2. Coleções de objetos desenvolvidos como um componente ou como um pacote a ser integrado a um
framework de componentes.
3. Web services desenvolvidos de acordo com os padrões de serviço e que estão disponíveis para uso
remoto na internet.
Integração e Configuração
A figura abaixo mostra um modelo de processo genérico articulado em torno da integração e da
configuração para o desenvolvimento de software baseado no reuso.
Integração e Configuração
Os estágios nesse processo são:
1. Especificação dos requisitos - Os requisitos iniciais do sistema são propostos Eles não precisam ser
elaborados em detalhes. mas devem incluir descrições breves dos requisitos essenciais e das
características de sistema desejáveis.
2. Descoberta e avaliação do software - Com base em uma descrição dos requisitos de software, é feita
uma busca pelos componentes e sistemas que fornecem a funcionalidade necessária. Os candidatos
são avaliados para ver se satisfazem os requisitos essenciais e se são genericamente adequados ao uso
no sistema.
Integração e Configuração
3. Refinamento dos requisitos - Nesse estágio, os requisitos são definidos com base nas informações dos
componentes reusáveis e das aplicações que foram descobertas. Os requisitos são modificados para
refletir os componentes disponíveis, e a especificação do sistema é redefinida. Onde as modificações
forem impossíveis, a atividade da análise de componentes pode ser reintroduzida para procurar
soluções alternativas.
4. Configuração da aplicação - Se estiver disponível urna aplicação de prateleira que satisfaça os
requisitos, ela pode ser configurada para utilização a fim de criar o novo sistema.
5. Adaptação e integração dos componentes - Se não houver uma aplicação de prateleira. componentes
reusáveis podem ser modificados ou novos componentes podem ser desenvolvidos. visando a
integração posterior ao sistema.
Integração e Configuração
A engenharia de software baseada no reuso, articulada em torno da configuração e da integração, tem a
vantagem óbvia de reduzir a quantidade de software a ser desenvolvido, diminuindo custos e riscos.
Normalmente, isso também leva a uma entrega mais rápida do software.
Entretanto, concessões quanto aos requisitos são inevitáveis, o que pode resultar em um sistema que não
satisfaz as necessidades reais dos usuários. Além disso, parte do controle sobre a evolução do sistema se
perde, já que novas versões dos componentes reusáveis não estão sob o controle da organização que os
utiliza.
OBRIGADO
Referência:
SOMMERVILLE, Ian. Engenharia de Software, PEARSON.

Mais conteúdo relacionado

PPT
Aula2 processos sw
ODP
Modelos de processos de software
DOCX
Processos de software
PDF
Processo de Software
PDF
Aula 2 - Processos de Software
PPT
Aula de Engenharia de Software principais caracteristicas
PPTX
Aula 2 modelo de processo de software1
PDF
Modelos de processos de software
Aula2 processos sw
Modelos de processos de software
Processos de software
Processo de Software
Aula 2 - Processos de Software
Aula de Engenharia de Software principais caracteristicas
Aula 2 modelo de processo de software1
Modelos de processos de software

Semelhante a Aula 3 - Processos de Software.pptx aula (20)

PDF
Aula 02 - Processo de Software I.pdf
PDF
Capitulo 02 sommerville
PDF
[CEFETMG][ESw] Aula 2 - Processos de software
PPTX
Aula 7 - Modelos de Ciclo de Vida.pptx
PDF
Processo e Processo de Software
PPTX
Aula - Revisão.pptx fundamentos de engenharia de sw
PPT
Engenharia De Software
PPTX
03 Modelo de processo de software
PDF
Modelos de Processo de Software Parte 1
PDF
Ciclo de vida de software
PDF
Ciclo de vida de software
ODP
Como desenvolver-software
PDF
A Evolucao dos Processos de Desenvolvimento de Software
PDF
Modelos e Padrões de Engenharia de Software
PDF
Aula 01 e 02 - Engenharia de Software.pdf
PPTX
Eng.ª do Software - 4. Processos de software
PPTX
Aula de processos introdução de Software
PPTX
aula7 software ciclo de vida analise req
PPT
Engenharia de Software introdução
PPTX
Aula 7 - Ciclo de vida do software.pptx
Aula 02 - Processo de Software I.pdf
Capitulo 02 sommerville
[CEFETMG][ESw] Aula 2 - Processos de software
Aula 7 - Modelos de Ciclo de Vida.pptx
Processo e Processo de Software
Aula - Revisão.pptx fundamentos de engenharia de sw
Engenharia De Software
03 Modelo de processo de software
Modelos de Processo de Software Parte 1
Ciclo de vida de software
Ciclo de vida de software
Como desenvolver-software
A Evolucao dos Processos de Desenvolvimento de Software
Modelos e Padrões de Engenharia de Software
Aula 01 e 02 - Engenharia de Software.pdf
Eng.ª do Software - 4. Processos de software
Aula de processos introdução de Software
aula7 software ciclo de vida analise req
Engenharia de Software introdução
Aula 7 - Ciclo de vida do software.pptx
Anúncio

Último (20)

PDF
Reino Monera - Biologiaensinomediofun.pdf
PPSX
1. A Cultura da Ágora - HistóriaCArtes.ppsx
PPTX
Adaptação Curricular para Alunos com Deficiências - EMEB. ODIR (1).pptx
PDF
Historia da Gastronomia Mundial por Daianna Marques dos Santos
PPTX
São João Eudes, 1601 – 1680, padre e fondador, Francés.pptx
PDF
Atividades sobre o livro Letras de Carvão
PPTX
125511 - Aula 1 - América portuguesa antes da conquista patrimônio e preserva...
PPTX
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
PPT
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
PPTX
2. A Cultura do Salão - o fim das trevas.pptx
PDF
01-slide-especialidade-mensageira-de-deus.pdf
PDF
DESCCARTE DE MATERIAIS BIOLOGICO ESTUDO DA ODONTOLOGIA
PDF
APOSTILA PARA FORMAÇÃO E RECICLAGEM DE VIGILANTES.pdf
PDF
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
PPTX
NR 5 Treinamento completo gestão CIPA.pptx
PPTX
REVISA-GOIAS-6o-ANO-LP-3o-BIMESTRE-PPT.pptx
PPT
YY2015MM3DD6HH12MM42SS3-Organiza__o do Estado ILP.ppt
PDF
E-BOOK-Inovacao-em-Ciencia-e-Tecnologia-de-Alimentos.pdf
PPT
AS VANGUARDAS EUROPEIAS NA LITERATURA E N
PPTX
Treinamento de Espaço Confinado_Trabalhadores e Vigias NR 33.pptx
Reino Monera - Biologiaensinomediofun.pdf
1. A Cultura da Ágora - HistóriaCArtes.ppsx
Adaptação Curricular para Alunos com Deficiências - EMEB. ODIR (1).pptx
Historia da Gastronomia Mundial por Daianna Marques dos Santos
São João Eudes, 1601 – 1680, padre e fondador, Francés.pptx
Atividades sobre o livro Letras de Carvão
125511 - Aula 1 - América portuguesa antes da conquista patrimônio e preserva...
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
2. A Cultura do Salão - o fim das trevas.pptx
01-slide-especialidade-mensageira-de-deus.pdf
DESCCARTE DE MATERIAIS BIOLOGICO ESTUDO DA ODONTOLOGIA
APOSTILA PARA FORMAÇÃO E RECICLAGEM DE VIGILANTES.pdf
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
NR 5 Treinamento completo gestão CIPA.pptx
REVISA-GOIAS-6o-ANO-LP-3o-BIMESTRE-PPT.pptx
YY2015MM3DD6HH12MM42SS3-Organiza__o do Estado ILP.ppt
E-BOOK-Inovacao-em-Ciencia-e-Tecnologia-de-Alimentos.pdf
AS VANGUARDAS EUROPEIAS NA LITERATURA E N
Treinamento de Espaço Confinado_Trabalhadores e Vigias NR 33.pptx
Anúncio

Aula 3 - Processos de Software.pptx aula

  • 2. Aula 3 – Processos de Software Gestão de Times – Métodos Ágeis Prof. David Wilber Silva Daltro
  • 3. Processos de Software Um processo de software é um conjunto de atividades relacionadas que levam à produção de um sistema de software. Existem muitos tipos diferentes de sistemas de software, porém, não há um método universal de engenharia de software que seja aplicável a todos eles. Consequentemente, não existem processos de software universalmente aplicáveis. O processo utilizado nas diferentes empresas depende do tipo de software que está sendo desenvolvido, dos requisitos do cliente e das habilidades das pessoas que o desenvolvem.
  • 4. Processos de Software No entanto, embora existam muitos processos de software diferentes, todos eles devem incluir. de alguma forma. as quatro atividades fundamentais da engenharia de software: • Especificação - A funcionalidade do software e as restrições sobre sua operação devem ser definidas • Desenvolvimento - O software deve ser produzido para atender à especificação. • Validação - O software deve ser validado para garantir que atenda ao que o cliente deseja. • Evolução - O software deve evoluir para atender às mudanças nas necessidades dos clientes.
  • 5. Processos de Software Quando descrevemos e discutimos os processos, normalmente falamos sobre as atividades nesses processos - especificar um modelo de dados e projetar uma interface com o usuário, por exemplo - e sobre a sequência correta dessas atividades. Podemos identificar o que as pessoas fazem para desenvolver um software, mas, quando se trata de processos de software, é importante descrever também quem está envolvido, o que está sendo produzido e quais condições influenciam a sequência dessas atividades.
  • 6. Processos de Software Os processos de software são complexos e, como processos intelectuais e criativos, dependem da tomada de decisão e do julgamento das pessoas. Uma vez que não existe um processo universal que valha para todos os tipos de software, a maioria das empresas produtoras de software concebeu seus próprios processos de desenvolvimento. Estes evoluíram e passaram a aproveitar a capacidade dos desenvolvedores de software em uma organização e as características dos sistemas que estão sendo desenvolvidos. No caso dos sistemas críticos em segurança, é necessário um processo de desenvolvimento muito estruturado e que registros detalhados sejam mantidos. Nos sistemas de negócio, com requisitos que mudam rapidamente, talvez seja melhor adotar um processo mais flexível e ágil.
  • 7. Processos de Software Embora não haja um processo de software universal, há espaço para a melhoria dos processos em muitas organizações. Os processos podem incluir técnicas ultrapassadas ou não tirar proveito da prática mais recomendada na engenharia de software industrial. Na realidade, durante seus processos de desenvolvimento, muitas organizações ainda não se valem dos métodos de engenharia de software.
  • 8. Modelos de Processo de Software Um modelo de processo de software - às vezes chamado de ciclo de vida do desenvolvimento de software (ou modelo SDLC, do inglês Software Development Life Cycle) - é uma representação simplificada de um processo de software. Cada modelo representa um processo a partir de uma perspectiva particular e, desse modo, fornece apenas informações parciais sobre esse processo.
  • 9. Modelos de Processo de Software Por exemplo, um modelo de atividades do processo mostra as atividades e sua sequência, mas não os papéis das pessoas envolvidas nelas. Veremos uma série de modelos de processo bem genéricos (às vezes chamados de paradigmas de processo) partindo de urna perspectiva arquitetural, ou seja, vemos a estrutura do processo, mas não os detalhes de suas atividades.
  • 10. Modelos de Processo de Software Os principais modelos genéricos são: • Modelo em cascata - Representa as atividades fundamentais do processo. como especificação, desenvolvimento, validação e evolução, na forma de fases de processo distintas, como especificação de requisitos, projeto de software, implementação e testes • Desenvolvimento incremental - Intercala as atividades de especificação, desenvolvimento e validação. O sistema é desenvolvido como uma série de versões (incrementos), com cada uma delas acrescentando funcionalidade à versão anterior. • Integração e configuração - Baseia-se na disponibilidade de componentes ou sistemas reusáveis. O processo de desenvolvimento de sistemas se concentra na configuração desses componentes. para que sejam utilizados em um novo contexto, e na integração deles em um sistema.
  • 11. Modelos de Processo de Software Como dito anteriormente, não existe modelo de processo universal aplicável a todos os tipos de desenvolvimento de software. O processo correto depende do cliente e dos requisitos que regulam o software, do ambiente em que esse software será utilizado e do tipo de software que está sendo desenvolvido. Os sistemas críticos em segurança, por exemplo, são normalmente desenvolvidos a partir de um processo em cascata, já que é necessária uma grande quantidade de análise e de documentação antes de começar sua implementação. Por sua vez, os produtos de software são, atualmente, desenvolvidos a partir de um modelo de processo incremental. Os sistemas de negócio são desenvolvidos, cada vez mais, por meio da configuração dos sistemas preexistentes e da integração entre eles, a fim de criar um novo sistema com a funcionalidade exigida.
  • 12. Modelos de Processo de Software Na prática, a maior parte dos processos de software se baseia em um modelo genérico, mas frequentemente incorpora características de outros modelos. Isso vale particularmente para a engenharia dos grandes sistemas. Neles, faz sentido combinar algumas das melhores características de todos os processos genéricos.
  • 13. Modelos de Processo de Software É preciso ter informações sobre os requisitos de sistema essenciais para projetar uma arquitetura de software que apoie esses requisitos, e não dá para desenvolver isso de modo incremental. Os subsistemas dentro de um sistema maior podem ser desenvolvidos por meio de abordagens diferentes partes do sistema que sejam bem compreendidas podem ser especificadas e desenvolvidas usando um processo em cascata ou podem ser adquiridas como sistemas de prateleira para configuração. Outras partes do sistema, difíceis de especificar antecipadamente, devem ser sempre desenvolvidas a partir de uma abordagem incremental. Em ambos os casos, os componentes de software provavelmente serão reusados.
  • 14. Modelos de Processo de Software Várias tentativas têm sido feitas para desenvolver modelos de processo "universais" baseados em todos esses modelos genéricos. Um dos mais conhecidos é o Rational Unified Process - RUP, que foi desenvolvido pela Rational, uma empresa de engenharia de software norte-americana. O RUP é um modelo flexível, que pode ser instanciado de diferentes maneiras para criar processos que se assemelhem a qualquer um dos modelos de processo genéricos discutidos aqui. O RUP foi adotado por algumas grandes empresas de software (principalmente pela IBM - International Business Machines Corporation), nas não conquistou uma ampla aceitação.
  • 15. O Modelo em Cascata O primeiro modelo de processo de desenvolvimento de software a ser publicado é derivado dos modelos utilizados na engenharia de grandes sistemas militares. Ele apresenta o processo de desenvolvimento de software como uma série de estágios. Devido à cascata de uma fase para outra, esse modelo é conhecido como modelo em cascata ou ciclo de vida do software. O modelo em cascata é um exemplo de processo dirigido por plano. A principio, pelo menos, é necessário planejar e criar um cronograma de todas as atividades de processo antes de começar o desenvolvimento do software.
  • 16. O Modelo em Cascata A figura a seguir exemplifica o modelo cascata:
  • 17. O Modelo em Cascata Os estágios do modelo em cascata refletem diretamente as atividades fundamentais do desenvolvimento de software: 1. Análise e definição dos requisitos - Os serviços. as restrições e as metas do sistema são estabelecidos por meio de consulta aos usuários. Depois, eles são definidos em detalhes e servem como uma especificação do sistema. 2. Projeto do sistema e do software - O processo de projeto do sistema reparte os requisitos entre requisitos de sistemas de hardware e de software, e estabelece uma arquitetura global do sistema. O projeto de software envolve a identificação e a descrição das abstrações fundamentais do sistema de software e seus relacionamentos.
  • 18. O Modelo em Cascata 3. Implementação e teste de unidade - Durante essa etapa, o projeto do software é realizado como um conjunto de programas ou unidades de programa. O teste de unidade envolve a verificação de cada unidade. conferindo se satisfazem a sua especificação. 4. Integração e teste de sistema - As unidades de programa ou os programas são integrados e testados como um sistema completo a fim de garantir que os requisitos de software tenham sido cumpridos. Após os testes, o sistema de software é entregue ao cliente. 5. Operação e manutenção - Normalmente, essa é a fase mais longa do ciclo de vida. O sistema é instalado e colocado em uso. A manutenção envolve corrigir os erros que não foram descobertos nas primeiras fases do ciclo de vida, melhorar a implementação das unidades do sistema e aperfeiçoar os serviços do sistema à medida que novos requisitos são descobertos.
  • 19. O Modelo em Cascata A principio, o resultado de cada fase no modelo em cascata consiste em um ou mais documentos que são aprovados. A fase seguinte não deve começar até que a fase anterior tenha terminado. No desenvolvimento de hardware, que envolve altos custos de produção, isso faz sentido. No entanto, no desenvolvimento de software, esses estágios se sobrepõem e alimentam uns aos outros com informações. Durante o projeto (design), são identificados problemas com os requisitos; durante a codificação, são encontrados problemas com o projeto, e assim por diante. O processo de software, na prática, nunca é um modelo linear simples, pois envolve feedback entre as fases.
  • 20. O Modelo em Cascata A necessidade de comprometimento inicial e retrabalho quando as mudanças são feitas significa que o modelo em cascata é adequado somente para alguns tipos de sistema. tais como: Sistemas embarcados - nos quais o software deve interagir com sistemas de hardware. Em virtude da inflexibilidade do hardware, normalmente não é possível postergar as decisões sobre a funcionalidade do software até que ele seja implementado. Sistemas críticos - nos quais há necessidade de ampla análise da segurança (safety) e segurança da informação (security) da especificação e do projeto do software. Nesses sistemas, os documentos de especificação e de projeto devem estar completos para que a análise seja possivel. Geralmente, é muito caro corrigir, durante a fase de implementação, os problemas relacionados à segurança na especificação e no projeto.
  • 21. O Modelo em Cascata Grandes sistemas de software - que fazem parte de sistemas de engenharia mais amplos, desenvolvidos por várias empresas parceiras. O hardware nos sistemas pode ser desenvolvido a partir de um modelo similar, e as empresas preferem usar um modelo comum para o hardware e o software. Além disso, quando várias empresas estão envolvidas, podem ser necessárias especificações completas para permitir o desenvolvimento independente dos diferentes subsistemas.
  • 22. O Modelo em Cascata Podemos concluir que o modelo em cascata não é recomendado para situações em que a comunicação informal do time é possível e nas quais os requisitos de software mudam rapidamente Para esses sistemas, o desenvolvimento iterativo e os métodos ágeis são melhores.
  • 23. Desenvolvimento Incremental O desenvolvimento incremental se baseia na ideia de desenvolver uma implementação inicial, obter feedback dos usuários ou terceiros e fazer o software evoluir através de várias versões, até alcançar o sistema necessário. As atividades de especificação, desenvolvimento e validação são intercaladas, em vez de separadas, com feedback rápido ao longo de todas elas.
  • 24. Desenvolvimento Incremental A figura abaixo mostra como funciona o desenvolvimento incremental:
  • 25. Desenvolvimento Incremental O desenvolvimento incremental, em alguma de suas formas, é atualmente a abordagem mais comum para o desenvolvimento de aplicações e produtos de software. Essa abordagem pode ser dirigida por plano ou ágil; na maioria das vezes, uma mistura de ambas. Em uma abordagem dirigida por plano, os incrementos do sistema são identificados antecipadamente; se for adotada uma abordagem ágil, os incrementos iniciais são identificados, mas o desenvolvimento dos incrementos finais depende do progresso e das prioridades do cliente.
  • 26. Desenvolvimento Incremental O desenvolvimento incremental de software, que é parte fundamental dos métodos ágeis, é melhor do que urna abordagem em cascata para os sistemas cujos requisitos estão propensos a mudar durante o processo de desenvolvimento. É o caso da maioria dos sistemas de negócio e dos produtos de software. O desenvolvimento incremental reflete a maneira como solucionamos os problemas: raramente elaboramos uma solução completa para os problemas com antecedência: em vez disso, caminhamos para uma solução em uma série de passos, retrocedendo quando percebemos que cometemos um erro. Ao desenvolver um software de modo incremental, é mais barato e fácil fazer alterações nele durante o processo de desenvolvimento.
  • 27. Desenvolvimento Incremental Cada incremento ou versão do sistema incorpora parte da funcionalidade necessária para o cliente. Geralmente, os incrementas iniciais incluem a funcionalidade mais importante ou a mais urgente. Isso significa que o cliente ou usuário pode avaliar o sistema em um estágio relativamente precoce no desenvolvimento para ver se ele entrega o que é necessário Se não entrega, então o incremento atual precisa ser alterado e, possivelmente, uma nova funcionalidade deve ser definida para os incrementas posteriores.
  • 28. Desenvolvimento Incremental O desenvolvimento incremental tem três grandes vantagens em relação ao modelo em cascata: 1. O custo de implementação das mudanças nos requisitos é reduzido. A quantidade de análise e documentação que precisa ser refeita é significativamente menor do que a necessária ao modelo em cascata. 2. É mais fácil obter feedback do cliente sobre o trabalho de desenvolvimento. Os clientes podem comentar as demonstrações de software e ver o quanto foi implementado. Para eles. é mais difícil julgar o progresso a partir dos documentos do projeto (design) de software. 3. A entrega e a implantação antecipadas de um software útil para o cliente são passiveis, mesmo se toda a funcionalidade não tiver sido incluída. Os clientes são capazes de usar o software e de obter valor a partir dele mais cedo do que com um processo em cascata.
  • 29. Desenvolvimento Incremental Do ponto de vista da gestão, a abordagem incremental tem dois problemas: 1. O processo não é visível. Os gerentes precisam de resultados regulares para medir o progresso_ Se os sistemas forem desenvolvidos rapidamente, não é econômico produzir documentos que reflitam cada versão do sistema. 2. A estrutura do sistema tende a se degradar à medida que novos incrementos são adicionados. Mudanças regulares deixam o código bagunçado, uma vez que novas funcionalidades são adicionadas de qualquer maneira possível. Fica cada vez mais difícil e caro adicionar novas características a um sistema. Para reduzir a degradação estrutural e a bagunça generalizada no código. os métodos ágeis sugerem que se refatore (melhore e reestruture) o software regularmente.
  • 30. Desenvolvimento Incremental Cada incremento ou versão do sistema incorpora parte da funcionalidade necessária para o cliente. Geralmente, os incrementas iniciais incluem a funcionalidade mais importante ou a mais urgente. Isso significa que o cliente ou usuário pode avaliar o sistema em um estágio relativamente precoce no desenvolvimento para ver se ele entrega o que é necessário Se não entrega, então o incremento atual precisa ser alterado e, possivelmente, uma nova funcionalidade deve ser definida para os incrementas posteriores.
  • 31. Desenvolvimento Incremental Os problemas do desenvolvimento incremental se tomam particularmente críticos nos sistemas grandes. complexos e de vida longa, nos quais diferentes times desenvolvem partes distintas do sistema. Os sistemas grandes precisam de um framework ou de uma arquitetura estáveis, e as responsabilidades dos diferentes times trabalhando no sistema precisam ser claramente definidas em relação a essa arquitetura. Isso deve ser planejado antecipadamente em vez de desenvolvido de modo incremental.
  • 32. Integração e Configuração Na maioria dos projetos há algum reuso de software. Com frequência. isso acontece informalmente quando as pessoas que trabalham no projeto conhecem ou procuram algum código similar ao necessário. Elas procuram por esse código, modificam-no conforme a necessidade e integram-no ao novo código que desenvolveram.
  • 33. Integração e Configuração Esse reuso informal ocorre independentemente do processo de desenvolvimento utilizado. No entanto, desde os anos 2000. processos de desenvolvimento de software que se concentram no reuso de código existente passaram a ser amplamente utilizados. As abordagens orientadas ao reuso contam com bases de componentes de software reusáveis e um framework de integração para a composição desses componentes.
  • 34. Integração e Configuração Três tipos de componentes de software são reusados frequentemente: 1. Sistemas de aplicação stand-alone configurados para utilização em um ambiente particular. Esses sistemas são de uso geral e possuem muitas características, mas precisam ser adaptados para uso em uma aplicação específica. 2. Coleções de objetos desenvolvidos como um componente ou como um pacote a ser integrado a um framework de componentes. 3. Web services desenvolvidos de acordo com os padrões de serviço e que estão disponíveis para uso remoto na internet.
  • 35. Integração e Configuração A figura abaixo mostra um modelo de processo genérico articulado em torno da integração e da configuração para o desenvolvimento de software baseado no reuso.
  • 36. Integração e Configuração Os estágios nesse processo são: 1. Especificação dos requisitos - Os requisitos iniciais do sistema são propostos Eles não precisam ser elaborados em detalhes. mas devem incluir descrições breves dos requisitos essenciais e das características de sistema desejáveis. 2. Descoberta e avaliação do software - Com base em uma descrição dos requisitos de software, é feita uma busca pelos componentes e sistemas que fornecem a funcionalidade necessária. Os candidatos são avaliados para ver se satisfazem os requisitos essenciais e se são genericamente adequados ao uso no sistema.
  • 37. Integração e Configuração 3. Refinamento dos requisitos - Nesse estágio, os requisitos são definidos com base nas informações dos componentes reusáveis e das aplicações que foram descobertas. Os requisitos são modificados para refletir os componentes disponíveis, e a especificação do sistema é redefinida. Onde as modificações forem impossíveis, a atividade da análise de componentes pode ser reintroduzida para procurar soluções alternativas. 4. Configuração da aplicação - Se estiver disponível urna aplicação de prateleira que satisfaça os requisitos, ela pode ser configurada para utilização a fim de criar o novo sistema. 5. Adaptação e integração dos componentes - Se não houver uma aplicação de prateleira. componentes reusáveis podem ser modificados ou novos componentes podem ser desenvolvidos. visando a integração posterior ao sistema.
  • 38. Integração e Configuração A engenharia de software baseada no reuso, articulada em torno da configuração e da integração, tem a vantagem óbvia de reduzir a quantidade de software a ser desenvolvido, diminuindo custos e riscos. Normalmente, isso também leva a uma entrega mais rápida do software. Entretanto, concessões quanto aos requisitos são inevitáveis, o que pode resultar em um sistema que não satisfaz as necessidades reais dos usuários. Além disso, parte do controle sobre a evolução do sistema se perde, já que novas versões dos componentes reusáveis não estão sob o controle da organização que os utiliza.