Baixe o app para aproveitar ainda mais
Prévia do material em texto
NEaD UVA Núcleo de Educação a Distância Universidade Estadual Vale do Acaraú UNIVERSIDADE ESTADUAL VALE DO ACARAÚ APOSTILA DE ENGENHARIA DE SOFTWARE, CAPÍTULO 09 ASSUNTO: ENGENHARIA DE PROJETO ALUNOS: JOSUE PINTO DE MESQUITA ITALO ROSSI ARAUJO COSTA www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br INTRODUÇÃO A engenharia de projeto é uma fase muito importante da elaboração de um software, pois é no projeto que se tem realmente a visão do sistema como um todo. Nessa fase, os possíveis erros encontrados ainda são fáceis de ser concertados se comparado com a sua solução na fase de implementação, e é por isso que é no projeto onde se consegue estabelecer a qualidade do sistema. Um projeto deve, a cima de tudo, envolver todas as necessidades expressas pelo cliente e ser feito de forma bem compreensível para os profissionais que vão implementar, testar e dar manutenção no sistema, pois ele é o último passo feito antes da codificação do software, e serve de guia para essa próxima etapa. PROJETO NO CONCEITO DE ENGENHARIA DE SOFTWARE No projeto de software, os dados a ser utilizados são consultados no modelo análise, obtido do levantamento das informações junto ao cliente e a análise dessas informações para que se chegue a uma idéia de como o sistema vai funcionar. Esse modelo de análise é constituído por elementos baseados em cenário, em classe, orientados a fluxo e comportamentais, e cada um desses elementos vai servir como fonte de informação para fazer o projeto de software, que deve ser constituído por quatro representações: arquitetural, dados, interface e componente. 1) Projeto de dados É nesse projeto que são realizadas as classes de projeto e as estruturas de dados dos requisitos do sistema. As informações para esse projeto são obtidas principalmente dos cartões CRC, que fornece as definições das principais classes e relacionamentos, e atributos de classe, que fornecem conteúdo completo dos dados. Parte do projeto de dados pode ocorrer em conjunto com o projeto de arquitetura, e seu nível de detalhes vai aumentando à medida em que cada componente do software é projetado. 2) Projeto arquitetural É onde são definidos os relacionamentos entre os principais elementos estruturais do software, os estilos arquiteturais e padrões de projeto que podem ser utilizados para satisfazer aos requisitos definidos para o sistema e as restrições que afetam o modo pelo qual o projeto arquitetural pode ser implementado. Podemos imaginar o projeto arquitetural como o projeto de um edifício, onde os apartamentos seriam os módulos e/ou componentes e o projeto arquitetural vai projetar toda a estrutura que vai ficar no entorno desses módulos, fazendo um esqueleto que os une, servindo de estrutura que relaciona os módulos com outros módulos e o edifício com o meio externo. 3) Projeto de interface É o projeto de como o software irá se comunicar com o meio externo. Esse meio externo, tem que ser entendido não só com a parte gráfica, que é a comunicação com o usuário, mas também com outros programas ou módulos externos que poderão vir a se www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br comunicar com o programa para receber ou para injetar dados. 4) Projeto de componente É o projeto do software em um nível modular, ou seja, é o projeto de uma parte do software que vai funcionar em conjunto com outras partes para constituir o sistema como um todo. Esse projeto utiliza informações de arquitetura, interface e dados para a sua constituição. PROCESSO DO PROJETO E QUALIDADE DO PROJETO A importância do projeto de software pode ser definida em uma única palavra, qualidade. Projeto é uma fase na qual a qualidade é incorporada na engenharia de software, por nos fornecer representações do software que podem ser avaliadas, e é por isso que é o único modo pelo qual podemos traduzir precisamente os requisitos do cliente em um produto. O projeto de software serve de base para todos os passos de engenharia de software de suporte de software que se seguem. Sem projeto, nos arriscamos a construir um sistema instável. Esse projeto é feito de forma iterativa, no qual os requisitos são traduzidos em um documento para a construção do software. Inicialmente, o projeto mostra uma visão do sistema com um alto nível de abstração, nível esse que vai diminuindo à medida que o projeto vai sendo feito. Ao longo do projeto, a sua qualidade vai sendo avaliada com uma série de revisões técnicas formais (RTF), também chamados de Walktroughs. Essas revisões são reuniões periódicas feitas pela equipe que está à frente do projeto, servindo para analisar o projeto, buscando-se possíveis erros e colocando-se em pauta se a parte do projeto que está sendo avaliada deverá ser modificada ou não. Para avaliar a qualidade, existem uma série de diretrizes, que são como modelos que devem ser seguidos para se fazer um bom projeto, os principais são: 1. Um projeto deve exibir uma arquitetura que tenha sido criada por meio de estilos arquiteturais reconhecíveis e que possa ser implementada de modo evolucionário para facilitar as fases de implementação e de testes. 2. Um projeto deve ser modular, sendo o software particionado logicamente em elementos ou subsistemas. 3. Um projeto deve conter representações distintas de dados, arquitetura, interface e de componentes. 4. Um projeto deve levar a estruturas de dados adequadas às classes a ser implementadas e baseadas em padrões de dados reconhecíveis. 5. Um projeto deve levar a componentes que exibam características funcionais independentes. 6. Um projeto deve levar a interfaces que reduzam a complexidade das conexões entre componentes e com o ambiente externo. 7. Um projeto deve ser representado por uma notação que realmente represente o seu significado. www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br Também temos, na questão de avaliação de projeto, alguns atributos que atualmente são muito usados para ter uma referência das qualidades que o sistema a ser projetado deve ter. Esses atributos foram desenvolvidos pela Hewlett-Packard, a conhecida HP, são eles: Funcionalidade: é avaliada pela observação do conjunto de características e capacidades do sistema, generalidade das funções e segurança do sistema global. Usabilidade: é avaliada considerando fatores humanos, como a estética e consistência, é qualidade que o sistema tem de ser utilizado facilmente pelos usuários. Confiabilidade: é avaliada medindo-se a freqüência e a severidade das falhas, a precisão dos resultados de saída, o tempo médio entre as falhas, a capacidade de recuperação de falhas e a previsibilidade do programa. Desempenho: é medido pela velocidade de processamento, tempo de resposta, consumo de recursos, vazão e eficiência. Suportabilidade: está envolvido com a facilidade de instalação, configuração e manutenção do sistema. CONCEITOS DE PROJETO Modularidade Consiste na qualidade que o sistema tem de ser projetado e construído em partes, chamadas componentes ou subsistemas. A modularidade é muito importante, pois projetar um software constituído de apenas um módulo é muito trabalhoso, pois todas as tarefas tem que ser projetadas em conjunto. Dividindo-se essas tarefas em módulos, fica bem mais fácil a construção de cada um, pois otrabalho foi dividido. Uma informação muito importante na hora de se modularizar um sistema, é que a simplicidade de se projetar e implementar um módulo pode ser compensada na complexidade de integrar muitos módulos, por isso não se deve modularizar de mais. Ocultamento de informação Deve acontecer com informações entre módulos, sendo que cada módulo deve ser projetado de forma que não necessite das informações contidas em outro módulo, por isso diz-se que essas informações devem permanecer ocultas para os outros módulos. Isso ajuda muito principalmente na hora de se resolver um possível problema, se um módulo necessitar de mais módulos para funcionar, fica difícil saber qual módulo foi o responsável por ocasionar um possível erro. Independência funcional O conceito de independência funcional é muito importante também no projeto de um software, pois cada módulo projetado deve ser feito de www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br forma a funcionar sem precisar do funcionamento de outro módulo. Isso é muito utilizado tanto para o controle individual de cada módulo como principalmente para que o módulo projetado possa vir a ser utilizado em outro sistema. Refinamento Refinamento é uma estratégia de projeto descendente. Essa técnica originalmente proposta por Niklaus Wirth em 1971 sugere como ponto de partida a definição da arquitetura do software a ser desenvolvido, sendo que esta vai sendo refinada sucessivamente até atingir níveis onde os procedimentos são detalhados. Um programa é desenvolvido pelo refinamento sucessivo de níveis de detalhes procedurais. Refinamento de forma mais clara é um processo de elaboração. Começamos com uma descrição da informação que é definida em um alto nível de abstração. O enunciado descreve a informação conceitualmente, mas não fornece qualquer informação sobre o funcionamento da estrutura interna da informação. O refinamento ajuda o projetista a revelar os detalhes de baixo nível de abstração de acordo em que o projeto evolui. Refabricação A refabricação ou refatoração é uma atividade bastante importante, no qual é sugerida por muitos métodos ágeis. É uma técnica de reorganização que simplifica o código de um componente sem mudar sua função ou comportamento. Nas palavras de Fowler etal. (1999) “Refabricação é o processo de modificar um software sem que isso altere o comportamento externo do código, mas melhore sua estrutura interna. É uma maneira disciplinada de limpar o código minimizando as chances de se introduzir erros.” Refabricação é importante porque pode tornar o código mais compreensível e de fácil modificação, algo importante quando se fala em sistemas legados. Refabricação também ajuda a melhorar códigos que foram modificados e foram perdendo qualidade na estrutura e estão se tornando difíceis de compreender. Com a refabricação a estrutura do código se mantém com qualidade, e isso ajuda no descobrimento de erros e consequentemente torna o desenvolvimento mais rápido. CLASSES DE PROJETO No modelo de análise são definidas um conjunto completo de classes de analise, nas quais cada uma dessas classes descreve algum elemento do domínio do problema. O nível de abstração nas classes de analise é relativamente alto. Classes de projeto são classes mais detalhadas em relação com as classes de análise. A medida que o modelo de projeto evolui devem ser definidos um conjunto de classes de projeto que primeiro refina as classes de análise, fornecendo detalhes de projeto que vão permitir que as classes sejam implementadas, e segundo, criar um conjunto de classes de projeto que implemente uma infraestrutura de software para apoiar a solução do www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br negócio. Dentro desse conjunto de classes de projeto são sugeridos cinco tipos de classe a seguir. Classes de interface com o usuário definem todas as abstrações necessárias para a interação humano-computador (IHC) . Classes do domínio de negócio são frequentemente refinamentos de classe de análise. As classes identificam os atributos e os métodos necessários para implementar algum elemento do domínio de negócio. Classes de processo implementam abstrações de mais baixo nível de negócio necessárias para a completa gestão das classes de domínio de negócios. Classes persistentes representam depósitos de dados (por exemplo, um banco de dados) que vão persistir além da execução do software. Classes de sistema implementam funções de gestão e controle de software que habilitam o sistema a operar e se comunicar em seu ambiente e com o mundo externo. Ao ponto da evolução do projeto, a equipe de desenvolvimento do software deve desenvolver um conjunto completo de atributos e operações para cada classe de projeto. Arlow e Neustadt sugerem a revisão das classes de projeto para garantir que elas estejam bem formadas, e sugerem quatro características dessas classes. Completeza e suficiência – Uma classe de projeto deve ser o encapsulamento completo de todos os atributos e métodos que se podem razoavelmente esperar (com base na interpretação do nome da classe) que existam na classe. Por exemplo, em uma classe chamada cena definida para um software que faz edição de vídeo somente fica completa se contiver todos os atributos e métodos que podem ser razoavelmente associados a criação de uma cena de vídeo. Suficiência garante que a classe de projeto contenha somente aqueles métodos que são suficientes para atingir o objetivo da classe, nem mais nem menos. Primitivismo – Métodos associados a uma classe de projeto devem ser enfocados na realização de um serviço para a classe. Uma vez o serviço implementado com um método, a classe não deve fornecer um outro modo para realizar a mesma coisa. Por exemplo, uma classe chamada videoclipe contendo os atributos ponto- inicial e ponto-final para indicar onde inicia e termina o clip. Os métodos ajustarPontoInicial() e ajustarPontoFinal() fornecem os único meios para indicar os pontos inicial e final do clipe. Alta coesão – Uma classe de projeto coesa tem um conjunto de responsabilidades pequeno e enfocado e aplica atributos e métodos especificamente para implementar aquelas responsabilidades. Por exemplo, a classe videoclipe poderia conter vários métodos para a edição de um clipe. Contanto que cada método esteja focado somente com os atributos de videoclipe a coesão é mantida. Baixo acoplamento – No modelo de projeto, é necessário projetar classes para colaborarem entre si. No entanto, a colaboração deve ser restrita a um mínimo aceitável. Se um modelo de www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br projeto é altamente acoplado (todas as classes de projeto colaboram com todas as outras classes de projeto) o sistema é difícil de implementar, testar e manter ao longo do tempo. Em uma forma geral classes de projeto em um subsistema deveriam ter apenas conhecimento limitado das classes de outros subsistemas. MODELO DE PROJETO Modelo de projeto (design model) – descreve a efetivação dos casos de usos focalizando em como os requisitos funcionais e não funcionais se relacionam com o ambiente de implementação. Modelo de projeto é representado por um sistema que denota o subsistema de mais alto nível, que por sua vez é composto de vários subsistemas. No modelo de projeto os casos de uso são efetivados por meio de classesde projeto e objetos. Os elementos do modelo de projeto usam muitos dos mesmos diagramas UML que foram usados no modelo de análise. A diferença é que esses diagramas são refinados e elaborados como parte do projeto; mais detalhe especifico de implementação é fornecido e são enfatizadas a estrutura e o estilo arquitetural, os componentes que residem na arquitetura e as interfaces entre os componentes e o mundo externo. ELEMENTOS DE PROJETO DE DADOS Projeto de dados (algumas vezes denominado arquitetura de dados) cria um modelo de dados e/ou informações que é representado no nível mais alto de abstração (a visão dos dados do cliente/usuário). Esse modelo de dados é então refinado em representações cada vez mais especificas da implementação que podem ser processadas pelo sistema baseado em computador. A estrutura de dados é uma parte importante dentro do projeto de software. No nível de componente, o projeto das estruturas de dados e os algoritmos que serão aplicados nos programa afim de manipula-las é essencial para o desenvolvimento de uma aplicação de alta qualidade. No nível de aplicação, a tradução do modelo de dados para um banco de dados é de fundamental importância para satisfazer os objetivos que o sistema dispões a realizar. Em nível de negócio as informações armazenadas em vários bancos de dados é reorganizada em um armazém de dados denominado data warehouse que possibilita a mineração dos dados e descoberta de conhecimento que pode ter um papel bastante importante no sucesso do negocio. ELEMENTO DO PROJETO ARQUITETURAL O projeto arquitetural de um software pode ser comparado a uma planta baixa de uma casa. A planta baixa representa como os cômodos da casa estão dispostos globalmente, juntamente com seu tamanho, forma e relacionamento entre eles, também representas as portas e janelas que permitem movimento para dentro e para fora dos cômodos. Em outras palavras a planta baixa nos da uma visão geral da www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br casa. De modo semelhante elementos de projeto arquitetural nos da uma visão geral do software. Elementos de projeto arquitetural nos dão uma visão geral do software. O modelo arquitetural é derivado de três fontes: (1) informação sobre o domínio de aplicação para o software a ser construído; (2) elementos específicos do modelo de analise como diagramas de fluxo de dados ou classe de análise, seus relacionamentos e colaborações para o problema, e (3) a disponibilidade de padrões arquiteturais. ELEMENTOS DE PROJETO DA INTERFACE O projeto da interface do software é semelhante a um conjunto de desenhos detalhados para portas, janelas e instalações de uma casa. Os desenhos nos indicam o tamanho e as formas das portas e janelas, e a maneira pela qual elas operam. Em essência os desenhos detalhados contam-nos como coisas e informações fluem para dentro e para fora da casa. Os elementos do projeto de interface contam-nos como a informação flui para dentro e para fora do sistema e como ela é disseminada entre os componentes definidos como parte da arquitetura. Há três importantes elementos no projeto de interface. A interface com o usuário Interfaces externas com outros sistemas, dispositivos, redes ou outros produtores ou consumidores de informação. Interfaces internas entre vários componentes de projeto. O projeto de interface do usuário é uma ação bastante importante dentro da engenharia de software pois ela incorpora elementos estéticos como o leiaute, cor, gráficos e elementos ergonômicos como a localização e disposição da informação. O projeto de interfaces externas requer informação definitiva sobre a entidade para qual a informação é enviada ou recebida. O projeto de interfaces internas é alinhado juntamente com o projeto de componentes. ELEMENTOS DE PROJETO EM NIVEL DE COMPONENTE ECIMENTOS O projeto em nível de componente descreve completamente os detalhes internos de cada componente de software. Para tanto, o projeto define estruturas de dados para todos os objetos de dados locais e detalhes algorítmicos para todo o processamento que ocorre em um componente e em uma interface que dá acesso a todas as operações do componente (comportamento). No contexto da engenharia de software orientado a objetos, um componente é representado nas formas diagramáticas UML. A figura mostrada esta representando um componente chamado GestãoDeSensor e a linha conecta o componente a uma classe chamada sensor que é associada a ele. O componente realiza todas as funções GestãoDeSen sor Sensor www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br associadas aos sensores os configurando. ELEMENTOS DE PROJETO EM NIVEL DE IMPLANTAÇÃO Elementos de projeto em nível de implantação indicam como a funcionalidade e os subsistemas do software serão alocados no ambiente computacional físico que vai apoiar o software. Por exemplo, um determinado software tem os seus elementos configurados para operar em três ambientes computacionais, um PC baseado em uma casa, outro PC utilizado como painel de controle e um servidor. PROJETO DE SOTWARE BASEADO EM PADRÃO Os melhores projetistas em qualquer campo tem a habilidade incomum de ver padrões que caracterizam um problema e padrões correspondentes que podem ser combinados para criar uma solução. Durante todo o processo de projeto, um engenheiro de software deve procurar toda a oportunidade de reutilizar padrões de projeto existentes (quando eles satisfazem as necessidades do projeto) em vez de criar outros. DESCRIÇÃO DE UM PADRÃO DE PROJETO As disciplinas de engenharia fazem uso de milhares de padrões de projeto existentes, por exemplo, um engenheiro eletricista usa um circuito integrado para resolver um elemento especifico de um problema. Os padrões de projeto podem ser descritos como mostrados a seguir. Nome do padrão – descreve a essência do padrão em um curto, mas expressivo nome. Intenção – descreve o padrão e o que ele faz. Também-conhecido-como – lista os sinônimos do padrão. Motivação – fornece um exemplo do problema. Aplicabilidade – notifica as situações especificas de projeto nas quais o padrão é aplicável. Estrutura – descreve as classes necessárias para implementar o padrão. Participantes – descreve as responsabilidades das classes que são necessárias para implementar o padrão. Colaborações – descreve como os participantes colaboram para cumprir suas responsabilidades. Consequências – descreve as “influências de projeto” que afetam o padrão e os potenciais compromissos que devem ser considerados quando o padrão é implementado. Padrões relacionados – referências cruzadas relacionadas a padrões de projeto. www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br USO DE PADRÕES DE PROJETO Os padrões de projeto podem ser utilizados por todo o processo de desenvolvimento do software. Após desenvolvido o modelo de analise, o projetista pode examinar uma representação detalhada do problema a ser resolvido e as restrições impostas pelo problema. A descrição do problema é examinada em vários níveis de abstração para determinar se ela é responsável por um ou mais dos três tipos de padrões existentes detalhados a seguir Padrões Arquiteturais – Esses padrões definem uma estrutura global do software, indicam o relacionamento entre subsistemas e componentesdo software e definem as regras para especificar relacionamentos entre os elementos(classe, pacotes, componentes) Padrões de projeto – Esses padrões atendem a um elemento especifico do projeto tal como uma agregação de componentes para resolver algum problema de projeto, relacionamentos entre componentes ou os mecanismos para efetuar a comunicação componente a componente. Idiomas – também chamados de padrões de códigos, esses padrões específicos de linguagem geralmente implementam um elemento algorítmico de um componente, um protocolo especifico de interface, ou um mecanismo para comunicação entre componentes. FRAMEWORKS “Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação” - Fayad e Schmit Também chamado de arcabouço, frameworks é um esqueleto com uma coleção de “pontos conectáveis” que lhe possibilitam adaptar-se a um domínio especifico de problema. Os pontos de conexão possibilitam a um projetista integrar classes ou funcionalidades específicas do problema no esqueleto. Em contexto orientado a objetos, arcabouço é uma coleção de classes em cooperação. Por exemplo, Hibernate, com o objetivo de diminuir a complexidade entre os programas Java, baseado no modelo orientado a objetos. Framework conceitual é um conjunto de conceitos usados para resolver um problema de um domínio especifico. Framework conceitual não se trata de um software executável, mas sim de um modelo de dados para um domínio. Já no framework de software compreende de um conjunto de classes implementadas em uma linguagem de programação, usadas para auxiliar o desenvolvimento de software. REFERÊNCIAS PRESSMAN, RogerS.Engenharia de Software, 6.ed, 2006. www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br Exercícios 1) Por que é na fase de projeto onde se constitui a qualidade do software? 2) O que são e para que servem as RTFs? 3) Por que a independência funcional é importante em um projeto? 4) Como funciona a modularidade? 5) O que é refinamento e para que serve? 6) Refinamento é um complemento da abstração? Explique o porque. 7) O que é refabricação? E como ela ajuda no desenvolvimento de um software? 8) Qual a diferença entre classes de analise e classes de projeto? 9) Quais os tipos de classes de projeto utilizados no desenvolvimento do software? 10) Como deixar uma classe de projeto bem formada? 11) Qual a diferença entre modelo de analise e modelo de projeto? 12) Qual a importância dos elementos de projeto de dados no desenvolvimento do um software? 13) Como é derivado os elementos do projeto arquitetural? 14) Quais os principais elementos no projeto de interface? 15) Qual o papel do projeto em nível de componente? 16) Para que serve elementos de projeto em nível de implantação? 17) O que é um padrão? E para que serve no desenvolvimento de um software? 18) Defina o que é: padrão arquitetural, padrão de projeto, idiomas. www.cliqueapostilas.com.br http://www.cliqueapostilas.com.br
Compartilhar