¿ Quieres imprimir esta página ? Volver a la página principal de Recursos iSeries AS400 ¿ Necesitas ayuda ? En pruebas
System i5 iSeries AS400 Recursos. Compartiendo generamos conocimiento
Novedades en Recursos iSeries AS400
Noticias tecnológicas
Documentos
Crear un aserto (o aserción)

Un aserto (o aserción) es un predicado cuya evaluación producirá un resultado de CIERTO o FALSO. Esta técnica consiste en sembrar el código fuentes de chequeos de integridad de "cosas" que siempre deben de cumplirse, de forma que si algo va mal se detecte cuanto antes.

Si el aserto se evalúa a falso, se da un mensaje de error y finaliza la ejecución del programa de forma anómala.

Las aserciones suponen un trabajo extra para el programa, trabajo que se compensa durante el desarrollo y las pruebas; pero que parece redundante cuando el programa ha sido exahustivamente probado y simplemente se quiere que produzca los resultados cuanto antes. En otras palabras, queremos eliminar las aserciones cuando el programa esté en producción.

El uso de las aserciones tiene las siguientes ventajas:

  1. El código de comprobación que genera se elimina fácilmente del código final con sólo definir la macro "NO_ASSERT". Realmente la llamada sigue realizándose, pero en vacío.
  2. A nivel lógico, separa claramente lo que es "código de depuración" de lo que es "código de aplicación".

En el caso de RPG IV tiene una desventaja: el tiempo de ejecución se ve afectado sensiblemente.

Las aserciones se usan en lo que se ha llamado "Programación por Contrato". Con esta metodología se aprecia la relación entre un subprograma y sus clientes como un acuerdo formal. Éste expresa los derechos y obligaciones de cada parte: de quien escribe la función y de quien la llama.

Con los asertos se pueden implementar las precondiciones, postcondiciones y los invariantes; usadas en la Programación por Contrato.

  • Precondición: son las condiciones previas que se deben cumplir antes de comenzar la ejecución de la función.
  • Postcondición: las condiciones que deben de ser ciertas cuando termine la ejecución de la función.
  • Invariante (de bucle): lo que debe ser cierto mientras un bloque de código se está ejecutando.

Para profundizar sobre los fundamentos teóricos de la "Programación por Contrato" recomiendo el siguiente libro:

Construcción de Software Orientado a Objetos
Betrand Meyer
Edición de 1998

Aunque es un texto que trata sobre muchos conceptos centrados en la programación orientada a objetos, uno de sus capítulos discute estos conceptos, que por otra parte, pueden ser aplicados a la programación estructurada.

En Internet y usando cualquier buscador también se pueden encontrar documentos sobre estos temas.

En los ejemplos incluidos en este paquete se muestra su utilización, que básicamente es la siguiente:

 

P UnaFuncion B D PI D i 10I 0 Const D j 10I 0 Const
D a S 10I 0 Const

/Free
// Precondiciones
Assert( i > 0 And i <= 1000000: 'Precondición 1' );
Assert( j = 1 Or j = 2: 'Precondición 2' );
...

En la definición de cada función se puede incluir como primera parte del código se pueden incluir las aserciones referentes a las precondiciones. Es decir, la parte del contrato que debe de cumplir siempre el cliente de la función. Si algunas de estas condiciones no se cumplen, la ejecución del programa finalizará con error. Normalmente se validan los parámetros de entrada a la función.

.
// Postcondiciones
Assert( a = 1 Or a > 5: 'Postcondición 1' );

Return;
/End-free

A continuación irá el código de la función en sí, es decir, lo que se hace. Y, finalmente, las postcondiciones o la parte del contrato que debe de cumplir el fabricante o autor de la función.

Resumiendo, ante una entrada que cumple unos ciertos requisitos el el autor de la función garantiza unos resultados consistentes.

Es evidente que no todas las funciones o procedimientos tienen porque codificar pre y postcondiciones.

Como se ha comentado antes, esta estrategia de programación genera un coste en tiempo y espacio, al menos en RPG IV. En otros lenguajes de programación no siempre es así. En tiempo porque la ejecución del programa se relentiza sensiblemente por la sobre carga de las verificaciones. Y en espacio porque se hace una llamada extra a la función que valida la aserción, el CALLP.

En RPG IV se puede conseguir que la llamada a la función Assert() sea menos traumática cuando el programa esté ya en producción. Pero aún así, la llamada CALLP a Assert se realiza, aunque no se ejecuta ninguna validación. Ello se consigue compilando el módulo cliente definiendo la macro "NO_ASSERT".

La única forma que conozco para eliminar totalmente la llamada es incluyendo antes de cada bloque de aserciones la siguiente comprobación

/Free
/If Not Defined( SIN_ASSERT )
// Precondiciones
Assert( i > 0 And i <= 1000000: 'Precondición 1' );
Assert( j = 1 Or j = 2: 'Precondición 2' );
/Endif

Pero esto conlleva un esfuerzo extra en la codifición y posterior mantenimiento del programa.

Referencias
===========
Autor
-----
Javier Mora García
Enero 2005

Este programa de servicio está basado en el trabajo de Thomas Raddatz
publicado en http://www.tools400.de/Downloads/Freeware/Code/assert.zip

El trabajo original ha sido adaptado para intentar mejorar la ejecución. También se han utilizado características del compilador de RPG IV que se incorporaron a partir de la V5R1. El estilo de codificación ha sido reconstruido para adaptarlo a otros estándares que rigen en mi trabajo diario.

Utilidad mejorada en Septiembre de 2005.
Los fuentes antiguos no compilaban, ya que faltaba un miembro fuente sobre el que se hacía un /COPY.

Con los cambios efectuados ahora, ya no es necesario tenerlo
Puedes descargarte el fuente aquí Puedes bajarte la utilidad aquí (10 Kb) (14Kb)

Javier Mora García

Enero 2005

 


Comentarios de usuarios

Nombre:
Mail:
Comentario:
 

Subir a la parte superior de la web

 

 

NUESTRA COMUNIDAD EN
ÚNETE Y.... ¡¡ PARTICIPA !!
Dossiers técnicos iSeries y AS400
- Seguridad
- Alta disponibilidad.
Nuestros links favoritos
- Tendencias tecnologías de la información
Expertos en tecnologías de la información, nos dan su punto de vista sobre las tendencias actuales y futuras
- Los últimos anuncios sobre hardware-software para iSeries AS400 realizados por IBM
- Freeware y shareware para el iSeries AS400
- Utilidades para el iSeries AS400 realizadas por profesionales
- Documentos. Trucos e ideas para resolver tus problemas
- Los manuales y links más interesantes del iSeries AS400

  Links patrocinados
  •  
  •  

[ Soy nuevo |   Profesionales |   AS qué |   Empresas |    Foros |   Recomiéndanos |    Productos ]
 
Recursos iSeries AS400. Es una web de: PUBLICACIONES HELP400, S.L. CIF:B-60-202827 Gran Vía de les Corts Catalanes, núm. 715, Entresuelo – 3ª - Barcelona - Tel.+34.932.310.049