
ARTDEPARTMENT

En el 'mundillo' del ampliación de software, hay 'bugs' que se corrigen con facilidad, otros que exigen ingenio... y luego están aquellos que se convierten en auténticas leyendas internas. Esta es la historia de uno de esos casos, acaecido nadie menos que en Google Docs, su alternativa web a MS Office: un bug tan trascendental como misterioso, que provocó dolores de vanguardia durante varios días a ingenieros experimentados, y cuya causa, positivamente, no se encontraba en Google Docs.
La carrera de programador en 2017 y en el futuro (con Javier Santana)
Jacob Voytko, exingeniero de Google, lo ha relatado en su propia newsletter: todo comenzó durante una rutina semanal en el equipo de Google Docs, la revisión y asignación aleatoria de nuevos los errores detectados.
Pero ese día, un problema sobresalía del resto. Se trataba de un error deplorable que impedía a los usuarios editar documentos sin recargar la página. No parecía estar vinculado a ninguna puesta al día flamante de Docs, y lo más inquietante: era exclusivo de Chrome, pero los usuarios del mismo no se estaban quejando en masa.
La incertidumbre era total. ¿Estaba positivamente ocurriendo el dictamen? ¿O era solo un impostor positivo en los registros?
Los primeros intentos de replicar el error en entornos de ampliación resultaron fallidos: ningún sucesor del propio Google lo había experimentado. Se probaron combinaciones de funcionalidades y se copiaron y pegaron contenidos extraños desde sitios web, sin resultados.
Pero finalmente, apareció una pista. Usando una aparejo de scripting interna, originalmente pensada para benchmarking, nuestro ingeniero automatizó la estampación de un documento de 50 páginas repleto de texto Lorem ipsum. La energía: aplicar y quitar negritas a todo el documento 100 veces. Rodeando del ciclo 20, el error finalmente emergió.
Pero no todo eran buenas noticiario. El dictamen era no determinista: a veces aparecía en el ciclo 10, otras en el 40, y en ocasiones no ocurría en ilimitado. En sumario, un definitivo dolor de vanguardia para cualquier depurador.

Pronto se sospechó que el problema podía estar relacionado con el ajuste dinámico de líneas en el documento. En muchos tipos de símbolo, el texto en negrita no solo cambia de gordura visual, sino incluso de satisfecho vivo, lo que afecta directamente el modo en que las palabras se distribuyen y ajustan internamente de un párrafo. Al aplicar y quitar repetidamente el formato de negrita sobre bloques de texto extensos, se generaban sutiles alteraciones en el flujo del contenido.
Estos cambios, aparentemente inofensivos, tenían un impacto acumulativo sobre el diseño de página de Google Docs, y exigía que el motor de visualización realizara cálculos de layout en tiempo vivo para cada interacción del sucesor. Así, el uso prolongado del script automatizado reveló que, tras múltiples ciclos de formateo, alguna parte del sistema comenzaba a registrar títulos incorrectos.
Cuando el motor de panorámica intentaba lograr a esos títulos mal almacenados, creyendo que eran válidos, y trataba de intervenir sobre ellos, era cuando todo se desmoronaba. Era un emoción dominó que terminaba obligando al sucesor a recargar el documento.
Para entonces, era evidente que se trataba del peor marco posible para un error:
Fue necesaria la ayuda de otro compañero con experiencia en la aplicación: dedicaron dos días a mover los puntos de ruptura una y otra vez, retrocediendo en el flujo de ejecución como detectives en pesquisa del momento exacto en que todo se descarrilaba.
La revelación secreto llegó tras horas de examinar meticulosamente un fragmento de código responsable de refrescar un acumulador, una variable crítica que iba sumando pequeñas diferencias para suministrar la coherencia visual del documento. A simple panorámica, la razonamiento parecía inofensiva: tomar un valencia, aplicar la función de JavaScript 'Math.abs()' para comprobar de que siempre fuera positivo, y luego añadirlo al total acumulado.

Sin retención, poco no cuadraba. Los resultados finales del acumulador no coincidían con lo esperado, incluso luego de revisar varias veces las entradas y panorama. Fue entonces cuando uno de los ingenieros decidió echar un vistazo al valencia devuelto por la función matemática preciso antiguamente de que fuera utilizado. Y ahí surgió lo impensable: 'Math.abs()' estaba devolviendo números negativos.
La función que, por definición, debía retornar el valencia ilimitado —es proponer, siempre positivo— estaba violando una de las garantías básicas del lengua. Y al repetir el prueba varias veces, la anomalía persistía: los números negativos entraban… y salían como negativos.
El equipo, incrédulo, se sumió en una revisión casi paranoica: confirmaron que 'Math.abs()' no había sido sobrescrita de algún modo. Y no, todo era "común", aunque claramente no lo era. Tras muchas comprobaciones, se confirmó la disparate: la función estaba funcionando mal… pero solo en esa traducción específica de Chrome.
Rápidamente, se contactó con los desarrolladores del equipo de V8, el motor de JavaScript de Chrome. La respuesta fue tan reveladora como frustrante: el problema ya había sido identificado y corregido semanas antiguamente. La causa se debía a que, durante una refactorización, cierto había omitido determinar correctamente el comportamiento de 'Math.abs()' y, en emplazamiento de devolver el valencia ilimitado, por desnivel, devolvía el mismo número que recibía.
Un error sutil y difícil de detectar, ya que solo se activaba en circunstancias muy específicas y, por otra parte, ofrecía resultados técnicamente correctos la fracción del tiempo: cuando el número ya era positivo.
Así que, finalmente, el equipo de Google Docs tuvo que someterse a aplicar un parche temporal que verificaba específicamente la traducción problemática de Chrome, y que desapareció del código una vez que el número de usuarios que mantenían instalada esa traducción fue lo suficientemente bajo:
"Ahí lo tienes: dos días para encontrar un problema que ya se había solucionado y que se habría resuelto sin interacción".
Imagen | Marcos Merino mediante IA
En Genbeta | Estas son las grandes recompensas que dan Google y otros por resolver retos de programación y seguridad. Las hay hasta millonarias
Compartir este artículo
Consultoria Personalizada
¡Si aun no tienes presencia en internet o
necesitas ayuda con tus proyectos, por favor, escribenos!