A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena."— Transcrição da apresentação:

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

2

3  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

5  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

7  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  Tempo total para marcações  3 dias  Marcações por membro da equipe  9 classes para cada

9 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; }

10  Métricas SLOCCDCCDODOSCDOSM Tratamento de Exceções 151819410,9400,961 Regras de Negócio 69514970,9000,956 Persistência115111720,8680,955 Interface com Usuário 6180153560,9340,992 Tratamento de Eventos 102514420,9130,970

11  Conclusões:  Concerns Crosscutting: ▪ Interface X Exceções ▪ Persistência X Negócio

12

13

14  Exemplos (1/3)

15  Exemplos (2/3)

16  Exemplos (3/3)

17  Configuração

18  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

20  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  Concern Persistencia  Localizado estritamente na camada de dados  Não foi necessário refatorá-lo

22  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.


Carregar ppt "Lucas Figueiredo Marcelo Pereira Ranieri Valença Rosana Matos Valmir Sena."

Apresentações semelhantes


Anúncios Google