Aula Processos de Software

Preview:

Citation preview

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

Recommended