Buscar

Prévia do material em texto

Processo de Software
Francisco Glaubos
Universidade Federal do Maranhão
glaubosclimaco@gmail.com
1 / 60
Elementos da ES
2 / 60
Elementos da ES: Processo
Segundo Sommerville:
”[O processo é] um conjunto de atividades e resultados
associados que produzem um produto de software”.
Um conjunto estruturado de atividades exigidas para
desenvolver um sistema de software
atividades são agrupadas em fases
cada fase possui suas respectivas responsabilidades
3 / 60
Fases de um processo de Software
Para Schwartz as principais fases de um processo de
software são :
Especificação de Requisitos: tradução da
necessidade do cliente, para uma descrição das
funcionalidades a serem desenvolvidas.
Projeto de Sistema: tradução destes requisitos
em uma descrição de todos os componentes
necessários para codificar o sistema. Por ex.:
Diagramas de classe, casos de uso, etc.
4 / 60
Fases de um processo de Software
Programação (Codificação): produção do código
que controla o sistema e realiza a computação e
lógica envolvida.
Verificação e Integração: verificação da
satisfação dos requisitos iniciais pelo produto
produzido.
5 / 60
Elementos da ES: visão geral
• Processo
– Define os passos gerais para o desenvolvimento e
manutenção do software
– Serve como uma estrutura de encadeamento de
métodos e ferramentas
• Métodos
– São os “how to’s” de como fazer um passo
espećıfico do processo
• Ferramentas
– Automatizam o processo e os métodos
6 / 60
Elementos da ES
• Cuidado com o “desenvolvimento
guiado por ferramentas”
- É importante usar a ferramenta
certa para o problema
- O problema não deve ser
adaptado para a ferramenta dispońıvel
7 / 60
Elementos da ES
- Problemas:
• Desenvolver aplicativo para android
– JAVA
• Desenvolver aplicativo para iOS
– Objective C ou Swift
• Desenvolvimento de site
– frontend:
∗ CSS (cores, imagens, fontes e detalhes)
e HTML (“esqueleto” da página)
– backend:
∗ PHP e o MySQL (Banco de Dados)
8 / 60
Elementos da ES
• Sistemas operacionais
– Assembly, C/C++
• Sistemas embarcados
– Arduino: plataforma de prototipagem
eletrônica de hardware
∗ Possui um linguagem padrão:
essencialmente c++.
9 / 60
Elementos da ES
10 / 60
Elementos da ES
11 / 60
O Supermercado de ES
ES fornece um conjunto de métodos
para produzir software de qualidade
Pense como em um supermercado...
– Em função do problema, se escolhe o
processo, os métodos e as ferramentas
Cuidado
– Menos do que o necessário pode levar
a desordem
– Mais do que o necessário pode
emperrar o projeto
12 / 60
Exerćıcio 2.1
Problema
Definir o procedimento de implantação para os dois
cenários a seguir. Identifique o que é processo,
ferramento e método.
Caso 1: urna eletrônica
– O software da urna eletrônica acabou de ser
implementado, e precisa ser instalado em 480 mil
urnas
Caso 2: padaria
– O software de controle de venda de pão da
padaria do seu Zé acabou de ser implementado, e
precisa ser instalado
13 / 60
Processos impĺıcitos x expĺıcitos
• Lembrem-se: Processos sempre existem, seja de forma
impĺıcita ou expĺıcita!
– Processos impĺıcitos são dif́ıceis de serem
seguidos, em especial por novatos
– Processos expĺıcitos estabelecem as regras de
forma clara
14 / 60
Processo de qualidade
Última palavra para medir a qualidade de um
processo: Satisfação do Cliente
Outros indicadores importantes
– Qualidade dos produtos gerados
– Custo real do projeto
– Duração real do projeto
15 / 60
Modelos de ciclo de vida
Existem alguns processos pré-fabricados
– Esses processos são conhecidos como modelos de
ciclo de vida
– Esses processos apresentam caracteŕısticas
predefinidas
Devem ser adaptados para o contexto real de uso
– Caracteŕısticas do projeto
– Caracteŕısticas da equipe
– Caracteŕısticas do cliente
16 / 60
Modelo Cascata
Modelo idealizado por Royce em 1970
principal caracteŕıstica: a sequência de atividades
cada fase transcorre completamente e seus produtos são
vistos como entrada para uma nova fase
17 / 60
Modelo Cascata
Útil quando se tem requisitos estáveis e bem
definidos
- projeto de um foguete
Não lida bem com incertezas
Fornece pouca visibilidade do estado do projeto
– Muito tempo para a primeira entrega
– Dificuldade na obtenção de feedback do cliente
É dif́ıcil capturar os requisitos de uma só vez
18 / 60
Modelo Espiral
- projeto é atacado como uma série de pequenos ciclos,
cada um finalizando um versão de um software
executável
- vários conjuntos de quatro fases são executados até se
obter o sistema final
19 / 60
Modelo Espiral
- é uma abordagem mais reaĺıstica para desenvolvimento
de software em grande escala
- capacita a empresa e o cliente, a entender e reagir aos
riscos em cada etapa evolutiva
20 / 60
Modelo Espiral
Foco principal no gerenciamento de riscos. A cada
ciclo
– O conhecimento aumenta
– O planejamento é refinado
– O produto gerado no ciclo anterior é evolúıdo
(não é jogado fora)
Cada ciclo evolui o sistema, mas não
necessariamente entrega um software operacional
– Modelo em papel
– Protótipo
– Versões do produto
– Etc.
21 / 60
Modelo de desenvolvimento incremental e
iterativo
- É uma extensão do modelo espiral. Porém, mais formal
e rigoroso
- Iterações: são passos do desenvolvimento do software
- Incrementos: são versões do software
22 / 60
Desenvolvimento Incremental
- “Mini-cascatas”
23 / 60
Desenvolvimento Incremental
Faz entregas incrementais do software
– Cada incremento é constrúıdo via um mini-cascata
– Cada incremento é um software funcional
Versões anteriores ajudam a refinar o plano
– Feedback constante do cliente
Diminuição da ansiedade do cliente
– O cliente rapidamente recebe uma versão
funcional do software
24 / 60
Desenvolvimento Iterativo
O desenvolvimento é organizado em “mini-projetos”
– Cada “mini-projeto” é uma iteração
– Cada iteração tem duração curta e fixa (de 2 a 6
semanas)
– Cada iteração tem atividades de análise,
projeto,programação e testes
– O produto de uma iteração é um software parcial
25 / 60
Desenvolvimento Iterativo
A iteração deve ser fixa
– Tarefas podem ser removidas ou inclúıdas
– A iteração nunca deve passar da duração previamente
estipulada
O resultado de cada iteração é um software...
– Incompleto
– Em desenvolvimento (não pode ser colocado em produção)
– Mas não é um protótipo!!!
Esse software pode ser verificado e validado parcialmente
– Desenvolvedores
– Usuários
Podem ser necessárias diversas iterações (e.g. 10 a 15) para
ter uma versão do sistema pronta para entrar em produção
26 / 60
Desenvolvimento Iterativo
Iterações curtas privilegiam a propagação de
conhecimento
– Aumento do conhecimento sobre o software
– Diminuição das incertezas, que levam às mudanças
27 / 60
28 / 60
Modelo de Prototipação
Geralmente utilizado como aux́ılio a outro modelo
de processo
Útil para
– Validar um requisito obscuro com o cliente
– Verificar o desempenho de um algoritmo espećıfico
Merge Sort ou Quick Sort
Busca binária ou sequencial
Deveria ser jogado fora no final
– Protótipos não são produtos
– Usualmente os clientes desejam colocar protótipos
em produção
29 / 60
Modelos tradicionais x modelos evolutivos
30 / 60
Modelos tradicionais x modelos evolutivos
31 / 60
Modelos tradicionais x modelos evolutivos
32 / 60
Modelo de Desenvolvimento Ágil: Visão
Geral
São dadas respostas rápidas e flex́ıveis a mudanças:
– O projeto é replanejado continuamente
– São feitas entregas incrementais e constantes do
software, refletindo as mudanças solicitadas
33 / 60
Modelo de Desenvolvimento Ágil: Visão
Geral
Alguns prinćıpios:
Satisfazer o cliente
Acolher modificações nos requisitos
Entregar o software com frequência
Trabalhar junto ao cliente
Promover conversas face a face
Medir o progresso com software funcionando
Manter um ritmo constante de trabalhoCuidar da qualidade
Buscar por simplicidade
34 / 60
Processo Unificado
35 / 60
Processo Unificado
(benef́ıcios esperados)
Identificação de riscos precoce
Visibilidade do progresso
Envolvimento do usuário
Controle sobre a complexidade
Menos defeitos
Aprendizado em iteração passadas
36 / 60
Processo Unificado (exemplo)
Analisar os requisitos no ińıcio do projeto
- Casos de uso
- Lista de requisitos não funcionais
Priorizar os casos de uso
- Significativos para a arquitetura como um todo
- Alto risco
Em cada iteração
- Selecionar casos de uso por prioridade para serem analisados
- Atribuir tarefas para a iteração a partir da análise detalhada
desses casos de uso
- Fazer projeto e programação de parte do software
- Testar a parte do software recém projetada e programada e
criar a baseline da iteração
- Apresentar a baseline da iteração ao usuário
*baseline ou branches, itens de configuração formalmente aprovados que servem de base para as etapas seguintes
37 / 60
Processo Unificado (exemplo)
- Após a iteração 10 tem-se um incremento.
38 / 60
Processo Unificado (fases)
O desenvolvimento pode ser decomposto em fase,
com o intuito de retratar a ênfase principal das
iterações
– Concepção
– Elaboração
– Construção
– Transição
39 / 60
Processo Unificado (exemplo)
40 / 60
Fase de concepção
Consiste de:
Identificação de riscos
Listagem inicial dos requisitos
Esboço dos casos de uso
Identificação de arquiteturas candidatas
Estimativas iniciais de cronograma e custo
Principais caracteŕısticas
Menor fase do projeto
Escopo ainda vago
Estimativas ainda vagas
Esforço e duração aproximados
5% do esforço do projeto
10% da duração do projeto
41 / 60
Fase elaboração
Consiste de:
Redução dos riscos
Detalhamento da maioria dos requisitos e casos de uso
Estabelecimento e validação da arquitetura do software
Detalhamento das estimativas de cronograma e custo
Principais Caracteŕısticas:
Grande parte das atividades de análise e projeto já
conclúıda
Diminuição significativa das incertezas
A baseline da arquitetura é estabelecida
Esforço e duração aproximados
20% do esforço do projeto
30% da duração do projeto
42 / 60
Fase de construção
Consiste de:
Implementação dos demais componentes da arquitetura
Preparação para a implantação
Principais caracteŕısticas:
Maior fase do projeto
baseline de testes do produto é estabelecida
Esforço e duração aproximados
65% do esforço do projeto
50% da duração do projeto
43 / 60
Fase de transição
Consistes de:
Execução de testes finais
Implantação do produto
Treinamento dos usuários
Principais Caracteŕısticas
Baseline de liberação do produto é estabelecida
Obs.: Se for a última iteração, baseline − > release
Esforço e duração aproximados
10% do esforço do projeto
10% da duração do projeto
44 / 60
Processo Unificado (caracteŕısticas)
Os requisitos não são completamente definidos
antes do projeto
O projeto não é completamente definido antes da
programação
A modelagem não é feita de forma completa e
precisa
A programação não é uma tradução mecânica do
modelo para código
As iterações não duram meses, mas sim semanas
O planejamento não é especulativo, mas sim
refinado durante o projeto
45 / 60
Exerćıcio 2:
Imagine que você faz parte de uma equipe para
realização do desenvolvimento de um software para
controle de estoque. Analise como o processo unificado
será utilizado no trabalho.
Qual será a duração de uma iteração?
O que vocês pretendem entregar em cada iteração?
Qual será o papel de cada membro do grupo?
Quais são os riscos envolvidos?
Quais decisões arquiteturais precisam ser tomadas (linguagem,
SO, etc.)?
46 / 60
Por que fazer bem feito?
1 Por que é mais barato!
– Historicamente, 60% a 80% do esforço total
ocorre na manutenção
2 Por que é mais rápido!
– Não ter tempo para fazer bem feito agora significa
ter tempo para refazer depois
3 Por que é mais fácil!
– Desenvolvimento ocorre uma única vez
– Manutenção é para sempre
47 / 60
O que é manutenção?
O processo de modificar um sistema de software ou
componente, depois da entrega, para corrigir falhas,
melhorar desempenho ou outros atributos, ou adaptar a
mudanças no ambiente.
IEEE Std 620.12 1990
48 / 60
Quando inicia a manutenção
49 / 60
Quais são os tipo de manutenção?
50 / 60
Quais são os tipo de manutenção?
Manutenção emergencial
– Não programada
– Mantém temporariamente o sistema funcionando
– Necessita uma manutenção corretiva posterior
Manutenção corretiva
– Reativa
– Corrige problemas reportados
– Faz o software voltar a atender aos requisitos
51 / 60
Quais são os tipo de manutenção?
Manutenção preventiva
– Pró-ativa
– Corrige problemas latentes, que podem acontecer
Manutenção adaptativa
– Mantém o software usável após mudanças no
ambiente
Manutenção perfectiva
– Provê melhorias para o usuário
– Melhora atributos de qualidade do software
52 / 60
Mitos gerenciais
Basta um bom livro de ES para fazer bom
software
– Um bom livro certamente ajuda, mas ele precisa
refletir as técnicas mais modernas de ES e ser lido!
Se estivermos com o cronograma atrasado,
basta adicionar mais gente ao projeto
– Adicionar gente a um projeto atrasado faz o
projeto atrasar mais!
Se o projeto for terceirizado, todos os meus
problemas estão resolvidos
– É mais dif́ıcil gerenciar projetos terceirizados do
que projetos internos!
53 / 60
Mitos do cliente
Basta dar uma ideia geral do que é necessário
no ińıcio
– Requisitos amb́ıguos normalmente são uma receita
para desastre!
– Comunicação cont́ınua com o cliente é
fundamental!
Modificações podem ser facilmente
acomodadas, porque software é flex́ıvell
– O impacto de modificações no software varia em
função da modificação e do momento em que ela é
requisitada!
– Novamente, comunicação cont́ınua com o cliente
é fundamental!
54 / 60
Mitos do Desenvolvedor
Assim que o código for escrito o trabalho
termina
– 60% a 80% do esforço será gasto depois que o
código foi escrito!
– Vale a pena esforçar para chegar a um bom
código (boa documentação, bom projeto, etc.)!
Só é posśıvel verificar a qualidade de um
software quando o executável existir
– Toda a complexidade desnecessária deve ser
descartada
55 / 60
Mitos do Desenvolvedor
O único produto a ser entregue em um projeto
é o código
– Além do código, documentações tanto para a
manutenção quanto para o uso são fundamentais!
Engenharia de software gera documentação
desnecessária
- Engenharia de software foca em criar qualidade, e
não criar documentos!
– Algum grau de documentação é necessário para
evitar retrabalho!
– Questione sempre que encontrar um documento
desnecessário para o projeto!
56 / 60
7 prinćıpios de Hooker
Tem que existir uma razão para se fazer software
– Se não for posśıvel identificar essa razão, é melhor não fazer
– Fazer software, em última instância, consiste em “agregar
valor para o usuário”
– É importante enxergar os reais requisitos do software!
Keep it simple, sir! (KISS)
– “um projeto deve ser o mais simples posśıvel, mas não mais
simples que isso”
- Toda a complexidade desnecessária seja descartada.
- Se atenha a atender os requisitos.
57 / 60
Mantenha o estilo
– O projeto de um software deve seguir um único
estilo
– A combinação de diferentes estilos corretos pode
levar a um software incorreto
– Padrões e estilos devem ser estabelecidos no ińıcio
e seguidos por todos
O que é produzido por você é consumido por outros
– Sempre especifique, projete e codifique algo
pensando que outros vão ler
– Sempre exija qualidade nos produtos que você
consome e forneça qualidade nos produtos que você
produz
58 / 60
Esteja pronto para o futuro
– Sistemas de boa qualidade têm vida longa
– Projete desde o ińıcio pensando na manutenção
Planeje para reutilização– Pense no problema geral, e não só no problema
espećıfico
– Busque por soluções já existentes
Pense!
- Pense antes de fazer
- Avalie alternativas
- Reduza os riscos
59 / 60
Nós precisamos de ES
60 / 60

Mais conteúdos dessa disciplina