Big-O-Test: midiendo el rendimiento teĆ³rico de nuestros algoritmos en este JUnit
viernes, noviembre 29, 2013 at 12:12PM
Abraham

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");
   }
Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.