la maison des evenements

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

Upload: haroun

Post on 04-Jan-2016

30 views

Category:

Documents


1 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: La Maison  des Evenements

Lucas FigueiredoMarcelo PereiraRanieri ValençaRosana MatosValmir Sena

Page 2: La Maison  des Evenements
Page 3: La Maison  des Evenements

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
Page 5: La Maison  des Evenements

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
Page 7: La Maison  des Evenements

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

Tempo total para marcações 3 dias

Marcações por membro da equipe 9 classes para cada

Page 9: La Maison  des Evenements

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

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

Conclusões: Concerns Crosscutting:

▪ Interface X Exceções▪ Persistência X Negócio

Page 12: La Maison  des Evenements
Page 13: La Maison  des Evenements
Page 14: La Maison  des Evenements

Exemplos (1/3)

Page 15: La Maison  des Evenements

Exemplos (2/3)

Page 16: La Maison  des Evenements

Exemplos (3/3)

Page 17: La Maison  des Evenements

Configuração

Page 18: La Maison  des Evenements

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
Page 20: La Maison  des Evenements

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

Concern Persistencia Localizado estritamente na camada de

dados Não foi necessário refatorá-lo

Page 22: La Maison  des Evenements

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

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

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

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

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.