Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Ingeniería del software

Optimizando la Integración Continua con Bazel

Un estudio sobre el uso de Bazel para construir CI más rápido.

― 8 minilectura


Bazel: Acelerando losBazel: Acelerando losProcesos de CIde CI.en la velocidad de las construccionesUn estudio revela el impacto de Bazel
Tabla de contenidos

La Integración Continua (CI) es un método que usan los desarrolladores de software para integrar cambios en sus proyectos de software con frecuencia. Esta práctica ayuda a detectar errores temprano y mantener la calidad del código. Sin embargo, las compilaciones de CI largas pueden ralentizar el desarrollo, así que es esencial optimizar los tiempos de construcción.

Muchos desarrolladores enfrentan desafíos cuando sus compilaciones de CI tardan demasiado, a menudo esperan un feedback antes de poder seguir trabajando. Se han propuesto técnicas para mejorar los tiempos de construcción, incluyendo una mejor planificación y la selección inteligente de pruebas. Nuevas tecnologías como Bazel buscan solucionar estos problemas ofreciendo características diseñadas para acelerar las compilaciones. Aunque Bazel está ganando popularidad, no hay mucha comprensión sobre qué tan efectivo es realmente, especialmente para proyectos con largas duraciones de construcción.

Resumen del Estudio

En nuestro estudio, analizamos 383 proyectos de código abierto en GitHub que están usando Bazel como su herramienta de construcción. Queríamos ver con qué frecuencia los desarrolladores utilizan las funciones avanzadas de Bazel, como las construcciones paralelas e incrementales, dentro de servicios de CI populares. También queríamos comparar estos resultados con proyectos que usan otra herramienta de construcción, Maven.

Para analizar el rendimiento, realizamos miles de pruebas en estos proyectos de Bazel para ver cuánto tiempo podíamos ahorrar usando estas funciones. Esto involucró examinar registros de construcción y observar los últimos commits de varios proyectos para evaluar cómo funcionaba Bazel dentro del entorno de CI.

Importancia de la Velocidad de Construcción

Tener un proceso de construcción de CI rápido y eficiente es crucial para los desarrolladores. Cuanto más tiempo tarde una construcción, más tiempo esperan los desarrolladores para recibir feedback sobre sus cambios, lo que puede ralentizar el progreso general. Idealmente, las construcciones de CI deberían terminar rápido, ya que estudios han demostrado que muchos desarrolladores prefieren tiempos de construcción de diez minutos o menos.

Sin embargo, la investigación muestra que un gran número de construcciones de CI pueden tardar mucho más que eso. De hecho, alrededor del 40% de las construcciones tardan más de media hora. A medida que el desarrollo de software se vuelve más frecuente y depende de prácticas como la entrega continua, el problema de las construcciones lentas probablemente empeore.

Soluciones Tradicionales a los Problemas de Construcción

Se han sugerido varias estrategias para abordar el problema de las construcciones lentas de CI:

  1. Predicción de Resultados de Construcción: Esta técnica busca saltarse construcciones innecesarias prediciendo qué commits no requieren una construcción completa basándose en resultados pasados.

  2. Agrupación de Commits: Esto implica agrupar varios commits para construirlos juntos, lo que puede ahorrar tiempo.

  3. Optimizaciones de Pruebas: Al seleccionar y priorizar las pruebas a ejecutar, los desarrolladores pueden reducir el tiempo total de prueba necesario después de una construcción.

  4. Optimización del Código Fuente: Refactorizar el código también puede ayudar, ya que eliminar elementos redundantes puede llevar a construcciones más rápidas.

A pesar de estas estrategias, los sistemas de construcción tradicionales pueden tener problemas con la corrección. La mayoría de las herramientas existentes no tienen la información requerida para crear un gráfico de dependencia de construcción preciso, lo que puede llevar a errores potenciales durante las construcciones paralelas e incrementales.

Nuevas Tecnologías de Construcción

Recientemente, los sistemas de construcción basados en artefactos como Bazel han ganado atención por su potencial para optimizar el rendimiento de las construcciones mientras mantienen la precisión. Lanzado como una herramienta de código abierto por Google, Bazel permite a los desarrolladores describir los artefactos y sus dependencias en los archivos de construcción. Este método ayuda a crear un gráfico de dependencias preciso, que es crucial para construcciones paralelas e incrementales confiables.

Bazel puede manejar eficientemente las dependencias y realizar caché de los resultados de la construcción, lo que acelera las construcciones futuras. Esta característica permite a los desarrolladores compartir resultados de construcción entre máquinas separadas, aumentando aún más el rendimiento.

Preguntas de Investigación

Este estudio tiene como objetivo abordar varias preguntas importantes sobre el uso de Bazel dentro de las construcciones de CI:

  1. ¿Cómo utilizan los desarrolladores las capacidades de construcción paralela e Incremental de Bazel en sus proyectos?
  2. ¿Qué impacto tiene la función de construcción paralela de Bazel en el rendimiento general de la construcción?
  3. ¿Qué tan efectiva es la funcionalidad de construcción incremental de Bazel en la reducción de los tiempos de construcción?

Al responder estas preguntas, esperamos proporcionar información sobre cómo los desarrolladores pueden utilizar mejor Bazel y entender sus posibles beneficios.

Metodología del Estudio

Para obtener respuestas a estas preguntas, establecimos una metodología integral:

  1. Recolección de Datos: Recopilamos datos sobre proyectos de Bazel y Maven de GitHub utilizando su API de búsqueda. Identificamos un total de 383 proyectos de Bazel y 4,727 proyectos de Maven para analizar sus procesos de construcción.

  2. Análisis de Configuración de CI: Examinamos las configuraciones de CI para ambos proyectos de Bazel y Maven para ver cómo implementaron los servicios de CI.

  3. Experimentos de Rendimiento: Realizamos miles de experimentos en los proyectos recopilados para medir el impacto de las construcciones paralelas e incrementales en los tiempos de construcción.

  4. Comparación: A lo largo del estudio, comparamos los resultados de los proyectos de Bazel con los de los proyectos de Maven para entender mejor las diferencias en rendimiento y uso de características.

Hallazgos

Uso de Bazel en Construcciones de CI

De nuestro análisis, encontramos que un porcentaje significativo de proyectos de Bazel adoptaron servicios de CI pero no utilizaron completamente las funciones de Bazel. De hecho, el 31.23% de los proyectos de Bazel no usaron Bazel en su configuración de CI. Incluso entre aquellos que usaron Bazel, muchos dependían de herramientas adicionales para facilitar su funcionamiento. Solo el 44.08% de los proyectos aprovecharon la caché de Bazel para construcciones incrementales.

Impacto de las Construcciones Paralelas

Cuando observamos las ganancias de rendimiento de las construcciones paralelas, encontramos que estas podían mejorar significativamente las velocidades de construcción, especialmente para construcciones más largas. Por ejemplo, las aceleraciones variaron de 2.00x a 12.80x dependiendo del grado de paralelismo utilizado. Sin embargo, las construcciones más cortas no vieron mucha mejora de los niveles de paralelismo más bajos, y incluso en el máximo paralelismo, varios proyectos no pudieron beneficiarse completamente de la ejecución paralela.

Beneficios de las Construcciones Incrementales

Las características de construcción incremental de Bazel también mostraron resultados prometedores. Para las construcciones más largas, se observaron aceleraciones medianas de 4.22x y 4.71x al utilizar diferentes estrategias de caché. Sin embargo, para duraciones de construcción más cortas, los beneficios fueron mucho menos pronunciados, lo que indica que las construcciones incrementales son más valiosas para proyectos más grandes.

Conclusión

En conclusión, nuestro estudio destaca tanto el potencial como los desafíos de usar Bazel en entornos de integración continua. Si bien Bazel ofrece características potentes para acelerar los tiempos de construcción, muchos desarrolladores no explotan completamente estas capacidades, especialmente en configuraciones de CI. A través de esta investigación, buscamos no solo arrojar luz sobre el uso actual de Bazel, sino también fomentar una adopción más amplia de tecnologías de construcción modernas.

A medida que los desarrolladores buscan mejorar sus procesos de CI, entender la efectividad de herramientas como Bazel es crucial. Al resaltar cómo los desarrolladores pueden utilizar Bazel de manera más efectiva, esperamos guiar futuras mejoras en el rendimiento de construcción a través de proyectos de software.

Trabajo Futuro

Investigaciones futuras podrían explorar más aspectos de las capacidades de Bazel, particularmente en diferentes entornos de proyecto. Investigar las razones detrás del uso limitado de ciertas características también podría proporcionar oportunidades para mejorar. Además, estudiar cómo diferentes tipos de proyectos responden a las características de Bazel podría arrojar información valiosa para la comunidad de desarrollo.

En la evolución continua de las prácticas de desarrollo de software, entender y utilizar herramientas poderosas como Bazel es clave para garantizar la eficiencia y calidad en la entrega de software.

Fuente original

Título: Does Using Bazel Help Speed Up Continuous Integration Builds?

Resumen: A long continuous integration (CI) build forces developers to wait for CI feedback before starting subsequent development activities, leading to time wasted. In addition to a variety of build scheduling and test selection heuristics studied in the past, new artifact-based build technologies like Bazel have built-in support for advanced performance optimizations such as parallel build and incremental build (caching of build results). However, little is known about the extent to which new build technologies like Bazel deliver on their promised benefits, especially for long-build duration projects. In this study, we collected 383 Bazel projects from GitHub, then studied their parallel and incremental build usage of Bazel in 4 popular CI services, and compared the results with Maven projects. We conducted 3,500 experiments on 383 Bazel projects and analyzed the build logs of a subset of 70 buildable projects to evaluate the performance impact of Bazel's parallel builds. Additionally, we performed 102,232 experiments on the 70 buildable projects' last 100 commits to evaluate Bazel's incremental build performance. Our results show that 31.23% of Bazel projects adopt a CI service but do not use Bazel in the CI service, while for those who do use Bazel in CI, 27.76% of them use other tools to facilitate Bazel's execution. Compared to sequential builds, the median speedups for long-build duration projects are 2.00x, 3.84x, 7.36x, and 12.80x, at parallelism degrees 2, 4, 8, and 16, respectively, even though, compared to a clean build, applying incremental build achieves a median speedup of 4.22x (with a build system tool-independent CI cache) and 4.71x (with a build system tool-specific cache) for long-build duration projects. Our results provide guidance for developers to improve the usage of Bazel in their projects.

Autores: Shenyu Zheng, Bram Adams, Ahmed E. Hassan

Última actualización: 2024-05-01 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2405.00796

Fuente PDF: https://arxiv.org/pdf/2405.00796

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Más de autores

Artículos similares