Você está na página 1de 11

NEaD UVA

Ncleo de Educao a Distncia


Universidade Estadual Vale do Acara

UNIVERSIDADE ESTADUAL VALE DO ACARA

APOSTILA DE ENGENHARIA DE SOFTWARE, CAPTULO 09

ASSUNTO: ENGENHARIA DE PROJETO ALUNOS: JOSUE PINTO DE MESQUITA ITALO ROSSI ARAUJO COSTA

INTRODUO A engenharia de projeto uma fase muito importante da elaborao de um software, pois no projeto que se tem realmente a viso do sistema como um todo. Nessa fase, os possveis erros encontrados ainda so fceis de ser concertados se comparado com a sua soluo na fase de implementao, 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 compreensvel para os profissionais que vo implementar, testar e dar manuteno no sistema, pois ele o ltimo passo feito antes da codificao do software, e serve de guia para essa prxima etapa. PROJETO NO CONCEITO DE ENGENHARIA DE SOFTWARE No projeto de software, os dados a ser utilizados so consultados no modelo anlise, obtido do levantamento das informaes junto ao cliente e a anlise dessas informaes para que se chegue a uma idia de como o sistema vai funcionar. Esse modelo de anlise constitudo por elementos baseados em cenrio, em classe, orientados a fluxo e comportamentais, e cada um desses elementos vai servir como fonte de informao para fazer o projeto de software, que deve ser constitudo por quatro representaes: arquitetural, dados, interface e componente.

1) Projeto de dados nesse projeto que so realizadas as classes de projeto e as estruturas de dados dos requisitos do sistema. As informaes para esse projeto so obtidas principalmente dos cartes CRC, que fornece as definies das principais classes e relacionamentos, e atributos de classe, que fornecem contedo completo dos dados. Parte do projeto de dados pode ocorrer em conjunto com o projeto de arquitetura, e seu nvel de detalhes vai aumentando medida em que cada componente do software projetado. 2) Projeto arquitetural onde so definidos os relacionamentos entre os principais elementos estruturais do software, os estilos arquiteturais e padres de projeto que podem ser utilizados para satisfazer aos requisitos definidos para o sistema e as restries que afetam o modo pelo qual o projeto arquitetural pode ser implementado. Podemos imaginar o projeto arquitetural como o projeto de um edifcio, onde os apartamentos seriam os mdulos e/ou componentes e o projeto arquitetural vai projetar toda a estrutura que vai ficar no entorno desses mdulos, fazendo um esqueleto que os une, servindo de estrutura que relaciona os mdulos com outros mdulos e o edifcio 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 no s com a parte grfica, que a comunicao com o usurio, mas tambm com outros programas ou mdulos externos que podero vir a se

comunicar com o programa para receber ou para injetar dados. 4) Projeto de componente o projeto do software em um nvel 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 informaes de arquitetura, interface e dados para a sua constituio.

Walktroughs. Essas revises so reunies peridicas feitas pela equipe que est frente do projeto, servindo para analisar o projeto, buscando-se possveis erros e colocando-se em pauta se a parte do projeto que est sendo avaliada dever ser modificada ou no. Para avaliar a qualidade, existem uma srie de diretrizes, que so como modelos que devem ser seguidos para se fazer um bom projeto, os principais so: 1. Um projeto deve exibir uma arquitetura que tenha sido criada por meio de estilos arquiteturais reconhecveis e que possa ser implementada de modo evolucionrio para facilitar as fases de implementao e de testes. 2. Um projeto deve ser modular, sendo o software particionado logicamente em elementos ou subsistemas. 3. Um projeto deve conter representaes 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 padres de dados reconhecveis. 5. Um projeto deve levar a componentes que exibam caractersticas funcionais independentes. 6. Um projeto deve levar a interfaces que reduzam a complexidade das conexes entre componentes e com o ambiente externo. 7. Um projeto deve ser representado por uma notao que realmente represente o seu significado.

PROCESSO DO PROJETO E QUALIDADE DO PROJETO A importncia 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 representaes 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 instvel. Esse projeto feito de forma iterativa, no qual os requisitos so traduzidos em um documento para a construo do software. Inicialmente, o projeto mostra uma viso do sistema com um alto nvel de abstrao, nvel esse que vai diminuindo medida que o projeto vai sendo feito. Ao longo do projeto, a sua qualidade vai sendo avaliada com uma srie de revises tcnicas formais (RTF), tambm chamados de

Tambm temos, na questo de avaliao de projeto, alguns atributos que atualmente so muito usados para ter uma referncia das qualidades que o sistema a ser projetado deve ter. Esses atributos foram desenvolvidos pela Hewlett-Packard, a conhecida HP, so eles: Funcionalidade: avaliada pela observao do conjunto de caractersticas e capacidades do sistema, generalidade das funes e segurana do sistema global. Usabilidade: avaliada considerando fatores humanos, como a esttica e consistncia, qualidade que o sistema tem de ser utilizado facilmente pelos usurios. Confiabilidade: avaliada medindo-se a freqncia e a severidade das falhas, a preciso dos resultados de sada, o tempo mdio entre as falhas, a capacidade de recuperao de falhas e a previsibilidade do programa. Desempenho: medido pela velocidade de processamento, tempo de resposta, consumo de recursos, vazo e eficincia. Suportabilidade: est envolvido com a facilidade de instalao, configurao e manuteno do sistema.

Modularidade Consiste na qualidade que o sistema tem de ser projetado e construdo em partes, chamadas componentes ou subsistemas. A modularidade muito importante, pois projetar um software constitudo de apenas um mdulo muito trabalhoso, pois todas as tarefas tem que ser projetadas em conjunto. Dividindo-se essas tarefas em mdulos, fica bem mais fcil a construo de cada um, pois o trabalho foi dividido. Uma informao muito importante na hora de se modularizar um sistema, que a simplicidade de se projetar e implementar um mdulo pode ser compensada na complexidade de integrar muitos mdulos, por isso no se deve modularizar de mais. Ocultamento de informao Deve acontecer com informaes entre mdulos, sendo que cada mdulo deve ser projetado de forma que no necessite das informaes contidas em outro mdulo, por isso diz-se que essas informaes devem permanecer ocultas para os outros mdulos. Isso ajuda muito principalmente na hora de se resolver um possvel problema, se um mdulo necessitar de mais mdulos para funcionar, fica difcil saber qual mdulo foi o responsvel por ocasionar um possvel erro. Independncia funcional O conceito de independncia funcional muito importante tambm no projeto de um software, pois cada mdulo projetado deve ser feito de

CONCEITOS DE PROJETO

forma a funcionar sem precisar do funcionamento de outro mdulo. Isso muito utilizado tanto para o controle individual de cada mdulo como principalmente para que o mdulo projetado possa vir a ser utilizado em outro sistema. Refinamento Refinamento uma estratgia de projeto descendente. Essa tcnica originalmente proposta por Niklaus Wirth em 1971 sugere como ponto de partida a definio da arquitetura do software a ser desenvolvido, sendo que esta vai sendo refinada sucessivamente at atingir nveis onde os procedimentos so detalhados. Um programa desenvolvido pelo refinamento sucessivo de nveis de detalhes procedurais. Refinamento de forma mais clara um processo de elaborao. Comeamos com uma descrio da informao que definida em um alto nvel de abstrao. O enunciado descreve a informao conceitualmente, mas no fornece qualquer informao sobre o funcionamento da estrutura interna da informao. O refinamento ajuda o projetista a revelar os detalhes de baixo nvel de abstrao de acordo em que o projeto evolui.

Nas palavras de Fowler etal. (1999) Refabricao o processo de modificar um software sem que isso altere o comportamento externo do cdigo, mas melhore sua estrutura interna. uma maneira disciplinada de limpar o cdigo minimizando as chances de se introduzir erros. Refabricao importante porque pode tornar o cdigo mais compreensvel e de fcil modificao, algo importante quando se fala em sistemas legados. Refabricao tambm ajuda a melhorar cdigos que foram modificados e foram perdendo qualidade na estrutura e esto se tornando difceis de compreender. Com a refabricao a estrutura do cdigo se mantm com qualidade, e isso ajuda no descobrimento de erros e consequentemente torna o desenvolvimento mais rpido.

CLASSES DE PROJETO No modelo de anlise so definidas um conjunto completo de classes de analise, nas quais cada uma dessas classes descreve algum elemento do domnio do problema. O nvel de abstrao nas classes de analise relativamente alto. Classes de projeto so classes mais detalhadas em relao com as classes de anlise. A medida que o modelo de projeto evolui devem ser definidos um conjunto de classes de projeto que primeiro refina as classes de anlise, fornecendo detalhes de projeto que vo permitir que as classes sejam implementadas, e segundo, criar um conjunto de classes de projeto que implemente uma infraestrutura de software para apoiar a soluo do

Refabricao A refabricao ou refatorao uma atividade bastante importante, no qual sugerida por muitos mtodos geis. uma tcnica de reorganizao que simplifica o cdigo de um componente sem mudar sua funo ou comportamento.

negcio. Dentro desse conjunto de classes de projeto so sugeridos cinco tipos de classe a seguir. Classes de interface com o usurio definem todas as abstraes necessrias para a interao humano-computador (IHC) . Classes do domnio de negcio so frequentemente refinamentos de classe de anlise. As classes identificam os atributos e os mtodos necessrios para implementar algum elemento do domnio de negcio. Classes de processo implementam abstraes de mais baixo nvel de negcio necessrias para a completa gesto das classes de domnio de negcios. Classes persistentes representam depsitos de dados (por exemplo, um banco de dados) que vo persistir alm da execuo do software. Classes de sistema implementam funes de gesto e controle de software que habilitam o sistema a operar e se comunicar em seu ambiente e com o mundo externo. Ao ponto da evoluo do projeto, a equipe de desenvolvimento do software deve desenvolver um conjunto completo de atributos e operaes para cada classe de projeto. Arlow e Neustadt sugerem a reviso das classes de projeto para garantir que elas estejam bem formadas, e sugerem quatro caractersticas dessas classes. Completeza e suficincia Uma classe de projeto deve ser o encapsulamento completo de todos os atributos e mtodos que se podem razoavelmente esperar (com base na

interpretao do nome da classe) que existam na classe. Por exemplo, em uma classe chamada cena definida para um software que faz edio de vdeo somente fica completa se contiver todos os atributos e mtodos que podem ser razoavelmente associados a criao de uma cena de vdeo. Suficincia garante que a classe de projeto contenha somente aqueles mtodos que so suficientes para atingir o objetivo da classe, nem mais nem menos. Primitivismo Mtodos associados a uma classe de projeto devem ser enfocados na realizao de um servio para a classe. Uma vez o servio implementado com um mtodo, a classe no deve fornecer um outro modo para realizar a mesma coisa. Por exemplo, uma classe chamada videoclipe contendo os atributos pontoinicial e ponto-final para indicar onde inicia e termina o clip. Os mtodos ajustarPontoInicial() e ajustarPontoFinal() fornecem os nico meios para indicar os pontos inicial e final do clipe. Alta coeso Uma classe de projeto coesa tem um conjunto de responsabilidades pequeno e enfocado e aplica atributos e mtodos especificamente para implementar aquelas responsabilidades. Por exemplo, a classe videoclipe poderia conter vrios mtodos para a edio de um clipe. Contanto que cada mtodo esteja focado somente com os atributos de videoclipe a coeso mantida. Baixo acoplamento No modelo de projeto, necessrio projetar classes para colaborarem entre si. No entanto, a colaborao deve ser restrita a um mnimo aceitvel. Se um modelo de

projeto altamente acoplado (todas as classes de projeto colaboram com todas as outras classes de projeto) o sistema difcil 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 efetivao dos casos de usos focalizando em como os requisitos funcionais e no funcionais se relacionam com o ambiente de implementao. Modelo de projeto representado por um sistema que denota o subsistema de mais alto nvel, que por sua vez composto de vrios subsistemas. No modelo de projeto os casos de uso so efetivados por meio de classes de projeto e objetos. Os elementos do modelo de projeto usam muitos dos mesmos diagramas UML que foram usados no modelo de anlise. A diferena que esses diagramas so refinados e elaborados como parte do projeto; mais detalhe especifico de implementao fornecido e so enfatizadas a estrutura e o estilo arquitetural, os componentes que residem na arquitetura e as interfaces entre os componentes e o mundo externo.

que representado no nvel mais alto de abstrao (a viso dos dados do cliente/usurio). Esse modelo de dados ento refinado em representaes cada vez mais especificas da implementao que podem ser processadas pelo sistema baseado em computador. A estrutura de dados uma parte importante dentro do projeto de software. No nvel de componente, o projeto das estruturas de dados e os algoritmos que sero aplicados nos programa afim de manipula-las essencial para o desenvolvimento de uma aplicao de alta qualidade. No nvel de aplicao, a traduo do modelo de dados para um banco de dados de fundamental importncia para satisfazer os objetivos que o sistema dispes a realizar. Em nvel de negcio as informaes armazenadas em vrios bancos de dados reorganizada em um armazm de dados denominado data warehouse que possibilita a minerao 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 cmodos da casa esto dispostos globalmente, juntamente com seu tamanho, forma e relacionamento entre eles, tambm representas as portas e janelas que permitem movimento para dentro e para fora dos cmodos. Em outras palavras a planta baixa nos da uma viso geral da

ELEMENTOS DE PROJETO DE DADOS Projeto de dados (algumas vezes denominado arquitetura de dados) cria um modelo de dados e/ou informaes

casa. De modo semelhante elementos de projeto arquitetural nos da uma viso geral do software. Elementos de projeto arquitetural nos do uma viso geral do software. O modelo arquitetural derivado de trs fontes: (1) informao sobre o domnio de aplicao para o software a ser construdo; (2) elementos especficos do modelo de analise como diagramas de fluxo de dados ou classe de anlise, seus relacionamentos e colaboraes para o problema, e (3) a disponibilidade de padres arquiteturais.

da engenharia de software pois ela incorpora elementos estticos como o leiaute, cor, grficos e elementos ergonmicos como a localizao e disposio da informao. O projeto de interfaces externas requer informao definitiva sobre a entidade para qual a informao enviada ou recebida. O projeto de interfaces internas alinhado juntamente com o projeto de componentes.

ELEMENTOS DE PROJETO DA INTERFACE O projeto da interface do software semelhante a um conjunto de desenhos detalhados para portas, janelas e instalaes de uma casa. Os desenhos nos indicam o tamanho e as formas das portas e janelas, e a maneira pela qual elas operam. Em essncia os desenhos detalhados contam-nos como coisas e informaes fluem para dentro e para fora da casa. Os elementos do projeto de interface contam-nos como a informao flui para dentro e para fora do sistema e como ela disseminada entre os componentes definidos como parte da arquitetura. H trs importantes elementos no projeto de interface. A interface com o usurio Interfaces externas com outros sistemas, dispositivos, redes ou outros produtores ou consumidores de informao. Interfaces internas entre vrios componentes de projeto.

ELEMENTOS DE PROJETO EM NIVEL DE COMPONENTE

ECIMENTOS
O projeto em nvel 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 algortmicos para todo o processamento que ocorre em um componente e em uma interface que d acesso a todas as operaes do componente (comportamento). No contexto da engenharia de software orientado a objetos, um componente representado nas formas diagramticas UML.

GestoDeSen sor

Sensor

O projeto de interface do usurio uma ao bastante importante dentro

A figura mostrada esta representando um componente chamado GestoDeSensor e a linha conecta o componente a uma classe chamada sensor que associada a ele. O componente realiza todas as funes

associadas aos configurando.

sensores

os

ELEMENTOS DE PROJETO EM NIVEL DE IMPLANTAO

engenheiro eletricista usa um circuito integrado para resolver um elemento especifico de um problema. Os padres de projeto podem ser descritos como mostrados a seguir. Nome do padro descreve a essncia do padro em um curto, mas expressivo nome. Inteno descreve o padro e o que ele faz. Tambm-conhecido-como lista os sinnimos do padro. Motivao exemplo do problema. fornece

Elementos de projeto em nvel de implantao indicam como a funcionalidade e os subsistemas do software sero alocados no ambiente computacional fsico que vai apoiar o software. Por exemplo, um determinado software tem os seus elementos configurados para operar em trs ambientes computacionais, um PC baseado em uma casa, outro PC utilizado como painel de controle e um servidor.

um

Aplicabilidade notifica as situaes especificas de projeto nas quais o padro aplicvel. Estrutura descreve as classes necessrias para implementar o padro. Participantes descreve as responsabilidades das classes que so necessrias para implementar o padro. Colaboraes descreve como os participantes colaboram para cumprir suas responsabilidades. Consequncias descreve as influncias de projeto que afetam o padro e os potenciais compromissos que devem ser considerados quando o padro implementado. Padres relacionados referncias cruzadas relacionadas a padres de projeto.

PROJETO DE SOTWARE BASEADO EM PADRO

Os melhores projetistas em qualquer campo tem a habilidade incomum de ver padres que caracterizam um problema e padres correspondentes que podem ser combinados para criar uma soluo. Durante todo o processo de projeto, um engenheiro de software deve procurar toda a oportunidade de reutilizar padres de projeto existentes (quando eles satisfazem as necessidades do projeto) em vez de criar outros.

DESCRIO DE UM PADRO DE PROJETO As disciplinas de engenharia fazem uso de milhares de padres de projeto existentes, por exemplo, um

USO DE PADRES DE PROJETO

FRAMEWORKS Framework um conjunto de classes que colaboram para realizar uma responsabilidade para um domnio de um subsistema da aplicao - Fayad e Schmit Tambm chamado de arcabouo, frameworks um esqueleto com uma coleo de pontos conectveis que lhe possibilitam adaptar-se a um domnio especifico de problema. Os pontos de conexo possibilitam a um projetista integrar classes ou funcionalidades especficas do problema no esqueleto. Em contexto orientado a objetos, arcabouo uma coleo de classes em cooperao. 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 domnio especifico. Framework conceitual no se trata de um software executvel, mas sim de um modelo de dados para um domnio. J no framework de software compreende de um conjunto de classes implementadas em uma linguagem de programao, usadas para auxiliar o desenvolvimento de software.

Os padres de projeto podem ser utilizados por todo o processo de desenvolvimento do software. Aps desenvolvido o modelo de analise, o projetista pode examinar uma representao detalhada do problema a ser resolvido e as restries impostas pelo problema. A descrio do problema examinada em vrios nveis de abstrao para determinar se ela responsvel por um ou mais dos trs tipos de padres existentes detalhados a seguir Padres Arquiteturais Esses padres definem uma estrutura global do software, indicam o relacionamento entre subsistemas e componentes do software e definem as regras para especificar relacionamentos entre os elementos(classe, pacotes, componentes) Padres de projeto Esses padres atendem a um elemento especifico do projeto tal como uma agregao de componentes para resolver algum problema de projeto, relacionamentos entre componentes ou os mecanismos para efetuar a comunicao componente a componente. Idiomas tambm chamados de padres de cdigos, esses padres especficos de linguagem geralmente implementam um elemento algortmico de um componente, um protocolo especifico de interface, ou um mecanismo para comunicao entre componentes.

REFERNCIAS PRESSMAN, RogerS.Engenharia de Software, 6.ed, 2006.

Exerccios 1) 2) 3) 4) 5) Por que na fase de projeto onde se constitui a qualidade do software? O que so e para que servem as RTFs? Por que a independncia funcional importante em um projeto? Como funciona a modularidade? O que refinamento e para que serve?

6) Refinamento um complemento da abstrao? Explique o porque. 7) O que refabricao? E como ela ajuda no desenvolvimento de um software? 8) Qual a diferena 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 diferena entre modelo de analise e modelo de projeto? 12) Qual a importncia 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 nvel de componente? 16) Para que serve elementos de projeto em nvel de implantao? 17) O que um padro? E para que serve no desenvolvimento de um software? 18) Defina o que : padro arquitetural, padro de projeto, idiomas.

Você também pode gostar