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).

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

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:

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 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

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