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"); }
Reader Comments