| 
				 Error de Procesos en el Desarrollo de 
				SistemasJosé 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 |