lucas figueiredo marcelo pereira ranieri valença rosana matos valmir sena

26
Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

Upload: lara-menezes

Post on 07-Apr-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

Lucas FigueiredoMarcelo PereiraRanieri ValençaRosana MatosValmir Sena

Page 2: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena
Page 3: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

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
Page 5: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

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
Page 7: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

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

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

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

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

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
Page 13: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena
Page 14: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

Exemplos (1/3)

Page 15: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

Exemplos (2/3)

Page 16: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

Exemplos (3/3)

Page 17: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

Configuração

Page 18: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

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
Page 20: Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena

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

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

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

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

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

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

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.