59
1 Reuso de Software SCE 186- Engenharia de Software Profa Rosana T. Vaccare Braga (parte do material elaborado com base no tutorial sobre reuso da Profa. Claudia Werner)

engenharia de software

Embed Size (px)

DESCRIPTION

artigo de engenharia de software orientada a componentes

Citation preview

Page 1: engenharia de software

1

Reuso de Software

SCE 186- Engenharia de SoftwareProfa Rosana T. Vaccare Braga

(parte do material elaborado com base no tutorial sobre reuso da Profa. Claudia Werner)

Page 2: engenharia de software

2

SumárioIntroduçãoBenefícios X DificuldadesGerência de ReutilizaçãoTécnicas para Reuso

Famílias de ProdutosPadrõesFrameworksComponentes (próxima aula)

Page 3: engenharia de software

3

IntroduçãoO Reuso é inerente ao processo de solução de problemas utilizado pelos seres humanosNa medida em que soluções são encontradas, estas são utilizadas em problemas similaresNossa capacidade de abstração garante a adaptação necessária ao novo contextoO problema, portanto, não é a falta de reutilização na Engenharia de Software, mas a falta de uma sistemática ampla e formal para realizá-la

Page 4: engenharia de software

4

Definição de ReutilizaçãoReutilização de software é o processo de incorporar em um novo produto: um novo

códigoespecificações de requisitos e projetoplanos de teste, planos de teste,qualquer produto gerado durante desenvolvimentos anteriores, conhecimento em geral

Page 5: engenharia de software

5

Benefícios da reutilizaçãoMelhores índices de produtividadeProdutos de melhor qualidade, mais confiáveis, consistentes e padronizadosRedução dos custos e tempo envolvidos no

desenvolvimento de softwareMaior flexibilidade na estrutura do software produzido, facilitando sua manutenção e evolução

Page 6: engenharia de software

6

Benefícios da reutilização (cont.)

Uso efetivo dos especialistas no desenvolvimento de artefatos reutilizáveisConformidade aos padrões, por exemplo, fazendo com que os usuários cometam menos erros ao utilizarem uma interface familiar.Desenvolvimento acelerado: economia no tempo de desenvolvimento e validação

Page 7: engenharia de software

7

Requisitos para reutilização

Deve ser possível encontrar componentes reutilizáveis adequados catalogação e documentação externa efetivas.Deve-se ter certeza de que o componente se comportará conforme especificado e que será confiável certificaçãoDeve ser possível compreender o componente para adaptá-lo à nova situação

documentação interna detalhada

Page 8: engenharia de software

8

Dificuldades

Identificação, recuperação e modificação de artefatos reutilizáveisCompreensão dos artefatos recuperados Qualidade de artefatos reutilizáveisComposição de aplicações a partir de componentes

Page 9: engenharia de software

9

Dificuldades

Aumento nos custos de manutençãoFalta de ferramentas de apoio Barreiras psicológicas: síndrome do não foi inventado aquiBarreiras legais e econômicasNecessidade da criação de incentivos à reutilização

Page 10: engenharia de software

10

Estado atualDiversos progressos na área técnica: sistemas de bibliotecas; técnicas de classificação, criação e distribuição de componentes; ambientes de suporte à reutilização de componentes; Trabalhos recentes tratam de aspectos não técnicos: aspectos gerenciais, econômicos, culturais e legais Temas de Pesquisas atuais: engenharia de domínio; reutilização de processos; desenvolvimento baseado em componentes

Page 11: engenharia de software

11

Gerência de reutilização

Planejamento de Reutilização Criação de ArtefatosGerência de ArtefatosUtilização de Artefatos

Page 12: engenharia de software

12

Gerência de Reutilização

Page 13: engenharia de software

13

Criação de artefatosObjetivo: produzir software e produtos associados para o reuso (Desenvolvimento para Reutilização – Reuso Produtor)Atividades:

Análise e modelagem do Domínio (Engenharia de Domínio)Desenvolvimento de uma Infraestrutura de ReutilizaçãoEvolução do processo

Page 14: engenharia de software

14

Reuso ProdutorQuestões a serem consideradas:

Faça seu componente o mais geral possível, utilizando parâmetros e prevendo condições similares àquelas nas quais seu sistema invocará o componenteSepare as dependência de forma que seções mais propensas a mudanças sejam isoladas das que devem permanecer iguaisMantenha a interface geral e bem-definida

Page 15: engenharia de software

15

Reuso ProdutorQuestões a serem consideradas:

Inclua informações sobre problemas encontrados e resolvidosUse convenções claras para nomeaçãoDocumente as estruturas de dados e algoritmosSepare as seções de comunicação e tratamento de erros, para facilitar sua mudança.

Page 16: engenharia de software

16

Engenharia de DomínioDomínio:

Uma coleção de problemas reais Uma coleção de aplicações que compartilham características comuns

Definições p/ EDÉ o processo de identificar e organizar o conhecimento sobre uma classe de problemas, o domínio do problema, para dar suporte a sua descrição e soluçãoUma abordagem baseada em reutilização para definição do escopo, especificação da estrutura, e construção de recursos para uma classe de sistemas, subsistemas ou aplicações

Page 17: engenharia de software

17

Engenharia de Domínio

Page 18: engenharia de software

18

Engenharia de DomínioObjetivos

Originar meta Originar meta-sistemas, ou seja, sistemas que são reutilizados na construção de aplicações específicas Descobrir e definir modelos de domínio e arquiteturas comuns às famílias de aplicações para suportar reutilização pré-planejadaTornar explícito e formalizar as teorias específicas ao domínio que permitem aos projetistas e especialistas do domínio a raciocinar sobre problemas e sistemas no domínio da aplicação

Page 19: engenharia de software

19

Engenharia de DomínioEtapas:

Análise de Domínio: o conhecimento existente sobre o domínio é estudado e formalizado por meio de um modelo de domínioProjeto de Domínio: arquiteturas de software são construídas para atender aos requisitos identificados no modelo de domínioImplementação do Domínio: artefatos reutilizáveis são implementados para compor as arquiteturas

Page 20: engenharia de software

20

Utilização de ArtefatosObjetivo: compor sistemas a partir de artefatos reutilizáveis (Desenvolvimento com Reutilização – Reuso Consumidor)Atividades:

Identificação, compreensão, avaliação, seleção, adaptação e integração de artefatosFeedback ao Planejamento, Criação e Gerência de Artefatos

Page 21: engenharia de software

21

Reuso ConsumidorQuestões a serem feitas:

O componente executa a função e fornece os dados que você precisa?Se forem necessárias mudanças mínimas, trata-se de menos esforço do que construir o componente do zero?O componente está bem documentado, de forma que possa ser entendido sem ter que entender linha por linha do código?Existe um registro completo do teste do componente e histórico da revisão, para certificar que ele não tem erros?

Page 22: engenharia de software

22

Técnicas para Reuso

Famílias de ProdutosPadrões de softwareFrameworksComponentesBibliotecas de Classes

Page 23: engenharia de software

23

Famílias de Produtos

Uma família de produtos, ou linha de produtos, é um conjunto de aplicações relacionadas, que têm uma arquitetura de domínio específico em comum. Contudo cada aplicação específica é especializada de alguma maneiraO núcleo em comum da família é reutilizado cada vez que uma nova aplicação é desejada.O novo desenvolvimento pode exigir que algumas partes de código sejam escritos, ou que sejam modificados alguns componentes já existentes.

Page 24: engenharia de software

24

Famílias de Produtos

Tipos de especialização:Especialização da plataforma, por exemplo Windows, NT, Solaris e Linux (funcionalidade permanece inalterada)Especialização da configuração, por exemplo periféricos utilizadosEspecialização funcional (clientes com diferentes requisitos), por exemplo biblioteca pública ou privada têm diferentes tratamentos para multa ou privilégio dado a leitores

Page 25: engenharia de software

25

Padrões de Software

descrevem soluções para problemas que ocorrem com freqüência no desenvolvimento de softwareDiversas categorias:

padrões de processo, padrões arquiteturais, padrões de análise, padrões de projeto, padrões de programação, ...

Page 26: engenharia de software

26

Vantagens de padrões

reuso de soluções encontradas por especialistas experientes --> aumento da produtividade e qualidademelhoria na comunicação entre projetistasuniformidade na estrutura do softwaremenor complexidade (blocos construtivos)

Page 27: engenharia de software

Exemplo: Padrão de análise

STATIC 1namedescriptionsetget

STATIC 2namedescriptionsetget

ASSOCIATIONbegin_Dateend_Datecostallocate_costscreate_current_from_plan

1..1 1..1

0..m0..m

Comportamento

Atributos

(Boyd 98)

Page 28: engenharia de software

ExemploSalanomedescriçãocalcular custos da salasetget

Departamentonomedescriçãocalcular custos deptosetget

Atribuição_Sala_Deptodata_inicialdata_finalpercentagem_alocaçãoalocar_custoscriar_atribuição

1..1 1..1

0..m0..m

Page 29: engenharia de software

29

Padrões de Projeto - GoFCatálogo de Padrões de Projeto [Gamma95]

Dois critérios de classificaçãoPropósito - reflete o que o padrão faz

De Criação: trata da criação de objetosEstrutural: cuida da composição de classes e objetosComportamental: caracteriza o modo como as classes e objetos interagem e distribuem responsabilidades

EscopoClasse: trata do relacionamento entre classes e subclasses (herança - relacionamento estático)Objetos: lida com a manipulação de objetos (podem ser modificados em tempo de execução)

GoF: Gang of Four – apelido dado aos quatro autores do livro

Page 30: engenharia de software

30

Padrões de Projeto - GoFPropósito

De Criação Estrutural ComportamentalClasse Factory Method Adapter Interpreter

Template Method

Esco

po

Objeto Abstract FactoryBuilderPrototypeSingleton

AdapterBridgeCompositeDecoratorFacadeFlyweygthProxy

Chain of ResponsabilityCommandIteratorMediatorMementoObserverStateStrategyVisitor

Page 31: engenharia de software

31

Padrões de Projeto

Composite (Objeto Estrutural)Intenção (Intent)

compõe objetos em estruturas de árvore para representar hierarquias part-whole. Composite deixa o cliente tratar objetos individuais e composição de objetos uniformemente.

Page 32: engenharia de software

32

Padrões de ProjetoMotivação (Motivation)

Editores gráficos permitem aos usuários construir diagramas complexos, agrupando componentes simples

Implementação simples: definir uma classe para primitivas gráficas tais como Texto, Linhas e outras classes que agem como depósitos (containers) para essas primitivasProblema: Código que usa essas classes deve tratar primitivas e objetos do depósito diferentemente, tornando a aplicação mais complexa

Page 33: engenharia de software

33

Padrões de ProjetoO Composite cria uma classe abstrata que representa primitivas e seus depósitos.

Page 34: engenharia de software

34

Padrões de ProjetoExemplo de composição recursiva de objetos

Page 35: engenharia de software

35

Padrões de ProjetoAplicabilidade (Applicability)

representar hierarquias de objetos part-wholepermitir aos usuários ignorar a diferença entre composições de objetos e objetos individuais. Todos os objetos na estrutura são tratados uniformemente

Page 36: engenharia de software

36

Padrões de ProjetoEstrutura (Structure)

Page 37: engenharia de software

37

Padrões de ProjetoParticipantes (Participants)

Component (Grafic)declara a interface para os objetos na composiçãoimplementa o comportamento padrão para a interface comum de todas as classes, quando apropriadodeclara uma interface para acessar e gerenciar os componentes filhodefine uma interface para acessar o pai de um componente na estrutura recursiva, implementado-o se for apropriado

Page 38: engenharia de software

38

Padrões de ProjetoLeaf (Rectangle, Line, Text, etc.)

representa objetos “folha” na composição. Uma folha não tem filhosdefine o comportamento para objetos primitivos na composição

Composite (Picture)define o comportamento para componentes que têm filhosarmazena componentes filhoimplementa operações relacionadas aos filhos na interface Component

Clientmanipula objetos na composição pelo através da interface Component

Page 39: engenharia de software

39

Padrões de ProjetoColaboradores (Collaborations)

Clients usam a interface Component para interagir com objetos na estrutura composta.Se o receptor é uma folha então o pedido é manipulado diretamenteSe o receptor é um Composite então os pedidos são enviados para seus componentes filhos

Page 40: engenharia de software

40

Padrões de ProjetoConseqüências (Consequences)

define hierarquias de classes que consistem de objetos primitivos e compostossimplifica o cliente. Clientes podem tratar estruturas compostas e objetos individuais de maneira uniformefacilita a adição de novos componentes

Page 41: engenharia de software

41

Padrões de ProjetoExemplo de Código (Sample Code)

class Equipment {public:

virtual ~Equipment();

const char* Name() { return _name; }

virtual Watt Power();virtual Currency NetPrice();virtual Currency DiscountPrice();

virtual void Add(Equipment*);virtual void Remove(Equipment*);virtual Iterator* CreateIterator();

protected:Equipment(const char*);

private:const char* _name;

};

class CompositeEquipment : public Equipment {public:

virtual ~CompositeEquipment();

virtual Watt Power();virtual Currency NetPrice();virtual Currency DiscountPrice();

virtual void Add(Equipment*);virtual void Remove(Equipment*);virtual Iterator* CreateIterator();

protected:CompositeEquipment(const char*);

private:List _equipment;

};

Page 42: engenharia de software

42

Padrões de Projeto

class FloppyDisk : public Equipment {public:

FloppyDisk(const char*);virtual ~FloppyDisk();

virtual Watt Power();virtual Currency NetPrice();virtual Currency DiscountPrice();

};

Page 43: engenharia de software

43

Padrões de ProjetoUsos Conhecidos (Known Uses)

Presente em quase todos os sistemas OOA classe original View do MVCRTL Smalltalk compiler frameworkEtc.

Page 44: engenharia de software

44

Padrões de ProjetoPadrões Relacionados (Related Patterns)

Chain of ResponsibilityDecoratorFlyweightIteratorVisitor

Page 45: engenharia de software

45

Frameworks

Aplicação semi-completa reutilizável que, quando especializada, produz aplicações personalizadas (Johnson & Foote, 1988)Coleção de classes abstratas e concretas e a interface entre elas, representando o projeto de um sub-sistema (Pree, 1995)

Page 46: engenharia de software

46

Conceitos BásicosHot-Spots

Representam as partes do framework de aplicação que são específicas de sistemas individuaisSão projetados para serem genéricos - podem ser adaptados às necessidades da aplicação

Frozen-SpotsDefinem a arquitetura geral de um sistema de software - seus componentes básicos e os relacionamentos entre elesPermanecem fixos em todas as instanciações do framework de aplicação

Page 47: engenharia de software

47

Tipos de framework

Framework Caixa Branca:reuso provido por herança

Framework Caixa Pretareuso provido por composição

Framework Caixa Cinzamistura

Page 48: engenharia de software

48

Framework Caixa Branca

HotSpot

RR3

Page 49: engenharia de software

49

Framework Caixa Preta

HotSpot

R R1R2

R3

Ocorrência devariabilidade

Page 50: engenharia de software

50

Framework caixa-branca X caixa-preta

framework caixa branca é mais fácil de projetarframework caixa preta é mais fácil de usar frameworks caixa-branca evoluem para se tornar mais caixa preta• Aumenta o numero de objetos, mas eles ficam

menores• Complexidade está na interconexão• Objetos compostos de objetos menores• O “Scripting” fica mais importante e as linguagens

visuais tornam-se possíveis

Page 51: engenharia de software

51

Tipos de framework

Facilidade de desenvolvimento

Caixa Branca

CaixaPreta

CaixaCinza

Facilidade de uso

Page 52: engenharia de software

52

Classificação de Frameworksde aplicação

Frameworks de Infra-estrutura do Sistemasimplificam o desenvolvimento da infra-estrutura de sistemas portáveis e eficientes,exemplos: sistemas operacionais, comunicação, interfaces com o usuário e ferramentas de processamento de linguagemem geral são usados internamente em uma organização de software e não são vendidos a clientes diretamente

Page 53: engenharia de software

53

Classificação de Frameworksde aplicação

Frameworks de Integração de Middlewareusados em geral para integrar aplicações e componentes distribuídos.projetados para melhorar a habilidade dedesenvolvedores em modularizar, reutilizar e estender sua infra-estrutura de software para funcionar “sem costuras” em um ambiente distribuídoexemplos: Object Request Broker (ORB), middleware orientado a mensagens e bases de dados transacionais

Page 54: engenharia de software

54

Classificação de Frameworksde aplicação

Frameworks de Aplicação Empresarialvoltados a domínios de aplicação mais amplos e são a pedra fundamental para atividades de negócios das empresas.exemplos: telecomunicações, aviação, manufatura e engenharia financeira.são mais caros para desenvolver ou comprar, mas podem dar um retorno substancial do investimento, já que permitem o desenvolvimento de aplicações e produtos diretamente

Page 55: engenharia de software

55

Desenvolvimento de Software Baseado em Frameworks

Desenvolvimento do frameworkAnálise de domínio, projeto arquitetural, projeto do framework, implementação, teste e documentação

Uso do frameworkEvolução e manutenção do framework

Page 56: engenharia de software

56

Componentes de SoftwareObjetivo: quebra de blocos monolíticos em componentes interoperáveisComponentes são construídos/empacotados com o objetivo de serem reutilizados em diferentes aplicações Um componente provê um conjunto de serviços acessíveis por meio de uma interface bem definida Motivações: desenvolvimento da Internet/WWW, arquitetura cliente/servidor, computação distribuída, Orientação a Objetos, Componentware, dentre outros

Page 57: engenharia de software

57

Documentação de Componentes

Objetivos: Objetivos:definir a estrutura de dados e serviços necessários para descrever o formato de empacotamento usando padrõesapoiar o empacotamento (desenvolvimento para reutilização)apoiar a avaliação (desenvolvimento com reutilização) e permitir anotaçõesusar a tecnologia de hipermídia para apresentar a informação com interatividade

Page 58: engenharia de software

58

Desenvolvimento Baseado em Componentes (DBC)

Metodologias para o DBCUML Components

J. J. Cheesman and J. Daniels

Catalysis (http://www.iconcomp.com/catalysis)

D. D'Souza and A. A. Wills

KobrAC. Atkinson et al.

Page 59: engenharia de software

59

Bibliotecas de Classes

Classes de uso genérico podem ser disponibilizadas para reuso e importadas em múltiplas aplicaçõesEm geral são incorporadas ao código final da aplicação, ou seja, são compiladas juntamente com o restante do código.