No puede saber qué es CI a menos que sepa lo que solíamos hacer. Imagine un sistema con 3 partes. Hay una interfaz de usuario que recopila datos y los coloca en la base de datos. Hay un sistema de informes que realiza informes desde la base de datos. Y hay algún tipo de servidor que monitorea la base de datos y envía alertas por correo electrónico si se cumplen ciertos criterios.
Hace mucho tiempo esto se escribiría de la siguiente manera:
- Acuerde el esquema de la base de datos y los requisitos: esto llevaría semanas porque tenía que ser perfecto, ya que pronto verá por qué
- Asigna 3 desarrolladores, o 3 equipos independientes de desarrolladores, a las 3 piezas
- Cada desarrollador trabajaría en su pieza y probaría su pieza usando su propia copia de la base de datos, durante semanas o meses.
Durante este tiempo, los desarrolladores no ejecutarían el código del otro, ni intentarían usar una versión de la base de datos que había sido creada por el código de otra persona. El redactor del informe solo agregaría a mano un montón de datos de muestra. El escritor de alertas agregaría manualmente registros que simularon eventos de informes. Y el escritor de la GUI miraría la base de datos para ver qué había agregado la GUI. Con el tiempo, los desarrolladores se darían cuenta de que la especificación era incorrecta de alguna manera, como no especificar un índice o tener una longitud de campo demasiado corta, y "arreglar" eso en su versión. Podrían decirle a los demás, quién podría actuar en consecuencia, pero por lo general estas cosas irían a una lista para más adelante.
Cuando las tres partes estaban completamente codificadas y probadas por sus desarrolladores, y a veces incluso probadas por los usuarios (mostrándoles un informe, una pantalla o una alerta de correo electrónico), entonces llegaba la fase de "integración". Esto a menudo se presupuestaba en varios meses, pero aún se repasaría. Ese cambio de longitud de campo por dev 1 se descubriría aquí, y requeriría que los desarrolladores 2 y 3 realicen grandes cambios de código y posiblemente también cambios en la interfaz de usuario. Ese índice adicional causaría estragos. Y así. Si un usuario le dijo a uno de los desarrolladores que agregue un campo, y lo hizo, ahora sería el momento en que los otros dos también lo deben agregar.
Esta fase fue brutalmente dolorosa y casi imposible de predecir. Entonces la gente comenzó a decir "tenemos que integrarnos más a menudo". "Tenemos que trabajar juntos desde el principio". "Cuando uno de nosotros plantea una solicitud de cambio [así hablamos], los demás deben saberlo". Algunos equipos comenzaron a hacer pruebas de integración antes mientras continuaban trabajando por separado. Y algunos equipos comenzaron a usar el código y la salida del otro todo el tiempo, desde el principio. Y eso se convirtió en Integración Continua.
Puedes pensar que estoy exagerando esa primera historia. Una vez trabajé para una compañía donde mi contacto me criticó por registrar un código que sufría de los siguientes defectos:
- una pantalla en la que no estaba trabajando tenía un botón que todavía no hacía nada
- ningún usuario había cerrado sesión en el diseño de la pantalla (colores y fuentes precisos; la existencia de la pantalla, sus capacidades y qué botones tenía en la especificación de 300 páginas).
En su opinión, no se ponen las cosas en el control de la fuente hasta que se HAGA. Normalmente hacía uno o dos registros al AÑO. Tuvimos una pequeña diferencia de filosofía :-)
Además, si le resulta difícil creer que los equipos estarían desconectados de un recurso compartido como una base de datos, realmente no creerá (pero es cierto) que se adoptó el mismo enfoque para codificar. ¿Vas a escribir una función que pueda llamar? Eso es genial, adelante y haz eso, mientras tanto codificaré lo que necesito. Meses después "integraré" mi código para que llame a su API y descubriremos que explota si paso nulo, exploto si devuelve nulo (y lo hace mucho) devuelve cosas que son demasiado grandes para mí, no puede manejar los años bisiestos y mil cosas más. Trabajar de forma independiente y luego tener una fase de integración era normal. Ahora suena a locura.