lucas figueiredo marcelo pereira ranieri valença rosana matos valmir sena
TRANSCRIPT
![Page 1: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/1.jpg)
Lucas FigueiredoMarcelo PereiraRanieri ValençaRosana MatosValmir Sena
![Page 2: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/2.jpg)
![Page 3: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/4.jpg)
![Page 5: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/6.jpg)
![Page 7: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/8.jpg)
Tempo total para marcações 3 dias
Marcações por membro da equipe 9 classes para cada
![Page 9: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/11.jpg)
Conclusões: Concerns Crosscutting:
▪ Interface X Exceções▪ Persistência X Negócio
![Page 12: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/12.jpg)
![Page 13: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/13.jpg)
![Page 14: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/14.jpg)
Exemplos (1/3)
![Page 15: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/15.jpg)
Exemplos (2/3)
![Page 16: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/16.jpg)
Exemplos (3/3)
![Page 17: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/17.jpg)
Configuração
![Page 18: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/19.jpg)
![Page 20: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/html5/thumbnails/21.jpg)
Concern Persistencia Localizado estritamente na camada de
dados Não foi necessário refatorá-lo
![Page 22: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena](https://reader036.vdocuments.site/reader036/viewer/2022062818/570638471a28abb8238f3831/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.