aula processos de software
TRANSCRIPT
Engenharia de Software II Processos de Software
Profª Luciana Bolan Frigo
Objetivos
Conhecer os modelos de processos de software, suas vantagens e desvantagens
Tamanho de Software
Retirado de prof. Anderson Cavalcanti UFRN
Tamanho de Software
Michael Cusumano, na revista Communications of the ACM de Julho de 2006
Um dado interessante é a progressão do tamanho da base de código do Windows : a versão 95 possuía 15 milhões de linhas de código, o Windows XP possui 35 milhões. Já o Windows Vista deve possuir acima de 50 milhões (4.000 programadores).
Processos de Software
Um processo é uma série de etapas envolvendo atividades, restrições e recursos, tendo em vista a produção de determinado produto.
Processo de Software: Especificação
Projeto e implementação
Validação
Evolução
Modelo
Um modelo de processo de software é uma representação abstrata de um processo de software.
Apresenta uma descrição do processo sob uma perspectiva em particular.
Desenvolvimento de Software
Definição: qual o problema?
Desenvolvimento: quais as possíveis soluções e como implementá-las?
Manutenção: mudanças para correção de erros e melhoria
Fase de Definição
O que será desenvolvido?
Quais as funções e desempenhos desejados?
Qual o comportamento esperado do sistema?
Quais os critérios de validação para definir se o sistema foi bem definido?
Quais informações serão processadas?
Que interfaces serão estabelecidas?
Que restrições existem?
Fase de Desenvolvimento
Como o software será desenvolvido? Como os dados serão estruturados? Como os detalhes procedimentais serão
implementados? Como serão as interfaces? Como serão feitos os testes? Como o projeto será traduzido para uma linguagem
de programação?
Modelagem Podem ser estruturais (organização do sistema) ou
comportamentais (dinâmica do sistema)
Fase de Manutenção
Focaliza as mudanças no software após a liberação para o uso operacional
Repete os passos das fases de definição e desenvolvimento, mas no contexto de um software existente
Processo de desenvolvimento Software ou Ciclo de Vida de Software
Apresenta um conjunto de atividades que vai desde a concepção até a “morte” do software.
A transição entre as fases é marcada por algum evento.
A escolha do modelo depende da complexidade do problema e da solução, da frequência esperada de mudanças, da utilidade das funcionalidades parciais.
Processo de Software ou Ciclo de Vida de Software
Todos os processos de software existentes conduzem a uma solução de software.
A cada novo projeto, um processo deve ser definido, baseado no tipo de aplicação, prazos, custos, recursos e riscos.
O que é processo?
Uma receita é um processo?
Ela pode ser executada de formas diferentes?
Uma torta para diabéticos ou para que tem intolerância a lactose são executadas da mesma forma?
Escolha do processo de desenvolvimento de software
Características da aplicação (domínio do problema, tamanho, complexidade, etc.)
•Tecnologia a ser adotada na sua construção (paradigma de desenvolvimento, linguagem de programação, etc.)
•Organização onde o produto será desenvolvido
•Características da equipe
•Estabilidade dos requisitos
•Outros
Atividade
Desenvolva um modelo de processo de software e aponte as principais vantagens e desvantagens do modelo.
Tempo: 15 min.
Modelos de Processo de Software
Um processo de software é formado por um conjunto de atividades, métodos, práticas e transformações que guiam as pessoas no desenvolvimento do software.
Um processo deve considerar as relações entre as atividades, os artefatos produzidos, as ferramentas e procedimentos necessários e as habilidades e treinamento das pessoas envolvidas.
Para cada atividade de um processo tem-se: Pré-atividades;
Artefatos de entrada (insumos) e de saída (produtos);
Recursos necessários (humanos, hardware, software, etc.)
Procedimentos (métodos, técnicas, modelos de documento etc.)
Categorias de Modelos de Processo
Os modelos de processo, de maneira geral, contemplam as fases Análise e Especificação de Requisitos, Projeto, Implementação, Testes e Entrega e Implantação.
O modelo de processo escolhido depende fortemente das características do projeto.
Categorias:
Sequencial
Incremental
Evolutivo
Modelo Sequencial
Organizam o processo em uma sequencia linear de fases.
O principal modelo desta categoria é o modelo em cascata, a partir do qual diversos outros modelos foram propostos, inclusive a maioria dos modelos incrementais e evolutivos.
Modelo Clássico ou Cascata Proposto na década de 70
Requisitos são estabelecidos para todos os elementos do sistema
As atividades estão organizadas em forma sequencial
O trabalho anterior deve estar finalizado, verificado e aprovado antes de se iniciar a próxima fase.
Reflete o que é mais usado em outros projetos de engenharia.
Modelo de Processo Cascata
v
Vantagens do Modelo Cascata
Documentação produzida em cada fase e sua aderência a outros modelos de processo de engenharia;
Pode parecer atraente por não exigir nenhuma sofisticação gerencial;
Torna o processo de desenvolvimento estruturado;
Indicado para problemas pequenos e bem definidos, onde os desenvolvedores conhecem bem o domínio do problema e os requisitos podem ser claramente estabelecidos.
Desvantagens do Modelo Cascata
Falta de flexibilidade em separar o projeto em etapas distintas
Dificuldades em responder as mudanças de requisitos solicitadas pelo cliente
Este modelo é apropriado nas situações onde os requisitos estão bem definidos
Alto risco, difícil de gerir
Projetos reais raramente seguem o fluxo sequêncial
Versão executável em etapa avançada de desenvolvimento
Modelo V
Similar ao cascata, mas com planejamento de testes nas fases de desenvolvimento
Engenharia de Sistemas
Análise
Projeto
Codificação
Teste de Sistemas
Teste de Validação
Teste de Integração
Teste de Unidade
Modelo V
A ligação entre os lados direito e esquerdo do modelo V implica que, caso sejam encontrados problemas em uma atividade de teste, a correspondente fase do lado esquerdo e suas fases subsequentes podem ser executadas novamente para corrigir ou atenuar esses problemas.
Os modelos sequenciais pressupõem que o sistema e entregue completo, após a realização de todas as atividades do desenvolvimento.
Modelo Incremental
Ha muitas situações em que os requisitos são razoavelmente bem definidos, mas o tamanho do sistema a ser desenvolvido impossibilita a adoção de um modelo sequencial, sobretudo pela necessidade de disponibilizar rapidamente uma versão para o usuário;
No desenvolvimento incremental, o sistema é dividido em subsistemas ou módulos, tomando por base a funcionalidade.
A cada ciclo ou iteração, uma versão operacional do sistema será produzida e entregue para uso ou avaliação detalhada do cliente.
Entrega Incremental
Modelo Cascata + Prototipagem
Cliente identifica os serviços (+ importantes e – importantes) definindo o número de incrementos de software e as funcionalidades de cada etapa
Difere da prototipação pois a cada incremento produz uma versão operacional do software
Entrega Incremental
Entrega Incremental
Vantagens: Os clientes não precisam esperar até a entrega do
sistema inteiro para se beneficiarem dele O risco de falha geral do projeto é menor Partes mais importantes são entregues primeiro e
tendem a serem mais testadas
Desvantagens: Os incrementos devem ser relativamente pequenos
(20 mil linhas de código) podendo ser difícil mapear os requisitos do cliente em tamanho adequado
Métodos Ágeis (XP: programação em pares e aprimoramento constante do código)
Evolutivos
Surgem para minimizar os pontos fracos do processo Cascata.
Permitem que se trabalhe com um subconjunto de requisitos do produto completo os quais são incrementados, gradualmente e entregues aos clientes.
Enquanto modelos incrementais tem por base a entrega de versões operacionais desde o primeiro ciclo, os modelos evolutivos não tem essa preocupação.
Na maioria das vezes, os primeiros ciclos produzem protótipos ou até mesmo apenas modelos. A medida que o desenvolvimento avança e os requisitos vão ficando mais claros e estáveis, protótipos vão dando lugar a versões operacionais, até que o sistema completo seja construído.
Quando o problema não é bem definido e ele não pode ser totalmente especificado no início do desenvolvimento, deve-se optar por um modelo evolutivo.
Prototipação
Possibilita que o desenvolvedor crie um modelo (protótipo) do software que deve ser construído
Apropriado quando: O cliente tem uma visão geral do software mas não
identificou os requisitos de entrada, processamento e saída com detalhes
Desenvolvedor não tem certeza da eficiência de um algoritmo, forma de interação homem- máquina
Protótipo serve para identificar os requisitos
Prototipação
Investigatório ou Exploratório
Objetivo é trabalhar com o cliente para explorar os requisitos e entregar um sistema final. Implementação inicial e refinamento de versões
Evolucionária
Desenvolve o protótipo e valida os requisitos e, à medida em que novos requisitos são fornecidos.
Prototipação
Prototipação
Desvantagens
O processo não é visível
Sistemas são mal estruturados
Cliente “força” a utilização do protótipo como produto final
Vantagens
Recomendado para sistemas:
De pequeno e médio porte (até 500 mil linhas)
Com ciclo de vida curto
Modelo evolutivo mais difundido.
Novo elemento: Análise de riscos
Processo é representado como uma espiral, tem-se em cada loop: Definição dos objetivos
Avaliação e redução de riscos
Desenvolvimento e validação
Planejamento
Não tem fases específicas para especificação e projeto
Reconhecimento explícito dos Riscos
Modelo Espiral
Modelo espiral
Modelo Espiral
O produto resultante do primeiro ciclo pode ser uma especificação do produto ou um estudo de viabilidade. As passadas subsequentes ao longo da espiral podem ser usadas para desenvolver protótipos, chegando progressivamente a versões operacionais do software, ate se obter o produto completo.
É a abordagem mais realista para o desenvolvimento de software
Capacita o desenvolvedor e o cliente a entender e reagir aos riscos em cada etapa evolutiva
De cada iteração ao redor da espiral derivam versões mais completas: concepção, desenvolvimento, melhoria, manutenção
Integram gerenciamento de projetos com engenharia
O cliente está sempre envolvido
Outros Modelos
Modelo de Métodos Formais
Descrição Matemática Precisa
Não ambígua
Permite verificar propriedades (ex. consistência, ambiguidade, completude)
É a base para
Documento contratual
Documentação do produto
Referência para etapas seguintes
Desenvolvimento Formal de Sistemas
Desvantagens
Necessita de treinamento para aplicar a técnica
Consome muito tempo (caro)
Dificuldade em especificar formalmente alguns aspectos do sistema como a interface do usuário
Vantagens
Usado em sistemas críticos em termos de segurança (equipamentos médicos, sistemas para aviões, foguetes)
Desenvolvimento baseado em Componentes
Baseado em componentes reusáveis ou em COTS (Commercial-off-the-shelf)
Etapas do Processo
Análise do Componente
Modificações dos requisitos
Projeto de sistema com reuso
Desenvolvimento e integração
Exercícios
1. Sugira e justifique o modelo mais apropriado para o desenvolvimento dos seguintes sistemas:
• Um sistema para controlar um antibloqueador de freios em um automóvel
• Um sistema de contabilidade de universidade que substitui um sistema existente
• Um sistema interativo que permite aos passageiros encontrar o horário dos trens por terminais nas estações
2. Explique porque um sistema de software usado em um ambiente real deve mudar sob pena de tornar-se progressivamente menos útil.
Referências
• SOMMERVILLE, Ian, Software Engineering, Addison-Wesley , 9th Edition, 2011
• PRESSMAN, Roger, Engenharia de Software, Makron Books, 2002