05 enero, 2009

El error de código que causó el Zunepocalipsis

Finalmente se ha publicado cual fue la causa del error que provocó que todos los Zune 30 dejarán de funcionar el pasado 31 de diciembre. Se presumia que el error era causado por algun bug en el dispositivo que tenia que ver con el año bisiesto. Ahora se sabe que es un error en el código del driver del reloj que viene incluido en un componente fabricado por la empresa Freescale, quien es en última instancia la culpable del desastre. 

El fragmento que contiene el bug es el siguiente:

year = ORIGINYEAR; /* = 1980 */

while (days > 365)
{
if (IsLeapYear(year))
{
if (days > 366)
{
days -= 366;
year += 1;
}
}
else
{
days -= 365;
year += 1;
}
}



Como ven es un error básico, donde la ejecución entra en un loop infinito el dia 366 (31 de diciembre) de cualquier año bisiesto, al no cumplirse nunca la condición if (days > 366) . No logro comprender como es posible que este tipo de bugs llegue a etapas de producción a gran escala, ya que con una simple prueba unitaria se podria haber detectado. Es un ejemplo más que nos demuestra la importancia de las pruebas en todas las etapas del desarrollo de software. Solo queda esperar que Microsoft realice una actualización del firmware para evitar que esto vuelva a ocurrir en 4 años.



Les dejo la liga al código completo del módulo.



Saludos!

No hay comentarios.: