0:00:05.360,0:00:09.520 Así que mi primera pregunta es, ¿reconoces a esta gente? 0:00:10.800,0:00:16.480 Puede que no, así que te daré algunas pistas. Esta persona de la izquierda es probablemente la 0:00:16.480,0:00:24.880 más famosa de las dos -se llama Ícaro- y es famosa por estar asociada a rasgos humanos 0:00:24.880,0:00:29.840 como el exceso de confianza, y puede que hayas oído la frase, no vueles demasiado cerca del sol. 0:00:30.560,0:00:34.240 Pero hoy me voy a centrar en un personaje diferente de la historia, 0:00:34.880,0:00:39.680 y es su padre Dédalo. Es un personaje con el que conecto más 0:00:39.680,0:00:46.400 personalmente porque es un maestro artesano, y ya sabes, digamos, un maestro artesano. 0:00:46.400,0:00:53.280 Pero sus inventos suelen tener consecuencias no deseadas y yo también tengo 0:00:53.280,0:00:58.800 inventos que tienen consecuencias no deseadas. Y hoy voy a hablar de algunas de las 0:00:58.800,0:01:04.320 consecuencias no deseadas del trabajo que hemos estado haciendo minando los sistemas de compilación de software, 0:01:05.680,0:01:11.840 y vamos a utilizar esta metáfora de Ícaro y Dédalo para ayudar a hacer esa explicación clara. 0:01:12.800,0:01:18.160 Así que empecemos con nuestra historia. Así que Ícaro y Dédalo están atrapados en la 0:01:18.160,0:01:23.840 isla de Creta porque Dédalo ha creado algunos inventos que han enfadado a los dioses. 0:01:23.840,0:01:39.840 Así que están en esta isla prisión, pero Dédalo tiene un plan. 0:01:41.200,0:01:46.800 Así que Dédalo es famoso por usar lo que puede conseguir para crear soluciones. 0:01:46.800,0:01:50.560 Así que encontró algunas plumas y algo de cera de las velas 0:01:50.560,0:01:54.880 y va a tratar de fabricar algunas alas sin más. 0:01:54.880,0:01:58.320 Hacemos lo mismo cuando estamos minando los repositorios de software. 0:01:58.880,0:02:03.840 Así que voy a poner esto con un ejemplo. El otro día estoy codificando - imagina que 0:02:03.840,0:02:08.000 estoy escribiendo algo de código - y escribí algo de código como esto. 0:02:08.000,0:02:12.400 Y necesito un sistema de construcción para convertirlo en un formato ejecutable. 0:02:12.400,0:02:18.160 Así que escribo un pequeño archivo de Maven y luego me pongo a ejecutar la construcción 0:02:18.800,0:02:25.040 donde, por supuesto, me encuentro con un fallo de construcción. Y empiezo a cuestionar mi elección de carrera 0:02:25.040,0:02:29.280 y empiezo a sentir algunos sentimientos de los que quizás no estoy demasiado orgulloso, 0:02:29.280,0:02:35.520 pero decido seguir avanzando. Y empiezo a ver más mensajes que me hacen sentir 0:02:35.520,0:02:43.280 otros sentimientos sobre mi elección de carrera, pero aún así decido seguir avanzando. 0:02:44.000,0:02:50.320 Y eventualmente empiezo a notar un patrón - empiezo a notar, que parece que la resolución de clases 0:02:50.320,0:02:55.920 no está ocurriendo correctamente y probablemente es porque un paquete no está siendo incorporado. 0:02:57.440,0:03:03.120 Y específicamente parece que falta Log4j. And when I turn back to my code I notice, 0:03:03.680,0:03:08.480 Y cuando vuelvo a mi código me doy cuenta de que tengo Log4j incluido en mi especificación, así que ¿qué podría estar mal? 0:03:09.680,0:03:14.000 Bueno, resulta que log4j cambió ligeramente la forma en que el paquete es 0:03:14.000,0:03:18.320 referenciado en la central de Maven. Así que después de hacer este cambio 0:03:19.040,0:03:24.000 ejecuto mi construcción de nuevo y empiezo a recuperar la confianza en mí mismo. 0:03:24.640,0:03:30.480 Pero entonces el investigador que hay en mí empieza a despertarse - empiezo a preguntarme, 0:03:31.040,0:03:37.040 ¿por qué tuve que arreglar eso a mano? ¿Por qué mi herramienta de compilación no puede arreglar esto automáticamente? 0:03:39.120,0:03:43.920 Y pensando en términos más amplios, ¿por qué los sistemas de construcción no pueden sostenerse 0:03:43.920,0:03:50.400 a sí mismos y qué podría significar eso? Así que si tuviéramos un sistema de construcción auto-sostenible 0:03:50.400,0:03:53.920 necesitaríamos diferentes piezas de tecnología para que eso suceda. 0:03:54.640,0:04:02.000 Podríamos necesitar algunas herramientas para detectar cuando - cuando las dependencias están incorrectamente o sub-especificadas, 0:04:02.800,0:04:09.200 podríamos necesitar algunas herramientas para detectar cuando los cambios de construcción son necesarios y anticiparse a ellos, 0:04:09.200,0:04:14.080 y podríamos necesitar algunas herramientas para automatizar la aplicación de correcciones a los scripts de construcción. 0:04:15.120,0:04:20.160 Ahora bien, todas estas son áreas diferentes en las que mi grupo en la Universidad de Waterloo está trabajando, 0:04:20.160,0:04:25.040 pero hoy voy a centrarme un poco en la reparación automatizada de los scripts de construcción, de acuerdo, 0:04:25.760,0:04:30.800 y específicamente voy a hablarles de esta solución de cera y pluma que 0:04:30.800,0:04:35.680 se nos ocurrió llamar Build Medic. Bien, Build Medic opera en un 0:04:35.680,0:04:41.840 registro de fallos de construcción y, a un nivel muy alto, se divide en tres fases. 0:04:42.640,0:04:48.160 En primer lugar, intentamos clasificar el registro de fallos en función del tipo de problema que se está produciendo 0:04:48.880,0:04:52.880 y, a continuación, seleccionamos una estrategia de reparación que podríamos probar, 0:04:54.160,0:04:57.920 y luego aplicamos la estrategia y evaluamos la revisión. 0:04:57.920,0:05:04.080 Ahora hay dos resultados posibles: obtenemos el mismo u otro fallo, en cuyo caso volvemos a intentarlo, 0:05:04.080,0:05:11.680 o hemos resuelto el problema y la compilación se arregla automáticamente por nosotros. 0:05:13.840,0:05:21.280 Así que tenemos nuestra solución, y Dédalo e Ícaro, su solución es construir estas alas y 0:05:21.280,0:05:41.440 se dirigen al cielo para salir de la isla, correcto, así que el siguiente paso es - así que despegaron y 0:05:41.440,0:05:47.360 están volando lejos de su prisión, y ahora estamos en una etapa en la que estamos listos para probar 0:05:47.360,0:05:51.840 nuestra solución de cera y plumas también. Y lo que encontramos 0:05:53.200,0:05:58.400 cuando probamos nuestra solución es que la solución de Build Medic es de hecho bastante buena. 0:05:58.400,0:06:04.960 Así que lo probamos en 84 pares de fallos no vistos, y fuimos a buscar en el historial de los proyectos de código abierto 0:06:04.960,0:06:11.280 para encontrar ejemplos de commits en los que la construcción se rompió y luego se arregló inmediatamente, 0:06:12.480,0:06:18.400 y lo que encontramos es que un poco más de la mitad de las soluciones podrían ser arregladas inmediatamente 0:06:18.400,0:06:26.960 por nuestra herramienta Build Medic, y tres cuartas partes de esos éxitos se hacen en una sola iteración. 0:06:26.960,0:06:31.920 Así que no necesitamos intentar múltiples correcciones. 0:06:33.200,0:06:37.200 Incluso más que eso, no sólo estamos haciendo pasar la compilación, sino que a menudo estamos 0:06:37.200,0:06:44.480 haciendo exactamente lo que hicieron los propios desarrolladores. Así que en esas soluciones correctas, un tercio de 0:06:44.480,0:06:50.800 las veces hacemos exactamente lo que hicieron los desarrolladores, y otro 44% de las veces modificamos 0:06:50.800,0:06:56.720 los mismos elementos que los desarrolladores modificaron, pero cambiamos las cosas de forma ligeramente diferente. 0:06:59.120,0:07:01.840 Entonces, ¿cuál es la siguiente parte de nuestra historia? 0:07:10.880,0:07:15.920 Así que en la siguiente parte de nuestra historia sabemos que Ícaro y Dédalo - hay 0:07:15.920,0:07:22.080 una limitación en sus alas, y es que la cera de las alas se derrite cuando 0:07:22.720,0:07:27.920 cuando Ícaro o Dédalo se acercan demasiado al sol. 0:07:28.560,0:07:32.640 Y al igual que nuestra evaluación tiene algunas limitaciones, 0:07:33.600,0:07:41.280 verdad, nuestras limitaciones son que estamos confiando en errores históricos y estamos asumiendo que esos 0:07:41.280,0:07:48.960 errores son importantes - estamos asumiendo que cuando se produce un error de compilación los desarrolladores se apresuran 0:07:48.960,0:07:55.120 como estos bomberos para apagar el fuego. Pero lo que sucede cuando echamos un vistazo más de cerca 0:07:55.120,0:08:00.960 a algunos de estos datos históricos de compilación es que hay un par de razones por las que es imperfecto. 0:08:01.920,0:08:08.000 En primer lugar, hay fallos ignorados activamente, y lo que observamos es que 0:08:08.000,0:08:13.680 alrededor del 12% de las compilaciones que pasan tienen al menos un trabajo que falla activamente ignorado 0:08:15.280,0:08:22.560 y no es sólo uno o dos trabajos, a menudo es hasta el 87% de lo que ha estado fallando. 0:08:26.320,0:08:31.840 También descubrimos que hay fallos ignorados pasivamente, por lo que dos tercios de las compilaciones que fallan 0:08:31.840,0:08:38.400 son en realidad antiguas y se puede ver aquí que hay una variedad de características de proyectos diferentes: 0:08:38.400,0:08:44.320 algunos están arreglando las compilaciones en un día, otros tardan una semana, otros tardan meses o incluso años. 0:08:46.560,0:08:51.280 Así que sabemos por el mito de Dédalo e Ícaro que Ícaro termina en el mar, 0:08:51.280,0:08:56.160 correcto, y puede que salgas de esta charla sintiendo que algo está horriblemente mal, 0:09:05.680,0:09:08.960 y no quiero dejarte con ese mensaje, 0:09:08.960,0:09:15.120 bien, así que creo que esta visión de una construcción autosostenible no está muerta. 0:09:15.120,0:09:18.480 Vale, hay dos mensajes que deberías llevarte. 0:09:19.040,0:09:23.920 Uno es, si eres malvado - el malvado Shane podría decir la conclusión número uno 0:09:24.480,0:09:30.880 y el ángel Shane podría decir la conclusión número dos. Así que la conclusión número uno es que nuestra evaluación es 0:09:30.880,0:09:38.240 correcta y sus datos están rotos, de acuerdo, si eso es lo que sientes bien tenemos una solución propuesta. 0:09:38.240,0:09:43.680 Deberíamos mirar cuánto ruido hay en los datos de construcción y y hacer un seguimiento de los mismos. 0:09:44.640,0:09:49.040 Y la conclusión número dos es que nuestra evaluación es incorrecta, en cuyo caso 0:09:49.040,0:09:56.960 espero que ustedes por ahí nos ayuden a arreglarlo. Así que necesitamos que los desarrolladores y otros usuarios nos ayuden 0:09:56.960,0:10:06.400 a evaluar nuestras herramientas y espero que nos tiendan una mano. Gracias.