Práticas de Engenharia de
Software
Reutilização de software
- Introdução
PROFESSOR: Claudio Roberto de Lima Martins
claudiomartins2000@gmail.com
Tópicos
▶ Reutilização: conceito
▶ Benefícios e dificuldades
▶ Desenvolvimento baseado em componentes
Desenvolvimento com reutilização
Desenvolvimento para reutilização
2
2
Reutilização (definição nos dicionários)
▶ Reutilizar, v.t.d.
1. Tornar a utilizar. 2. Dar novo uso a.
▶ Reutilização, s.f.
1. Ato ou efeito de reutilizar. 2. Procedimento em que,
material que já for a anteriormente processado, após
tratamento conveniente, se insere numa corrente ou
processo
[FERREIRA, Aurélio B. H. “Novo Dicionário da Língua Portuguesa”. Rio de
Janeiro, RJ: Nova Fronteira, 2ª edição, 1986.]
3
Reutilização de software
▶ Atividade comum
Engenheiros mecânicos ou
elétricos dificilmente
especificam um projeto no qual
os componentes tenham que
ser fabricados especialmente
São reutilizados desde
componentes pequenos
(válvulas, transístores) até
componentes mais complexos
(motores, turbinas)
5
Reutilização em Engenharia de Software
6
Histórico
7
Reutilizar: sim ou não?
▶ Vantagens:
Desenvolvimento acelerado pois custos com
desenvolvimento e validação são reduzidos
Conformidade com padrões
Maior confiabilidade, pois utilizam-se soluções já
experimentadas
8
Reutilizar: sim ou não?
▶ Dificuldades:
Seleção, recuperação e modificação de artefatos
reutilizáveis
Compreensão dos artefatos recuperados
Qualidade dos artefatos recuperados
Composição de aplicações a partir dos artefatos
recuperados
Síndrome do “não foi inventado aqui”
Falta de ferramentas de apoio pois atualmente os CASE
não apoiam desenvolvimento com reutilização
→ será válido ainda hoje?
9
Requisitos para reutilização
10
Níveis e escalas de Abstração
▶ Reutilização pode ser considerada em todas as fases
do desenvolvimento e em nível (escala) de tamanho
do que ser reutilizar.
▶ Pode-se reutilizar:
Artefatos intermediários → padrões de software
Reúso de modelos (templates), ideias e padrões (patterns).
Sistemas
Um sistema pode ser reusado por incorporação à outro sistema.
Pode ser necessário customização
Componentes
Reuso de média granularidade. Exemplo: componente arquitetural
ou subsistema.
Funções/Objetos (código)
Tipo mais comum de reutilização.
11
Planejamento para Reutilização
13
Processo: Planejamento
14
Fatores do Planejamento
15
Cronograma e Ciclo de Vida
▶ Cronograma de Desenvolvimento
Se o cronograma de entrega é apertado, reutilzar pode
agilizar a entrega do produto
16
Equipe e Domínio
▶ Domínio da aplicação
Em alguns domínios, é fácil encontrar componentes e
bibliotecas para reusar
17
Processo: Criação dos Artefatos
18
Engenharia de Domínio
▶ Domínio:
Uma coleção de problemas reais
Uma coleção de aplicações que compartilham
características comuns
▶ Identificar, construir, catalogar e disseminar um
conjunto de artefatos que podem ser utilizados em
softwares de um domínio específico.
▶ Com a Engenharia de Domínio é possível definir
modelos de domínios e arquiteturas comuns à uma
família de aplicações.
▶ Formalizar teorias específicas a um domínio
19
Processo: Gerência dos Artefatos
20
Utilização dos Artefatos
21
Panorama da reutilização de software
22
Técnicas (1)
▶ Padrões de projeto e de arquitetura
Padrões (patterns) são soluções genéricas para problemas
recorrentes
▶ Frameworks de aplicação
Coleção de classes abstratas e concretas que criam a
estrutura de uma aplicação
▶ Componentes
Subsistemas que são integrados para criação da aplicação
23
Técnicas (2)
▶ Empacotamento de sistemas legados
Sistemas legados são empacotados pela definição de
interfaces de acessos
▶ Sistemas orientados a serviços
Sistemas desenvolvidos pela criação de serviços
compartilhados
▶ Bibliotecas de programas
Classes e funções que implementam abstrações
comumente usadas
▶ Desenvolvimento dirigido por modelos
O código é gerado a partir de modelos de domínio e
modelos de implementação
24
Técnicas (3)
25
Desenvolvimento Baseado em
Componentes (DBC)
26
Desenvolvimento baseado em componentes (DBC) -
Histórico
▶ Em 1969, McIlRoy já vislumbrava uma indústria de
componentes de software reutilizáveis.
1976: linguagens de interconexão de módulos
Abordagens até então se baseavam fortemente em código
▶ No Final da década de 90 havia uma frustração com o
reutilização de classes da programação orientada a objetos
(POO)
▶ A Reutilização na POO é limitada pois:
Classes não são unidades executáveis por si só, isto é, precisam ser
compiladas ou conectadas a uma aplicação para serem utilizadas
É difícil reutilizá-las sem ter o código fonte
Têm granularidade muito baixa
▶ Atualmente: novo impulso para DBC com a Internet, Arquitetura
cliente/servidor, Modelos de Componentes Distribuídos (CORBA, COM,
REST, SOAP, etc).
27
Desenvolvimento Baseado em Componentes - Objetivo
28
O que é um “Componente”?
▶ É uma entidade executável independente.
▶ O código fonte pode não estar disponível.
▶ Sua interface é pública e conhecida, e todas as
interações são feitas por meio desta interface:
Interface fornecida (provided): define os serviços
formecidos pelo componente
Interface requerida (required): especifica os serviços que
devem estar disponíveis no contexto de uso do
componente.
▶ Sua interface é descrita em termos de operações
parametrizadas, ou seja, seu estado interno não é
exposto.
29
Definição para Componentes - consenso
30
Componente quanto à natureza
Catalysis (http://www.iconcomp.com/catalysis)
D. D'Souza e A. A. Wills
KobrA
C.Atkinson et al.
33
Reutilizar componentes: sim ou não?
▶ Custos:
Vantagens do reutilização em geral.
Redução dos riscos do processo pois o uso de componentes prontos
reduz as incertezas quanto aos custos de desenvolvimento de novos
componentes
34
Notação para components (UML)
Forma expandida
Forma abreviada
«interface»
UML 1.4 Interface_A
Componente
tipo Operação_A1 (tipo args)
Interface Interface tipo Operação_A2 (tipo args)
fornecida requerida
realiza
Interface Interface
requerida fornecida depende de
Componente
«interface»
Interface_B
tipo Operação_C1 (tipo args)
tipo Operação_C2 (tipo args)
35
Interface
ICancelaReserva IFazReserva
...
Sistema de
reserva de
hotel
...
ICobrança
IGerencia
37
Exemplo
...
ICobrança usa
IGerencia
«interface»
IGerencia
getDetalhesHotel ( )
getInfoQuartos ( )
38
Repositório de componentes
▶ Base preparada para o armazenamento e
recuperação de componentes
▶ Recuperação efetiva: informações adicionais
relativas ao componente
▶ Três tipos de repositório:
Repositórios locais
Repositórios específicos a um domínio
Repositórios de referência
39
Referência
40