No hay duda que la Inteligencia Artificial cambiará como se desarrolla software en el futuro. Algunos llegan a decir que la IA eliminará literalmente la necesidad de programar mediante el uso universal de redes neuronales. No sé si llegaremos a ese punto pero lo que tengo muy claro que sí veremos es la paulatina cognificación del proceso de desarrollo.

De hecho, los nuevos IDEs inteligentes ya van en esa dirección (de momento con resultados poco convincentes pero eso cambiará pronto). Pero, para mí, el campo que más posibilidades tiene de cambiar la manera en qué creamos software hoy en día es el uso de software bots para asistir a los desarrolladores / ingenieros de software en todas las etapas del ciclo de vida del software. Los bots, incluidos los chatbots, son útiles no sólo para programar el software si no también (e incluso diría sobretodo) para mantener ese software y gestionar su comunidad de usuarios y contribuidores (si hablamos de software libre). Un ejemplo rápido: este chatbot para avisar de errores en el software.

En seguida veremos varios ejemplos de esto. Pero que quede claro que el mundo de los (chat)bots se está utilizando muchísimo como herramienta de marketing. Ahora llamamos bots a todo, incluyendo a muchos artefactos a los que antes hubiéramos llamado simplemente librería, componente o servicio. Pero, en fin, eso no quita que los bots se hayan utilizado con mucho éxito en otros ámbitos (ejemplo: evolución del uso de bots en la Wikipedia). Ya es momento de empezar a utilizarlos másivamente como una herramienta más en el proceso de desarrollo.

Bots para integrar nuevos miembros (“onboarding”)

Para asegurar la sostenibilidad de tu proyecto de software libre es vital que seas capaz de atraer nuevos miembros que estén dispuestos a contribuir al proyecto (de cualquiera forma, no sólo con código, también con documentación, tests,…) . Y para eso la clave es que se sientan “como en casa” desde el primer momento.  Si su primer intento de contribución acaba mal, los vas a perder para siempre.

First timers es un bot que ayuda a integrar nuevos contribuidores sobretodo creando lo que llaman starter issues, que son issues sencillas que alguien con poca experiencia puede acometer con buenas probabilidades de conseguir arreglar y, por lo tanto, de sentirse bien al conseguir completar con éxito su primera contribución al proyecto.

BehaviorBot  es un conjunto de bots para dar al bienvenida a los nuevos usuarios cuando crear su primera issue, su primer pull request, su primer merge,… . 

Welcome bot

Git Enforcer intenta ayudar a los nuevos a describir correctamente el problema que tienen con el software o la pull request que les gustaría contribuir al proyecto. Muchos proyectos tienen una serie de reglas que toda nueva issue / pull request debería cumplir para garantizar que se evalúa y se le da respuesta rápidamente. Con Git Enforcer, los managers del proyecto pueden definir con precisión estas reglas (fijando la estructura de los nombres a dar a las issues, el uso de etiquetas, la asignación,…) y Git Enforcer comprobará automáticamente que cada nueva contribución sigue estas reglas (y avisará immediatamente en caso contrario para evitar que todos pierdan el tiempo).

Bot to check the sytle and structure or new issues and pull requests

Nuestro propio GitHub Bot  va un paso más lejos y permite la creación de bug reports conversando con un chatbot en plataformas de mensajería como Slack.

Bots para mejorar tu ortografía

Orthographic pedant corrige errores ortográficos comunes creado automáticamente pull request que los solucionan. Typot comprueba la ortografía y para cada posible typo ofrece una serie de alternativas para corregirlo.   Sedy trae el poder del comando de Linux sed a los comentarios de Github. Con él, se pueden definir fácilmente substituciones de cadenas para arreglar errores tipográficos y lo que se os ocurra.

Bots para la gestión de issues y pull requests

Todo proyecto tiene que cuidar de su comunidad. Esto implica gestionar bien las issues pendientes y sus comentarios. Así como las pull requests que programadores externos hayan enviado. Si no se gestiona adecuadamente, el proyecto puede dar sensación de dejadez y acabar por perderlos. Si no tienes tiempo para gestionar tu comunidad como deberías, como mínimo estos bots te van a echar una mano:

  • Stale cierra issues que no hayan tenido ninguna actividad durante un tiempo.
  • GitBot’s asigna automátciamente etiquetas a las nuevas issues.
  • gh-polls-bot crea encuestas para las issues de forma que se la discusión acerca de como solucionarla se focalize en un número predeterminado de opciones.
  • Sentiment bot responde a comentarios tóxicos avisando a un moderador predefinido y un link al código de conducta del proyecto.
  • Imgbot optimiza automáticamente todas las imágenes de un proyecto.
  • Bot will accept anything acepta cualquier pull request que llegue a un número determinado de votos. Éste es un poco peligroso pero me parece un experimento muy interesante de cara a probar modelos más democráticos en el mundo del software libre 
  • CLA assistant facilita la firma de Contributor License Agreements después de cada pull request.
  • También tienes un bot para detectar issues duplicadas  o para pedir a los usuarios que complemeten la documentación cuando abren una issue nueva.
  • Mergedroid (aún en beta) persigue hacer un merge automático incluso en pull requests con conflictos (los autores de mergedroid afirman que entre un 16% y un 30% de los pull requests en teoría conflictivos pueden resolverse con lo que se gana mucho tiempo).
  • Facebook’s mention bot  busca y asigna immediatamente revisores potenciales para cada pull request lo que permite que el pull request sea atendido rápidamente al poner alguien al cargo de forma proactiva.

Automatic mention of potential reviewers for a pull request

Bots para la mejora del código

Los bots siguen mucho mejor que nosotros las guías de estilo del código. Mejor que dejes que los bots se encarguen del code formatting ( commitlint-bot lo hace para las convenciones que definas para commits).

Más allá de obligar a que sigas las buenas prácticas de programación, hay bots que sobresalen en tareas de programación concretas. Por ejemplo, CSSRooster es un bot que escribe clases CSS para HTML con técnicas de deep learning. Todavía en proceso de investigación, Prophet  es un generador automático de patches para programas C que usa Machine Learning para fijarse en como programadores humanos corrigen errores y aprender de eso para sugerir posibles patches para nuevos errores.

Otra area donde los bots son de gran ayuda es el análisis de dependencias. Es importante saber tan pronto como sea posible cuando tus dependencias son erroneas o estás usando versiones de librerías con vulnerabilidades conocidas. Greenkeeper monitoriza en tiempo real tus dependencias en npm. Dependabot  va más allá y crea pull requests para actualizar tu código cada vez que proyectos de los que dependes se actualizan.  Hasta GitHub ha lanzado recientemente un to programa para enviar alertas de seguridad cada vez que detecta dependencias con vulnerabilidades . Synk y Gemnasium persiguen el mismo objetivo.

Automatic pull requests to update your dependencies with Dependabot

Automatic pull requests to update your dependencies

Otros bots  buscan corregir errores en el mismo código. Lo más común es utilizar técnicas de deuda técnica o cobertura de código para detectar zonas conflictivas. BetterCodeHub, CodeClimate y SideCI son buenos ejemplos de esto.  Más originales son aquellos que encuentran errores en tu interfaz de usuario.  Spotbot utiliza capturas de pantalla de tu UI en iOS, Android, y navegadores para encontrar errores de visualización y te avisa en Slack si los encuentra. AccessLint comprueba que el código de un pull request no viole reglas de accesibilidad. Percy es capaz de enseñarte como quedará tu UI si ese pull request se acepta con lo que puedes validar el resultado visualmente.

Bots para plataformas de integración contínua

Cada plataforma de CI, como TravisJenkins,  se puede ver como un bot en sí mismo que automatiza el testing y despliegue del código en respuesta a ciertos eventos (tipícamente el commit de código nuevo).  Con la popularizacón de los chatbots, todas ellas tienen integración con aplicaciones de mensajería para gestionarlas (de forma nativa o vía aplicaciones externas ). Hasta algunas de las nuevas plataformas de integración contínua incluyen el término bot en su nombre como Deploybot.

Y si el build de Travis CI falla, siempre puedes pedir ayuda a Repairnator. Repairnator analiza automáticamente los errores del build, intenta reproducirlos localmente y repararlos utilizando herramientas de reparación de programas como NopolAstor.

Y después de esta inyección de 22 millones de dolares, creo que veremos también novedades en esta dirección de parte de la Atomist Development automation platform

Danger permite la definición de reglas que comprueban que los pull requests siguen las convenciones del equipo (presencia de comentarios descriptivos, uso de etiquetas…) y cuando el pull request las viola, lo anotan automáticamente con los avisos y recomendaciones que toque como parte del proceso de integración continua.

El futuro de los software bots

Cada vez es más habitual incluir bots en proyectos software. Y esta tendencia se va a incrementar en el futuro. Al final todo lo que nos ayude a trabajar menos debería ser bienvenido. Lo que no significa que este cambio no plantee un buen número de preguntas a investigar. Algunas de los temas sobre los que tengo intención de trabajar:

  • ¿Como personalizar el comportamiento de un bot en función de las características específicas de cada proyecto?
  • ¿Como definir la cooperación entre un conjunto de bots, tipo “bot swarm”, que deben trabajar colaborativamente en un proyecto?
  • ¿Como verificar y simular nuevos bots antes de “dejarlos libres”? Es importante asegurarse que funcionan como esperamos antes de que los liberemos en un proyecto ya que, por la propia definición del concepto de bot, una vez sueltos será mucho más difícil vigilarlos.
  • ¿Como detectar bots maliciosos? ¿Y como evitar ataques de bots? No es difícil imaginar el equivalente de los ataques DDoS para proyectos open source vía bots que abran automáticamente un gran nombre de issues y pull requests falsos, que insulten a otros usuarios (bots “trolls”),… Esto no afecta el software en ejecución pero sí su comunidad y puede ralentizar el progreso del proyecto.
  • ¿Como ayudar a que los programadores / usuarios del proyecto acepten la presencia de los bots y aprendan a sacarles el máximo partido?
  • ¿Como simplificar la creación de bots (y facilitar su portabilidad de una plataforma a otra)?

De una forma u otra tenemos que irnos acostumbrando a su presencia y aprender a interactuar con ellos. Y, por si acaso, mejor tratarlos con respecto o pasarán a la defensiva 🙂 :

Un software bot defendiendo a otro

Mejor que muestres a los bots el respecto que se merecen

Imagen destacada por Andy Kelly en Unsplash