Programação orientada a aspectos Marcação de Concerns Paulo Fagner Thiago Brayner Tiago...

Preview:

Citation preview

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

Recommended