Cuantitativamente ¿Qué calidad tiene el software libre? Datos de 51 aplicaciones, que pueden ayudarte como referencia

Corría el mes de marzo del 2013, en Móstoles, asignatura Calidad Software del grado de ingeniería del software de la Universidad Rey Juan Carlos, profesor, el que aquí suscribe, cuando se propuso a los alumnos que lo mejor para aprender a evaluar calidad software era evaluar calidad software, y para ello íbamos a evaluar la de los proyectos Java más vistos por aquellas fechas en Github.
Para ello, los alumnos podían utilizar una o varias herramientas de análisis de código (principalmente análisis estático y de caja blanca) tales como PMD, Checkstyle, Sonar, Code Pro Analytics y obtener distintas métricas de los proyectos antes mencionados, sobre todo aquellas que afectan a la mantenibilidad del código. Concretamente, obtuvieron valores de % código repetido, densidad de la complejidad ciclomática, % de cobertura de pruebas unitarias, y número de líneas de código.
Con todo, dado que el trabajo realizado por los alumnos fue de muy alta calidad, sumado a que las aplicaciones evaluadas son de fuentes abiertas más que las páginas de este blog tienen el objetivo de difundir conocimiento de manera abierta, para mejorar la creación de tecnología… he querido compartir contigo los datos.
Datos que son muy interesantes, ya que una de las cosas que más necesitamos en calidad software es ratios de referencia para las métricas y tener los de 51 aplicaciones… puede ayudarte mucho.

Valores de calidad software de 51 aplicaciones de Github

Una de las métricas destacadas del estudio realizado era densidad de complejidad ciclomática. Y los resultados obtenidos fueron los que se adjuntan en la siguiente tabla, ordenados de mayor a menor densidad de la complejidad ciclomática. También podéis ver el porcentaje de código repetido y, si existía o se podía calcular, la cobertura de pruebas unitarias.

Nombre Aplicación y versión

Líneas de Código

Densidad de

Complejidad Ciclomática

% Código

Repetido

CoberturaPruebas
JSON – java28230.3953241232731140.6%0%
yuicompressor58530.3304288399111572.8%
Rhino565860.3283851129254592.3%
Config-master83480.3195975083852420.8%
The MongoDB Java driver 2.12.0164560.319518716577540.7%9.8%
aws-sdk-java3319880.31470113311,02%
DiskLruCache7660.3041775456919060%85.1%
EssentialsProject5730.30374.54%
Parboiled71470.3001259269623621.7%
Clojure372580.2871061248590914.2%0%
58.com argo version 1.0.105440.2863239757207892.2%3.1%
 Retrofit 1.0.020560.2859922178988330.9%61.9%
SlidingMenu-master21860.281335830612%
Jna-master18590.28051.54%4.5%
CraftBukkit-master644540.27126324,88%
ActionBarSherlock-master195470.2539118052%
spring-framework 3.21971630.25292277811,7
FBReaderJ520790.24697.46%
TeleHash41850.24630,71%
Bukkit296100.24316109422492412%0
erjang 1.1446490.2344912.41%0.5%
jsoup131920.23432%1.6%
storm452880.23383677795442552%0%
endlessAdapter1770.239,03%
argoMaster112200.237,86%
BuildCraft 322930.2279113.07%0%
vert.x159270.226156812.6%
Twitter4J310820.2251.32 %
Facebook_Android_SDK122230.22302217134,35%
greenDAO – DaoGenerator 1.313040.221633.44%21.8%
h2o388040.2195340686527160.65%
stratego_12-200949320.218311.68%23,50%
Java-WebSocket50460.2161.8%8,60%
acra46570.213874.87%0%
elasticsearch-master2094260.2129294.94%
Jedis135640.21144.1 %
Android BillingLibrary18060.20485.89%
Mustache69970.1971.15 %
k9mail523280.194235.29%
reddit-is-fun113500.19310.09%14.3%
RxJava91340.1799912.3%
viewserver5840.17772.05%
Solandra81230.17550.59 %
http-request35910.174327.59%
Android Master174760.1747.77%
Voldemort1256160.1710212074894924.82
junit224510.1667711905928474.28
disruptor74500.1379,93%
NewQuickAction5900.131791.3%
REST LI746230.12320.62 %
lazylist4600.1020%

Resultados métricas de proyectos más vistos de Github en Java

A partir de ellos concluimos que aunque un programa esté entre los proyectos más vistos de Java en Github, no lleva implícito que tenga una cierta calidad de software.
Algunos proyectos tienen un % de cobertura de pruebas unitarias bastante aceptable o vimos rastros de haber sido analizados con alguna herramienta de análisis (algunos por ejemplo tenían una carpeta .Sonar), denotando una cierta preocupación por controlar la calidad del código, en otros, como en el del proyecto JSON-java, los desarrolladores no se preocuparon demasiado en la calidad de su software, y en la fecha en la que se analizó el estudio, este no tenía ningún caso de prueba programado y el valor de su densidad de la complejidad ciclomática era el mayor de todos.

jgarzas

Ph.D. en informática, Postdoctorado en la Carnegie Mellon (EE.UU) e Ingeniero en Informática.

Primera vez que me tocó hacer una gestión Ágil en una empresa... año 2001. Desde entonces he trabajado en, o para, más de 90. Y he formado a más de 2000 alumnos.

También soy profe de la Universidad Rey Juan Carlos.

0 comentarios en “Cuantitativamente ¿Qué calidad tiene el software libre? Datos de 51 aplicaciones, que pueden ayudarte como referencia”

  1. Hola,
    ¿Qué valor se debería tomar como límite para la densidad ciclomática? Nosotros tomamos el de 0,3 (aunque creo que somos demasiado generosos.
    Lo mismo para el porcentaje de líneas duplicadas. Nosotros tomamos mayor o igual al 10% como inaceptable de 5% a 10% como malo y menor del 5% como aceptable.
    Las líneas de código en si no es una métrica de calidad quizás sí el nº medio de líneas por metodo u otras similares.
    ¿Cuales son vuestros valores?
    ¿ faltaría alguna métrica importante?¿cuál?
    Un saludo

    1. Ana María del Carmen

      Hola,
      En el estudio, nosotros no establecimos un valor límite de densidad de complejidad ciclomática (que como tal no hay), sino que usamos esa métrica para poder comparar de forma general la complejidad ciclomática de todos los proyectos, independientemente de su tamaño.
      Si en vez de usar la densidad hubiéramos tomado la complejidad ciclomática total de cada proyecto la comparación entre todos ellos no sería objetiva (ya que es normal que un proyecto más grande tenga más cc que uno pequeño.)
      En mi opinión, para mejorar la calidad del código, en vez de fijar un límite para la densidad de la complejidad ciclomática, me centraría más en la complejidad ciclomática de cada método (según Checkstyle si es más de 11 hay que refactorizar).
      Aún así…tampoco creo que sea recomendable quedarse con un límite fijo de complejidad que nunca debería pasar un métododo, sino revisar cada caso concreto.
      Saludos

  2. Hola, muchas gracias por publicar los resultados, son muy interesantes. Me gustaría saber si alguien puede recomendarme un par de buenos libros sobre calidad del software en los que aprender más sobre métricas como la Densidad de
    Complejidad Ciclomática para entender exactamente cada término y aprender a mejorar mi propio software.
    ¡Gracias!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *