D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Lab. Engenharia de Software O Processo Unificado (PU) de Desenvolvimento de Software Francilene Procópio Garcia, D.Sc. [email protected] D S Engenharia de Software C Processo Unificado para Desenvolvimento de Software Processo Unificado de Desenvolvimento de Software Um processo baseado em componentes, orientado a Casos de Uso, centrado na arquitetura, iterativo e incremental - explicitado por uma modelagem que faz uso de UML. Mas, o que é de fato um Processo de Desenovlvimento de Software? Um processo deve definir QUEM está fazendo O QUE QUANDO e COMO para que uma dada meta seja alcançada... D S Engenharia de Software C Processo de Desenvolvimento de Software Processo Unificado de Desenvolvimento de Software Um processo, em engenharia de software, tem como meta a construção de artefatos de software ou a melhoria de um produto existente, através da participação de vários tipos de usuários (cliente, usuário final, desenvolvedor, gerentes, etc), cujos limites dependem de alguns elementos: Tecnologia - LPs, SOs, Networks, etc. Ferramentas - tendo os processos disseminados amplamente, alavanca-se o desenvolvimento de tools. Pessoas - algumas habilidades são necessárias. Organização - modelos virtuais, outsourcing, contratos padrões, parcerias, etc. Processo Unificado Vs. UML D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software UML tem sido usada como a linguagem de modelagem padrão do PU ajudando na visualização, especificação, construção e documentação de diferentes artefatos de software. É um meio! Maior ajuda … nas fases de requisitos, análise e projeto. D S Engenharia de Software C Processo Unificado: Uma resposta à crise do software? Processo Unificado de Desenvolvimento de Software O que buscamos ao desenvolver sistemas de software nos dias de hoje? S/W mais flexível e adaptável às necessidades do mercado - mudanças ... Um processo mais rápido - time to market é um desafio! Não se admite mais o uso dos mesmos métodos já se vão mais de 25 anos! Um processo que integre as muitas facetas do desenvolvimento de s/w O Processo Unificado D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software É um processo para desenvolvimento de software que suporta um conjunto de atividades necessárias para se transformar “requisitos” num sistema de software Apresenta-se como um framework genérico para uma ampla gama de classes de s/w É baseado em componentes Faz uso intenso de UML Aspectos essenciais: orientação à Casos de Uso, foco na arquitetura, iterativo e incremental O que são Casos de Uso? D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software São usados para captura dos requisitos de um sistema de software, particularmente daqueles baseados em componentes. Algumas definições importantes: Usuário (humanos e outros sistemas que interagem com o sistema em desenvolvimento); Casos de Uso (um aspecto funcional que provê um valor ao usuário - as interações com o sistema). Os Casos de Uso substituem o modelo tradicional de especificação de um sistema de software … o que se espera que o sistema faça … para cada usuário? Por quê centrado na Arquitetura? D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Para que serve a arquitetura de um sistema? [Parábola dos homens cegos e o elefante] Define uma estrutura, seus serviços. Ex.: sistemas água e elétrico, etc. Nos ajuda a: entender o sistema, organizar o seu desenvolvimento, acompanhar a evolução do sistema, e atuar em busca do reuso. No caso de sistemas de s/w: procura-se definir aspectos estáticos e dinâmicos de um produto de s/w. Arquitetura de S/W D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Elementos previstos na arquitetura de um s/w: a estrutura do sistema (sua organização) os componentes críticos e as interfaces entre eles a composição dos componentes em subsistemas a partir do comportamento de suas funcionalidades A soma de diferentes visões: casos de uso + análise + projeto + ... Casos de Uso Vs. Arquitetura D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Casos de Uso (função) Mapeia Arquitetura (forma) Orientam / Guiam Experiência (patterns) Em geral, as funcionalidades críticas do s/w são representadas por cerca de 5% a 10% dos Casos de Uso. D S Engenharia de Software C Camadas Possíveis na Arquitetura: os seus SubsistemasProcesso Unificado de Desenvolvimento de Software Aplicações Específicas (sempre no topo) Aplicação Geral Dependem do negócio (subsistemas que podem ser reusados em diferentes aplicações) Middleware (frameworks, bibliotecas de classes, etc) Independem do negócio Sistemas de S/W cada Caso de Uso especificado é detalhado e transformado em termos de subsistemas, classes e componentes. Processo Iterativo e Incremental? Para quê? D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Para lidar com ciclos de desenvolvimento cada vez mais complexos e longos, onde a maturidade só é alcançada após vários mini-ciclos - o PU prevê uma série de mini-projetos (versões do sistema). Cada mini-projeto é uma iteração resultante de passos incrementais ao longo do ciclo de desenvolvimento. As iterações são passos ao longo do fluxo de trabalho; os incrementos são avanços na direção do produto final. A eficácia do processo deve ser buscada com o controle das várias iterações... Processo Iterativo e Incremental D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Como definir as iterações? D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Para se definir as versões resultantes em cada iteração, deve-se atentar para dois fatores chaves: (1) Cada iteração deve estar associada a um conjunto de Casos de Uso que avançam em termos da usabilidade do produto desenvolvido até então. (2) Cada iteração deve considerar e atacar algum risco crítico, de forma que, ao final, a maioria dos riscos tenham sido atacados. As sucessivas iterações irão resultar nos artefatos de s/w, avançando sempre na direção do produto final. As representações p/ um Produto D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Cada mini-ciclo resulta numa versão do sistema. Cada versão é um produto pronto para entrega (algum código fonte na forma de componentes executáveis + manuais + outros artefatos de interesse). Especificado por Transformado por Modelo Caso de Uso Modelos no PU Distribuído por Implementado por Modelo Análise Modelo Implementação Modelo Projeto Modelo Desdobramento Verfiicado por OK OK Modelo Teste D S Engenharia de Software C Os Quatro Ps no PU: Pessoas, Projeto, Produto e Processo Processo Unificado de Desenvolvimento de Software Processo Template Automação Pessoas Projeto Participantes Resultado Produto Tools D Quem participa? Engenharia de Software S Como é o proc. de C desenvolvimento? Processo Unificado de Desenvolvimento de Software Usuários Analista Sistema Define Atores Estrutura o Modelo e Casos de Uso de Casos de Uso Testadores Arquiteto Sistema Arquiteto Projetistas Gerente Projeto Analistas Projetista Caso de Uso Projetista Interface Prioriza Casos de Uso Detalha os Casos de Uso Protótipo da Interface D Capturando os Engenharia de Software S Requisitos Funcionais: C aplicando Casos de Processo Uso Unificado de Desenvolvimento de Software Requisitos: Pessoas Vs. Artefatos Analista Sistema Projetista Caso Uso Projetista Interface Projetista Caso Uso Modelo Caso Uso Ator Glossário Caso Uso Protótipo Interface Descrição Arquitetura D Capturando os Engenharia de Software S Requisitos Funcionais: C aplicando Casos de Processo Uso Unificado de Desenvolvimento de Software Requisitos: Atividades do Processo Analista Sistema Arquiteto Projetista Caso de Uso Projetista Interface Define Atores Estrutura o Modelo e Casos de Uso de Casos de Uso Prioriza Casos de Uso Detalha os Casos de Uso Protótipo da Interface Um exemplo: Modelo de Sistema de uma ATM D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Diagrama de Caso de Uso Retirada Dinheiro Cliente Banco Depósito Dinheiro Observe que os casos de uso são projetados para atender as demandas dos usuários do sistema - capturando todos os requisitos funcionais. “Um caso de uso especifica uma sequência de ações, incluindo suas Tranferência variantes, que o sistema pode executar entre Contas resultando em valores para um dado ator.” O Projeto de uma Idéia: Modelo de Análise D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Análise: Pessoas Vs. Artefatos Arquiteto Projetista Caso Uso Engenheiro Componente Modelo Análise Descrição Arqitetura Transformação Caso Uso Análise Análise Classe Análise Pacote D S Engenharia de Software C Estabelecendo o Projeto de uma Idéia: Modelo de Análise Processo Unificado de Desenvolvimento de Software Análise: Atividades do Processo Arquiteto Projetista Caso de Uso Engenheiro Componente Análise Arquitetural Analisa Casos de Uso Análise Classe Análise Pacote Exemplo: Modelo de Análise D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Gaveta da ÀTM Cliente Banco Tela de Interface Receptor ATM Modelo de Análise Retirada Transferência Depósito Conta O modelo mostra como cada caso de uso é obtido pela estrutura de classes da análise. Por exemplo, as classes Interface, Retirada, Conta e Gaveta são responsáveis pelo Caso de Uso Retirada de Dinheiro. D S Engenharia de Software C Exemplo: Modelo de Análise Processo Unificado de Desenvolvimento de Software 1. Identifica Tela de 2. Solicita retirada Interface Textos estruturados ou pseudocódigo podem ajudar na documentação da interação entre os objetos! 3. Valida a retirada Retirada Conta Cliente Banco 4. Autoriza a saída 5. Libera o dinheiro Gaveta da ÀTM Diagrama de Colaboração Este diagrama nos ajuda a descrever como o Use Case Retirada de Dinheiro é obtido através da participação de vários objetos da análise. Na fase de projeto, tal combinação deve ser refinada. Exemplo: Subsistemas propostos D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Interface ATM Gestão Transação Aplicações Específicas Aplicação Geral Gestão Conta Middleware Java. applet Java VM Java. mi Sistemas de S/W TCP/IP Estabelecendo o D Vocabulário do Problema e S Engenharia de Software de sua Solução: Modelo de C Processo Unificado de Desenvolvimento de Software Projeto Projeto: Pessoas Vs. Artefatos Arquiteto Projetista Caso Uso Modelo Projeto Descrição Arqitetura Modelo Desdobramento Transformação Caso Uso Projeto Engenheiro Componente Projeto Projeto Subsistema Interface Classe Estabelecendo o D Vocabulário do Problema e S Engenharia de Software de sua Solução: Modelo de C Processo Unificado de Desenvolvimento de Software Projeto Projeto: Atividades do Processo Arquiteto Projetista Caso de Uso Engenheiro Componente Projeto Arquitetural Projeta um Casos de Uso Projeta Classe Projeta Subsistema Exemplo: Modelo de Projeto D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Modelo de Análise Interface ATM Gaveta ATM Retirada Conta Tela Saque Conta Sensor Gaveta Gerente Classe Teclado Enchedor Cliente Persistente Gaveta Leitor Gerente Gerente Contador Cartão Transação Conta Cédulas Modelo de Projeto Classes ativas Exemplo: Modelo de Projeto D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Diagrama de Classe Leitor Cartão Introduz mais detalhes que o Diagrama de Classes do modelo de análise. Faz-se necessário ainda mais detalhes sobre as interações entre objetos. Gerente Transação Classe Persistente Tela Teclado Gerente Cliente Saque Enchedor Gaveta Sensor Gaveta Contador Cédulas Gerente Conta Conta D S Engenharia de Software C Exemplo: Modelo de Projeto Processo Unificado de Desenvolvimento de Software Mostra como focar o Caso de Uso - começando da esquerda e alcançando cada objeto envolvido, conforme as mensagens são enviadas… (passos 1 e 2 do Diagrama de Colaboração) Diagrama de Sequência : Leitor Cartão :Cliente Banco Inserir cartão :Teclado :Tela :Gerente Cliente :Contador :Gerente Cédulas Transação Cartão inserido (ID) Mostra a solicitação Solicita a senha Insere a senha Senha Pergunta pela soma saque Mostra a solicitação Insere a quantia para saque Valor Solicita validação senha ... Modelo de Projeto: D Organizando as Classes - S Engenharia de Software Uma visão da estrutura estática C Processo Unificado de Desenvolvimento de Software subsistema Interface Interface ATM Leitor Cartão Tela Saque Teclado Gerente Cliente Liberação Enchedor Gaveta Sensor Gaveta subsistema subsistema Gestão Transação Gestão Conta serviço subsistema Gestão Saque Contador Cédulas Classe Persistente Gerente Transação Saque Transf. Gerente Conta Conta Estabelecendo as partes D necessárias para montar e S Engenharia de Software C liberar o sistema: ImplementaçãoProcesso Unificado de Desenvolvimento de Software Nesta fase, devemos prover o que for necessário para obtenção do sistema executável: os componentes executáveis, os arquivos do componente (código fonte, scripts, etc), tabela de componentes (elementos da bases de dados), entre outros. Um componente é a parte física e mutável de um sistema que deve suportar a operação conjunta de um grupo de interfaces. Isto é, o modelo de implementação deve ser composto de componentes, incluindo todos os executáveis (ActiveX, Java Beans, etc) para cada classe presente no Modelo de Projeto. Estabelecendo as partes D necessárias para montar e S Engenharia de Software C liberar o sistema: ImplementaçãoProcesso Unificado de Desenvolvimento de Software Implementação: Pessoas Vs. Artefatos Arquiteto Modelo Implementação Integrador Sistema Modelo Desdobramento Modelo Desdobramento Transformação Casos Uso Plano Integração Engenheiro Componente Implementação Componente Subsistema Interface Estabelecendo as partes D necessárias para montar e S Engenharia de Software C liberar o sistema: ImplementaçãoProcesso Unificado de Desenvolvimento de Software Implementação: Atividades do Processo Arquiteto Integrador Sistema Engenheiro Componente Implementação Arquitetural Integração Sistema Implementa Classe Implementa Executa Subsistema Teste Unidade Modelo de Desdobramento: D Uma visão arquitetural dos S Engenharia de Software C nodos físicos Processo Unificado de Desenvolvimento de Software Três Nós Vs. Três Subsistemas Internet Client ATM Server Application ATM Intranet Data Server ATM Estabelecendo as partes D necessárias para montar e S Engenharia de Software C liberar o sistema: ImplementaçãoProcesso Unificado de Desenvolvimento de Software Modelo de Projeto Modelo de Implementação Gerente Cliente executável Enchedor Gaveta compilação cliente.exe file cliente.c Sensor Gaveta file Contador Cédulas gaveta.c Fazendo uso de uma LP OO, cada classe no projeto corresponde a uma classe na implementação - C++ ou Java, por exemplo. Cada arquivo de componente deve implementar várias classes, dependendo da LP. D Estabelecendo os Engenharia de Software S caminhos para validar e C verificar o sistema:Processo TesteUnificado de Desenvolvimento de Software Nesta fase, devemos verificar se o sistema implementa corretamente suas especificações - desenvolvendo um modelo que consiste de casos de testes e procedimentos para acompanhamento e controle de erros. Um caso de teste consiste de um conjunto de entradas, condições para execução e resultados esperados num dado teste (ex. uma dada funcionalidade do sistema definida num caso de uso). Os procedimentos também podem ser obtidos a partir dos casos de uso - porém, aqui os erros encontrados devem ser analisados e solucionados numa dada ordem de importância. D Estabelecendo os Engenharia de Software S caminhos para validar e C verificar o sistema:Processo TesteUnificado de Desenvolvimento de Software Teste: Pessoas Vs. Artefatos Eng. Teste Engenheiro Componente Testador Integração Plano Teste Modelo Teste X Caso Teste Avaliação Teste Procedimento Teste X Teste Componente Erro Testador Sistema D Estabelecendo os Engenharia de Software S caminhos para validar e C verificar o sistema:Processo TesteUnificado de Desenvolvimento de Software Teste: Atividades do Processo Eng. Teste Plano Teste Proj. Teste Executa Teste Integr. Testador Integração Testador Sistema Engenheiro Componente Avaliação Teste Executa Teste Sist. Implementa Teste Teste: Um Exemplo do Caso de Uso Retirada D S Engenharia de Software C Processo Unificado de Desenvolvimento de Software Entrada: Saída: • Uma dada conta apresenta um saldo de $250 • O saldo da conta dreduz para $50 • O cliente da conta se identifica corretamente • O cliente da conta recebe os $200 da ATM • O cliente solicita um saque de $200 Condições: • Existe caixa suficiente na ATM Modelo Caso Uso Modelo Teste X Retirada Fluxo Básico - Retirada • Nenhum outro caso de uso (instâncias) pode acessar a conta referida durante o caso de teste