Download
lucas figueiredo marcelo pereira ranieri valen a rosana matos valmir sena n.
Skip this Video
Loading SlideShow in 5 Seconds..
La Maison des Evenements PowerPoint Presentation
Download Presentation
La Maison des Evenements

La Maison des Evenements

135 Vues Download Presentation
Télécharger la présentation

La Maison des Evenements

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena La Maison desEvenements

  2. Projeto

  3. Projeto • Inicialmente o dbViz • Bugs, bugs e mais bugs... • La Maison • Projeto do 4º período (ES + GDI) • JAVA (JDBC) • Sistema de gerenciamento de eventos

  4. Projeto

  5. Projeto • Dados gerais • 44 classes • 10.327 linhas de código =~ 2065 linhas/aluno • Funcionalidades • Clientes • Eventos • Buffet (comidas, bebidas, serviços diversos) • Relatórios

  6. Concerns

  7. Concerns • 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. Concerns • Tempo total para marcações • 3 dias • Marcações por membro da equipe • 9 classes para cada

  9. Concerns privateJButtongetBotaoRemover() { if (botaoRemover == null) { botaoRemover = newJButton(); botaoRemover.setBounds(newjava.awt.Rectangle(245,332,100,25)); botaoRemover.setText("Remover"); botaoRemover.addActionListener(newjava.awt.event.ActionListener() { publicvoidactionPerformed(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 { intres = 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(); } } } }); } returnbotaoRemover; }

  10. Concerns • Métricas

  11. Concerns • Conclusões: • Concerns Crosscutting: • Interface X Exceções • Persistência X Negócio

  12. Clones

  13. Clones

  14. Clones • Exemplos (1/3)

  15. Clones • Exemplos (2/3)

  16. Clones • Exemplos (3/3)

  17. Clones • Configuração

  18. Clones • 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

  19. Refatorando

  20. Refatorando • 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. Refatorando • Concern Persistencia • Localizado estritamente na camada de dados • Não foi necessário refatorá-lo

  22. Refatorando • 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.