• Nenhum resultado encontrado

Universidade Federal de Pernambuco Centro de Informática Disciplina: Tópicos Avançados em Engenharia de Software (

N/A
N/A
Protected

Academic year: 2019

Share "Universidade Federal de Pernambuco Centro de Informática Disciplina: Tópicos Avançados em Engenharia de Software ("

Copied!
21
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 (

phmb@cin.ufpe.br)

Atividade 2

Oportunidades de modularidade

Equipe:

 Filipe Wanderley Lima (fwl@cin.ufpe.br);

 Maria Carolina Revoredo Martiniano (mcrm2@cin.ufpe.br).

(2)

1

Controle de Versões

Versão

Data

Descrição

Autor(es)

(3)

2

Sumário

1. Atividade... 3

2. Concerns escolhidos ... 4

3. SourceMiner ... 5

3.1. Mapas de árvore... 5

Mapa de árvore - LOC ... 6

Mapa de árvore - Complexidade... 6

3.2. Visão polimérica ... 7

3.3. Dependências ... 7

Dependência entre pacotes ... 8

Dependência entre classes ... 9

3.4. Força das dependências... 9

Matriz de acoplamento entre pacotes ... 10

Matriz de dependência entre classes ... 11

Grade de acoplamentos ... 12

4. AOP Metrics ... 13

4.1. Pacotes ... 13

4.2. Tipos ... 14

5. Metrics Tool ... 16

5.1. Separação de concerns ... 16

5.2. Complexidade ... 16

5.3. Grau de entrelaçamento ... 17

6. Situações suspeitas ... 18

6.1. Operações com mais de 20 LOC ... 18

6.2. Operações consideradas complexas ... 18

6.3. Muitas classes extendendo de HttpServlet ... 18

6.4. Classes muito grandes ... 18

(4)

3

1.

Atividade

Analisar o sistema escolhido utilizando o SourceMiner, AOP Metrics, e Metrics Tool. Registrar:

Concerns escolhidos, com justificativa;

 Módulos suspeitos devido a tamanho, complexidade, profundidade, dependências (indesejadas, acoplamento, ciclos), entrelaçamento, e espalhamento;

(5)

4

2.

Concerns escolhidos

Após uma análise feita em cima dos arquivos do projeto, escolhemos os concerns listados abaixo devido ao seu alto grau de espalhamento, entrelaçamento e sucetibilidade a mudanças. São eles:

Persistência - este concern está bastante concentrado no pacote dao e na maioria dos métodos da classe Fachada. São normalmente classes do pacote java.sql como o Connection, ResultSet e PreparedStatement;

(6)

5

3.

SourceMiner

O SourceMiner é um plugin para o Eclipse que usa metáforas visuais não convencionais para exibir informações úteis dos códigos fonte para os programadores. Com ele, programadores podem explorar informações sobre o código fontes seguindo um processo de três etapas: visão geral, zoom e filtros, e detalhes por demanda.

Ele usa nas suas perspectivas quatro princípios fundamentais na compreensão do software: a estrutura pacote-classe-método, a hierarquia de herança, as dependências e suas forças.

3.1.

Mapas de árvore

As representações em mapas de árvore são visões que dizem respeito à perspectiva da estrutura pacote-classe-método do software. Ela trata da hierarquia modular e como eles estão organizados em pacotes, classes e métodos. O importante nesta perspectiva é a representação de métricas tais como tamanho (LOC) e complexidade (McCabe). Estas duas métricas são convenientes para enriquecer a organização alto-nível da hierarquia pacote-classe-método que são melhores apropriadas para a visualização da arquitetura do software.

Um mapa de árvore é um método de visualização capaz de representar coleções de dados quantitativos com alto grau de hierarquia. É uma visualização 2D que mapeia estruturas de árvores em retângulos, com cada retângulo representando um nodo. Eles são muitos eficazes em mostrar atributos dos nodos usando tamanho (área) e cor, permitindo os usuários compararem nodos e sub-árvores em vários níveis de profundidade da árvore.

(7)

6

Mapa de árvore - LOC

Neste mapa destacam-se três classes com alto grau de LOC para os métodos:

GerarListaPublicacaoAux, PublicacaoAux e MembroAux, pertencentes ao mesmo pacote

(view). Os métodos são respectivamente: gerarPublicacaoBibTex, publicacaoAux e membroAux.

(8)

7

Neste mapa destacam-se 6 métodos com alto grau de complexidade:

PublicacaoDAO.definirPublicacao (5), LinhaPesquisaDAO.cadastrarLinhaPesquisa (4),

MembroAux.membroAux (3), PublicacaoAux.publicacaoAux (3),

PublicacaoDAO.cadastrarPublicacao (3) e MembroDAO.cadastrarMembro (3).

3.2.

Visão polimérica

A perspectiva da hierarquia de herança de software está relacionada a abstração de dados. A herança em programação orientada à objetos usa o conceito de generalizações e especializações para organizar a abstração, melhor distribuir funcionalidades e promover polimorfismo e reuso de código.

A visão polimérica é uma visualização 2D que usa retângulos para representar entidades, tais como classes e interfaces, e arestas para representar relações de herança entre elas. As dimensões dos retângulos são usadas para representar propriedades das entidades.

Nesta ferramenta, a largura corresponde ao número de métodos, enquanto que a altura corresponde ao LOC de uma classe ou interface. A cor indica o tipo do elemento, por exemplo, se ele é uma classe externa, classe abstrata, classe interna, classe comum, enumeração ou uma interface.

Através dessa visualização podemos ver claramente a relação de herança entre as classes Membro e Publicacao e suas respectivas especializações. As classes PublicacaoDAO e MembroDAO também chamam atenção por suas alturas, ou seja, alto grau de LOC. Percebe-se também o grande número de classes que herdam de javax.servlet.http.HttpServlet, os famosos servlets.

3.3.

Dependências

A perspectiva de dependência de software diz respeito ao problema dos acoplamentos dos módulos. A comunidade de engenharia de software lista o acoplamento como uma perspectiva essencial na complexidade do software. O fundamento básico do paradigma orientado à objeto é baseado em objetos que encapsulam dados para reduzir o acoplamento.

(9)

8

Acoplamento aferente - quais nodos dependem do nodo em questão;

Acoplamento eferente - quais nodos o nodo em questão depende.

Dependência entre pacotes

(10)

9

Dependência entre classes

Como foi dito anteriormente, classes do pacote basic como Membro e Publicacao e JDBCConnection do pacote util possuem alto grau de acoplamento aferentes. Já classes como a Fachada, um alto grau de acoplamento eferente.

3.4.

Força das dependências

(11)

10

Matriz de acoplamento entre pacotes

(12)

11

Matriz de dependência entre classes

Aqui notamos, como era de se esperar, as dependências entre as classes PublicacaoDAO e

Publicacao, MembroDAO e Membro, LinhaPesquisaDAO e LinhaPesquisa e a Fachada e

(13)

12

Grade de acoplamentos

(14)

13

4.

AOP Metrics

O objetivo do projeto AOP Metrics é fornecer uma ferramenta capaz de extrair métricas de projetos orientado à objetos e aspectos.

4.1.

Pacotes

Nome do pacote NOT A RMartin Ce RMartin Ca RMartin I RMartin

D Ce Ca I Dn

br.ufpe.cin.in980.linhapesquisa 8 0 9 0 1 0 12 0 1 0 br.ufpe.cin.in980.projeto 6 0 6 1 0,86 0,14 11 1 0,92 0,08 br.ufpe.cin.in980.logic 4 0 4 19 0,17 0,83 10 19 0,34 0,66 br.ufpe.cin.in980.basic 11 0 0 29 0 1 0 29 0 1 br.ufpe.cin.in980.dao 3 0 3 7 0,3 0,7 11 7 0,61 0,39 br.ufpe.cin.in980.pdf 1 0 2 0 1 0 7 0 1 0 br.ufpe.cin.in980.util 3 0 1 14 0,07 0,93 3 14 0,18 0,82 br.ufpe.cin.in980.publicacao 1 0 2 0 1 0 8 0 1 0 br.ufpe.cin.in980.view 20 0 17 2 0,89 0,11 23 2 0,92 0,08

Number of types (NOT) - é o número de tipos (classes, inner e anonymous classes e aspectos) pertencentes ao um dado pacote. É um dos indicadores de extensibilidade do pacote.

Os pacotes basice viewsão os que tem maior número de tipos. Enquanto que os pacotes pdfe publicacaopossuem as menores quantidades.

Abstractness (A) - é a razão entre o número de módulos abstratos e o número total de módulos

abstratos no pacote. Varia entre 0 e 1. O valor 0 indica um pacote completamente concreto e o valor de 1 completamente abstrato.

Não há nenhum módulo abstrato neste projeto, portanto o valor é sempre 0.

Afferente couplings (Ca) - é o número de módulos fora do pacote que depende dos módulos dentro do pacote. É um indicador da responsabilidade do pacote.

Ver a matriz de acoplamentos entre pacotes do SourceMiner.

Efferent couplings (Ce) - é o número de módulos dentro do pacote que dependem de módulos fora

do pacote. É um indicador da independência do pacote.

Ver a matriz de acoplamentos entre pacotes do SourceMiner.

Instability (I) - é a razão entre o Ce o acoplamento total (Ce + Ca), tal que I = Ce / (Ce + Ca). É um indicador da resiliência de um pacote mudar. Varia entre 0 e 1. O valor 0 indica um pacote completamente estável e o valor 1 indica um pacote completamente instável.

(15)

14

4.2.

Tipos

Lines of class code (LOCC) - conta o número de linhas de código perfeitas de uma classe.

Notamos que as classes MembroDAOe PublicacaoDAOpossuem o maior número de linhas de código.

Weighted operations in module (WOM) - conta o número de operações em um dado módulo.

Notamos que as classes do pacote basicpossuem o maior número de métodos, devido ao alto número de getters e setters.

Depth of inheritance tree (DIT) - é o tamanho do caminho mais longo de um dado módulo para a

raiz da hierarquia da classe/aspecto.

Notamos que o caminho mais longo de herança pertence as classes servlets, pois elas herdam de HttpServlete este por sua vez, herda de GenericServlet.

Number of children (NOC) - é o número de subclasses ou sub-aspectos imediatos de um dado

módulo.

(16)

15

Crosscutting degree of an aspect (CDA) - é o número de módulos afetados por pointcuts e pela

introdução em um dado aspecto.

Notamos que todos os aspectos do projeto afetam pelo menos 3 outros módulos.

Coupling on advice execution (CAE) - é o número de aspectos que contém advices possivelmente

desencadeado pela execução de operações em um dado módulo.

Notamos que as classes que mais sofrem interferência por aspectos são as classes: Fachada com a inserção de métodos de PDF, linha de pesquisa, publicação e projetos e PublicacaoDAOcom a inserção de métodos de PDF, deletar publicação e associar projeto.

Coupling on method call (CMC) - é o número de módulos ou interfaces que declaram métodos que

são possivelmente chamados por um dado módulo.

Coupling on field access (CFA) - é o número de módulos ou interfaces que declaram campos que

são acessados por um dado módulo.

Coupling between modules (CBM) - é o número de módulos ou interfaces que declaram métodos

ou campos que são possivelmente invocados ou acessados por um dado módulo.

Response for a module (RFM) - é o número de métodos ou advices pontecialmente executados em

resposta a uma mensagem recebida por um dado módulo.

Lack of cohesion in operations (LCO) - é o número de pares de operações que trabalham em

(17)

16

5.

Metrics Tool

5.1.

Separação de concerns

Concern

CDC DOSC SLOC ADOSC

Persistência 16 0.82 464

0.89

Lógica 31 0.95 319

Concern diffusion over components (CDC) - número de classes associadas a um concern.

Degree of scattering across classes (DOSC) - grau no qual um concern está distribuído entre as

classes. Varia de 0 a 1. Quando o DOSC é 0, todo o código está em uma classe. Quando o DOSC é 1, o código está distribuído igualmente entre todas as classes. Diferentemente do CDC, o DOSC não considera somente quais elementos estão envolvidos na implementação de um concern, mas também como o código está distribuído entre esses elementos.

Average degree of scattering (ADOS) - é a média do grau de espalhamento entre todos os

concerns. Ele indica a modularidade geral de um sistema.

Degree of tangling (DOT) - grau no qual um elemento de um sistema (componente, aspecto,

classe) está associado a um ou mais concerns do sistema. É muito similar ao DOS, exceto que o DOT é com respeito aos elementos do programa ao invés dos concerns.

Média de DOT - é a média do grau de entrelaçamento entre todos os elementos de um sistema.

5.2.

Complexidade

CBC LCO DIT NOC LOC WOM VS

130 509 46 7 2673 310 57

Coupling between components (CBC) - é o somatório da métrica CBM para todo o sistema. Para

mais detalhes, ver o tópico Aopmetrics.

Lack of cohesion over operations (LCO) - é o somatório da métrica LCO para todo o sistema. Para

mais detalhes, ver o tópico Aopmetrics.

Depth of inheritance tree (DIT) - é o somatório da métrica DIT para todo o sistema. Para mais

detalhes, ver o tópico Aopmetrics.

Number of children (NOC) - é o somatório da métrica NOC para todo o sistema. Para mais

detalhes, ver o tópico Aopmetrics.

Lines of code (LOC) - somatório da métrica LOCC para todo o sistema. Para mais detalhes, ver o

(18)

17

Weighted operations in module (WOM) - somatório da métrica WOM para todo o sistema. Para

mais detalhes, ver o tópico Aopmetrics.

Vocabulary size (VS) - é o somatório da quantidade de tipos de todo o sistema (classes e aspectos).

5.3.

Grau de entrelaçamento

Componente

DOT Média de DOT

BuscarMembroServlet 0.37

0.28

MembroAux 0.38

PublicacaoAux 0.39

LinhaPesquisaDAO 0.42

ProjetoPesquisaDAO 0.42

NaoMembroDAO 0.44

MembroDAO 0.47

AssociarProjetoAux 0.56

GerarListaPublicacaoPDFAux 0.56

ProjetoPesquisaAspect 0.60

EditarLinhaPesquisaServlet 0.61

CadastrarLinhaPesquisaServlet 0.61

PublicacaoDAO 0.62

ControleNaoMembro 0.67

EditarPublicacao2Servlet 0.70

JDBCConnection 0.71

ControleMembro 0.71

Fachada 0.72

CadastrarPublicacao2 0.74

LinhaPesquisaAspect 0.75

AspectPublicacao 0.83

ControleLinhaPesquisa 0.85

AspectPDF 0.88

ControlePublicacao 0.89

ControleProjetoPesquisa 0.92

(19)

18

6.

Situações suspeitas

Após análise dos resultados apresentados pelas ferramentas e discussão entre outras equipes e o professor, chegamos as seguintes situações consideradas como suspeitas e que devem ser levadas em consideração na hora refatorar o projeto.

6.1.

Operações com mais de 20 LOC

As seguintes operações, com mais de 20 LOC, foram consideradas como grandes demais:

 GerarListaPublicacaoAux.gerarPublicacaoBibTex;  GerarListaPublicacaoAux.geNomes;  GerarListaPublicacaoServlet.doGet;  CadastrarPublicacao2.doGet;  EditarPublicacao2Servlet.doGet;  PublicacaoDAO.cadastrarPublicacao;  MembroDAO.buscarMembro;  MembroDAO.cadastrarMembro;  LinhaPesquisaDAO.cadastraLinhaPesquisa;  EditarLinhaPesquisaServlet.doGet;  CadastraLinhaPesquisaServlet.doGet;  PublicacaoAux.publicacaoAux;  MembroAux.membroAux.

A idéia é que todos estes métodos sejam analisados e sejam quebrados em métodos menores.

6.2.

Operações consideradas complexas

Dentre as operações consideradas complexas segundo a métrica McCabe, os seguintes métodos considerados realmente complexos do ponto de vista de legilibidade:

 PublicacaoDAO.definirPublicacao;

 PublicacaoAux.publicacaoAux;

 MembroAux.membroAux.

A idéia é que estes métodos sejam melhor organizados, de maneira que o número de ifs seja diminuído e faça mais sentido.

6.3.

Muitas classes extendendo de HttpServlet

Notou-se que muitas classes estendem de HttpServlet e a maioria possuem duplicação do método doPost.

A idéia é que seja criado uma nova classe (ex: RGMSServlet) que estenda de HttpServlet e já faça o redirecionamento do método doPost para o doGet, evitando assim a replicação do código. Além disso, os servlets devem ser analisados para verificar a possibilidade de juntá-los caso suas funcionalidades estejam muito relacionadas.

6.4.

Classes muito grandes

As seguintes classes foram consideradas como muito grandes:

 MembroDAO ;

 PublicacaoDAO;

 LinhaPesquisaDAO;

(20)

19

 MembroAux;

 PublicacaoAux.

A idéia é que estas classes sejam analisadas e se verifique a possibilidade de talvez quebrá-las em uma ou mais classes.

Dependências entre pacotes

A organização de pacotes de maneira em camadas (dados, negócio, comunicação e GUI) talvez não seja a melhor maneira de organizar;

(21)

20

Referências

 Site da disciplina de Tópicos Avançados em Engenharia de Software;  Manual do usuário do SourceMiner;

 Site do AOP Metrics;

Referências

Documentos relacionados

O mesmo pode ser relatado por Luz & Portela (2002), que testaram nauplio de Artemia salina nos 15 pri- meiros dias de alimentação exógena para trairão alcançando

Através do experimento in vivo, verificou-se que o pó nebulizado de nanocápsulas (Neb-NC) é efetivo na proteção da mucosa gastrintestinal frente à indometacina, enquanto que os

Foram desenvolvidas duas formulações, uma utilizando um adoçante natural (stévia) e outra utilizando um adoçante artificial (sucralose) e foram realizadas análises

As oficinas realizadas nas duas escolas citadas anteriormente foram dividas em quatro momentos: o primeiro quando se tratou sobre o entendimento teórico e prático dos

5.2 Importante, então, salientar que a Egrégia Comissão Disciplinar, por maioria, considerou pela aplicação de penalidade disciplinar em desfavor do supramencionado Chefe

No entanto, quando se eliminou o efeito da soja (TABELA 3), foi possível distinguir os efeitos da urease presentes no grão de soja sobre a conversão da uréia em amônia no bagaço

Além das espécies selvagens, existem também algumas variedades de tomate da espécie Solanum lycopersicum que podem ser utilizadas como fontes de resistência a algumas pragas, entre

Para que a produtividade da empresa não seja afectada pela utilização destes sistemas, já que terá que haver um tempo de trabalho extra dispendido pelos funcionários, a