avaliação de medições realizadas por ferramentas de qualidade

Transcrição

avaliação de medições realizadas por ferramentas de qualidade
BRUNO CARVALHO SILVA LUZ
AVALIAÇÃO DE MEDIÇÕES
REALIZADAS POR FERRAMENTAS DE
QUALIDADE INTERNA DE PRODUTOS
DE SOFTWARE
LAVRAS - MG
2014
BRUNO CARVALHO SILVA LUZ
AVALIAÇÃO DE MEDIÇÕES
REALIZADAS POR FERRAMENTAS DE
QUALIDADE INTERNA DE PRODUTOS
DE SOFTWARE
Monografia de graduação apresentada
ao Departamento de Ciência da
Computação da Universidade Federal de
Lavras como requisito parcial para
obtenção do título de Bacharel em
Sistemas de Informação.
Orientador
Dr. Antônio Maria Pereira de Resende
Coorientador
Dr. André Luiz Zambalde
LAVRAS - MG
2014
RESUMO
A Engenharia de Software tem como principal objetivo obter software de
qualidade. Uma das formas de medir a qualidade de um software é através das
métricas de produto. Ao utilizá-las é possível estimar projetos, ajudando a
identificar as características e prevenir falhas. Muitas métricas têm sido
propostas, mas as ferramentas que as aplicam não possuem descrições
suficientes que explicam como foram implementados os cálculos das mesmas.
Diante desse contexto, este trabalho teve como objetivo realizar uma análise
quantitativa de métricas de produto e suas ferramentas para identificar se há
diferenças significativas entre os valores gerados por essas ferramentas, e quais
fatores influenciam essas diferenças. As métricas analisadas foram: Número de
métodos, Proporção de comentários e Complexidade ciclomática média. Para a
consecução dos objetivos foi realizada a medição de 3 versões de 107 softwares,
com diferentes ferramentas de coleta. Foi utilizada a técnica de diferença entre
médias para saber se existe diferenças significativas entre as ferramentas. Os
resultados sugerem que todas as métricas analisadas possuem diferenças
significativas entre diferentes ferramentas e que tais diferenças são provocadas
por fatores como tipos de métodos, classes e estruturas de controle. Com isso,
conclui-se que as ferramentas nem sempre medem o que prometem, tornando
complicado o uso dessas ferramentas para estimar projetos de software.
Palavras-chave: Métricas de software. Qualidade de software.
ABSTRACT
The Software Engineering aims to obtain quality software. One way to measure
the quality of software is by means of product metrics. The use of metrics allows
estimating projects, helping to identify the features and prevent failure. Many
product metrics have been proposed, but the tools that implement these metrics
do not have enough descriptions that explain how the calculations of these
metrics were implemented. Given this context, this work aims to perform a
quantitative analysis of product metrics and tools to identify whether there are
significant differences between the values generated by these tools, and what
factors influence these differences. The following metrics were analyzed:
number of methods, Proportion of comments and average cyclomatic
complexity. To achieve the goals, 3 versions of 107 softwares were measured by
different collection tools. The technique of differences between means was used
to find out if there is significant differences between the tools. The results
suggest that all the metrics considered have significant differences when
measured by different tools and such differences are caused by factors such as
kinds of methods, classes, and control structures. Thus, it is concluded that the
tools do not always measure what they promise, making it difficult to use these
tools to estimate software projects.
Keywords: Software metrics. Software quality.
LISTA DE FIGURAS
Figura 1 Tipos de pesquisa............................................................................... 29
Figura 2 Classes de um software com NOM = 11.....................................33
Figura 3 Método G1.......................................................................................... 34
Figura 4 Método G2.......................................................................................... 34
Figura 5 Código-fonte de uma classe .............................................................. 35
Figura 6 Boxplot da métrica NOM para versão de software 1.....................40
Figura 7 Boxplot da métrica NOM para versão de software 2.....................42
Figura 8 Boxplot da métrica NOM para versão de software 3.....................43
Figura 9 Boxplot da métrica CR para versão de software 1.........................48
Figura 10 Boxplot da métrica CR para versão de software 2.......................49
Figura 11 Boxplot da métrica CR para versão de software 3.......................50
Figura 12 Boxplot da métrica ACC para versão de software 1.....................54
Figura 13 Boxplot da métrica ACC para versão de software 2.....................55
Figura 14 Boxplot da métrica ACC para versão de software 3.....................57
LISTA DE QUADROS
Quadro 1 Métricas de Halstead........................................................................24
Quadro 2 Relação entre métricas e ferramentas de medição........................35
Quadro 3 Testes das ferramentas na métrica NOM......................................38
Quadro 4 Estatística da métrica NOM para versão de software 1...............39
Quadro 5 Estatística da métrica NOM para versão de software 2...............41
Quadro 6 Estatística da métrica NOM para versão de software 3...............43
Quadro 7 Teste de Friedman na métrica NOM..............................................45
Quadro 8 Testes das ferramentas na métrica CR..........................................46
Quadro 9 Diferenças entre comentários..........................................................46
Quadro 10 Estatística da métrica CR para versão de software 1.................47
Quadro 11 Estatística da métrica CR para versão de software 2.................49
Quadro 12 Estatística da métrica CR para versão de software 3.................50
Quadro 13 Teste de Friedman na métrica CR................................................51
Quadro 14 Testes das ferramentas na métrica ACC......................................52
Quadro 15 Estatística da métrica ACC para versão de software 1..............53
Quadro 16 Estatística da métrica ACC para versão de software 2..............55
Quadro 17 Estatística da métrica ACC para versão de software 3..............56
Quadro 18 Teste de Friedman na métrica ACC.............................................58
LISTA DE SIGLAS
ACC
Average cyclomatic complexity (Complexidade ciclomática média)
CBO
Coupling between object classes (Acoplamento entre classes de objetos)
CC
Cyclomatic complexity (Complexidade ciclomática)
CR
Comments ratio (Proporção de comentários)
CS
Class size (Tamanho da classe)
DIT
Depth of the inheritance tree (Profundidade da árvore de herança)
FP
Function points (Pontos por função)
LCOM Lack of cohesion in methods (Falta de coesão em métodos)
LOC
Lines of code (Linhas de código)
NOA
Number of operations added by a subclass (Número de operações
adicionadas por uma subclasse)
NOC
Number of children (Número de filhos)
NOM Number of Methods (Número de métodos)
NOO
Number of operations overriden by a subclass (Número de operações
redefinidas por uma subclasse)
RFC
Response for a class (Resposta de uma classe)
SI
Specialiation index (Índice de especialização)
WMC Weight methods per class (Métodos ponderados por classe)
SUMÁRIO
1 INTRODUÇÃO ................................................................................... 10
1.1 Problema e objetivos ........................................................................ 11
1.2 Estrutura do trabalho ...................................................................... 12
2 REFERENCIAL TEÓRICO .............................................................. 13
2.1 Qualidade de software ..................................................................... 13
2.2 Medições, medidas e métricas ......................................................... 15
2.3 Escalas de medição ........................................................................... 16
2.4 Métricas de software ........................................................................ 18
2.5 Classificação das Métricas ............................................................... 19
2.5.1 Métricas de produto ...................................................................... 19
2.5.2 Métricas de processo ..................................................................... 20
2.5.3 Métricas de projeto ....................................................................... 20
2.6 Métricas tradicionais........................................................................ 21
2.6.1 Métricas orientadas ao tamanho .................................................. 21
2.6.1.1 Linhas de Código (LOC)............................................................ 21
2.6.1.2 Pontos por função (FP) .............................................................. 22
2.6.2 Métricas de complexidade ............................................................ 22
2.6.2.1 Complexidade ciclomática (CC) ............................................... 23
2.6.2.2 Métricas de Halstead .................................................................. 24
2.6.3 Métricas orientadas a objetos....................................................... 25
2.6.3.1 Métricas de Chidamber e Kemerer .......................................... 25
2.6.3.2 Métricas de Lorenz e Kidd ........................................................ 27
2.7 Valores de referência ....................................................................... 28
3 METODOLOGIA ............................................................................... 30
3.1 Classificações da pesquisa ............................................................... 30
3.2 Desenvolvimento da pesquisa .......................................................... 31
4 RESULTADOS E DISCUSSÕES ...................................................... 38
4.1 Número de métodos .......................................................................... 38
4.1.1 Testes nas ferramentas que calculam a métrica NOM .............. 38
4.1.2 Estatística descritiva da métrica NOM ....................................... 39
4.1.3 Testes estatísticos da métrica NOM ............................................. 45
4.2 Proporção de comentários ............................................................... 46
4.2.1 Testes nas ferramentas que calculam a métrica CR .................. 47
4.2.2 Estatística descritiva da métrica CR ........................................... 48
4.2.3 Testes estatísticos da métrica CR ................................................. 52
4.3 Complexidade ciclomática média ................................................... 53
4.3.1 Testes nas ferramentas que calculam a métrica ACC ............... 53
4.3.2 Estatística descritiva da métrica ACC ........................................ 54
4.3.3 Testes estatísticos da métrica ACC .............................................. 58
5 CONCLUSÕES ................................................................................... 60
REFERÊNCIAS ..................................................................................... 61
APÊNDICE ............................................................................................. 64
10
1 INTRODUÇÃO
O principal objetivo da Engenharia de Software é produzir software
de qualidade. Empresas que desenvolvem software com qualidade são mais
requisitadas, podem oferecer um serviço melhor, e com preços mais
competitivos. Quanto mais cedo um erro na construção do software for
identificado, menos recursos precisarão ser alocados para resolver o
problema.
Um ponto chave da Engenharia é a medição e, através desta,
podemos avaliar a qualidade dos sistemas a serem desenvolvidos. Ao
contrário de outras Engenharias, a Engenharia de Software não é baseada em
medidas absolutas, ou seja, há dificuldade em saber o que exatamente medir.
Uma forma de medir a qualidade de um software é através do uso de
métricas de software. Sommerville (2007) as define como qualquer tipo de
medição que se refira a um sistema de software, processo ou documentação
relacionada. As mesmas permitem entender o comportamento e o
funcionamento do software, avaliar e controlar, determinando padrões, metas
e critérios de aceitação do software, e também ajudam na prevenção de
falhas.
Diferentes tipos de métricas estão presentes na literatura. Um dos
tipos mais comuns são as métricas de produto, que têm como objetivo
quantificar características internas de um software, como por exemplo a
quantidade de linhas de código produzidas.
Entretanto, essas métricas ainda não são muito aceitas, pois sem os
valores de referência, e com as ferramentas medindo a mesma métrica, mas
11
considerando diferentes fatores, não é possível saber em qual nível de
qualidade está um software.
1.1 Problema e objetivos
As métricas de produto foram propostas há um bom tempo, mas devido
à dificuldade de aprendizado, os altos custos para manter um profissional
especializado na equipe e a falta de valores de referência, elas ainda não têm
sido amplamente aceitas e usadas. Além disso, as ferramentas de coleta que
medem essas métricas não descrevem adequadamente, ou não possuem
documentação suficiente que permitam saber o que foi implementado e como foi
implementado o cálculo das métricas. Exemplificando, é possível que duas
ferramentas A e B calculem uma métrica X que leva em consideração o número
de métodos de um software em seu cálculo. Entretanto, pode acontecer de a
ferramenta A contabilizar em seu resultado métodos na interface e a ferramenta
B ignorar esses métodos em sua contagem, ou seja, os valores apresentados
pelas duas ferramentas para a métrica X serão diferentes.
Diante desse contexto, o objetivo principal deste trabalho é realizar uma
análise quantitativa das seguintes métricas de produto: Número total de métodos,
Proporção de comentários e Complexidade ciclomática média.
Tal análise leva em consideração diferentes ferramentas de coleta que
calculam essas métricas para verificar se existem diferenças entre os valores
gerados por essas ferramentas. Caso existam e sejam significativas, será
comprovado que as ferramentas medem coisas diferentes do que são descritas
por elas.
Os resultados dessa análise ajudarão a esclarecer o que cada ferramenta
está medindo e também poderão servir como base para determinar valores de
12
referência para essas métricas, fazendo com que os mesmos sejam capazes de
ajudar profissionais da área de Engenharia de Software a interpretar
corretamente os resultados e melhorar a qualidade do software que está sendo
desenvolvido.
Para que o objetivo principal pudesse ser alcançado, os seguintes
objetivos foram propostos:
1. Revisão bibliográfica e levantamento de métricas de produto.
2. Levantamento de ferramentas de coleta que apliquem as métricas
encontradas.
3. Seleção de softwares desenvolvidos na linguagem JAVA para serem
medidos pelas ferramentas de coleta encontradas.
4. Medir os softwares através das ferramentas de coleta encontradas.
5. Análise das ferramentas de coleta para verificar o que cada uma está
realmente medindo.
6. Análise estatística das medidas para verificar se existem diferenças
significativas que influenciam os valores encontrados pelas métricas.
1.2 Estrutura do trabalho
Este trabalho está estruturado em cinco capítulos apresentados da
seguinte forma: o Capítulo 2 contêm os conceitos necessários e relacionados a
métricas de software para a compreensão da pesquisa. O Capítulo 3 descreve o
tipo de pesquisa realizada e os métodos que foram empregados. No Capítulo 4
são apresentados os resultados obtidos e também discussões sobre os mesmos.
No Capítulo 5 são descritas as conclusões referentes ao trabalho desenvolvido.
Ao fim são apresentadas as Referências Bibliográficas e Anexos.
13
2 REFERENCIAL TEÓRICO
Neste capítulo são apresentados os conceitos relacionados a métricas de
software que são necessários para a compreensão deste trabalho.
2.1 Qualidade de software
Com o crescente aumento do uso da tecnologia, um dos principais
desafios dos gerentes de projeto tem sido entregar projetos de software dentro
dos prazos estipulados e com a qualidade esperada pelo cliente. Empresas que
cumprem os prazos e entregam o software com qualidade, conseguem obter uma
grande vantagem competitiva em relação aos seus concorrentes.
Entretanto, garantir a qualidade não é algo simples. Muitas empresas
gastam uma grande quantidade de tempo corrigindo erros, em vez de dedicá-lo a
implementação de novas soluções. Este é um dos motivos que fazem com que a
Qualidade de software seja frequentemente estudada.
A Qualidade de software é uma área da Engenharia de Software que tem
como principal objetivo garantir a qualidade do software. Na literatura estão
presentes várias definições formais sobre a mesma. Cada definição possui
abordagens e pontos de vista diferentes, mas todas visam obter um produto que
satisfaça às expectativas do cliente.
A norma ISO/IEC 9126:1991 define a Qualidade de software como a
totalidade de características de um produto de software que lhe confere a
capacidade de satisfazer necessidades explícitas e implícitas. As necessidades
explícitas são aquelas informadas pelos usuários, já as necessidades implícitas
são necessidades subjetivas dos usuários, ou seja, aquelas que não são
14
informadas, mas que são consideradas óbvias e importantes no desenvolvimento
e manutenção do produto de software.
Rocha et al. (2001) destaca que a Qualidade de software pode ser vista
como um conjunto de características que devem ser atingidas em um
determinado grau para que o produto atenda às necessidades de seus usuários.
Para Pressman (2006), a mesma é definida como a satisfação de
requisitos funcionais e de desempenho explicitamente declarados, normas de
desenvolvimento explicitamente documentadas e características implícitas
esperadas em todo software desenvolvido profissionalmente. O mesmo ainda
destaca três pontos importantes:
1. Os requisitos de software são a base a partir da qual a qualidade é
medida. A falta de conformidade com os requisitos resulta em falta de
qualidade.
2. Normas especificadas definem um conjunto de critérios de
desenvolvimento que orientam a maneira segundo a qual o software
passa pelo trabalho de engenharia. Se as mesmas não forem seguidas, as
chances de se obter um produto sem qualidade serão enormes.
3. Existe um conjunto de requisitos implícitos que frequentemente não
são mencionados na especificação. Se tais requisitos não são satisfeitos,
a qualidade do software será duvidosa.
Desenvolver um produto geralmente passa por um processo complexo e
que envolve uma série de etapas, e a qualidade do produto está diretamente
relacionada com a qualidade do processo de desenvolvimento. Dessa forma, as
características
de
qualidade
devem
estar
bem
definidas
antes
do
15
desenvolvimento, pois dificilmente será possível incorporar a qualidade no
produto final.
2.2 Medições, medidas e métricas
Segundo Pressman (2006), a medição é um ponto extremamente
importante nas Engenharias, inclusive na Engenharia de Software. Uma das
formas de verificar o processo de desenvolvimento de um software se dá através
da medição.
De acordo com Fenton e Pfleeger (1998), medição é o processo pelo
qual números ou símbolos são atribuídos a atributos de entidades no mundo real
de tal forma a descrevê-los de acordo com regras claramente definidas.
Através de uma visão quantitativa, medições podem ser usadas para
compreender características e avaliar a qualidade de um produto ou processo,
permitindo gerenciar e identificar quais caminhos devem ser seguidos para
solucionar um problema.
Medir um produto ou processo pode ser possível através do uso das
métricas. A ISO/IEC 9126 (1991) define uma métrica como a composição de
procedimentos para medição e escalas medidas. Yanaze et al. (2010) afirma que
uma métrica é um sistema de mensuração que quantifica uma tendência, uma
dinâmica ou uma característica. Portanto, as métricas são usadas para explicar
fenômenos, diagnosticar causas, compartilhar descobertas, estimar custos e
projetar os resultados de eventos futuros.
Pressman (2006) ressalta que apesar de os termos medida, medição e
métrica serem frequentemente usados de forma sem distinção, é importante
destacar algumas diferenças entre eles:
Medida: fornece uma indicação quantitativa da extensão, quantidade,
16
dimensão, capacidade ou tamanho de algum atributo de um processo ou
produto.
Medição: é o ato de determinar uma medida.
Métrica: é a quantificação de um atributo.
Ainda de acordo com Pressman (2006), medidas são coletadas e
métricas são desenvolvidas, fornecendo assim indicadores. Um indicador
caracteriza-se por ser uma métrica ou uma combinação de métricas que
fornecem uma visão mais aprofundada e que permite ajustar o processo, projeto,
ou produto.
2.3 Escalas de medição
Segundo Kan (2003), as medições podem ser classificadas em quatro
tipos de escala: escala nominal, escala ordinal, escala de intervalo e escala de
taxa.
Escala nominal: uma variável de escala nominal classifica as unidades
em classes ou categorias quanto à característica que representa, sem estabelecer
qualquer relação de grandeza ou ordem. É denominada nominal porque a
diferenciação entre quaisquer categorias é feita apenas pelo nome.
Se o máximo que pode ser dito sobre um objeto é que ele é diferente de
outros, então a escala é nominal. São exemplos de variáveis expressas na escala
nominal: matrículas de automóveis, código civil e sexo.
Escala ordinal: uma variável de escala ordinal classifica as unidades em
classes ou categorias quanto à característica que representa, estabelecendo uma
relação de ordem entre as unidades pertencentes a categorias distintas. Qualquer
17
conjunto de valores que preservem a ordem são válidos para essa variável,
tornando a escala ordinal invariante sob transformações que preservem a ordem.
Se o máximo que pode ser dito sobre um objeto é que ele é, por
exemplo, maior ou melhor que outro, então a escala é ordinal. São exemplos de
variáveis expressas na escala ordinal: escalão social e escalão salarial.
Escala de intervalo: uma variável de escala de intervalo, além de
ordenar as unidades quanto à característica mensurada, possui uma unidade de
medida constante. No entanto, a origem dessa escala é arbitrária. A escala de
intervalo aproxima-se da concepção comum de medida, pois possui uma unidade
de medida constante. Alguns exemplos de escala de intervalo são as escalas de
temperatura Celsius e Fahrenheit.
A escala de intervalo permite inferências referentes a diferenças entre
unidades a serem medidas. Por exemplo, a mensuração da temperatura de
unidades permite determinar quanto uma é mais quente do que a outra.
Se o máximo que pode ser dito sobre um objeto, que ele é tantas
unidades maior que outro, então a escala é intervalar.
Escalas de taxa: uma variável de escala de taxa, também conhecida
como escala de razão, ordena as unidades quanto à característica mensurada,
possui uma unidade de medida constante e uma origem única. A escala de taxa é
a mais elaborada das escalas de medida, pois permite todas as operações
aritméticas. Essa escala possui um ponto zero único, além de unidade de medida
constante. É a escala de medida mais comum nas ciências físicas, tais como as
escalas para a medida de comprimento ou peso, por exemplo.
Se o máximo que pode ser dito que um objeto é tantas vezes maior ou
mais pesado que outro, então a escala é de taxa.
18
2.4 Métricas de software
A Engenharia de Software fornece algumas ferramentas que servem de
auxílio nas medições de um projeto de software. As métricas de software são
umas destas ferramentas.
Sommerville (2007) as define como algum tipo de medição que faz
referência a um sistema de software, processo ou documentação relacionada. A
partir desta, é possível identificar a quantidade de esforço, os custos e atividades
necessárias para um determinado projeto e medir a qualidade e produtividade de
um produto.
Guarizzo (2008) ressalta que as métricas de software têm como princípio
especificar as funções de coleta de dados de avaliação e desempenho, atribuindo
essas responsabilidades a toda a equipe envolvida no projeto, e analisar os
históricos dos projetos anteriores.
De acordo com Mills (1988), Fenton e Pfleeger (1998), o ideal é que as
métricas possuam as seguintes características:

Simplicidade: deve estar claro o que se propõe a medir.

Objetividade: a métrica deve ser formalmente definida, seu valor
deve estar atrelado ao objeto medido, independente de quem o
obtenha.

Fácil obtenção: deve ser possível obter seu valor rapidamente e com
baixo custo.

Validade: a métrica deve medir efetivamente o proposto.

Robustez: pequenas mudanças no software não podem causar
grandes mudanças no valor obtido.
19

Linearidade de escala: há formas de mapeamento para o
entendimento do comportamento das entidades através da
manipulação dos números obtidos.

Independência da linguagem utilizada.
2.5 Classificação das Métricas
As métricas de software podem ser classificadas em diversas categorias,
tais como: métricas diretas e indiretas Berghout e Sollingen (1999) e métricas
objetivas e subjetivas Humphrey (1989). Neste trabalho, a classificação utilizada
será a adotada por Fenton e Pfleeger (1998), Kan (2003) e Pressman (2006), que
destacam três tipos de métricas de software: métricas de produto, métricas de
processo e métricas de projeto.
2.5.1 Métricas de produto
Segundo Sommerville (2007), as métricas de produto são as que
quantificam características internas do software. São exemplos de atributos:
tamanho, acoplamento entre componentes, coesão de um componente,
complexidade e desempenho. Sommerville (2007) ainda classifica as métricas de
produto em dois tipos: métricas de produto dinâmicas e métricas de produto
estáticas.
As métricas dinâmicas servem de auxílio para avaliar a eficiência e a
confiabilidade de um programa. São coletadas por medições realizadas durante a
execução do programa, e estão diretamente relacionadas com os atributos de
qualidade do software. Determinar o número de falhas de um sistema é um
exemplo de métrica de produto dinâmica.
20
Já as métricas estáticas: servem de auxílio para avaliar a complexidade,
a facilidade de compreensão e a facilidade de manutenção de um sistema de
software. São coletadas por medições realizadas na documentação de projeto ou
código fonte do programa, e possuem um relacionamento indireto com atributos
de qualidade. Determinar o número de funções que chamam uma determinada
função é um exemplo de métrica de produto estática.
2.5.2 Métricas de processo
De acordo com Sommerville (2007), um processo pode ser definido com
um conjunto de atividades e resultados associados que produzem um produto de
software.
As métricas de processo, segundo Pressman (2006), fornecem
indicadores que permitem à organização avaliar o processo empregado, como o
modelo e as tarefas do mesmo. De acordo com Kan (2003), as métricas de
processo são utilizadas para aprimorar o desempenho e a manutenção do plano
de desenvolvimento, e também como indicadores de qualidade para defeitos
encontrados e o esforço necessário para sua correção e a eficiência da remoção
de defeitos.
2.5.3 Métricas de projeto
Para Kan (2003), as métricas de projeto representam as características
do projeto e a sua execução, tais como recursos, custo e cronograma, permitindo
avaliar o estado do projeto, monitorar riscos potenciais, ajustar tarefas e
controlar a qualidade da equipe de trabalho. Fenton e Pfleeger (1998)
denominam esse tipo de métrica como métricas de recurso, sendo que tais
21
recursos podem ser associados a recursos humanos, recursos materiais,
ferramentas, e métodos.
2.6 Métricas tradicionais
Nesta seção são descritas de forma sucinta algumas das métricas mais
encontradas na literatura. As métricas estão classificadas quanto a sua
orientação, que são: por tamanho, complexidade e objetos.
2.6.1 Métricas orientadas ao tamanho
As métricas orientadas ao tamanho são medidas diretas do software que
quantificam o tamanho do mesmo. Entre as que mais aparecessem na literatura
estão a LOC (Lines of code – Linhas de Código) e FP (Function points – Pontos
por função).
2.6.1.1 Linhas de Código (LOC)
A métrica LOC (Lines of code – Linhas de código) é uma das métricas
mais antigas e simples que existem, visto que ela apenas quantifica a contagem
do número de linhas de código de um sistema.
Apesar de sua simplicidade, a LOC não é amplamente aceita, pois
segundo Kan (2003), esta métrica possui o problema da ambiguidade da
contagem efetiva.
Na linguagem de programação Assembly, em que cada linha de código
corresponde a uma instrução, a definição desta métrica é clara. Com a chegada
das linguagens de alto nível, a contagem de linhas de código pode ser
22
influenciada pela consideração ou não de comentários, linhas em branco e outros
fatores que fazem com que tal contagem sofra diferenças significativas em seu
resultado final. Essas diferenças fazem com que a métrica LOC apresente
diversas variações, tornando sua definição não muito clara.
2.6.1.2 Pontos por função (FP)
Segundo Pressman (2006), a métrica FP (Function points - Pontos por
função) pode ser usada efetivamente como uma forma para medir a
funcionalidade entregue por um sistema. Proposta por Albrecht (1979), e usando
dados históricos, a mesma pode ser usada para:
1. Estimar o custo ou esforço necessário para projetar, codificar e
testar o software;
2. Prever o número de erros que vão ser encontrados durante o teste;
3. Prever o número de componentes e/ou o número de linhas de código
projetadas no sistema implementado;
Azevedo (1999) ressalta que esta métrica está baseada na visão externa
do usuário, sendo independente da linguagem utilizada, permitindo calcular o
esforço de programação e auxiliando o usuário final a melhorar o exame e
avaliação de projetos. É devido a esses e outros fatores que segundo Kan (2003),
ao longo dos anos essa métrica vem sendo aceita e usada no desenvolvimento de
sistemas tanto em termos de produtividade quanto em qualidade.
2.6.2 Métricas de complexidade
De acordo com McCabe e Watson (1994), métricas de complexidade
podem ser usadas para prever informação crítica sobre confiabilidade e
23
manutenibilidade de sistemas de software a partir da análise automática do
código-fonte.
As métricas de complexidade mais utilizadas são: Complexidade
ciclomática e Métricas de Halstead.
2.6.2.1 Complexidade ciclomática (CC)
Proposta por McCabe (1976), a CC (Cyclomatic complexity Complexidade ciclomática) é a métrica de complexidade mais utilizada. Tem
como objetivo medir a quantidade de caminhos de execução independentes
em um sistema. A ideia é representar em um grafo a sequência que um
programa pode seguir com todos os possíveis caminhos. A complexidade
encontrada fornecerá um número informando o quão complexo é um sistema.
Conforme Pressman (2006), essa métrica pode ser calculada por três
maneiras fundamentadas pela teoria dos grafos:
1. O número de regiões corresponde à complexidade ciclomática.
2. Dado um grafo de fluxo G, a complexidade ciclomática, V(G), é
definida como:
V(G) = A-N+2
Em que,
A é igual ao número de arestas do grafo de fluxo
N é igual ao número de nós.
3. Dado um grafo de fluxo G, a complexidade ciclomática, V(G),
também pode ser definida como:
V(G) = P+1
24
Em que,
P é o número de nós predicados contidos no grafo de fluxo G.
A complexidade ciclomática pode ser aplicada a funções, módulos,
métodos ou classes individuais de um programa, auxiliando também em
casos de teste.
2.6.2.2 Métricas de Halstead
Propostas por Halstead (1977), as métricas de complexidade de
Halstead foram desenvolvidas com o objetivo de determinar uma medida
quantitativa da complexidade diretamente a partir dos operadores e os
operandos presentes no código fonte de um sistema.
Interpretar estatisticamente o código-fonte como uma sequência de
operadores e operandos é a essência das métricas de Halstead.
De acordo com Halstead (1977), os seguintes parâmetros são
contabilizados na interpretação:
n1: Número de operadores distintos
n2: Número de operandos distintos
N1: Número total de operadores
N2: Número total de operandos
Através desses parâmetros são determinadas as métricas presentes no
Quadro 1.
25
Quadro 1 Métricas de Halstead
Métrica
Fórmula
n (Vocabulary - Vocabulário)
n = n1 + n2
N (Length - Tamanho)
N = N1+N2
V (Volume)
D (Difficulty - Dificuldade)
E (Effort - Esforço)
V = N x log2 n
n1/2 x N2/n
E=VxD
T (Time - Tempo de teste)
T = E/18
B (Bugs - Erros)
B = V/3000
2.6.3 Métricas orientadas a objetos
Na literatura estão presentes algumas métricas relacionadas ao contexto
de orientação a objetos, como o conjunto de métricas de Chidamber e Kemerer,
propostas em Chidamber e Kemerer (1994), e também o de Lorenz e Kidd,
propostas em Lorenz (1994).
2.6.3.1 Métricas de Chidamber e Kemerer
Um conjunto de seis métricas que permitem a análise quantitativa dos
artefatos de software orientado a objetos foram propostas por Chidamber e
Kemerer (1994). As mesmas possuem como objetivo identificar as classes que
possuem maior número de defeitos, orientando onde devem ser aplicados os
esforços de teste. Tais métricas são:
26
1. WMC (Weight methods per class – Métodos ponderados por
classe): representa a complexidade da classe por meio de seus métodos. O
cálculo desta métrica é dado pelo somatório das complexidades dos métodos que
constituem a classe. Se algumas classes apresentar um alto WMC, significa que
tende ser específica, ou seja, destinando-se a necessidades individuais, o que
restringe sua reutilização.
2. DIT (Depth of the inheritance tree – Profundidade da árvore de
herança): representa o número máximo de superclasses acima da classe
analisada, ou seja, indica a posição de uma classe na árvore de herança, que é
calculada pela distância máxima da classe até a raiz da árvore. Quanto maior a
profundidade, mais complexo pode ser um projeto, pois pode indicar que a
classe herdou muitas características comuns a outras classes, tornando-a mais
difícil de entender.
3. NOC (Number of children – Número de filhos): representa o
número de subclasses posicionadas imediatamente abaixo da classe analisada.
Um NOC alto pode indicar que uma superclasse possui muitos filhos que
necessitaram implementar características próprias, demonstrando baixo nível de
abstração. É também um indicador da importância de uma classe, pois quanto
mais sub-classes possuir uma classe, maior a importância de seu teste no
sistema.
4. CBO (Coupling between object classes – Acoplamento entre classes
de objetos): representa o nível de acoplamento entre as classes. O acoplamento
entre duas classes existe quando métodos de uma delas usa métodos ou variáveis
de instância da outra. Um CBO alto indica que a classe possui um número alto
de relacionamentos, o que torna mais difícil sua reutilização e aumenta sua
complexidade, pois a classe torna-se dependente de outras para efetuar suas
operações.
27
5. LCOM (Lack of cohesion in methods – Falta de coesão em
métodos): mede o quanto os métodos de uma classe acessam atributos em
comum. Quanto maior o LCOM, menos coesa é a classe. A coesão em métodos
é a capacidade dos métodos realizarem apenas a função a que são destinados e,
para isso devem acessar apenas atributos essenciais ao seu funcionamento.
Assim, dois métodos de uma classe são coesos se compartilham variáveis de
instância desta classe.
6. RFC (Response for a class – Resposta de uma classe): representa o
número de métodos que podem ser executados em resposta a uma mensagem
recebida por um objeto da classe. Esta representação é dada pela contagem do
número de métodos da classe mais o número de métodos chamados pela classe.
Um RFC alto indica uma maior possibilidade de a classe atender às suas
funções. Entretanto, quanto maior o RFC, mais complexa será a classe.
2.6.3.2 Métricas de Lorenz e Kidd
Outro conjunto de métricas que permitem a análise quantitativa dos
artefatos de software orientado a objetos foram propostos em Lorenz (1994). Tal
conjunto consiste de quatro métricas, e é denominado como Métricas de Lorenz
e Kidd. São elas:
1. CS (Class Size – Tamanho da Classe): mede o tamanho de uma
classe através de uma contagem do número total de operações e número total de
atributos que estão encapsulados nesta classe. Um CS alto indica que a classe
pode ser muito específica, dificultando sua reutilização, e que também possui
alta complexidade.
2. NOO (Number of operations overriden by a subclass – Número de
operações redefinidas por uma subclasse): mede o número de operações
28
substituídas por uma subclasse. Os métodos herdados de uma superclasse podem
ser redefinidos em subclasses com o objetivo de tornar sua funcionalidade mais
específica. Um alto NOO pode significar problemas na estruturação, visto que
muitas subclasses do projeto possuem métodos redefinidos e provavelmente
estão mal projetadas.
3. NOA (Number of operations added by a subclass – Número de
operações adicionadas por uma subclasse): mede o número de métodos e
atributos adicionados por uma subclasse. Um alto NOA indica que
possivelmente há o afastamento da abstração da superclasse, gerando problemas
de estruturação, o que dificulta a reutilização, e também um aumento de
complexidade.
4. SI (Specialization index – Índice de especialização): mede o número
de métodos adicionados, excluídos ou modificados em uma classe. É obtida
através do resultado da NOO multiplicado pelo nível da árvore hierárquica onde
se encontra a subclasse. O valor obtido é dividido pelo número total de métodos
da classe. Um alto SI indica um problema de estruturação de classes, afetando a
reutilização.
2.7 Valores de referência
Ao longo do tempo, muitas métricas de software vêm sendo propostas.
Entretanto, a maioria das métricas não apresentam valores de referência
confiáveis, gerando um impacto negativo nas medições, e fazendo com que seu
uso não seja amplamente aceito. Autores como Ferreira (2011) e Lanz (2006)
vêm tentando quebrar esse paradigma, propondo valores de referência para
algumas métricas de software existentes.
29
De acordo com Lanza e Marinescu (2006), valores de referência
dividem o espaço do valor de uma métrica em regiões, e dependendo da região
que o valor da métrica se encontra, é possível fazer uma avaliação da unidade
medida. O autor ainda destaca que existem duas formas para propor valores de
referência para métricas de software: com base na experiência e na análise
estatística.
Os valores de referência baseados na experiência são os menos
confiáveis, pois dependem da experiência de um profissional, sendo difícil
generalizar ou reproduzir. Benlarbi et al. (2000) afirma que muitos valores de
referência foram estabelecidos com base na experiência, mas como não foram
validados empiricamente, tais valores geram certa desconfiança. Uma métrica
que obteve seu valor de referência estabelecido com base na experiência foi a
Complexidade ciclomática, proposta por McCabe (1976) e descrita na Seção
2.6.2.1 deste trabalho. McCabe (1976) considerou que o valor de referência
médio para essa métrica é 10.
Já os valores de referência baseados na análise estatística demonstram
ser mais confiáveis. Os mesmos são derivados a partir da análise dos dados de
uma população ou amostra, e utilizam técnicas como média, desvio padrão,
variância, dentre outros. Segundo Lanza e Marinescu (2006), esses valores são
úteis principalmente para métricas de tamanho, onde apenas com o uso da
estatística, é possível obter valores frequentes ou incomuns.
30
3 METODOLOGIA
Neste capítulo são descritas as classificações da pesquisa com base nas
classificações propostas em Jung (2004), e também os métodos utilizados no
desenvolvimento da mesma.
3.1 Classificações da pesquisa
De acordo Jung (2004), a pesquisa pode ser classificada quanto à
natureza, objetivos, abordagem e procedimentos. A Figura 1 mostra os tipos de
pesquisa existentes. A área em amarelo indica as classificações de pesquisa deste
trabalho.
Figura 1 Tipos de pesquisas
Fonte: Adaptado de Jung (2004)
31
A pesquisa desenvolvida neste trabalho está classificada da seguinte
forma:
Quanto à Natureza: Pesquisa aplicada. O trabalho tem como objetivo
realizar uma análise de ferramentas que aplicam métricas de software, ou seja,
produzir conhecimento para aplicação de seus resultados, com o objetivo de
contribuir com fins práticos.
Quanto aos objetivos: Descritiva, pois realiza-se o estudo, a análise, o
registro, e a interpretação dos dados das medições sem a interferência do
pesquisador.
Quanto à abordagem: Quantitativa. A pesquisa pode ser classificada
como quantitativa porque as variáveis a serem medidas são objetivas e medidas
em escalas numéricas. Como o objetivo do trabalho é analisar estatisticamente
algumas métricas de software, o uso de dados estatísticos e medidas intervalares
são utilizados.
Quanto aos procedimentos: Experimental. Este trabalho realiza testes
estatísticos utilizando dados de medições de software com a finalidade de
comparar os resultados e verificar se há diferença significativa entre os mesmos.
3.2 Desenvolvimento da pesquisa
Para que os objetivos pudessem ser atingidos, o desenvolvimento do
trabalho consistiu de sete etapas: revisão bibliográfica, seleção de ferramentas,
seleção de softwares, medição dos softwares, escolha das métricas, análise das
ferramentas e análise estatística.
1. Revisão bibliográfica: foi realizado um levantamento de livros e
artigos sobre métricas de produto para aprimorar os conhecimentos sobre o
32
tema.
2. Seleção de ferramentas: foram pesquisadas e selecionadas
ferramentas de coleta que utilizam métricas de produto para mensurar a
qualidade de um software. Tais ferramentas deveriam ser gratuitas ou possuir
licença acadêmica.
As seguintes ferramentas foram selecionadas:

Analizo

Code Analyzer

CodePro Analytix

Connecta

Krakatau

Simple Code Metrics
Diferentemente das outras, a ferramenta Krakatau não é gratuita.
Entretanto, foi disponibilizada uma licença acadêmica válida por tempo limitado
com o desenvolvedor.
3. Seleção de softwares: para que as métricas pudessem ser analisadas
era necessário ter a disposição uma quantidade significativa de projetos de
softwares a fim de garantir a confiabilidade e qualidade esperadas. Desta forma,
alguns critérios foram estabelecidos. Cada software deveria obedecer as
seguintes regras:

Possuir código aberto.

Desenvolvimento na linguagem JAVA.

Possuir três versões de desenvolvimento disponíveis.

Disponibilidade de código fonte.

Disponibilidade de bytecode.
33
Foram selecionadas três versões de 107 softwares de código livre. Tais
softwares foram baixados do maior portal de código aberto existente,
denominado SourceForge.net. O mesmo caracteriza-se por ser um repositório de
código fonte utilizado por desenvolvedores do mundo todo para gerenciar o
desenvolvimento de softwares open source. Os softwares foram organizados por
versão e domínio de aplicação, e em seguida foram preparados para serem
medidos. A fim de facilitar a compreensão dos dados, foi definido que a versão
mais antiga de cada software seria denominada como versão 1, a versão
intermediária como versão 2, e a última versão lançada como versão 3.
A lista com os 107 softwares estão no Apêndice A deste trabalho.
4. Medição dos softwares: cada versão dos softwares foi medida pelas
ferramentas encontradas. Os dados gerados pelas medições foram tabulados e
organizados. Os mesmos passaram por uma rigorosa inspeção com o objetivo de
verificar sua confiabilidade. Inconsistências encontradas foram tratadas e
corrigidas.
5. Escolha das métricas: após as medições da amostra, foram
escolhidas três métricas de produto para serem analisadas estatisticamente. Tal
escolha baseou-se nos seguintes critérios: ser medida por no mínimo duas
ferramentas automáticas e falta de valores de referência consistentes na
literatura. As métricas escolhidas foram: Número de métodos (NOM),
Complexidade ciclomática média (ACC) e Proporção de comentários (CR).
A métrica Número de métodos (NOM) consiste basicamente de uma
contagem do número de métodos que um software possui. Cada classe é
analisada, e à medida que um método é encontrado, o mesmo é contabilizado no
valor total.
34
A Figura 2 representa um software com um conjunto de três classes com
NOM = 11.
Figura 2 Classes de um software com NOM = 11
A métrica Complexidade ciclomática média (ACC) nada mais é do que
um valor determinado pela média da Complexidade ciclomática de McCabe
(1976) encontrada em cada um dos métodos de um software. É calculada da
seguinte forma:
ACC = CCT / NOM, em que:
ACC = Complexidade ciclomática média.
CCT = Soma das Complexidades ciclomáticas de cada método.
NOM = Número total de métodos do software.
35
Aplicando a fórmula da complexidade ciclomática (V(G) = A-N+2) para
os caminhos de execução dos métodos representados nas Figuras 3 e 4 temos:
V(G1) = 6-5+2 = 3
V(G2) = 10-8+2 = 4
NOM = 2
Figura 3 Método G1
Figura 4 Método G2
Desta forma, a Complexidade ciclomática média (ACC) é definida por:
ACC = 3+4/2
ACC = 3,5
A métrica Proporção de comentários é definida como a relação entre o
número de linhas comentadas e o número de linhas de código de um software. É
calculada da seguinte forma:
Proporção de comentários = Linhas comentadas / Linhas de código.
De acordo com o código-fonte da figura 5, temos os seguintes dados:
36
Linhas comentadas = 3
Linhas de código = 8
Desta forma, a Proporção de comentários é determinada pela razão entre
os dados obtidos:
Proporção de comentários = 3 / 8 = 0,375.
Figura 5 Código-fonte de uma classe
O Quadro 2 apresenta a relação das métricas escolhidas com as
ferramentas de medição encontradas.
Quadro 2 Relação entre métricas e ferramentas de medição.
Métricas
NOM
ACC
CR
Ferramentas
Analizo
X
Code Analyzer
CodePro Analytix
X
X
X
Connecta
Krakatau
X
X
Simple Code Metrics
X
X
37
6. Análise das ferramentas: cada ferramenta de coleta que mede as
métricas escolhidas foi analisada para verificar o que estava realmente medindo,
ou seja, identificar tipos de métodos, classes, comentários ou estruturas de
controle que são levados em consideração nos resultados apresentados por suas
métricas. Tal análise é importante porque as ferramentas não possuem
descrições adequadas em suas documentações. É possível que uma ferramenta
possa, por exemplo, considerar em suas medições métodos dentro da interface.
Pode ser que outra ferramenta não considere tais métodos, fazendo com que os
resultados apresentados pelas duas ferramentas sejam diferentes.
7. Análise estatística: nesta etapa os dados gerados pelas medições das
métricas de produto selecionadas foram analisados estatisticamente com o
objetivo de verificar se haviam diferenças significativas entre os dados gerados
pelas ferramentas. Para cada uma das métricas foi verificado:
a) Se existe diferença significativa entre as médias de cada software,
independentemente da versão, para cada uma das métricas escolhidas.
b) O mesmo raciocínio acima, mas verificando se há diferença
significativa entre as versões de um mesmo software, isto é, se de uma versão
para outra houve uma mudança significativa na média.
38
4 RESULTADOS E DISCUSSÕES
Neste capítulo são apresentados e discutidos os resultados
encontrados nas medições das seguintes métricas de produto: Número de
métodos, Proporção de comentários e Complexidade ciclomática média. Para
cada métrica foi realizado testes em todas as ferramentas com o objetivo de
verificar o que cada ferramenta estava realmente medindo. Em seguida foi
gerada uma estatística descritiva para descrever e sumarizar os dados. Por
fim, testes de comparação de médias foram aplicados para verificar se há
diferença significativa entre as mesmas. Todos os dados são anormais e o
valor de significância utilizado nos testes de comparação de médias foi igual
a 0,05. A estatística descritiva e os testes de comparação entre médias foram
gerados pela ferramenta XLSTAT, que é um software de análise de dados
estatísticos para o Microsoft Excel.
4.1 Número de métodos
Nesta seção são apresentados os resultados dos testes das
ferramentas, a estatística descritiva, e os resultados dos testes de comparação
de média para a métrica Número de métodos.
4.1.1 Testes nas ferramentas que calculam a métrica NOM
A métrica Número de métodos foi medida pelas seguintes
ferramentas: Analizo, CodePro Analytix, Krakatau e Simple Code Metrics.
Nos testes foram utilizados 32 métodos de diferentes tipos, tais como: public,
39
private, static, final, dentre outros.
Conforme o Quadro 3, a métrica Número de métodos apresentou valores
exatamente iguais nas ferramentas Analizo e Krakatau. O “X” indica o que cada
ferramenta considera. O número de métodos encontrados nas ferramentas
Simple Code Metrics e na CodePro Analytix foram menores porque na primeira
não são considerados construtores, e a segunda não considera métodos em classe
dentro de classe, métodos na interface e nem construtores.
Quadro 3 Testes nas ferramentas da métrica NOM
Ferramenta
Métodos
utilizados
Métodos
encontrados
Interface
Classes
internas
Herança
Construtores
Analizo
32
32
X
X
X
X
CodePro
Analytix
32
30
X
X
X
Krakatau
32
32
X
X
X
Simple Code
Metrics
32
25
X
X
Todas as ferramentas consideraram em sua contagem métodos public,
private, protected, métodos com static, abstract, synchronized, final, e também
gets e sets criados automaticamente.
4.1.2 Estatística descritiva da métrica NOM
A estatística descritiva para a métrica Número de métodos é apresentada
nos Quadros 4, 5 e 6. Cada quadro corresponde a uma versão das ferramentas,
40
que vai de 1 até 3. As Figuras 6, 7 e 8 sumarizam os dados em gráficos do tipo
BoxPlot.
De acordo com o Quadro 4 é possível identificar que, para a versão de
software número 1, há uma certa discrepância entre os valores da ferramenta
Krakatau e as demais ferramentas, pois a média dos valores apresentada para
essa ferramenta foi bem menor do que para as demais. O 1º Quartil indica que
75% dos valores estão acima de 300 para todas as ferramentas, com exceção da
Krakatau, que estão com 75% dos valores acima de 182. O 3º Quartil indica que
25% dos valores estão acima de 1865 para a ferramenta Krakatau, e acima de
2400 para as outras ferramentas.
Quadro 4 Estatística descritiva da métrica NOM para versão de software 1
Analizo
Média
2258,636
CodePro
Analytix
2045,651
Krakatau
1561,009
Simple Code
Metrics
1801,421
Moda
199
2704
7
NA
1º Quartil
398,500
347,500
182,000
329,500
Mediana
1180,000
916,000
730,000
977,000
3º Quartil
3162,000
2675,750
1865,000
2491,500
Amplitude
11687,000
13435,000
11158,000
9095,000
Soma dos quadrados
763586824,8
745084212,1
483332171
448430380,1
Variância
7203649,290
7096040,115
4559737,462
4230475,284
Desvio padrão
2683,961
2663,839
2135,354
2056,812
Através do gráfico Boxplot é possível sumarizar as seguintes medidas:
média, 1º Quartil, Mediana e 3º Quartil, valores mínimos e máximos. Segundo
Braga (2010), o gráfico Boxplot é usado para identificar onde estão localizados
50% dos valores mais prováveis, a mediana e os valores extemos. Também
identifica a existência de outliers, que representam os valores extremamente
altos ou baixos, ou seja, valores discrepantes. O BoxPlot é interpretado da
seguinte forma:
41
O eixo vertical representa a variável analisada.
A caixa (box) propriamente contém 50% dos dados. O limite superior da
caixa indica o percentil de 75% dos dados e o limite inferior da caixa indica o
percentil de 25%. A distância entre esses dois quartis é chamada de interquartil.
A linha na caixa indica o valor da mediana dos dados. Se a linha não é
equidistante dos extremos, então os dados são assimétricos.
Os extremos do gráfico representados pelos pontos Minimum e
Maximum indicam os valores mínimo e máximo. Os pontos fora do gráfico são
os outliers.
De acordo com a Figura 6, percebe-se que os dados para todas as
ferramentas são assimétricos, pois a linha mediana dentro da caixa não é
equidistante dos extremos. Percebe-se também (através dos outliers) a existência
de vários valores discrepantes. Os BoxPlots lado a lado deixam claro a grande
diferença da Krakatau para as demais ferramentas.
Figura 6 Boxplot da métrica NOM para versão de software 1
42
Assim como na versão 1, a média dos valores encontrados na ferramenta
Krakatau para a versão 2 também apontam uma grande diferença em relação as
outras ferramentas. De acordo com o Quadro 5, a média dos valores para essa
ferramenta também foi bem menor do que para as demais. O 1º Quartil indica
que 75% dos valores estão acima de 450 para todas as ferramentas. A Krakatau
novamente é exceção, pois 75% dos seus valores estão acima de 171. O 3º
Quartil indica que 25% dos valores estão acima de 2535 para a ferramenta
Krakatau, e acima de 3400 para as outras ferramentas.
Quadro 5 Estatística descritiva da métrica NOM para versão de software 2
Analizo
CodePro
Analytix
Krakatau
Simple Code
Metrics
Média
3350,093
2657,337
1832,925
2463,037
Moda
253
502
101
NA
1º Quartil
702,500
472,000
171,000
543,000
Mediana
1986,000
1195,000
634,000
1719,000
3º Quartil
4751,000
3469,000
2535,000
3524,500
Amplitude
24044,000
17637,000
13461,000
12541,000
Soma dos quadrados
1615768270
1160939674
688612663,4
728575683,9
Variância
15234721,029
11162881,477
6496345,881
6873355,508
Desvio padrão
3903,168
3341,090
2548,793
2621,709
De acordo com a Figura 7 percebe-se que os dados para todas as
ferramentas são assimétricos e também há a existência de vários valores
discrepantes para todas as ferramentas. Novamente percebe-se a grande
diferença da ferramenta Krakatau para as demais ferramentas.
43
Figura 7 Boxplot da métrica NOM para versão de software 2
Considerando as versões de número 3, e conforme o Quadro 6,
percebe-se que a média dos valores encontrados pela ferramenta Krakatau
também foi bem menor do que para as demais. O 1º Quartil indica que 75%
dos valores estão acima de 500 para todas as ferramentas, com exceção da
Krakatau, que estão com 75% dos valores acima de 151. O 3º Quartil indica
que 25% dos valores estão acima de 1711 para a ferramenta Krakatau, e
acima de 3800 para as demais.
44
Quadro 6 Estatística descritiva da métrica NOM para versão de software 3
Analizo
Média
Moda
1º Quartil
Mediana
3º Quartil
Amplitude
Soma dos quadrados
Variância
Desvio padrão
4342,308
NA
1045,000
2180,000
5511,500
42710,000
3586568848
33807213,215
5814,397
CodePro
Analytix
3281,471
NA
548,500
1475,000
3859,500
40596,000
2720198366
26409692,873
5139,036
Krakatau
1660,729
14
151,000
736,000
1711,000
16692,000
732017893,1
6905829,181
2627,894
Simple Code
Metrics
3275,804
NA
778,000
1766,000
4180,000
24924,000
1726960963
16292084,555
4036,345
Conforme a Figura 8 percebe-se que os dados para todas as ferramentas
são assimétricos e também há a existência de vários valores discrepantes para
todas as ferramentas. Mais uma vez percebe-se a grande diferença da ferramenta
Krakatau para as demais ferramentas.
Figura 8 Boxplot da métrica NOM para versão de software 3
45
4.1.3 Testes estatísticos da métrica NOM
Para verificar se existe diferença significativa entre as médias de cada
software, independentemente da versão, foi utilizado o teste de Friedman, pois
segundo Siegel (2006) é útil para realizar testes não paramétricos para mais de
duas amostras emparelhadas.
Hipóteses:
H0: Não há diferenças significativas entre as médias.
H1: Há diferenças significativas entre as médias.
Os resultados do teste foram os seguintes:
N = 107
Q = 171,778
P-valor < 0,0001
Como P-valor < 0,0001, a hipótese H0 é rejeitada e a hipótese H1 aceita,
ou seja, há diferença significativa entre as médias de cada software.
Através do teste post-hoc de Nemenyi (NEMENYI, 1963) é possível
realizar comparações múltiplas pareadas para identificar quais ferramentas
apresentam diferenças significativas entre as médias de cada software.
O teste constatou que as ferramentas Analizo e CodePro Analytix
apresentam diferenças significativas entre si, e também em relação a todas as
outras. As ferramentas Krakatau e Simple Code Metrics não apresentam
diferenças significativas entre si.
A fim de verificar se existe diferença significativa entre as versões de
um mesmo software, isto é, se houve uma mudança significativa na média de
uma versão para outra, novamente foi utilizado o teste de Friedman. As
hipóteses foram as mesmas para as quatro ferramentas:
46
H0: Não há diferenças significativas entre as médias.
H1: Há diferenças significativas entre as médias.
O Quadro 7 mostra os resultados obtidos no teste de Friedman.
Quadro 7 Teste de Friedman na métrica NOM
Analizo
CodePro Analytix
Krakatau
Simple Code Metrics
N = 107
N = 107
N = 107
N = 107
Q = 146,70
Q = 89,348
Q = 2,093
Q = 146,70
P-valor < 0,0001
P-valor < 0,0001
P-valor = 0,351
P-valor < 0,0001
A única ferramenta para qual não foi rejeitada a hipótese H0 foi a
Krakatau, pois P-valor > 0,05. Dessa forma, não houve diferença significativa
entre as médias de uma versão para esta ferramenta.
As demais ferramentas apresentaram P-valor < 0,05, ou seja, a hipótese
H0 é rejeitada. Aplica-se então o teste post-hoc de Nemenyi para verificar quais
versões apresentaram diferença significativa.
O teste de Nemenyi demonstrou que existem diferenças significativas
entre todas as versões nas ferramentas Analizo, CodePro Analytix e Simple
Code Metrics, ou seja, existem diferenças entre as versões de software 1, 2 e 3.
4.2 Proporção de comentários
Nesta seção são apresentados os resultados dos testes das ferramentas, a
estatística descritiva, e os resultados dos testes de comparação de média para a
métrica Proporção de comentários.
47
4.2.1 Testes nas ferramentas que calculam a métrica CR
A métrica Proporção de comentários é medida pelas seguintes
ferramentas: CodePro Analytix e Krakatau. Foram testados comentários do tipo
/*/ e //.
De acordo com o Quadro 8, os valores encontrados nas duas ferramentas
divergem porque a ferramenta CodePro Analytix considera comentários do tipo
/*comentário*/ como apenas 1 comentário, diferentemente da Krakatau que a
cada quebra de linha soma 1 ao número de comentários encontrados.
Quadro 8 Testes nas ferramentas da métrica CR
Valores
Ferramenta
encontrados
Interface
Classes
internas
Herança
Construtores
CodePro Analytix
0,042
X
X
X
X
Krakatau
0,07
X
X
X
X
O Quadro 9 ilustra bem a diferença entre os tipos de comentários
considerados em cada ferramenta.
Quadro 9 Diferenças entre comentários
CodePro Analytix
Krakatau
Comentários do tipo:
Comentários do tipo:
/*comentário
/*comentário
comentário
comentário
comentário*/
comentário*/
é considerado como 1 comentário
é considerado como 3 comentários
Outro fator que pode influenciar no valor desta métrica é que a
ferramenta Krakatau arredonda os valores encontrados em cada classe. Por
48
exemplo, se em uma classe a proporção de comentários encontrada foi de
0,20833, a ferramenta arredondará este valor para 0,21. Um projeto com um
grande número de classes poderá apresentar maiores discrepâncias entre os
valores das duas ferramentas.
O número de linhas de código encontrado nas duas ferramentas foram
exatamente iguais, não afetando assim o valor da métrica Proporção de
comentários.
4.2.2 Estatística descritiva da métrica CR
A estatística descritiva para a métrica Proporção de comentários é
apresentada nos Quadros 10, 11 e 12. Cada quadro corresponde a uma versão
das ferramentas, que vai de 1 até 3. As Figuras 9, 10 e 11 sumarizam os dados
em gráficos do tipo BoxPlot.
De acordo com o Quadro 10 é possível identificar que, para a versão de
software número 1, há discrepância entre os valores das ferramentas CodePro
Analytix e Krakatau, pois a diferença entre as médias dos valores apresentados
pelas mesmas é grande. A discrepância também é observada através da diferença
entre o 1º Quartil e 3º Quartil das ferramentas.
Quadro 10 Estatística descritiva da métrica CR para versão de software 1
Média
Moda
1º Quartil
Mediana
3º Quartil
Amplitude
Soma dos quadrados
Variância
Desvio padrão
CodePro Analytix
0,148
0,19
0,090
0,130
0,190
0,780
1,081584
0,010
0,101
Krakatau
0,613
0,643
0,306
0,473
0,687
4,792
3328603,662
0,361
0,601
49
Conforme a Figura 9 percebe-se que os dados da ferramenta CodePro
Analytix são assimétricos, pois a linha mediana dentro da caixa não é
equidistante dos extremos. Diferentemente da CodePro, os dados da Krakatau
aparentam ser simétricos. Percebe-se também (através dos outliers) a existência
de vários valores discrepantes. Os BoxPlots lado a lado deixam claro a diferença
entre as ferramentas CodePro Analytix e Krakatau.
Figura 9 Boxplot da métrica CR para versão de software 1
Conforme o Quadro 11, também nota-se uma grande diferença entre as
médias das ferramentas CodePro Analytix e Krakatau para as versões de
software de número 2. Tal diferença também é observada entre o 1º Quartil e 3º
Quartil das ferramentas.
50
Quadro 11 Estatística descritiva da métrica CR para versão de software 2
Média
Moda
1º Quartil
Mediana
3º Quartil
Amplitude
Soma dos quadrados
Variância
Desvio padrão
CodePro Analytix
0,235
0,12
0,090
0,130
0,200
7,000
48,58161333
0,467
0,683
Krakatau
0,642
0,674
0,322
0,522
0,710
4,957
5595437,847
0,354
0,595
De acordo com a Figura 10 é possível notar que os dados da CodePro
Analytix são assimétricos e os da Krakatau são simétricos. Novamente percebese a existência de valores discrepantes e também a diferença entre as
ferramentas.
Figura 10 Boxplot da métrica CR para versão de software 2
51
De acordo com o Quadro 12, e assim como nas versões anteriores, notase também uma grande diferença entre as médias das ferramentas CodePro
Analytix e Krakatau para as versões de software de número 3. Tal diferença
também é observada entre o 1º Quartil e 3º Quartil das ferramentas.
Quadro 12 Estatística descritiva da métrica CR para versão de software 3
Média
CodePro Analytix
0,163
Krakatau
0,603
Moda
0,12
0,59
1º Quartil
0,090
0,311
Mediana
0,135
0,475
3º Quartil
0,190
0,720
Amplitude
1,000
4,244
Soma dos quadrados
2,037175962
2902818,052
Variância
0,020
0,276
Desvio padrão
0,141
0,526
Conforme a Figura 11 é possível notar que os dados das duas
ferramentas são assimétricos, diferentemente das versões anteriores em que os
dados da Krakatau aparentavam ser simétricos. Mais uma vez percebe-se a
existência de valores discrepantes e também a diferença entre as ferramentas.
Figura 11 Boxplot da métrica CR para versão de software 3
52
4.2.3 Testes estatísticos da métrica CR
Para verificar se existe diferença significativa entre as médias de cada
software, independentemente da versão, o teste de Wilcoxon foi utilizado, pois
segundo Siegel (2006) é útil para realizar testes não paramétricos para duas
amostras emparelhadas.
Hipóteses:
H0: Não há diferenças significativas entre as médias.
H1: Há diferenças significativas entre as médias.
Os resultado do teste foi o seguinte:
N = 107
V = 215
P-valor < 0,0001
Como P-valor < 0,05 é rejeitada a hipótese de igualdade entre médias,
implicando em uma diferença significativa entre as ferramentas CodePro
Analytix e Krakatau.
A fim de verificar se existe diferença significativa entre as versões de
um mesmo software, isto é, se houve uma mudança significativa na média de
uma versão para outra, foi utilizado o teste de Friedman. As hipóteses foram as
mesmas para as duas ferramentas:
H0: Não há diferenças significativas entre as médias.
H1: Há diferenças significativas entre as médias.
Os resultados do teste de Friedman é apresentado no Quadro 13.
Quadro 13 Teste de Friedman na métrica CR
CodePro Analytix
Krakatau
N = 107
N = 107
Q = 0,699
Q = 0,352
P-valor = 0,705
P-valor = 0,839
53
Como P-valor > 0,05 a hipótese H0 não é rejeitada nas duas ferramentas.
Assim, não foi encontrada diferença significativa entre versões nas ferramentas
CodePro Analytix e Krakatau.
4.3 Complexidade ciclomática média
Nesta seção são apresentados os resultados dos testes nas ferramentas, a
estatística descritiva, e os resultados dos testes de comparação de média para a
métrica Complexidade ciclomática média.
4.3.1 Testes nas ferramentas que calculam a métrica ACC
A métrica Complexidade ciclomática média é medida pelas seguintes
ferramentas: CodePro Analytix e Simple Code Metrics. Nos testes foram
utilizados 32 métodos de diferentes tipos. Dentro dos métodos haviam
declarações condicionais como "if", "for", "while" e "try catch".
Conforme o Quadro 14, os valores encontrados nas duas ferramentas são
diferentes porque a ferramenta Simple Code Metrics não considera métodos na
Interface e nem métodos em Classes internas. Além disso, a estrutura Try Catch
e construtores afetam o valor da complexidade na ferramenta CodePro Analytix,
o que não acontece na Simple Code Metrics, pois a mesma não considera
construtores e nem a estrutura Try Catch.
Quadro 14 Testes nas ferramentas da métrica ACC
Ferramenta
CodePro
Analytix
Simple
Code
Metrics
Valores
encontrados
Interface
Classes
internas
Herança
Construtores
Estrutura
Try
Catch
1,46
X
X
X
X
X
1,36
X
54
4.3.2 Estatística descritiva da métrica ACC
A estatística descritiva para a métrica Número de métodos é apresentada
nos Quadros 15, 16 e 17. Cada quadro corresponde a uma versão das
ferramentas, que vai de 1 até 3. As Figuras 12, 13 e 14 sumarizam os dados em
gráficos do tipo BoxPlot.
De acordo com o Quadro 15 é possível identificar que, para a versão de
software número 1, não há discrepância entre os valores das ferramentas
CodePro Analytix e Simple Code Metrics, pois a diferença entre as médias dos
valores apresentados pelas mesmas é pequena. A diferença entre os valores do 1º
Quartil e 3º Quartil das ferramentas também não é grande.
Quadro 15 Estatística descritiva da métrica ACC para versão de software 1
CodePro Analytix
Simple Code Metrics
Média
2,419
2,345
Moda
1,83
NA
1º Quartil
1,713
1,679
Mediana
2,020
2,054
3º Quartil
2,753
2,725
Amplitude
14,370
7,645
Soma dos quadrados
311,728946
129,2418876
Variância
2,969
1,219
Desvio padrão
1,723
1,104
De acordo com a Figura 12 percebe-se que os dados da ferramenta
CodePro Analytix e Simple Code Metrics são assimétricos, pois a linha mediana
55
dentro da caixa não é equidistante dos extremos. Percebe-se também (através
dos outliers) a existência de alguns valores discrepantes. Os BoxPlots lado a
lado deixam claro que há pouca diferença entre as duas ferramentas.
Figura 12 Boxplot da métrica ACC para versão de software 1
Conforme o Quadro 16, também nota-se que não há grande diferença
entre as médias das ferramentas CodePro Analytix e Simple Code Metrics para
as versões de software de número 2. O 1º Quartil e 3º Quartil das ferramentas
também não apresentam grandes diferenças.
56
Quadro 16 Estatística descritiva da métrica ACC para versão de software 2
CodePro Analytix
Simple Code Metrics
Média
2,528
2,419
Moda
1,78
NA
1º Quartil
1,780
1,701
Mediana
2,090
2,065
3º Quartil
2,720
2,788
Amplitude
19,400
8,284
Soma dos quadrados
479,7714248
140,0308639
Variância
4,613
1,321
Desvio padrão
2,148
1,149
De acordo com a Figura 13 é possível notar que os dados das duas
ferramentas são assimétricos. Novamente percebe-se a existência de poucos
valores discrepantes e também a pouca diferença entre as ferramentas.
Figura 13 Boxplot da métrica ACC para versão de software 2
57
Assim como nas versões anteriores, e de acordo com o Quadro 17, não
há uma grande diferença entre as médias das ferramentas CodePro Analytix e
Simple Code Metrics para as versões de software de número 3. Grandes
diferenças também não são observadas entre o 1º Quartil e 3º Quartil das
ferramentas.
Quadro 17 Estatística descritiva da métrica ACC para versão de software 3
CodePro Analytix
Simple Code Metrics
Média
2,534
2,383
Moda
1,95
NA
1º Quartil
1,780
1,761
Mediana
2,000
2,066
3º Quartil
2,783
2,652
Amplitude
23,170
6,756
Soma dos quadrados
550,5027385
107,1737517
Variância
5,345
1,011
Desvio padrão
2,312
1,006
De acordo com a Figura 14 é possível notar que os dados das duas
ferramentas são assimétricos. Assim como nas versões anteriores, mais uma vez
percebe-se a existência de poucos valores discrepantes e também a pouca
diferença entre as ferramentas.
58
Figura 14 Boxplot da métrica ACC para versão de software 3
4.3.3 Testes estatísticos da métrica ACC
Para verificar se existe diferença significativa entre as médias de cada
software, independentemente da versão, o teste de Wilcoxon foi utilizado.
Hipóteses:
H0: Não há diferenças significativas entre as médias.
H1: Há diferenças significativas entre as médias.
Os resultado do teste foi o seguinte:
N = 107
V = 2835,500
P-valor = 0,970
59
Como P-valor > 0,05, a hipótese de igualdade entre médias não é
rejeitada, fazendo com que as ferramentas CodePro Analytix e Simple Code
Metrics não apresentem diferença significativa.
A fim de verificar se existe diferença significativa entre as versões de
um mesmo software, isto é, se houve uma mudança significativa na média de
uma versão para outra, foi utilizado o teste de Friedman.
Hipóteses:
H0: Não há diferenças significativas entre as médias.
H1: Há diferenças significativas entre as médias.
Os resultados do teste são visualizados no Quadro 18.
Quadro 18 Teste de Friedman na métrica ACC
CodePro Analytix
Simple Code Metrics
N = 107
N = 107
Q = 14,259
Q = 8,283
P-valor = 0,001
P-valor = 0,016
Como P-valor < 0,05 a hipótese H0 é rejeitada nas duas ferramentas, ou
seja, há diferenças significativas. Dessa forma, aplica-se o teste post-hoc de
Nemenyi para identificar quais versões apresentam diferenças significativas.
O teste demonstrou que as versões 1 e 3 apresentam diferenças
significativas entre si tanto na ferramenta Code Pro Analytix quanto na
ferramenta Simple Code Metrics.
60
5 CONCLUSÕES
Este trabalho buscou realizar uma análise entre métricas de produto
levando em consideração diferentes ferramentas de coleta. As métricas
analisadas foram: Número de métodos, Proporção de comentários e
Complexidade ciclomática média.
Um conjunto de 107 softwares, com 3 versões cada, foram medidos por
essas ferramentas a fim de verificar se existem diferenças entre as mesmas.
Diferenças foram encontradas e testes estatísticos utilizando a técnica de
diferença entre médias verificaram se as diferenças eram significativas ou não.
Os resultados mostraram que, para todas as métricas, os valores gerados
pelas ferramentas apresentaram diferenças significativas entre si. Essas
diferenças são explicadas pela forma em que são implementadas as ferramentas,
ou seja, fatores como tipos de métodos, tipos de classes, tipos de comentários e
tipos de estruturas de controle influenciam no cálculo dos valores determinados
pelas mesmas. Também foi verificado que as versões de um software
influenciam no cálculo de tais valores, pois diferenças significativas entre
versões foram encontradas.
Dessa forma, fica claro que as ferramentas de coleta, apesar de
descreverem a mesma coisa, acabam medindo coisas diferentes, gerando tais
diferenças e tornando complicado o uso dessas ferramentas para estimar projetos
de software.
A partir da análise estatística realizada neste trabalho, e como trabalhos
futuros, sugere-se tentar determinar valores de confiança para as métricas
analisadas e, consequentemente, o desenvolvimento de uma ferramenta que
atenda às necessidades dos desenvolvedores de software.
61
REFERÊNCIAS
ALBRECHT, A. J. Measuring Application Development Productivity. New
York: IBM, 1979.
AZEVEDO, D. J. P. Análise de pontos por função para aplicações
orientadas a documentos. Porto Alegre: CPGCC da UFRGS, 1999.
BENLARBI, S. et al. Thresholds for object-oriented measures. ln:
International Symposium on Software Reliability Engineering, 11., 2000, San
Jose. Anais... San Jose: IEEE Computer Society, 2000. p. 24-38.
BRAGA, L. P. V. Compreendendo Probabilidade e Estatística. 1. ed. Rio
de Janeiro: E-PAPERS, 2010
CHIDAMBER, S. R.; KEMERER, C. F. A metrics suite for object oriented
design. IEEE Transactions on Software Engineering, v. 20, n. 6, p. 476493, jun. 1994.
FENTON, N. E; PFLEEGER, S. L. Software Metrics: A Rigorous and
Practical Approach. 2. ed. Course Technology, 1998.
FERREIRA, K. A. M. Um modelo de predição de amplitude da
propagação de modificações contratuais de software orientado por
objetos. Belo Horizonte: UFMG, 2011.
GUARIZZO, K. Métricas de Software. Jaguariúna: FAJ, 2008.
HALSTEAD, M. H. Elements of software science. New York: Elsevier
Science Inc., 1977.
HUMPHREY, W.S. Managing the software process. 1. ed. AddisonWesley, 1989
62
ISO/IEC 9126. The international organization for standardization.
Software engineering Product quality. 1991.
JUNG, C. F. Metodologia Para Pesquisa & Desenvolvimento. Rio de
Janeiro: Axcel Books, 2004.
KAN, S. H. Metrics and Models in Software Quality Engineering. 2. ed.
Boston: Addison-Wesley, 2003.
LANZA, M.; MARINESCU, R. Object-oriented metrics in practice: Using
software metrics to characterize, evaluate, and improve the design of objectoriented systems. New York: Springer, 2006.
LORENZ, M.; KIDD, J. Object-Oriented Software Metrics. Prentice Hall,
1994.
MCCABE, T. J. A complexity measure. IEEE Transactions on Software
Engineering, v. 2, n. 4, p. 308-320, 1976.
MCCABE, T. J.; WATSON, A. H. Software Complexity, Crosstalk, v. 7, n.
12, p. 5-9, dez. 1994.
MILLS, E. E. Software Metrics. Pittsburgh: SEI - Carnegie Mellon
University, 1988.
NEMENYI, P. Distribution-free multiple comparisons. New Jersey:
Princeton University, 1963.
PRESSMAN, R. S. Engenharia de Software. 2. ed. São Paulo: McGrawHill, 2006.
ROCHA, A. R. C. et al. Qualidade dos produtos de software: teoria e
prática. São Paulo: Prentice Hall, 2001.
BERGHOUT, E.; SOLLINGEN, R. The Goal/Question/Metric Method: a
practical guide for quality improvement of software development. London:
McGraw-Hill. 1999
63
SIEGEL, S. Estatística Não-Paramétrica para
Comportamento. 2. ed. Porto Alegre: Artmed, 2006.
Ciências
do
SOMMERVILLE, I. Engenharia de Software. 8. ed. São Paulo: Pearson,
2007.
YANAZE, M. H. et al. Retorno de invesimentos em comunicação. 1. ed.
São Caetano do Sul: Difusão, 2010.
64
APÊNDICE
APÊNDICE A – Softwares medidos
Nome do software
aTunes
Subsonic
Impro-Visor
StreamRipStar
Music Box
Weka
Jenes - Genetic Algorithms
for Java
Meka
Observation Manager
Parallel Spectral
Deconvolution
JDEread
Daylight Chart
Java TreeView
VarScan
TRMSim-WSN
Versões
3.0
2.0
1.0
4.0
3.0
2.0
4.07
5.10
5.16
0.3.0
0.5.6
0.6.4
1.01
1.04
1.07
3.0.6
3.3.6
3.6.10
1.2.0
2.0.0
2.1.0
0.85
1.0
1.3.0
0.114
0.717
1.221
1.9
1.11
1.12
1.0
1.2
1.4
1.0
2.0
3.3
1.1.0
1.1.4
1.1.6r4
2.2
2.2.10
2.3.6
0.2
0.3.1
0.5
Data do
lançamento
15/12/2012
20/04/2010
22/08/2006
12/05/2010
22/03/2007
27/02/2005
09/11/2009
07/03/2012
14/05/2012
26/07/2008
16/12/2009
25/10/2012
08/02/2010
08/04/2010
08/09/2012
15/02/2002
17/04/2006
31/07/2013
09/02/2009
07/04/2012
08/01/2013
02/09/2011
04/05/2012
08/03/2013
16/07/2006
30/05/2008
10/03/2013
25/04/2009
27/08/2009
19/09/2013
12/03/2009
20/05/2010
26/07/2013
16/04/2007
26/08/2007
08/09/2012
28/09/2006
08/09/2009
23/08/2013
27/04/2010
23/03/2012
29/07/2013
15/05/2009
20/07/2009
25/03/2012
Domínio de aplicação
Audio e Video
Audio e Video
Audio e Video
Audio e Video
Audio e Video
Artificial Intelligence
Artificial Intelligence
Artificial Intelligence
Astronomy
Astronomy
Astronomy
Astronomy
Bio-Informatics
Bio-Informatics
Bio-Informatics
65
DavMail
Freeplane
jBPM
Rapidminer
PDF Split and Merge
GridSim
JGroups
JPPF
Jacob
Azureus/Vulze
Dbunit
Hibernate
JabRef
Universal Password Manager
c3p0 JDBC Data Sources
Json-lib
4.1.0
3.0.0
2.0.0
1.1.0
1.1.3
1.2.20
5.0
4.0
3.0
5.0
4.0
3.0
2.2.1
2.0
1.0
5.2
5.0
4.1
3.2.6
3.0
2.2
3.2.2
2.1.1
1.0
1.9
1.13
1.17
4.8.1.2
3.0.5.2
2.1.0
2.4.9
2.4.5
2.4.0
4.0
3.0
2.0
2.9.2
2.0
1.0
1.1
1.6
1.12
0.8.5.1
0.9.0
0.9.2
1.0
2.0
2.4
26/09/2012
12/02/2009
10/12/2008
20/10/2012
06/12/2010
26/06/2010
04/02/2011
11/07/2009
24/06/2005
09/08/2010
31/07/2007
11/07/2005
31/01/2013
12/04/2010
29/06/2008
25/11/2010
24/09/2009
01/09/2007
17/01/2013
17/11/2011
15/09/2003
27/01/2013
04/05/2010
27/12/2007
26/02/2005
06/10/2007
03/08/2013
04/02/2013
29/05/2008
18/07/2003
30/09/2012
22/05/2009
27/11/2008
15/12/2012
31/03/2005
10/06/2003
12/01/2013
30/01/2006
30/11/2003
16/08/2011
16/08/2011
06/06/2013
02/03/2005
11/07/2005
09/02/2013
12/02/2007
20/07/2007
14/12/2010
Business
Business
Business
Business
Business
Clustering
Clustering
Clustering
Clustering
Communication
DataBase
DataBase
DataBase
DataBase
DataBase
Development
66
PMD
VRaptor
Lightweight Java Game
Library
JUnit
JHotDraw
JEdit
iReport
Im4Java
Eclipse
DrJava
Code Generation Library
Joda Time
jPDF Tweak
ProGuard
RText
5.0.2
4.3
4.1
3.4.1
3.3.0
3.0.1
2.8.5
2.4
2.0
4.10
4.5
4.0
7.0.6
6.0
5.2
5.0
4.0
3.0
5.0.1
4.0.0
3.6.0
1.0.0
1.2.0
1.4.0
4.2.1
4.2
3.7.1
20120818-r5686
20100816-r5366
20090821-r5004
2.2.3
2.2
2.1.3
1.0
1.6
2.3
0.9
1.0
1.1
1.0
3.5
4.10
1.0.0
2.0.0
2.0.7
03/02/2013
04/11/2011
17/11/2007
10/04/2012
01/02/2011
22/10/2009
04/11/2012
11/04/2010
13/10/2008
14/11/2012
19/08/2008
16/02/2006
06/09/2011
01/02/2004
19/02/2001
22/11/2012
12/04/2002
25/12/2000
08/01/2013
10/01/2011
02/09/2009
22/03/2010
01/09/2011
27/12/2012
28/09/2012
28/06/2012
12/12/2011
18/08/2012
16/08/2010
21/08/2009
27/07/2012
26/05/2008
13/10/2005
22/02/2005
28/10/2008
16/08/2013
10/09/2007
27/12/2010
19/12/2011
06/06/2002
24/01/2006
29/07/2013
04/12/2009
16/01/2012
03/05/2013
Development
Development
Development
Development
Development
Development
Development
Development
Development
Development
Development
Development
Development
Development
Development
67
Sahi
Checkstyle
Cobertura
Demoiselle
xmlsh
OmegaT
Gate
Java Neural Network
Framework Neuroph
LaTeXDRAW
FreeMarker
iText
Liferay
Wireless Universal Resource
File
Jmol
jMusic
Logisim
V2-20090521
V3-20101103
V44-20130429
4.4
5.2
5.6
1.0
1.5
2.0
1.1.0
2.0.0
2.3.0
1.1.8
1.2.0
1.2.3
1.8.1
2.3.0
2.6.3
5.0
6.0
7.0
2.1
2.4
2.7
1.0.2
1.9.3
2.0.8
2.3.19
2.3.9
2.03
5.3.5
5.1.0
5.0.0
6.0
5.0
4.0
1.3.1
1.4.1
1.4.4.1
13.0
12.0
11.0
1.6.4
1.5
1.2
2.7
2.4
2.0
21/05/2009
03/11/2010
29/04/2013
16/12/2007
25/09/2010
18/09/2012
12/02/2005
05/08/2005
29/05/2013
11/01/2010
30/12/2010
31/10/2012
24/01/2012
14/06/2012
22/03/2013
01/10/2009
28/04/2012
17/07/2013
29/05/2009
11/11/2010
13/02/2012
07/04/2009
08/06/2010
18/11/2012
02/01/2006
24/06/2007
15/03/2010
01/03/2012
23/01/2007
12/06/2002
19/12/2012
06/05/2011
08/12/2009
04/06/2010
09/04/2008
02/06/2006
24/08/2011
15/08/2012
11/01/2013
25/01/2013
04/10/2011
08/05/2007
05/02/2013
24/03/2004
26/11/2001
07/03/2011
30/07/2010
31/10/2005
Development
Development
Development
Development
Development
Development
Development
Development
Development
Dynamic Content
Dynamic Content
Dynamic Content
Dynamic Content
Education
Education
Education
68
Cabra
Biogenesis
JStock
OpenBravoPos
Buddi
FreeCol
KoLmafia
RoboCode
Hodoku
Vassal Engine
TikiOne Steam Cleaner
PCGen
FFGenie
Art of Illusion
FreeMind
Jasper Reports
0.4.2
0.6.0
0.7.0
0.2.1
0.5
0.8
1.0.6z
1.0.5v
1.0
2.3
2.2
2.0
1.0.0
2.6.3.0
3.4.1.7
0.10
0.9
0.8
15.0
14.0
13.0
1.8.0.0
1.7.0.2
1.6.0.0
1.0
2.0.1
2.2.0
3.1.2
3.2.6
3.2.8
1.0.1
2.0.0
2.2.0
5.10.2
5.14.0
6.00.1
2008.2
2010.2
2013.4
1.0
2.0
2.9.1
0.0.2
0.6.0
0.9.0
5.0
4.0
3.0
20/03/2011
23/10/2011
29/10/2012
17/05/2006
12/11/2007
20/12/2010
01/01/2013
24/11/2010
16/11/2008
03/11/2010
29/08/2008
25/02/2008
23/06/2006
08/09/2007
17/04/2013
11/06/2011
01/01/2010
14/01/2009
20/01/2012
19/03/2010
05/03/2009
30/01/2013
15/02/2009
01/05/2008
30/01/2009
14/04/2010
29/07/2012
02/09/2012
23/05/2013
28/07/2013
28/01/2012
06/03/2013
20/06/2013
11/03/2007
08/06/2008
23/08/2013
26/08/2008
31/03/2010
26/04/2013
11/02/2002
08/03/2005
19/02/2012
27/06/2000
01/02/2003
18/02/2011
19/11/2012
10/01/2011
19/05/2008
Education
Education
Financial
Financial
Financial
Games
Games
Games
Games
Games
Games
Games
Games
Graphics
Graphics
Graphics
69
JFreeChart
Euclide
VietOCR
JChart2D
FractalToy
ForceFeedback Joystick
Driver
Prime
Mobile Atlas Creator
GeoAPI
IP Monitor
Java Network Browser
SoapUI
Yet Another Java Service
Wrapper
jNetPcap
Kalender
Jasypt
1.0.14
1.0.9
1.0.0
0.2.0
0.5.3
0.6.6
1.0
2.0
3.0
2.0.0
3.0.0
3.2.2
0.1.2
0.2.0
0.2.1
0.5
0.8
0.8.3
1.0
3.0
3.5
1.9
1.9.7
1.9.14
1.0.0
2.0.0
3.0.0
0.04
0.03
0.01
1.56
1.28
1.0
4.0
3.0
2.0
11.4
10.4
9.4
1.0
1.2
1.4
1.1_svn583
1.6_svn731
2.0_svn972
1.4.1
1.7
1.9.0
20/11/2011
04/01/2008
02/12/2005
14/03/2007
04/08/2009
14/04/2012
18/07/2009
06/02/2011
03/10/2010
31/05/2006
01/06/2008
24/09/2011
24/08/2010
05/01/2012
19/11/2012
07/11/2009
18/01/2010
19/11/2011
18/03/2010
19/07/2010
06/02/2012
18/08/2011
16/05/2012
29/07/2013
18/05/2004
08/06/2005
03/06/2011
27/03/2010
20/03/2008
28/08/2007
30/05/2012
10/05/2003
23/02/2003
14/06/2011
09/07/2009
12/12/2007
11/01/2013
10/10/2010
19/09/2009
26/12/2007
19/03/2009
21/08/2013
09/06/2012
08/09/2012
31/05/2013
16/01/2008
29/10/2010
18/12/2011
Graphics
Graphics
Graphics
Graphics
Graphics
Hardware
Hardware
Mapping
Mapping
Networking
Networking
Networking
Networking
Networking
Scheduling
Security
70
JSch
JXplorer
JFileCrypt
Areca Backup
DocFetcher
JeeObserver
Zephyr
DataCrow
FileBot
Med's movie
Google2SRT
Java YouTube video
Downloader
ZK Simply Ajax and Mobile
0.1.49
0.1.25
0.1.0
3.3.02
3.2
3.0
0.1.2
0.2.0
0.3.0
5.0
6.1
7.3.7
0.8.0
1.0
1.0.3
2.0.0
2.1.2
3.1.2
2.3.2
2.7
2.8
3.9.20
3.2
2.4
3.3
2.65
2.0
2.9
2.3
1.70
0.1
0.3
0.6
V20101219
V20110829
V20130506
5.0.3
6.0.0
7.0.0
11/10/2012
16/02/2006
11/02/2003
10/11/2012
03/03/2007
03/11/2003
03/01/2006
24/09/2006
13/06/2010
26/05/2007
20/12/2008
31/08/2013
22/08/2007
12/05/2009
18/03/2010
15/12/2009
02/06/2010
16/03/2012
30/10/2007
23/09/2009
11/09/2012
02/02/2013
24/03/2008
16/07/2006
18/01/2013
24/06/2012
15/09/2011
31/01/2010
22/04/2006
24/02/2005
31/08/2008
31/08/2008
11/08/2013
19/12/2010
29/08/2011
06/05/2013
30/06/2010
14/02/2012
13/08/2013
Security
Security
Storage
Storage
Storage
Test and Measurement
Test and Measurement
Utilities
Utilities
Utilities
Video
WWW/HTTP
Protocols/AJAX

Documentos relacionados