Post on 22-Apr-2015
Programação orientada a aspectosMarcação de ConcernsPaulo FagnerThiago BraynerTiago Vinícius
Descrição do sistema:Projeto Go2
• Sistema de Gerenciamento e Controle do Transporte Coletivo
• Automação do monitoramento.
• Maior precisão nos dados.
• Inclusão de GPS nos ônibus
Descrição do sistema:Funcionalidades
•Cadastro de Empresa, ônibus, linhas e ponto de controles.
•Permite o monitoramento em tempo real da frota de ônibus.
•Geração de Relatórios para analise
Descrição do sistema:Classes / linha de código
•Nº Classes = 123
•N° Pacotes = 29
•Nº Linhas de código ~= 13.000
Lista de concernsConcerns Principais• Persistência• Agente• Exceção• Testes• Negócio• Relatórios• Carregador• Classes Básicas• Helpers• Actions
Hierarquia de concerns
Atividade de marcação de concerns•Linhas marcadas
▫Quantidade = 7.776▫18h para realização de marcação▫Apenas Requisitos funcionais
•Concerns não triviais:▫Agente, Relatório e Carregador
Métricas
Exemplo de concerns (1/3)• Exceção
Exemplo de concerns (2/3)• Relátorio
Exemplos de concerns (3/3)•Persistência, Action e tratamento de exceção.public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String numero = request.getParameter("numero");
String codigoLin = request.getParameter("linha");
try {
Linha lin = ControladorServlet.FACHADA.buscarLinhaPorCodigo(codigoLin);
Onibus bus = ControladorServlet.FACHADA.buscarOnibus(Long.parseLong(id));
if (lin != null) {
lin.inserirOnibus(bus);
}
bus.setNumero(numero);
ControladorServlet.FACHADA.atualizarOnibus(bus);
ControladorServlet.FACHADA.atualizarLinha(lin);
} catch (NumberFormatException e) {
retorno = "onibus2.jsp?msg=8&codigo=0&posTab=" + posTab;
} catch (FindException e) {
retorno = "onibus2.jsp?msg=2&codigo=0&posTab=" + posTab;
}
request.getRequestDispatcher(retorno).forward(request, response);
}
Conclusão
•Dificuldades▫Para definir os concerns.▫Uso da ferramenta
•As métricas são úteis, mas não suficientes.
•Crosscutting Concerns encontrados:▫Código de persistência e de negocio na
geração de relatórios.
2º PARTE
Identificação e Analise de Clones
Gráfico de Clones (1)
Clones encontrados: 901
Gráfico de Clones (2)
Clones encontrados: 1025
Clones por concerns• Persistência = 283• Agente = 23• Testes = 241• Relatórios = 16• Carregador = 8• Classes Básicas = 18• Actions = 20• Helpers = 169
Clones encontrados (1/2)
Clones encontrados (2/2)
Concerns encontrados no clone.
3º PARTE
Modificações Realizadas
•Refactoring OO
•Refactoring OA
•Remoção das classes de testes (Classes Básicas, Repositórios e Agent).
Refactoring do Eclipse
•Extract Metodo ▫Metodos de Relatorio
•Extract Interface▫Interface dos repositórios
Refactoring OO
•Criação das Classe de Negócio
•Generics (nos repositórios)
•Abstract Factory (construção dos repositórios)
•Remoção de Stubs e métodos main( )
•Criação da classe Helper
Refactoring OA
•Inserção De Aspectos:▫Excecao – tratamento de exceções
pointcuts: tratamento das exceções RuntimeException, NumberFormatException, FindException*, CreateException*, FindExceptionParam*
▫Transacao – transações da persistência pointcuts: abrangem os métodos de inserção,
remoção e pesquisa das classes de repositório.
Refactoring OA• Trecho do aspecto Excecao
Refactoring OA• Trecho do aspecto Transacao
Gráfico de Clones (Antigo/Novo)
Análise do Gráfico de ClonesConcerns Clones
(antigo)Clones (refactoring)
Persistência 283 17
Agente 23 7
Testes 241 0
Stub 89 0
Relatórios 16 6
Povoadores 8 8
Classes Básicas 18 18
Actions 20 17
Helpers 169 41
Negócio 0 16
Total 901 130