Conceitos e localização de conceitos
Etapa fundamental do design da mudança
Realizada logo após a iniciação
Initiation Concept Location Impact Analysis Prefactoring Actualization Postfactoring V E R I F I C A T I
Papel da localização de conceitos
A localização de conceitos encontra o
fragmento de código onde uma mudança será
realizada
Solicitações
de
mudança
são
mais
frequentemente formuladas em termos dos
conceitos do domínio
Exemplo: “Corrigir o erro que ocorre quando se
tenta colar um texto”
Compreensão parcial de código-fonte
Programas
grandes
não
podem
ser
compreendidos completamente
•
Programadores buscam a compreensão mínima
essencial para a tarefa particular
•
Eles usam uma estratégia de “quando necessário”
•
Eles tentam entender como certos
conceitos
específicos são refletidos no código
Detalhe de ortografia
(Merriam-Webster)
Inten
s
ion \in-’ten(t)-shən\ (em português, intensão)
synonym CONNOTATION
the suggesting of a meaning by a word apart from the thing it
explicitly names or describes b: something suggested by a word or
thing — W. R. Inge> an essential property or group of properties of a
thing named by a term in logic
Inten
t
ion \in-’ten(t)-shən\ (em português, intenção)
synonyms INTENT , PURPOSE , DESIGN , AIM , END ,
OBJECT , OBJECTIVE, GOAL mean what one intends to
accomplish or attain.
Exemplo de conceito: Cão
<<intensão >>
<<nome>>
Cão / Dog / Hund
<< extensões >>
Mamífero peludo com
dentes…
Beethoven
Lassie
Localização de conceitos
Extensões de conceitos são implementadas
como fragmentos de código
•
variáveis, classes, métodos ou outros
Programadores devem achar estes
fragmentos de código
•
É fácil em programas pequenos ou em
programas que o programador conhece bem
•
É difícil em programas grandes ou em
Busca nos trechos desconhecidos de um
sistema
Formulando uma consulta
Extrair o conjunto de conceitos usados na
solicitação de mudança
Remover os conceitos destinados apenas à
comunicação com os programadores
Remover os conceitos que não terão
provável implementação no código
•
conceitos relacionados a coisas que estão for a
do escopo do programa
Exemplo
Sistema de Ponto-de-Vendas (PDV)
Solicitação de mudança é “Implementar um
pagamento com cartão de crédito”
Identificar os conceitos
•
“Implementar”
•
“Cartão de crédito”
•
“Pagamento”
Exemplo
Sistema de Ponto-de-Vendas (PDV)
Solicitação de mudança é “Implementar um
pagamento com cartão de crédito”
Identificar os conceitos
•
“
Implementar
” …
comunicação com o
programador
•
“Cartão de crédito”
•
“Pagamento”
Exemplo
Sistema de Ponto-de-Vendas (PDV)
Solicitação de mudança é “Implementar um
pagamento com cartão de crédito”
Identificar os conceitos
•
“
Implementar
” …
comunicação com o
programador
•
“Cartão de crédito”
… a ser implementado, não
está no
código antigo
Exemplo
Sistema de Ponto-de-Vendas (PDV)
Solicitação de mudança é “Implementar um
pagamento com cartão de crédito”
Identificar os conceitos
•
“
Implementar
” …
communication with
programmer
•
“Cartão de crédito”
… a ser implementado, não
está no
código antigo
•
“Pagamento” !!! Conceito significativo,
Como reconhecer o conceito
Lendo o código
Comentários e identificadores
Algoritmos próprios (plano)
Pequena modificação
Mudar o código levemente e executar
Descartar esta modificação!
Metodologias de localização de
conceitos
Conhecimento humano
Ferramentas de rastreabilidade
Busca dinâmica (rastros de execução)
Busca estática
busca por dependências
"grep" (casamento de padrões)
Técnica de busca com GREP
GREP é uma sigla para "global regular expression print".
GREP imprime as linhas que contêm o casamento com uma
expressão regular.
Programador formula iterativamente uma expressão de busca e
então investiga os resultados.
Se os resultados são grandes demais para revisar, ou o
programador realiza uma busca adicional sobre estes resultados
ou reformula a expressão de busca.
Exemplo: Art of Illusion
Estúdio de modelagem 3D, escrito em Java
Mais de 600 classes, 100838 LOC.
Implementar um controle de zoom
Atualmente, a única forma de fazer zoom é entrar
o valor de zoom em uma caixa de texto específica
um valor de zoom tem de ser digitado pelo usuário
O valor default é100%.
Implementar um controle de zoom que use as
Exemplo com GREP
Primeira busca: “zoom”
A busca produziu 6 linhas irrelevantes
Segunda busca: “scale”
Retornou 1544 linhas, grande demais para
inspecionar.
Terceira busca: “100”
Valor de escala default é 100
Busca entre os resultados da busca anterior
Retornou 4 linhas do arquivo ViewerCanvas.java.
Inspeção
Técnica de busca por dependências
Usa Grafos de Dependências de Classes
(CDG)
Extraídos do código existente.
Funcionalidade local
Conceitos que são implementados no módulo e
não são delegados a outros módulos.
Funcionalidade composta
Funcionalidade completa de um módulo
Funcionalidades do componente X
Concept A
Concept B
Component X
Local
responsibility
Localização de conceitos através de busca de
dependências
Busca por dependências – parte 1
Comece na classe ModelingApp
Conceito não está contido dentro da responsabilidade
local da classe
Próximo passo: inspecionar LayoutWindow
Responsável pela construção da janela principal do AOI
Responsabilidade composta contém o conceito, mas a
responsabilidade local não o contém.
Havia pistas que levaram a buscar em ValueField
Implementa a caixa de texto.
Busca por dependências – parte 2
A classe SceneViewer
Várias funções são responsáveis por responder
aos eventos do usuário
A função updateImage() era responsável por
repintar a tela
Descobriu-se que a responsabilidade composta
desta função continha o conceito.
A responsabilidade local de SceneViewer ainda
não continha o conceito
Comparação das técnicas
A técnica baseada em grep
Depende do uso de convenções de
nomenclatura
Independente da estrutura de classes
Ferramentas GREP fornecem apenas a lista dos
resultados de busca
Adequada apenas para conceitos explícitos
A técnicas de busca por dependências
estáticas
Exemplo com Violet
Violet
Editor de UML de código aberto
Apoia o desenho de diagramas UML
Diagrama de classes, diagrama de sequência,
diagrama de estados, diagrama de objetos,
diagrama de casos de uso
60 classes e 10000 linhas de código
http://sourceforge.net/projects/violet/
Solicitação de mudança
Registrar o autor de cada figura
Esta mudança tornará o Violet mais
versátil
Suporte para trabalho cooperativo
O autor criou uma figura
O autor conhece a semântica da figura
Nome do conceito: “author”
Extensão de conceito implícito
A extensão não está presente no código atual
Localizando propriedades da figura: Início
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipClasses a inspecionar
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipEdge PackageNode ClassNode InterfaceNode NoteNode
Fornecedor mais provável
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipPróximas classes a inspecionar
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipEdge PackageNode ClassNode InterfaceNode NoteNode
Caminho errado
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipBacktrack
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipEdge PackageNode ClassNode InterfaceNode NoteNode
Conceito localizado
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipPossível extensão da busca
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipEdge PackageNode ClassNode InterfaceNode NoteNode
Outra localização realizada
UMLEditor SequenceDiagram Graph UseCaseDiagram Graph ClassDiagram Graph ObjectDiagram Graph StateDiagram Graph ClassRelationshipExemplo 2: Eclipse 3.3
Eclipse – Ambiente de desenvolvimento
integrados para Java (dentre outras
linguagens)
15479 classes, 156334 métodos
Solicitação de mudança: BugID 172261*:
[Actions] When rename a file in one
project’s navigator, the other selected file’s
name is renamed
8 s
up
plie
rs
CLDS no Eclipse 3.3
FrameworkCommandProv
ider
MSG
NLSCLDS no Eclipse 3.3
103
5 s
CLDS no Eclipse 3.3
…
CLDS no Eclipse 3.3
CLDS - resultados
Classe principal: Launcher
Número mínimo possível de classes
visitadas = 4
Número de classes propostas a serem
visitadas =1076 (1+8+1035+32)
Programadores podem facilmente se
perder quando JRipples requerer que
sejam visitados um grande número
de fornecedores de uma classe
Ferramenta interativa para localização de
conceitos
Localização de conceitos por grep
Técnica clássica para localização de
conceitos
Baseada em casamento de padrões
Programador formula uma consulta
Baseada no(s) nome(s) do conceito(s)
Grep busca nos arquivos
Encontra as linhas de código correspondentes
(“acertos”)
Programador investiga os acertos
Exemplo: Bug “Anchors” no Mozilla*
Solicitação de mudança
Anchors in e-mails are broken (Clicking Anchor
doesn't go to target in e-mail)
Conhecimento inicial
HTML document typeOf
Conhecimento após a aprendizagem
Resultado da busca repetida
Programador aprende a partir das buscas
“mailbox: //" URI
propertyOf partOf