Projeto conceitual Mostra ao cliente exatamente o que o sistema fará Respostas de algumas questões: De onde virão os dados? O que acontecerá com os dados no sistema? Qual será a aparência do sistema para os usuários? Que opções serão oferecidas para os usuários? Qual é a seqüência de eventos? Como será a aparência dos relatórios e das telas? Características de um bom projeto conceitual Ser escrito na linguagem do cliente e não conter jargão técnico Descrever as funções do sistema Ser independente da implementação Estar vinculado aos documentos de requisitos Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Projeto técnico Mostra aos programadores o que o sistema fará Inclui: descrição dos principais componentes de hardware e de suas funções hierarquia e funções dos componentes da estrutura de dados de software estrutura de dados e fluxo de dados Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Cinco modos para criar projetos Decomposição modular Decomposição orientada a dados Decomposição orientada a eventos Projeto ‘outside-in’ Projeto orientado a objetos Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Três níveis de projeto Arquitetura: associa as capacidades do sistema com os componentes Projeto de código: envolve algoritmos e estrutura de dados para cada componente Projeto executável: projeto do código em um nível de detalhes ainda inferior, incluindo alocação de memória, formatos de dados, padrões de bits etc. Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Estilos de projeto Pipes and filters Projeto orientado a objetos Chamada implícita Estilo de projeto em camadas Repositórios Interpretadores Controle de processos Cliente-servidor Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Exemplo de chamada implícita DEBUG VALUE <syst em><f i l e><l i ne><var ><val ue> DEBUG ENTER <syst em><f i l e><f unc><l i ne><val ue> DEBUG EXI T <syst em><f i l e><f unc><l i ne><val ue> EVENT ADD <syst em><i d#><event _t ype><f i l e><l i ne><t ext > EVENT REMOVE <syst em><i d#><event _t ype><f i l e><l i ne><t ext > STOP- ERROR <si gnal ><f i l e><l i ne> DEBUG AT <syst em><f i l e><f unc><l i ne> DEBUG FOCUS <syst em><f i l e><f unc><l i ne> DEBUG CLEAR <syst em> DEBUG RESET <syst em> WHERE <syst em><l evel ><f i l e><f unc><l i ne><addr ><ar gs> WHERE_DUMP <syst em><l evel ><name><val ue> WHERE_BEGI N <syst em> WHERE_END <syst em><l evel > DEBUG SYSTEM <syst em> DEBUG NOSYSTEM <syst em> UPDATE <syst em><f i l e><l i ne> Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Exemplo de abstração DO WHILE I is between 1 and (length of L)-1: Set LOW to index of smallest value in L(I), ..., L(length of L) Interchange L(I) and L(LOW) END DO DO WHILE I is between 1 and (length of L)-1 Set LOW to current value of I DO WHILE J is between I+1 and (length of L)-1: IF L(LOW) is greater than L(J) THEN set LOW to current value of J ENDIF ENDDO Set TEMP to L(LOW) Set L(LOW) to L(I) Set L(I) to TEMP ENDDO Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Questões na criação do projeto Modularidade e níveis de abstração Projeto colaborativo Projetando a interface com o usuário metáforas, modelo mental, regras de navegação, aspecto e impressão questões culturais preferências do usuário Concorrência Padrões de projeto e reutilização Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Características de um bom projeto Independência dos componentes acoplamento coesão Identificação e tratamento da exceção Prevenção de defeitos e tolerância a defeitos ativo passivo Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Técnicas de aprimoramento de projeto Redução da complexidade Projeto por contrato Projeto com construção de protótipo Análise da árvore de defeitos Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Avaliação e validação do projeto Validação matemática Medindo a qualidade do projeto Comparando projetos uma especificação, muitos projetos tabelas de comparação Revisões de projetos Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Revisão de projetos Revisão do projeto preliminar Revisão crítica do projeto reunião com clientes e usuários a fim de validar o projeto conceitual apresentar a visão geral do projeto técnico aos desenvolvedores Revisão do projeto do programa Programadores apresentam seus planos sobre seus projetos antes da implementação Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Questões para qualquer revisão de projetos O projeto é uma solução para o problema? O projeto é modular, bem-estruturado e fácil de entender? Alguma coisa pode ser feita para melhorar a estrutura e a facilidade de compreensão do projeto? O projeto pode ser migrado para outras plataformas? O projeto pode ser reutilizado? O projeto é fácil de modificar ou expandir? O projeto permite que os testes sejam realizados com facilidade? O projeto maximiza o desempenho quando apropriado? O projeto reutiliza componentes a partir de outros projetos quando apropriado? Os algoritmos são adequados ou podem ser aprimorados? Se o sistema tiver de ser desenvolvido em fases, as interfaces para as fases são boas o suficiente para que haja uma fácil transição entre as mesmas? O projeto está bem documentado, incluindo as opções de projeto e suas justificativas? O projeto faz referência cruzada dos componentes e dados com os requisitos? O projeto utiliza técnicas apropriadas para o tratamento de defeitos e para evitar a ocorrência de falhas? Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Documentando o projeto • justificativas do projeto • formatos dos menus e de outras formas de display nas telas • interface para uso de pessoas: teclas de função, descrições de tela sensível ao toque, layout de teclados, uso de mouse ou joystick • formatos dos relatórios • ‘entrada’ de informações: onde os dados se originam, como são formatados e em que mídia são armazenados • ‘saída’: para onde os dados são enviados, como são formatados e em que mídia são armazenados • características funcionais gerais • restrições de desempenho • procedimentos de arquivamento • abordagem de tratamento de defeitos Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall Exemplo de sistema de informação Opposition schedule = * Data flow * Television company name + {Opposition transmission date + Opposition transmission time + Opposition program name + (Opposition predicted rating)} Input: Opposition schedule For each Television company name, create Opposition company. For each Opposition schedule, Locate the Episode where Episode schedule date = Opposition transmission date AND Episode start time = Opposition transmission time Create instance of Opposition program Create the relationships Planning and Competing Output: List of Opposition programs Engenharia de Software: Teoria e Prática Shari Lawrence Pfleeger Capítulo 5 Prentice Hall