La Maison des Evenements
description
Transcript of La Maison des Evenements
![Page 1: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/1.jpg)
Lucas FigueiredoMarcelo PereiraRanieri ValençaRosana MatosValmir Sena
![Page 2: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/2.jpg)
![Page 3: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/3.jpg)
Inicialmente o dbViz Bugs, bugs e mais bugs...
La Maison Projeto do 4º período (ES + GDI) JAVA (JDBC) Sistema de gerenciamento de eventos
![Page 4: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/4.jpg)
![Page 5: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/5.jpg)
Dados gerais 44 classes 10.327 linhas de código =~ 2065
linhas/aluno Funcionalidades
Clientes Eventos Buffet (comidas, bebidas, serviços diversos) Relatórios
![Page 6: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/6.jpg)
![Page 7: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/7.jpg)
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
![Page 8: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/8.jpg)
Tempo total para marcações 3 dias
Marcações por membro da equipe 9 classes para cada
![Page 9: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/9.jpg)
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;}
![Page 10: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/10.jpg)
MétricasSLOC CDC CDO DOSC DOSM
Tratamento de Exceções
1518 19 41 0,940 0,961
Regras de Negócio
695 14 97 0,900 0,956
Persistência 1151 11 72 0,868 0,955
Interface com Usuário
6180 15 356 0,934 0,992
Tratamento de Eventos
1025 14 42 0,913 0,970
![Page 11: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/11.jpg)
Conclusões: Concerns Crosscutting:
▪ Interface X Exceções▪ Persistência X Negócio
![Page 12: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/12.jpg)
![Page 13: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/13.jpg)
![Page 14: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/14.jpg)
Exemplos (1/3)
![Page 15: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/15.jpg)
Exemplos (2/3)
![Page 16: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/16.jpg)
Exemplos (3/3)
![Page 17: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/17.jpg)
Configuração
![Page 18: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/18.jpg)
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
![Page 19: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/19.jpg)
![Page 20: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/20.jpg)
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
![Page 21: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/21.jpg)
Concern Persistencia Localizado estritamente na camada de
dados Não foi necessário refatorá-lo
![Page 22: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/22.jpg)
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
![Page 23: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/23.jpg)
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.
![Page 24: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/24.jpg)
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.
![Page 25: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/25.jpg)
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
![Page 26: La Maison des Evenements](https://reader035.fdocumentos.tips/reader035/viewer/2022062722/568138c8550346895da08298/html5/thumbnails/26.jpg)
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.