• Nenhum resultado encontrado

atividade-2

N/A
N/A
Protected

Academic year: 2021

Share "atividade-2"

Copied!
28
0
0

Texto

(1)

Universidade Federal de Pernambuco

Centro de Informática

Disciplina:

Tópicos Avançados em Engenharia de Software (IF722)

Professor:

Paulo Henrique Monteiro Borba ([email protected])

Atividade 1

Identificando oportunidades de

aumento do reuso de código

Equipe:

 Filipe Wanderley Lima ([email protected]);

 Maria Carolina Revoredo Martiniano ([email protected]).

(2)

1

Controle de Versões

Versão

Data

Descrição

Autor(es)

(3)

2

Sumário

1. Estratégia ... 3

1.1. Métricas de arquivo ... 3

1.2. Métricas de conjunto de clones ... 3

2. Configuração escolhida ... 4

2.1. Parâmetros ... 4

2.2. Scatter plot ... 4

2.3. Métricas de conjunto de clones ... 5

2.4. Resultados ... 5

2.5. Exemplos de clones não significativos ... 5

2.6. Exemplos de clones significativos ... 6

(4)

3

1.

Estratégia

 Começar com restrições mais fortes;

 Analisar os clones;

 Diminuir as restrições;

 Até que não haja mais nenhum clone interessante.

1.1.

Métricas de arquivo

LEN: Tamanho do arquivo em tokens;

CLN: Número de clones;

NBR: Vizinhos, outros arquivos que compartilham o mesmo clone com este arquivo;

RSA: Relação de similaridade com outro arquivo;

RSI: Relação de similiradade dentro do arquivo;

CVR: Cobertura, porcentagem de tokens cobertos por outros clones;

RNR: Relaçao de código não repetido.

1.2.

Métricas de conjunto de clones

LEN: Tamanho do fragmento de código do clone;

POP: Quantidade de fragmentos de código do clone;

NIF: Quantidade de arquivos fonte que incluem um ou mais fragmentos de código do clone;

RAD: Alcance dos fragmentos de código de um arquivo fonte de um clone na hierarquia de

diretório;

RNR: Relação (porcentagem) de tokens que não estão incluídos em partes repetidas de

fragmentos de código do clone;

(5)

4

2.

Configuração escolhida

2.1.

Parâmetros

Minimum clone length: 30;

Minimum token size: 15;

Shaper level: 3 – Hard shaper;

P-match: ativado.

(6)

5

2.3.

Métricas de conjunto de clones

2.4.

Resultados

Total de clones: 22

Quantidade de clones significativos: 15 (68%)

Quantidade de clones não significativos: 7 (32%)

2.5.

Exemplos de clones não significativos

ID 36: insignificante, pois o clone 34 capturou melhor a duplicação do código;

ID 156: insignificante, pois o clone 157 capturou melhor a duplicação do código;

ID 218: insignificante, pois os clones não fazem sentido;

ID 350: é a fachada. É normal alguns métodos parecem clones, pois a somente chamados de

métodos;

ID 365: clones já detectados;

ID 385: clones já detectados;

(7)

6

2.6.

Exemplos de clones significativos

ID 1

Porque é significante: as classes TeseDoutorado e DissertacaoMestrado são idênticas.

Possível solução: Refatorar as duas classes em uma única que teria um atributo indicando

(8)

7

ID 4

Porque é significante: as classes CadastrarPublicacaoServlet e EditarPublicacaoServlet

são muito parecidas, exceto pelo tipo de operação realizada. Além disse há uma duplicação do método doPost.

Possível solução: Refatorar as duas classes em uma única que teria receberia como

parâmetro do método doGet o tipo da operação a ser realizada. O doPost poderia ser refatorado criando uma nova classe que extenderia de HttpServlet e já faria o chamado do método doPost.

(9)

8

ID 5

Porque é significante: as classes EditarPublicacao2Servlet e CadastrarPublicacao2

possuem o método doGet muito parecidos, exceto pelo tipo de operação realizada.  Possível solução: Da mesma maneira do clone 4.

(10)

9

ID 7

Porque é significante: as classes EditarLinhaPesquisaServlet e CadastrarLinhaPesquisaServlet possuem o método doGet muito parecidos, exceto pelo tipo de operação realizada. Os métodos preencherPublicacoes e preencherMembros são idênticos para as duas classes.

Possível solução: Da mesma maneira do clone 4. Os métodos preencherPublicacoes e

(11)

10

ID 17

Porque é significante: a classe ControleLinhaPesquisa possui os métodos

cadastrarLinhaPesquisa, editarLinhaPesquisa e deletarLinhaPesquisa (não detectado por essa configuração!) muito semelhantes.

Possível solução: Poderia ser criado um único método que receberia como parâmetro o

(12)

11

ID 18

Porque é significante: a classe ControleMembro possui os métodos cadastrarMembro,

editarMembro e deletarMembro (não detectado por essa configuração!) muito semelhantes.

(13)

12

ID 22

Porque é significante: as classes EditarPublicacao2Servlet, CadastrarLinhaPesquisaServlet e EditarLinhaPesquisaServlet possuem os métodos preencherPublicacoes, preencherMembros e preencherNaoMembros muito semelhantes.  Possível solução: As classes CadastrarLinhaPesquisaServlet e EditarLinhaPesquisaServlet

poderiam ser refatoradas em uma única classe que receberia como parâmetro o tipo de operação a ser realizada. Os métodos preencherPublicacoes e preencherMembros ficaram nessa única classe. Os métodos preencherNaoMembros e preencherMembros de EditarPublicacao2Servlet poderiam ser refatorados em um único método que receberia como parâmetro se é para preencher um membro ou não membro.

(14)

13

ID 34

Porque é significante: na classe PublicacaoDAO, partes dos métodos getDissertacaoMestrado, getTeseDoutorado, getPeriodicoRevista e getConferencia são muito semelhantes.

Possível solução: Talvez esses métodos pudessem ser refatorados em um único método

(15)

14

ID 50

Porque é significante: nas classes LinhaPesquisaDAO e PublicacaoDAO os métodos

preencherMembros, preencherPublicacoes, adicionarMembrosPublicacao e adicionarNaoMembrosPublicacao são muito semelhantes.

(16)

15

ID 68

Porque é significante: na classe LinhaPesquisaDAO, os métodos cadastrarPublicacoes e

cadastrarMembros são muito semelhantes.

Possível solução: Esses métodos poderiam ser refatorados em um único que receberia

(17)

16

ID 122

Porque é significante: na classe PublicacaoDAO, os métodos cadastrarDissertacaoMestrado, cadastrarTeseDoutorado, cadastrarArtConferencia e cadastrarArtPeriodicoRevista (esse dois últimos não foram detectados!) são muito semelhantes.

Possível solução: Esses métodos poderiam ser refatorados em um único que receberia

(18)

17

ID 157

Porque é significante: na classe MembroDAO, os métodos listarProfessores,

listarEstudantes e listarPesquisadores são muito semelhantes.

Possível solução: Esses métodos poderiam ser refatorados em um único que receberia

(19)

18

ID 184

Porque é significante: na classe MembroDAO, os métodos cadastrarProfessor e

cadastrarPesquisador são muito semelhantes.

Possível solução: Esses métodos poderiam ser refatorados em um único que receberia

(20)

19

ID 216

Porque é significante: as classes MembroDAO e LinhaPesquisaDAO possuem os métodos

deletarLinhaPesquisa e deletarMembro muito semelhantes.

Possível solução: Esses métodos poderiam ser refatorados em um único que receberia

como parâmetro se o objeto a ser deletado é uma linha de pesquisa ou membro.

ID 367

Porque é significante: a classe PublicacaoDAO possui os métodos cadastrarRelacionamentoComMembro e cadastrarRelacionamentoComNaoMembro muito semelhantes.

Possível solução: Esses métodos poderiam ser refatorados em um único que receberia

(21)

20

3.

Outras configurações

Configuração 1

MCL: 50

MTS: 12

Shaper Level: 2 - Soft shaper P-match Application: [X]

Scatter plot:

Total de clones: 50

Quantidade de clones significativos: Exemplos de clones não significativos: CLONE IDs: 24, ...

(22)

21

CLONE ID 1 - A classe Pesquisador e Professor poderiam ser representados pela classe

Membro com a adição de um atributo a mais, indicando se o membro é um pesquisador ou professor.

CLONE ID 3 - As classes TeseDoutorado e DissertacaoMestrado também poderiam ser

refatoradas como dito acima, já que elas não mudam entre si.

CLONE ID 5 - Os servlets que têm o método doPost chamando o método doGet poderiam

ser refatorados com uma nova classe que extenderia HttpServlet e já faria isso.

CLONE ID 7 - Os servlets de cadastrar e editar poderiam ser juntados em um único servlet

que, de acordo com o parâmetro da ação a ser realizada, o servlet realizaria a ação.

CLONE ID 11 - Os métodos de cadastrar/editar Membro/LinhaPesquisa poderiam ser

refatorados em um único método que receberia como parâmetro o tipo de operação.

CLONE ID 34 - Os métodos de listar professores, estudantes e pesquisadores poderiam ser

refatorados em um único, que receberia o tipo de membro por parâmetro.

CLONE ID 54 - Os métodos de cadastrar professores e pesquisadores também poderiam

ser refatorados como o caso acima.

CLONE ID 94 - Os métodos de getTeseDoutorado e getDissertacaoMestrado também

poderiam ser refatorados como o caso acima.

CLONE ID - bib.append GerarListaPublicacao

 dao\PublicacaoDAO.java

 view\MembroAux.java

As duas classes possuem os CLN mais altos (10 e 11, média = 1.5).

 linhapesquisa\CadastrarLinhaPesquisaServlet.java

 linhapesquisa\EditarLinhaPesquisaServlet.java

 view\CadastrarPublicacao2.java

 view\EditarPublicacao2Servlet.java

Classes com alto grau de NBR (6, média = 1.1). As duas primeiras possuem muitos clones entre si, só mudando basicamente a funcionalidade (cadastrar e editar). O mesmo para as duas últimas.  src\br\ufpe\cin\in980\basic\DissertacaoMestrado.java  src\br\ufpe\cin\in980\basic\Pesquisador.java  src\br\ufpe\cin\in980\basic\Professor.java  src\br\ufpe\cin\in980\basic\TeseDoutorado.java  src\br\ufpe\cin\in980\linhapesquisa\CadastrarLinhaPesquisaServlet.java  src\br\ufpe\cin\in980\linhapesquisa\EditarLinhaPesquisaServlet.java

(23)

22

 src\br\ufpe\cin\in980\view\CadastrarPublicacaoServlet.java

 src\br\ufpe\cin\in980\view\EditarPublicacao2Servlet.java

 src\br\ufpe\cin\in980\view\EditarPublicacaoServlet.java

Essas classes possuem alto grau de RSA (max = 0,9 e média = 0,2) e CVR (max = 0,9 e média = 0,4), ou seja, alta similaridade com outros arquivos. São classes que possuem vários clones entre si e a maior parte dos seus códigos são clones.

 src\br\ufpe\cin\in980\dao\PublicacaoDAO.java

 src\br\ufpe\cin\in980\logic\Fachada.java

Essas classes possuem um alto RSI (max = 0,7 e média = 0,3), ou seja, vários clones dentro da própria classe. Na primeira classe isso se deve ao fato de que ela é responsável por fazer as mesmas ações (cadastrar, buscar e editar) mudando apenas tipo de publicação. Na fachada acontece a mesma coisa.

Configuração 2

MCL: 40

MTS: 12

Shaper Level: 2 - Soft shaper P-match Application: [X]

Scatter plot:

(24)

23

Total de clones: 58

Exemplos de clones significativos:  dao\PublicacaoDAO.java

 view\MembroAux.java

As duas classes continuam possuindo os CLN mais altos (11 e 14, média = 1,7). As classes que foram mencionadas anteriormente na configuração 1 com os maiores valores NRB (6, média = 1,1), RSA (max = 0,9 e média = 0,2), CVR (max = 0,9 e média = 0,4) e RSI (max = 0,7 e média = 0,3) continuam apresentando os mesmos valores nesta nova configuração.

(25)

24

Configuração 3

MCL: 20 MTS: 12 Shaper Level: 3 P-match Application: [X]

Scatter plot: Total de clones: 88

Exemplos de clones significativos:

(26)

25

Essa classe possui o conjunto de clones de maior LEN (322 e média = 107). A mesma classe possui vários conjuntos de clones, só diminuindo o tamanho. Os clones são vários ifs aninhados. Conseqüentemente, ela possui também um alto grau de COND (11 e média = 1,2).

Configuração 4

MCL: 30

MTS: 12

Shaper Level: 2 - Soft shaper P-match Application: [ ]

Total de clones: 70

Exemplos de clones significativos:  dao\PublicacaoDAO.java

(27)

26

As classes continuam possuindo os CLN mais altos (18 e 15, média = 2,2).

 view\CadastrarPublicacaoServlet.java

 view\EditarPublicacaoServlet.java

Estas classes possuem os maiores valores de RSA (máx = 0,99 e média = 3,3). O código das duas é praticamente o mesmo, modificando apenas os nomes que em uma é ‘cadastrar’ e na outra ‘editar’.

Configuração 5

MCL: 50

MT: 8

Shaper Level: 2 - Soft shaper P-match Application: [X]

Total de clones: 80

(28)

27

 dao\PublicacaoDAO.java

 dao\MembroDAO.java

A classe dao\PublicacaoDAO.java continua como uma das que possui um alto número de clones, sendo esse valor igual a 23. A classe dao\MembroDAO.java vem logo em seguida com CLN igual 22. A média encontra-se em 2,5. A classe view\MembroAux.java que anteriormente figurava entre as que possuiam um dos maiores CLN, agora apresenta um CLN igual a 11, que comparado aos das classes mencionadas acima torna-se baixo.

 view\GerarListaPublicacaoAux.java

Esta classe é a que possui o maior RSI (max = 0,83, média = 0,4), logo, possui um grande número de clones dentro de seu próprio arquivo.

Referências

Documentos relacionados

Sem desconsiderar as dificuldades próprias do nosso alunado – muitas vezes geradas sim por um sistema de ensino ainda deficitário – e a necessidade de trabalho com aspectos textuais

Para saber como o amostrador Headspace 7697A da Agilent pode ajudar a alcançar os resultados esperados, visite www.agilent.com/chem/7697A Abund.. Nenhum outro software

Almanya'da olduğu gibi, burada da bu terimin hiçbir ayrım gütmeden, modern eğilimleri simgeleyen tüm sanatçılar için geçerli olduğu anlaşılıyor.. SSCB'de ilk halk

As abraçadeiras tipo TUCHO SIMPLES INOX , foram desenvolvidas para aplicações que necessitam alto torque de aperto e condições severas de temperatura, permitin- do assim,

DEUS VOS GUARDE NO SEU GRANDE AMOR, CONSOLADOS E CONTENTES,.. ACHEGADOS PARA

Mas, se a experiência não tiver, além do seu caráter subjetivo, uma natureza objetiva que possa ser apreendida de diversos pontos de vista, então como se poderia supor que um

Mas se a experiência não tem, além do seu carácter subjectivo, uma natureza objectiva que possa ser apreendida de muitos pontos de vista diferentes, como se poderá

estatuto dos factos acerca de como é ser um humano, ou um morcego, ou um marciano, parece que estes são factos que corporizam um ponto de vista particular. O ponto