Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLara Menezes Alterado mais de 9 anos atrás
1
Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena
3
Inicialmente o dbViz Bugs, bugs e mais bugs... La Maison Projeto do 4º período (ES + GDI) JAVA (JDBC) Sistema de gerenciamento de eventos
5
Dados gerais 44 classes 10.327 linhas de código =~ 2065 linhas/aluno Funcionalidades Clientes Eventos Buffet (comidas, bebidas, serviços diversos) Relatórios
7
Exceções Espalhadas em pontos distintos do código Negócio Existentes em classes que não são de controle Persistência Regras relacionadas ao controle de transação misturadas com as regras de negócio Interface Maior porcentagem do projeto Eventos Espalhados pelo código de interface
8
Tempo total para marcações 3 dias Marcações por membro da equipe 9 classes para cada
9
private JButton getBotaoRemover() { if (botaoRemover == null) { botaoRemover = new JButton(); botaoRemover.setBounds(new java.awt.Rectangle(245,332,100,25)); botaoRemover.setText("Remover"); botaoRemover.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { String cpf = (String) tableFuncionario.getValueAt(0, 1); if( cpf.trim().equalsIgnoreCase("resultados.") || cpf == null || cpf.trim().equalsIgnoreCase("")) { JOptionPane.showMessageDialog(null,"Nenhum Funcionario Selecionado.“, "Erro", JOptionPane.INFORMATION_MESSAGE); } else { try { int res = JOptionPane.showConfirmDialog(null, "Deseja excluir o cliente selecionado?"); if( res == JOptionPane.OK_OPTION ) { TelaProcurarFuncionario.this.pai.getFachada().removerFuncionario( cpf ); JOptionPane.showMessageDialog(null,"Funcionario removido com sucesso","Sucesso",JOptionPane.INFORMATION_MESSAGE); tableFuncionario.setValueAt("Sem ",0,0); tableFuncionario.setValueAt("resultados.",0,1); } catch (SQLException e1) { JOptionPane.showMessageDialog(null,"Erro na remoção","Falha",JOptionPane.ERROR_MESSAGE); e1.printStackTrace(); } }); } return botaoRemover; }
10
Métricas SLOCCDCCDODOSCDOSM Tratamento de Exceções 151819410,9400,961 Regras de Negócio 69514970,9000,956 Persistência115111720,8680,955 Interface com Usuário 6180153560,9340,992 Tratamento de Eventos 102514420,9130,970
11
Conclusões: Concerns Crosscutting: ▪ Interface X Exceções ▪ Persistência X Negócio
14
Exemplos (1/3)
15
Exemplos (2/3)
16
Exemplos (3/3)
17
Configuração
18
Resultados 293 clones Concerns Envolvidos ▪ Interface com Usuário ▪ Persistência Composição ▪ 33 Clones de Persistência ▪ 260 Clones de Interface com Usuário
20
Concern Eventos Código de eventos desviado para um aspecto Basicamente adição e implementação de métodos dos listeners da GUI. Resultou em 1100 linhas de código
21
Concern Persistencia Localizado estritamente na camada de dados Não foi necessário refatorá-lo
22
Concern GUI Muita repetição de código No entanto são declaração de atributos e métodos Gets e Sets. Não foi encontrada uma solução razoável para o problema. Herança seria uma solução no entanto as classes de GUI já extendem algum elemento javax.swing
23
Refatorando Concern Negócio Muitos métodos executavam a mesma coisa ▪ Ex: set(int n) ▪ If( n >= 0 ) Esse tipo de redundância foi fatorada e colocada em aspectos. Um aspecto chegou a atuar em 75 posições diferentes do código.
24
Refatorando Concern Validação Esse concern foi desentrelaçado do concern GUI Para cada campo (JTextField) da interface gráfica havia um tipo de mascara, que limitava os tipos de caracter que podiam ser entrados tais como: somente números, somente texto, validar CPF e etc. Todo esse código validação foi retirado da GUI e colocado em Aspectos.
25
Refatorando Refatores Utilizados Foi utilizado no eclipse o refactor “extract method” 6 vezes, nas classes do pacote dados, para se retirar clones. Foram usadas as seguintes leis descritas no artigo “Deriving Refactorings for AspectJ”. ▪ Add empty aspect – 5 vezes ▪ Add after-call – 50 vezes ▪ Add around-call – 8 vezes ▪ Merge advices – 16 vezes
26
Refatorando Clones após colocação de aspectos ▪ Pela ferramenta CCFINDER os clones foram reduzidos de 293 para 270, ficando a grande maioria destes clones restantes na GUI, por terem sidos gerados pelo visual editor. ▪ A remoção destes clones do código, impossibilitaria o funcionamento do visual editor, o que aumentaria o tempo de manutenção da GUI.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.