Processos de software 1
Processos de software Conjunto coerente de atividades para especificação, projeto, implementação e teste de sistemas de software. 2
Objetivos Introduzir modelos de processos de software Descrever uma série de diferentes modelos de processo e quando eles podem ser utilizados Descrever em termos gerais modelos de processo para a engenharia de requisitos, o desenvolvimento de software, os testes e evolução Introduzir a tecnologia CASE para apoio ao processo de software 3
O processo de software Um conjunto estruturado de atividades requeridas para desenvolver um sistema de software Especificação Projeto/Implementação Validação Evolução Um modelo de processo de software é uma representação abstrata de um processo. Ele representa a descrição de um processo a partir de um ponto de vista particular 4
Modelos genéricos de processo de software Modelo em cascata Fases separadas e distintas de especificação, desenvolvimento e validação Desenvolvimento evolucionário Especificação e desenvolvimento são intercalados Desenvolvimento formal de sistemas Um modelo matemático de sistema é formalmente transformado em uma implementação Desenvolvimento orientado a reuso O sistema é construído a partir de componentes existentes 5
Modelo em cascata 6
Fases do modelo em cascata Análise e definição de requisitos Projeto de sistemas e de software Implementação e teste de unidades Integração e teste de sistemas Operação e manutenção A desvantagem do modelo em cascata é a dificuldade de acomodar mudanças após o processo ter sido iniciado 7
Problemas do modelo em cascata Inflexível divisão do projeto em estágios distintos Isso torna difícil responder a mudanças nos requisitos do cliente Portanto, este modelo somente é apropriado quando os requisitos forem bem compreendidos 8
Desenvolvimento evolucionário Desenvolvimento exploratório Objetivo é trabalhar com o cliente e evoluir para um sistema final a partir de uma especificação inicial. Deve começar com os requisitos que são melhor compreendidos. Fazer protótipos descartáveis Objetivo é compreender os requisitos do sistema. Deve começar com os requerimentos que são menos compreendidos 9
Desenvolvimento evolucionário 10
Desenvolvimento evolucionário Problemas O processo não é visível Os sistemas frequentemente são mal-estruturados Podem ser exigidas ferramentas e técnicas especiais Aplicabilidade Para sistemas interativos de pequeno e médio porte Para partes de grandes sistemas (por exemplo a interface com o usuário) Para sistemas com tempo de vida razoavelmente curto 11
Desenvolvimento formal de sistemas Baseado na transformação de uma especificação matemática através de diferentes representações até um programa executável Transformações são matematicamente corretas de forma que é simples mostrar que um programa atende a sua especificação 12
Desenvolvimento formal de sistemas 13
Transformações formais 14
Desenvolvimento formal de sistemas Problemas Pessoas necessitam de habilidades especializadas e treinamento para aplicar a técnica Dificuldade para especificar formalmente alguns elementos de sistema como a interface com o usuário Aplicabilidade Sistemas críticos especialmente aqueles que tenham rigorosas exigência de segurança, confiabilidade e garantia 15
Desenvolvimento orientado a reuso Baseado no reuso sistemático onde sistemas são integrados a partir de componentes existentes ou sistemas COTS (Sistemas comerciais de prateleira) Estágios do processo Análise de componentes Modificação de requisitos Projeto de sistema com reuso Desenvolvimento e integração Esta abordagem está se tornando mais importante mas a experiência das organizações com a mesma ainda é limitada 16
Desenvolvimento orientado a reuso 17
Processos iterativos Os requerimentos sempre evoluem ao longo de um processo de software. Um processo de iteração, onde partes do processo são repetidas, é uma abordagem comum para sistemas de grande porte. Iteração pode ser aplicada para qualquer modelo de processo Modelos híbridos Desenvolvimento incremental Desenvolvimento em espiral 18
Desenvolvimento incremental Em vez do sistema ser todo entregue numa única vez, o desenvolvimento e a entrega são particionados em incrementos, cada qual fornecendo uma funcionalidade requerida Os requisitos do usuário são priorizados e os requisitos de maior prioridade são entregues primeiramente Uma vez que o desenvolvimento de um incremento teve início, os requisitos para o mesmo são congelados, embora possa ocorrer a análise de requisitos para outros incrementos 19
Desenvolvimento incremental 20
Vantagens do desenvolvimento incremental O software pode ser utilizado prematuramente já que os requisitos mais importantes são entregues primeiro Os primeiros incrementos atuam como um protótipo auxiliando a elucidar os requisitos para os incrementos posteriores Existe um risco menor de fracasso completo do sistema As funções de sistema de prioridade mais alta tendem a passar pela maior parte dos testes 21
Programação Extrema (Extreme programming) Nova abordagem para desenvolvimento baseado no desenvolvimento e entrega de incrementos de funcionalidade muito pequena Fundamentada na constante melhoria de código, envolvimento do cliente no processo de desenvolvimento e programação impessoal 22
Desenvolvimento em espiral Processo é representado por uma espiral em vez de uma seqüência de atividades com algum retorno de uma atividade para outra Cada loop na espiral representa uma fase no processo de software Não há fases fixas como especificação ou projeto loops na espiral são escolhidos de acordo com o que é requerido Riscos são explicitamente avaliados e gerenciados através do processo 23
Modelo em espiral do processo de software 24
Setores do modelo em espiral Definição de objetivos Objetivos específicos para essa fase são identificados Avaliação e redução de riscos Riscos são avaliados e são tomadas providências para reduzir esses riscos Desenvolvimento e validação Um modelo de desenvolvimento para o sistema é escolhido, o qual pode ser um dos modelos genéricos Planejamento O projeto é revisto e a próxima fase da espiral é planejada 25
Especificação de software O processo de estabelecer quais funcionalidades são requeridas e as restrições sobre a operação e o desenvolvimento do sistema Processo de engenharia de requisitos Estudo de viabilidade Levantamento e análise de requisitos Especificação de requisitos Validação de requisitos 26
O processo de engenharia de requisitos 27
Projeto e implementação de software O processo de conversão de uma especificação de sistema em um sistema executável Projeto de software Projetar uma estrutura de software que cumpre com a especificação Implementação Traduz essa estrutura em um programa executável As atividades de projeto e implementação são intimamente relacionadas e podem ser intercaladas 28
O processo de projeto de software 29
Métodos de projeto Abordagens sistemáticas para o desenvolvimento de um projeto de software O projeto é usualmente documentado como um conjunto de modelos gráficos Possíveis modelos Modelo de fluxo de dados Modelo Entidade-Relacionamento Modelo estrutural Modelos de objetos 30
Programação e depuração Traduzir um projeto em um programa e remover erros do programa Programação é uma atividade pessoal não existe um processo geral de programação Programadores realizam alguns testes para descobrir falhas no programa e removem essas falhas no processo de depuração 31
O processo de depuração 32
Validação de software Verificação e validação destinam-se a mostrar que o sistema cumpre com a sua especificação e atende aos requisitos do cliente Envolve checar e revisar processos e testar o software O teste de sistema consiste em executar o sistema com casos de testes que são derivados da especificação de dados a serem processados pelo sistema 33
O processo de teste 34
Estágios do processo de testes Teste de unidade Componentes individuais são testados Teste de módulo Coleções de componentes relacionados são testados Teste de subsistema Módulos integrados em subsistemas são testados. Deve ser concentrado no teste de interface Teste de sistema Teste do sistema como um todo. Teste de propriedades emergentes (desempenho, tolerância a falhas etc) Teste de aceitação Teste com os dados do cliente para verificar se o sistema é aceitável 35
Fases de teste 36
Evolução de software Software é inerentemente flexível e pode passar por mudanças Como os requisitos mudam à medida que as regras de negócios passam por mudanças, o software que apóia a organização precisa também evoluir e mudar Embora exista um limite entre o desenvolvimento e a evolução (manutenção) isto está se tornando cada vez mais irrelevante, já que poucos sistemas são completamente novos 37
Evolução de sistema 38
Apoio ao processo automatizado (CASE) Engenharia de software auxiliada por computador (CASE) é o software utilizado para apoiar o processo de desenvolvimento e evolução do software Automação de atividades Editores gráficos para o desenvolvimento de modelos de sistema Dicionário de dados para gerenciar entidades do projeto Geração de interfaces com o usuário Depuradores para auxiliar a busca por erros em programas Tradutores automatizados para gerar novas versões de um programa 39
Tecnologia CASE Tecnologia CASE tem proporcionado melhoras significativas para o processo de software, embora menos do que o previsto pelos primeiros defensores da tecnologia Engenharia de software requer pensamento criativo isto não é automatizável Engenharia de software é uma atividade de equipe e, para grandes projetos, muito tempo é gasto em iteração entre os membros da equipe. Tecnologia CASE não é muito compatível com essa situação 40
Classificação funcional das ferramentas Tipo de Ferramenta Ferramentas de planejamento Ferramentas de edição Ferramentas de gerenciamento de mudança Ferramentas de processamento de linguagem Ferramentas de análise de programa Ferramentas de testes Ferramentas de depuração Ferramentas de documentação Exemplos Ferramentas de estimativa, planilhas de cálculo Editores de texto, editores de diagrama Ferramentas de controle de requisitos Compiladores, interpretadores Analisadores estáticos, analisadores dinâmicos Geradores de dados de testes Sistemas interativos de depuração Programas de layout de página, editores de imagem 41
Integração CASE Ferramentas Apóiam atividades de processo individuais tais como a verificação de consistência de um projeto, edição de texto etc Workbenches Apóiam fases ou atividades de processo, como a especificação e o projeto. Normalmente consistem em um conjunto de ferramentas Ambientes Apóiam todo ou, uma parte substancial do processo de software. Normalmente incluem vários workbenchs integradas 42