Commit 3a6b85b7f1fce69124270b195b621ca04f05d032
1 parent
b85b82f0
Exists in
master
and in
3 other branches
removing
Showing
1 changed file
with
0 additions
and
207 deletions
Show diff stats
sbqs2017/mezuro.tex
... | ... | @@ -1,207 +0,0 @@ |
1 | -\documentclass[12pt]{article} | |
2 | - | |
3 | -\usepackage{sbc-template} | |
4 | -\usepackage{graphicx,url} | |
5 | -\usepackage[brazil]{babel} | |
6 | -\usepackage[utf8]{inputenc} | |
7 | -\usepackage{float} | |
8 | -\usepackage{setspace} | |
9 | - | |
10 | -\usepackage{tabularx} | |
11 | -\usepackage{cite} | |
12 | - | |
13 | -\begin{document} | |
14 | -\sloppy | |
15 | -\title{Mezuro - Coleta, interpretação e exibição automatizadas de métricas estáticas de código-fonte} | |
16 | - | |
17 | -\author{Rafael R. Manzo\inst{1}, Diego de A. M. Camarinha\inst{1},\\ | |
18 | - Alessandro Palmeira\inst{1}, Fellipe S. Sampaio\inst{1},\\ | |
19 | - Renan Fichberg\inst{1}, Paulo Meirelles\inst{2}} | |
20 | - | |
21 | -\address{Instituto de Matemática e Estatística -- Universidade de São Paulo (USP)\\ | |
22 | - Rua do Matão, 1010 -- 05508-090 -- Cidade Universitária -- São Paulo -- SP -- Brasil | |
23 | -\nextinstitute | |
24 | - Faculdade de Engenharia -- UnB Gama (FGA)\\ | |
25 | - Gama -- DF -- Brasil | |
26 | - \email{manzo@ime.usp.br,\{diego.camarinha,alessandro.palmeira\}@usp.br} | |
27 | - \email{\{renan.fichberg,fellipe.sampaio\}@usp.br,paulo@softwarelivre.org} | |
28 | -} | |
29 | - | |
30 | -\maketitle | |
31 | -\begin{abstract} | |
32 | - In this article, we present the motivation, main characteristics, architecture and a use case of the Mezuro free software project. The motivation behind the project will be presented through the problem of analyzing code metrics, making a brief comparison with other solutions avaliable in the market. We enumerate the main characteristics that distinguish Mezuro from it's competitors and why it's use can be more advantageous compared to other web services for source code analysis. | |
33 | - | |
34 | -\textbf{Keywords:} free software, source code analysis, source code metrics, web services. | |
35 | -\\ | |
36 | -\textbf{Youtube video link:} \url{http://youtu.be/_am9noS0ICw} | |
37 | -\end{abstract} | |
38 | - | |
39 | -\begin{resumo} | |
40 | - Neste artigo, apresentaremos a motivação, as principais características, arquitetura e um caso de uso do projeto de \textit{software} livre Mezuro. A motivação por trás do projeto será apresentada por meio da dificuldade inerente à análise de métricas de código, fazendo um breve comparativo com outras soluções disponíveis no mercado. Enumeraremos as principais características que diferenciam o Mezuro de seus concorrentes e porque seu uso mostra-se mais vantajoso em comparação a outros serviços web de análise de código-fonte. | |
41 | - | |
42 | -\textbf{Palavras-chave:} \textit{software} livre, análise de código fonte, métricas de código, serviços \textit{web}. | |
43 | -\end{resumo} | |
44 | - | |
45 | - | |
46 | -\section{Introdução} \label{sec:intro} | |
47 | -Métricas de código-fonte estático são medidas extraídas a partir das análises léxica e sintática deste sem compilá-lo ou executá-lo e podem ser primitivas ou compostas, ou seja, formadas pela composição de uma ou mais métricas primitivas. Sua principal função é fornecer informações sobre complexidade, compreensão, testabilidade, manutenibilidade e evolução do código\cite{m13}. | |
48 | - | |
49 | -Exemplos de métricas podem ser simples como linhas de código e quantidade de métodos por classe ou complexas como conexões aferentes de uma classe. | |
50 | -Hoje existem diversas ferramentas para a simples extração de métricas como pylint\footnote{\url{http://www.pylint.org/}} (Python), metric\_fu\footnote{\url{https://github.com/metricfu/metric_fu}} (Ruby) e Analizo\footnote{\url{http://www.analizo.org/}} (C/C++ e Java), cada uma com diferentes graus de usabilidade, padrões e conjuntos de métricas, sendo necessária a criação de uma plataforma que reúna, organize e apresente essas informações para o usuário. | |
51 | - | |
52 | -\section{Motivação}\label{sec:motivacao} | |
53 | -Por meio da avaliação de métricas de código-fonte podemos definir como está a qualidade do \textit{software} e pensar em estratégias interessantes para lidar com a chamada ``crise do \textit{software}'' \cite{nr68}. Esta afirma que, com o crescimento da capacidade computacional, mais problemas difíceis passam a ter solução viável, mas que, por outro lado, a complexidade da interface para uso dos novos equipamentos (\textit{hardware}) e do processo de desenvolvimento atuais combinados com a complexidade dos problemas exacerbam falhas do \textit{software}. Assim, o controle da qualidade de um \textit{software} durante sua evolução no tempo torna-se uma ferramenta para identificar e prevenir tais falhas. | |
54 | - | |
55 | -Porém, incorporar esta avaliação às metodologias de desenvolvimento de \textit{software} não pode ser um processo manual em razão do risco desta prática cair em desuso. Isto se deve ao fato de que as ferramentas de extração de métricas, em geral, não apresentam uma interface amigável para seres humanos lerem seus resultados e muito menos um padrão entre si. | |
56 | -Neste contexto, uma ferramenta com as seguintes características se faz necessária para a introdução deste tipo de avaliação constante às metodologias: | |
57 | -\begin{itemize} | |
58 | - \item interface que agrupe as diversas ferramentas disponíveis; | |
59 | - \item permita seleção e composição de métricas de forma flexível; | |
60 | - \item manutenção de um histórico de evolução; | |
61 | - \item exiba os resultados de forma amigável. | |
62 | -\end{itemize} | |
63 | - | |
64 | -Por último, como explicado por Meirelles \cite{m13}, ainda não existe um consenso sobre qual conjunto de métricas é relevante para se avaliar a qualidade do código e muito menos quais valores destas supostas métricas são bons ou ruins. Portanto, mais uma característica interessante para uma ferramenta neste campo é que permita aos usuários especialistas definirem tais parâmetros, viabilizando estudos estatísticos que nos aproximem de uma conclusão. | |
65 | - | |
66 | -\section{Ferramentas similares} | |
67 | -Foram levantadas informações básicas sobre duas ferramentas similares já consolidados dentre desenvolvedores de \textit{software} para que possamos avaliá-las brevemente com respeito aos critérios definidos na motivação (seção \ref{sec:motivacao}). | |
68 | - | |
69 | -A primeira delas e mais próxima do idealizado, o SonarQube\footnote{\url{http://www.sonarqube.org/}} é um \textit{software} livre, licenciado como LGPLv3, que oferece uma plataforma de gerenciamento de qualidade de código. Por meio de \textit{plugins} disponíveis através de uma biblioteca\footnote{\url{http://docs.codehaus.org/display/SONAR/Plugin+Library/}}. Em sua versão básica ele classifica problemas encontrados no código e calcula métricas simples de cobertura de testes e divida técnica em várias linguagens. Entretanto, seus melhores \textit{plugins} tem código fechado e pago como, por exemplo, o para análise de C/C++\footnote{\url{http://www.sonarsource.com/products/plugins/languages/cpp/}}. | |
70 | - | |
71 | -Por sua vez, o Code Climate\footnote{\url{https://codeclimate.com/}} é uma ferramenta que fornece análise de códigos JavaScript ou Ruby (da versão 1.8 em diante) que estejam disponíveis em um servidor Git. | |
72 | - | |
73 | -O \textit{software} procura por ``\textit{code smells}'' no programa do usuário e os classifica como mais ou menos problemáticos levando em consideração o tamanho dos métodos e duplicação de blocos. Conforme os encontra, o programa atribui valores ao código para no final determinar uma nota de \textit{A} a \textit{F} com base no somatório dos valores encontrados. Note que a análise feita não necessariamente indica um problema real, uma vez que aquela pode ter sido a implementação escolhida pelo programador. | |
74 | - | |
75 | -Recentemente, o Code Climate iniciou uma análise estatística preliminar de todos os projetos que já foram analisados por este. Publicada informalmente em uma simples publicação em sua página\footnote{\url{http://blog.codeclimate.com/blog/2014/05/21/does-team-size-impact-code-quality/?utm_source=Code+Climate&utm_campaign=69c024549d-newsletter-NI-2014-05-22&utm_medium=email&utm_term=0_672a7f5529-69c024549d-317410425}}. | |
76 | - | |
77 | -\section{Mezuro} | |
78 | -O projeto Mezuro\footnote{\url{http://mezuro.org}}, com forte viés acadêmico, visa ser uma interface que permita, de forma flexível, a extração e análise de métricas estáticas de código-fonte, licenciado como \textit{Affero General Public License} versão 3 (AGPLv3). Nele, o usuário é o responsável por definir o conjunto de métricas a ser utilizado para realizar cálculos, com a possibilidade de armazenar os resultados para comparações futuras. Seu objetivo é: | |
79 | -\begin{itemize} | |
80 | - \item Aproximar-se de um consenso acerca de quais métricas devem ser empregadas na análise da qualidade de um código-fonte; | |
81 | - \item Buscar os valores destas métricas que definem a qualidade de um código-fonte. | |
82 | -\end{itemize} | |
83 | - | |
84 | - \subsection{Arquitetura} | |
85 | - Com o objetivo de ser agradável para o desenvolvedor, buscamos criar um sistema de simples manutenção que incorpore outras funcionalidades facilmente. Para isto, visamos: | |
86 | - \begin{itemize} | |
87 | - \item Minimizar a quantidade de código a ser mantida; | |
88 | - \item Testar e garantir a qualidade do código; | |
89 | - \item Modularizar a aplicação em diversos serviços independentes. | |
90 | - \end{itemize} | |
91 | - | |
92 | - No presente momento, a arquitetura está em reformulação tanto estruturalmente quanto no quesito da linguagem de programação. | |
93 | - | |
94 | - A figura \ref{fig:architecture-1} especifica seu atual estado: | |
95 | - \begin{figure}[H] | |
96 | - \centering | |
97 | - \includegraphics[width=\textwidth]{images/mezuro-architecture-actual.png} | |
98 | - \caption{Arquitetura atual do sistema.} | |
99 | - \label{fig:architecture-1} | |
100 | - \end{figure} | |
101 | - As elipses são os diferentes \textit{softwares} envolvidos e os paralelogramos as interfaces de comunicação entre eles. Na base do Mezuro existe o Kalibro, que está sendo reescrito | |
102 | - de Java para Ruby e segmentado em três entidades menores, como ilustrado na figura \ref{fig:architecture-2}: | |
103 | - \begin{figure}[H] | |
104 | - \centering | |
105 | - \includegraphics[width=\textwidth]{images/mezuro-architecture-predicted.png} | |
106 | - \caption{Arquitetura futura do sistema.} | |
107 | - \label{fig:architecture-2} | |
108 | - \end{figure} | |
109 | - O objetivo pretendido a com quebra da estrutura monolítica do Kalibro é que sua manutenção e evolução torne-se mais fácil, sem que todo o sistema seja comprometido. | |
110 | - | |
111 | - \subsection{Diferenciais} \label{subsec:motivacao} | |
112 | - As principais motivações para o surgimento de uma ferramenta como o Mezuro são os seguintes problemas: | |
113 | - \begin{itemize} | |
114 | - \item Não há parâmetros de comparação consolidados entre projetos; | |
115 | - \item Existem estudos, mas poucos dados empíricos; | |
116 | - \item Ainda é dada pouca importância ao monitoramento de código. | |
117 | - \end{itemize} | |
118 | - | |
119 | - \subsection{Por que usar o Mezuro?} \label{sec:projeto-mezuro} | |
120 | - Idealizado como uma plataforma de métricas de código, um dos diferenciais do Mezuro reside na possibilidade de gerar informação sobre o código-fonte de forma contínua: o usuário decide quando analisar novamente o projeto e acompanha detalhadamente a evolução das notas ao longo do tempo. Os resultados de cada análise são públicos, o que permite uma maior transparência entre o desenvolvedor e a comunidade que utiliza aquele \textit{software}. Assim, ela pode decidir se aquela solução atende ou não às suas necessidades e se deve depositar confiança na qualidade do \textit{software} desenvolvido. | |
121 | - | |
122 | - \subsection{Principais funcionalidades}\label{sec:princ-funcionalidades} | |
123 | - No Mezuro, as funcionalidades podem ser divididas em dois grupos: | |
124 | - \begin{itemize} | |
125 | - \item Projeto | |
126 | - \begin{itemize} | |
127 | - \item \textit{Download} do código-fonte a partir de repositórios (Git, Subversion, Bazaar etc) ou via arquivo compactado; | |
128 | - \item Escolha da periodicidade do processamento do código (1 dia, 2 dias, semanal, quinzenal e mensal); | |
129 | - \item Escolha de qual configuração de métricas cada repositório irá utilizar; | |
130 | - \item Nota de cada métrica da configuração para cada arquivo do repositório; | |
131 | - \item Análise gráfica de cada arquivo do repositório por meio de um gráfico de pontos com notas ao longo do tempo; | |
132 | - \item Resultados públicos e acessíveis à comunidade. | |
133 | - \end{itemize} | |
134 | - \item Configuração | |
135 | - \begin{itemize} | |
136 | - \item Criação de configuração e a possibilidade de clonagem; | |
137 | - \item Estatísticas sobre as configurações mais populares dentro da comunidade; | |
138 | - \item Criação de intervalos qualitativos associados aos valores das métricas; | |
139 | - \item Criação de grupos de leitura para a interpretação textual dos resultados das métricas; | |
140 | - \item Combinações de métricas nativas para criação de análises compostas e mais complexas. | |
141 | - \end{itemize} | |
142 | - \end{itemize} | |
143 | - | |
144 | - \subsection{A rede social}\label{sec:user-potencial} | |
145 | - O Mezuro tem o formato de uma rede social, no qual os participantes podem ver a produção de terceiros por meio da avaliação dos projetos ou do clone das configurações. Essa interação mútua e aberta pode ser interessante para desenvolvedores, gerentes de projeto, auditores de \textit{software} e até mesmo uma equipe de desenvolvimento inteira. O objetivo final é criar uma comunidade que veja o valor de tais metodologias e como isso pode contribuir para o sucesso do seu projeto. | |
146 | - | |
147 | - \subsection{Casos de uso} | |
148 | - Apresentaremos a seguir as duas principais funcionalidades da ferramenta ilustradas por meio de capturas de telas. Em todas elas, utilizamos uma conta já cadastrada no sistema (único privilégio necessário para realizá-las). | |
149 | - | |
150 | - \subsubsection{Criação de configuração} | |
151 | - \begin{figure}[H] | |
152 | - \centering | |
153 | - \includegraphics[width=\textwidth]{images/choose-metric.png} | |
154 | - \caption{Interface para escolha de ferramenta extratora de métrica e escolha de uma métrica nativa para adicionar a uma configuração.} | |
155 | - \label{fig:choose-metric} | |
156 | - \end{figure} | |
157 | - | |
158 | - Criar uma configuração envolve 5 telas do sistema em 4 passos básicos: | |
159 | - \begin{enumerate} | |
160 | - \item Acessar a página de listagem de configurações; | |
161 | - \item Clicando em ``New configuration'', preencher o formulário de criação de configuração e salvá-lo; | |
162 | - \item Clicando em ``Add metric'', escolher a ferramenta de extração e qual métrica a ser usada (figura \ref{fig:choose-metric}); | |
163 | - \item Preencher o formulário (detalhado a seguir) e salvá-lo. | |
164 | - \end{enumerate} | |
165 | - | |
166 | - Os passos 3 e 4 devem ser repetidos para cada métrica adicionada à configuração. O formulário de métrica (passo 4) é complexo se comparado ao de configuração mas, assim como os demais, cada campo possui detalhes sobre sua utilização. Aqui, destacamos os menos evidentes: | |
167 | - \begin{itemize} | |
168 | - \item \textbf{Aggregation Form:} Maneira com a qual o resultado de uma métrica será agregado (média, mediana, máximo, etc); | |
169 | - \item \textbf{Reading Group:} Conjunto de intervalos usado para dar significado prático ao resultado calculado. | |
170 | - \end{itemize} | |
171 | - | |
172 | - \subsubsection{Criação de projeto e avaliação de repositório} | |
173 | - Criar um projeto envolve 2 passos básicos: | |
174 | - \begin{enumerate} | |
175 | - \item Acessar a página de listagem de projetos; | |
176 | - \item Clicando em ``New project'', escolher o nome, a descrição e salvá-lo. | |
177 | - \end{enumerate} | |
178 | - | |
179 | - \begin{figure}[H] | |
180 | - \centering | |
181 | - \includegraphics[width=\textwidth]{images/new-repository.png} | |
182 | - \caption{Interface para criação de um novo repositório.} | |
183 | - \label{fig:new-repository} | |
184 | - \end{figure} | |
185 | - | |
186 | - Ao clicar em ``New repository'' entramos na criação do repositório a ser avaliado (figura \ref{fig:new-repository}). Alguns campos merecem destaque: | |
187 | - \begin{itemize} | |
188 | - \item\textbf{Type:} Tipo do repositório (também pode ser um zip ou tarball) onde o código está hospedado; | |
189 | - \item\textbf{Address:} Endereço do repositório remoto ou o caminho absoluto no sistema de arquivos; | |
190 | - \item\textbf{Process Period:} Periodicidade com a qual o código deve ser analizado pela ferramenta (diariamente, semanalmente etc); | |
191 | - \item\textbf{Configuration:} Configuração de métricas que o usuário deseja utilizar para medir o código (pode ser escolhida dentre todas as configurações criadas pelos usuários). | |
192 | - \end{itemize} | |
193 | - Após preencher todos os campos e salvar o repositório, seu primeiro processamento será automaticamente ativado e o usuário será redirecionado para a página que exibe os resultados. Nela, ele poderá conferir dados do processamento (tempo gasto para o término de cada uma de suas fases) e navegar na árvore de módulos gerada, para que possa visualizar a nota, os resultados das métricas e suas interpretações para cada um deles (figura \ref{fig:results}). Além disso, ao clicar no nome de uma métrica calculada, um gráfico que representa a evolução dos seus valores ao longo do tempo será exibido. | |
194 | - | |
195 | - \begin{figure}[H] | |
196 | - \centering | |
197 | - \includegraphics[width=\textwidth]{images/new-repository-results.png} | |
198 | - \caption{Tela de visualização dos resultados do processamento do repositório.} | |
199 | - \label{fig:results} | |
200 | - \end{figure} | |
201 | - | |
202 | -\section{Conclusão} | |
203 | -O Mezuro surge como uma potencial resposta para a falta de monitoramento e padronização de código-fonte e a necessidade de avaliação do mesmo, considerando que é um \textit{software} livre, altamente customizável, com suporte para muitas linguagens computacionais, interface amigável, que fornece histórico de processamentos e também com uma arquitetura planejada para incorporar novas funcionalidades. | |
204 | - | |
205 | -\bibliographystyle{sbc} | |
206 | -\bibliography{mezuro} | |
207 | -\end{document} |