Buscar
Social
Ofertas laborales ES
« Richard Stallman impartirá en Madrid la conferencia "Software libre y libertad en educación" | Main | Análisis de las librerías usadas por los 10,000 proyectos Java más populares de GitHub »
viernes
nov292013

Big-O-Test: midiendo el rendimiento teórico de nuestros algoritmos en este JUnit

Big-O-Test es una librería cuyo propósito es medir el rendimiento teórico (análisis de complejidad computacional "orden de") de nuestros algoritmos, siendo posible utilizarla desde test de JUnit. Al ejecutar los test con esta librería debemos marcar los parámetros de nuestros métodos que puedan variar en tamaño y sobre los cuales queramos realizar el análisis de complejidad con la anotación @BigOParameter. Esto le indica a la librería que queremos estudiar el rendimiento del código cuando varía el tamaño de ese parámetro (que deberá ser una lista, array o similar). 

La librería ejecutará nuestro método pasándole múltiples tamaños diferentes al parámetro marcado con la anotación, y en base a esto intentará buscar una función (lineal, cuadra tica, logarítmico…) que se ajuste mejor al rendimiento del método.

Por ejemplo, si quisiésemos medir el rendimiento de un algoritmo de ordenación usaríamos así la anotación:

  public class HeapSort { 

       public Long[] sort(@BigOParameter List unsorted) {
             ...      
       }
       ...
    }

Y después para ejecutar el test escribíamos este código de JUnit:

   @Test
   public void assertLogLinear_RunHeapSort_DetectLogLinear() {

      // ARRANGE
      final BigOAnalyser boa = new BigOAnalyser();
      final HeapSort sut = (HeapSort) boa.createProxy(HeapSort.class);  

      // ACT
      for (int x = (16 * 1024); x >= 1024; x /= 2) {
         sut.sort(createSortInput(x));
      }  

      // ASSERT
      BigOAssert.assertLogLinearOrPowerLaw(boa, "sort");
   }

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>