Sobre Interfaces de sistemas y GeneXus.






Caso 1:
Tengo un sistema, que publica WebServices con SOAP.
Cambio de Version de GeneXus. (puede ser un upgrade o version).
El SOAP generado por la version anterior y la nueva son diferentes y las aplicaciones que consumen dichos web services no funcionan correctamente.
Resultado: Se deben ajustar los programas que consumen dichos webservices (desarrollados por otras empresas)

Caso 2: 
Tengo un procedimiento main command line  (en 9.0) que se ejecuta agendado en un servidor.
Se instala una nueva version (en GeneXus X) de la aplicacion, y el ejecutable que se llamaba aEjecutable.exe, pasa a llamarse aPEjecutable.exe.
Resultado: La tarea agendada da errores y se demora en detectar.

Caso 3:
Tengo una KB con la propiedad Namespace en default, por lo que toma el nombre de la KB como namespace. La aplicacion genera web services.
Se trabaja con GXServer y otra persona se baja dicha KB con otro nombre, generandose otro namespace.
Resultado: Los ejecutables generados desde la KB1, no son intercambiables con los de la Kb2.

Caso 4:
Se cambia un servidor de 32 a 64bits, en una instalacion ASP.Net con IIS.
Se necesitan generar planillas excel en el servidor. Para lograr esto, se cambia para que generen planillas excel con extension XSLX (que son las unicas que funcionan con 64bits).
Resultado: Las personas que usaban planillas excel deben actualizar los programas que usan para consumir dicho formato.

Caso 5: 
Tengo una aplicacion SD desarrollada y publicada.
Hago un cambio sencillo, donde reorganizo las pantallas, cambio algunas cosas de lugar.
Resultado:  Instalo la nueva version de la aplicacion aplicación  y empieza a cancelar porque dan errores los servicios REST.

Caso 6:
Tengo una aplicación SD generado con Android. Quiero hacer una nueva version para Windows 8, que utilice todos los mismos servicios para no tener dos instancias de los mismos (para bajar costos).
Resultado: Es dificilisimo determinar que es lo que puedo cambiar y que es lo que no en mi aplicacion Windows 8, para mantener la misma interfaz que la aplicacion Android.

Caso 7: 
Renombro un SDT, que se utiliza en varios objetos y en un web service como parametro. Todo especifica y compila correctamente en la interna de mi KB.
Resultado: El WSDL del Webservices es incompatible con el anterior.

Caso 8: 
Un reporte PDF tiene algunos atributos. Al agrandarse un atributo el mismo no entra en la pantalla y por lo tanto no se imprime. Nadie se da cuenta de dicho error hasta que el usuario final lo reporta, pues no puede realizar la tarea.


Todos estos casos, son ejemplos de algunos problemas de integración o de manejo de interfaces de los sistemas con sistemas externos, con los que debemos lidiar los desarrolladores de aplicaciones GeneXus.
Son de diferente gravedad, complejidad y tienen consecuencias diversas. Algunos afectan a la interna de la organización y otros pueden afectar a otros.

Las herramientas con las que contamos para controlar el estado de dichas interfaces son bastante primitivas, y en algunos casos, nos enteramos de las diferencias demasiado tarde, cuando arreglar dicha diferencia de comportamiento sale mas caro.

Creo que hay varias oportunidades de mejora

a) Artech y GeneXus deberían permitir identificar mas claramente las formas que una aplicación interactua con su entrono:

  • archivos
  • reportes y planillas. 
  • servicios web
  • urls
  • etc


y debería incorporar en sus pruebas de regresión, algunas que indiquen cuando los WSDL de webservices cambian, con el cambio de versiones o upgrades.
Esto nos ayudaría por lo menos para documentarlo en las Releases Notes y poder tomar las precauciones del caso. También seria bueno que se brindara alguna forma de compatibilidad hacia atrás.
Lo mismo podría hacerse con cambios de nombres de objetos main, cambios en reportes, etc.
Esto serviría en los cambios de versiones de GeneXus

b) En el caso de SD, hay intefaces entre los servicios y las aplicaciones de los dispositivos que no son nada obvias y no esta claro cuando hay que generar una nueva versión para instalar. Creo que Artech debe trabajar en que se puedan listar dichas interfaces de forma de poder comparar con la versión anterior y saber si tenemos que crear una nueva versión o podemos actualizar solo la estética sin tener que cambiar la lógica de la aplicación.

c) GXTest podria facilitar la tarea de comparar WSDL en la aplicación, para detectar cuando un cambio de programación produce un cambio en el mismo.
También seria bueno poder usar GXTest para comparar salidas de reportes y contenido de archivos.
Esto serviría para los cambios de versión de la aplicación desarrollada.

c) Como desarrolladores, somos los responsables de mantener la aplicación funcionando y sin interrupciones, por lo tanto, debemos probar todas las interfaces de nuestra aplicación antes de liberarla.
En aplicaciones grandes esto es muy complicado, pero hay que seguir poniendo trabajo para poder brindar un mejor servicio a nuestros clientes.

-----------------

Definicion:
Interfaz: Parte de un sistema que permite el flujo de información entre un usuario y la aplicación, o entre la aplicación y otros programas o periféricos.

Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.