Dos cosas son infinitas:
el universo y la estupidez humana.
En cuanto al universo, no estoy seguro.

Albert Einstein

Error de Procesos en el Desarrollo de Sistemas
José Enrique González Cornejo
Septiembre 2014

 

Resumen:

El artículo es una reflexión acerca de los posibles errores en el desarrollo y evolución de un sistema computacional. Generalmente, la culpa de una falla se corta  "por el hilo más delgado". Es decir,  la responsabilidad sería del programador, cuando en realidad, se trata de responsabilidades compartidas. En efecto, por una parte ingenieros-gerentes de procesos en su labor comercial realizan compromisos y tareas por fuera de las plataforma que después traspasan. Esta práctica se repite y aumenta los factores no controlables de variabilidad en el desarrollo. Por otra parte, los errores  propios de código o de  confusiones o lapsus del programador. En síntesis, las  fallas en los procedimientos de control; carencia de consolidación de un lenguaje estructurado de comunicación; confianzas desmedidas de los protagonistas en sus rutinas; salto de pasos en la  metodología y  falta a  las normas establecidas para la gestión de calidad.

 

Hace unos días atrás, un joven programador de DocIRS, realizó una transacción en una de nuestras plataformas Web que significó un grave error frente a nuestros clientes.

En efecto, una vez desarrollada y probada una rutina de mejoramiento, la traspasó a dos plataformas de diferentes clientes en Ambiente de Producción, en uno de nuestros s servidores que operan sobre Internet.

El problema fue, que una de las funciones hacían envío de correos con datos adjuntos a dos diferentes clientes de una de las plataformas, y sus direcciones de correo electrónico el programador las había escrito en duro dentro del código,  con el fin de probar su rutina en Ambiente de Pruebas. Sin embargo, una vez revisada la rutina, omitió borrar dichas direcciones de correo, de modo que  cuando las pasó a producción contenían el error.

Es decir, estas direcciones no estaban siendo recuperadas paramétricamente de la base de datos, ni tampoco verificando los atributos y derechos correspondientes del usuario, sino que estaban directamente escritos dentro de la función.

Por tanto, al ejecutarse la rutina dichos cliente recibieron correos con información adjunta de la otra plataforma, perteneciente a otra empresa. Afortunadamente, se trataba de asuntos triviales sin importancia. No obstante, los usuarios receptores se preguntaron ¿Si me llega información de otra empresa no será que está pasando lo mismo con mi información?

Frecuentemente los programadores ponen puntos de control en los código para ir depurando. Obviamente, que un programador olvide un alert(“hola”) o una response.write (“jsjsjsjjsjs”) en el sistema pasado a producción, no es comparable con el grave error de  que enviar información real a diferentes clientes.

Bien, analicemos a continuación las verdaderas causas del error, que obviamente no son de exclusividad del descuido del joven programador.

Primero, sabemos que el factor humano es fundamental en todas las tareas relacionadas al procesamiento y desarrollo de sistemas. Es decir, las tareas de programación requieren diferentes habilidades, todas las cuales se deben utilizar en forma adecuada para producir una correcta aplicación. En otras palabras, los programadores no son máquinas, son seres humanos que realizan funciones complejas y por tanto son susceptibles de cometer errores.

No es trivial recordar a quienes realizan el diseño funcional y/o formulan los requerimientos, que los seres humanos somos capaces de tener fallas y a veces muy absurdas. De modo que para aquellos ingenieros más exigentes y estructurados, - les diremos en sus propios términos-, que los humanos somos matrices de infinitas entradas e infinitas salidas, y por tanto tenemos interpretaciones diversas de percepción y  rendimiento que varían según cada individuo.

Por eso es importante que tanto el programador como el equipo que trabaja con él, reconozcan cuáles son las fortalezas y  limitaciones en este campo. Así mismo, en la dinámica del trabajo ir configurando un lenguaje estructurado entre los equipos. 

Volvamos a la falla inicialmente planteada:

¿Cuáles son las causas observables de un error tan grave?

i) Se tiene un Equipo de Proceso responsable del diseño funcional y que realiza los requerimientos mediante una Plataforma de Gestión de Calidad, la cual registra las evidencias, tales como entregables, peticiones, solicitud de respuesta, respuestas con fechas, preguntas, etc..

ii) Se cuenta con normas internas de nomenclatura y control en el Ambiente de Desarrollo y Ambiente de Prueba

iii) Se tiene un PMO con estructura y procedimientos, para controlar cada entregable antes de que se ponga a disposición del cliente.

iv) Los miembros del Equipo de Proceso son quienes deben revisar la funcionalidad entregada por el programador en Ambiente de Prueba, y aprueban o rechazan el paso a producción del entregable.

¿Por qué entonces, si se tienen todos esos mecanismos de control aún siguen habiendo perforaciones de error?

¿Hay siempre una probabilidad de fallar pese a todas las estructuras de control?

Efectivamente es probable, que en una de las plataformas, construidas sobre varias centenas de miles de código, existan casos de uso que conllevan al error o fallas en los algoritmos, los cuales han sido probados exitosamente en una serie de casos particulares, pero que bajo otras circunstancias (Casos de Uso)  no operan.

Sin embargo, en este caso el error fue, simplemente porque no se respetó un procedimiento de revisión en forma integral, por ninguna de las dos partes (Equipo Proceso y Equipo de Desarrollo), debido a la confianza que brinda un sistema que opera perfectamente en producción hace varios años.

Es decir, porque las rutinas, funciones, nomenclatura, estandarización de componentes están muy consolidadas y se trabaja copiando y pegando las clases en forma rápida, sin mayor revisión. Este exceso de confianza ha producido que en varias ocasiones que los actores involucrados se salten pasos de ciertos procedimientos, a tal punto que ha bastado con una llamada directa de un gerente al programador, para el programador realice un cambio en forma directa sobre los códigos de una rutina y los pasé a producción sin revisión alguna.

La mayoría de las veces este descuidado proceder no ha causado problemas, pero cuando ocurre, ¡¡es muy grave!! El mayor tiempo y energía en la conformación del Método Simple-DocIRS, ha estado orientado a la búsqueda de algoritmos que operen con rapidez y exactitud, minimizando el error. La presencia del error, puede venir en la entrada, darse también en el proceso y por ende su suma se manifiesta en la salida. Muchos profesionales aceptan las pequeñas dificultades (o fallas) de los programas como una consecuencia natural de la condición humana, y consideran su corrección como una situación inevitable de la vida.

Es necesario señalar que las  múltiples aplicaciones operan con el Método Simple-DocIRS,  lo que significa un conjunto de funciones, rutinas y componentes con la misma notación e iguales, las cuales se está traspasando por FTP, eliminando, sustituyendo, adicionando a la biblioteca común. Esto implica, que existe una más alta probabilidad de equivocarse y por tanto requiere de concentración cuando se está realizando las transacciones de archivos a las diferentes plataformas. Ese hecho, que mi profesor Dr. PHD Roberto Frucht Wertheimer me los hubiese reprochado como un desacierto en la notación, hoy es una ventaja en los tiempos de respuesta de nuestro método.

Cada vez que se efectúa un cambio o traspaso de una componente a otra plataforma, se debe realizar un seguimiento exhaustivo de toda la red de rutinas que aparezcan involucradas. A pesar de que esto puede hacerse, es evidente que es responsabilidad del Equipo de Procesos y del Equipo de Desarrollo es asegurar que la aplicación está libre de errores.

Buena parte de la investigación en ciencia relacionada a la Tecnología de la Información, ha estado dirigida hacia la búsqueda de pruebas formales, matemáticas, de la validez de los programas. Se ha establecido que estas pruebas son posibles.

Sin embargo, los procedimientos son largos y dificultosos, y pocas veces prácticos en las aplicaciones reales. Cuando éste sea el caso, el programador debe recurrir a otros métodos, como las pruebas para establecer la validez de sus módulos y rutinas.

Algunas conclusiones concretas de esta experiencia nos señalan fallas en los ingenieros de proceso, quienes están a cargo del diseño funcional y de revisar los requerimientos solicitados en Ambiente de Prueba. A pesar de desarrollar en capas, con objetos y funciones atómicas siempre habrá que revisar integralmente, dado que un “copy-paste”  genera la probabilidad de tener impacto en otras rutinas.

Un corolario que tendría un impacto directo en los tiempos de entrega y costos, es crear entre Procesos y Desarrollo,  una capa intermedia autónoma de profesionales, dedicada al control de calidad, que no deje pasar nada a producción, si no se ha cumplido con todas las pruebas en los Ambientes previos.

DocIRS en su evolución y búsqueda por evitar errores, saltó de la programación extrema, a organizar dos diferentes equipos de trabajos, Gerencia Procesos y Gerencia de Desarrollo. Mediante esta organización “Arquitectura <–> Construcción”, regular y controlar avalar las entregas y orientar el desempeño de los miembros de ambos equipos. Incorporar entre estas dos áreas una instancia  de Control de Calidad, tendría un impacto directo en los tiempos de entrega y los costos, y estadísticamente no se justifica, dado que hasta hoy la cantidad de fallas y nivel de gravedad es casi cero.

En otras palabras, el equipo de desarrollo debe revisar los requerimientos de diseño y mejoramiento funcional en forma más rigurosa y exhaustiva. Auditándose entre ellos, siempre en Ambiente de Desarrollo. Por otra parte, el equipo de Procesos y sus ingenieros debe revisar el entregable en Ambiente de Pruebas forma integral, mapeando cuáles son las posibles funcionalidades que podrían ser afectadas y aprobar o rechazar la tarea.

En caso de ser aprobado el cambio, mejoramiento o nueva funcionalidad, entonces  se pasa a producción. A este efecto, se han implantado el método simple el cual cuenta con mecanismos automáticos de control que sirven sostener el diseñar y mantener constantemente el flujo de funcionamiento del sistema operando en Ambiente de Producción.

Estos mecanismos automáticos de control, especialmente asociados a los accesos, tareas nocturnas programadas y el sistema de continuidad operativa  son mecanismos que detectan un conjunto de desvíos,  regulando,  anticipando y alertando acerca de posibles errores.

Otra fuente indirecta de errores, pero no menos potente, es el actuar de los ingenieros-gerentes quienes interaccionan  con los clientes y quienes,  frente a sus demandas, realizan compromisos y tareas por fuera de la plataforma. La mayoría de las veces, ofreciendo soluciones fuera de los bordes convenidos o  recurriendo a la generación  de informes en Excel,  para posteriormente introducirlos de apuro en la plataforma, sometiendo a los programadores a requerimientos no planificados.

Esta práctica de carácter comercial , - que se repite y que aumenta los factores no controlables,   ha sido muy difícil desterrarla, porque es también de tremenda utilidad para la empresa. Sin embargo, representa más variabilidad en el quehacer del soporte y logística de los sistemas.  Está más que claro, que esta forma de hacer gestión con el cliente puede incidir en los tiempos de respuesta, incrementos en la presión y cantidad de trabajo no planeada, derivando en posibles fallas. Si es que no se aumentan las horas hombre de revisión y testing.     

Finalmente, está claro que este suceso desfavorable con el que comienza el articulo,  fue resultado de la realización poco pulcra en el control de procesos. Es un alerta a estar vigilantes, a corregir las malas prácticas y respetar todos los pasos establecidos en las normas de Gestión de Calidad del  proceso informático y así evitar la burocratización del modelo Simple-DocIRS y de su Estrategia del Diseño Simple.

 

 


Artículos Relacionados