1 / 26

La Maison des Evenements

Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena. La Maison des Evenements. Projeto. 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. Projeto. Projeto.

haroun
Download Presentation

La Maison des Evenements

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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.

More Related