Está en la página 1de 5

Ingeniería de software

Dr. Rene Santa Olaya S.

Ing. Nancy Victoria Guadarrama Álvarez 1er Semestre DCC

Aserciones.

Una aserción es una afirmación que se hace sobre algo. La programación con aserciones
proviene de la verificación formal de algoritmos, que define técnicas que permiten
demostrar formalmente la corrección de un algoritmo. Alrededor de cualquier sentencia S
de un programa pueden definirse una precondición y una postcondición. Éstas son,
respectivamente, condiciones que se cumplen antes y después de la ejecución de S. En el
contexto de la programación en C, el uso de aserciones forma parte de un conjunto de
técnicas de depuración incorporada a los programas denominado programación defensiva.

Aserciones: Diseño por Contrato

• Corrección de un elemento software = consistencia entre su implementación y su especificación


• Las aserciones permiten especificar la semántica de una clase asociada al TAD.
• Una aserción es una expresión que establece una propiedad que debe satisfacer alguna de las
entidades de un programa, en algún punto de la ejecución del software.
• El código define “el cómo”, las aserciones “el qué”

Aserciones

• Lenguaje de aserciones (Eiffel) es muy simple:


– Expresiones booleanas con unas pocas extensiones (old, ‘;’)
– Una aserción puede incluir funciones.

Sintaxis
Assert expresión;

Ejemplo de aserción
Ingeniería de software
Dr. Rene Santa Olaya S.

Ing. Nancy Victoria Guadarrama Álvarez 1er Semestre DCC

Positivo: n>0;
autor= not void
not vacia; conta:=old conta + 1
saldo := old saldo –cantidad

• Uso de las aserciones:


– Especificación semántica de rutinas: PRE y POST-CONDICIONES
– Especificación de propiedades globales de clase: INVARIANTE

Uso de las aserciones:

(A) Especificar la tarea que lleva a cabo una rutina mediante:


– PRECONDICIONES:
Condiciones para que una rutina funcione adecuadamente.
– POSTCONDICIONES:
Describen el efecto de una rutina, definiendo el estado final.
(B) INVARIANTE:
Aserción que expresa restricciones de integridad que deben ser satisfechas por cada instancia de la
clase si se encuentra en una situación estable.
Ingeniería de software
Dr. Rene Santa Olaya S.

Ing. Nancy Victoria Guadarrama Álvarez 1er Semestre DCC

Precondición

private void setRefreshInterval(int interval) {

// Confirma la precondición en un método no público.


assert interval > 0 && interval <= 1000/MAX_REFRESH_RATE : interval;
... // Define interval
}

Postcondicion

public BigInteger modInverse(BigInteger m) {


if (m.signum <= 0)
throw new ArithmeticException(“Negativos: “ + m);
... // Se realizan los cálculos
assert this.multiply(result).mod(m).equals(ONE) : this;
return result;
}
Ingeniería de software
Dr. Rene Santa Olaya S.

Ing. Nancy Victoria Guadarrama Álvarez 1er Semestre DCC

Manejo de afirmaciones fallidas.

Si una afirmación falla, el primer paso es comunicarle al usuario que existe una falla, este
aviso puede ser a través de mostrar un mensaje de error en la terminal o guardarlo en un
archivo de log. Una vez que la falla se ha analizado y el mensaje de error ha sido
desplegado, existen diferentes alternativas:
• Terminar el programa.
• Permitir su ejecución.
• Seguir una excepción para regresar a la ruta de código que tiene el error.

Uso: Se aconseja su uso durante el desarrollo y las pruebas, se pueden “eliminar” en


la implantación del sistema.

Reglas para el uso de aserciones

Las aserciones son un gran mecanismo de ayuda para la depuración de programas, sin


embargo, es necesario conocer ciertas normas a tener en cuenta a la hora de utilizarlas de
cara a hacer un uso apropiado de ellas:
Ingeniería de software
Dr. Rene Santa Olaya S.

Ing. Nancy Victoria Guadarrama Álvarez 1er Semestre DCC

  • No se debe utilizar aserciones para validar argumentos de un


método público. Dado que no tenemos control sobre los posibles valores que se pueden
pasar al método, no tiene sentido realizar suposiciones de los mismos.

  • No se debe utilizar aserciones para validar argumentos de la línea de comandos. El


motivo es el mismo que en el caso anterior.

  • Se puede utilizar aserciones para validar argumentos de un método privado. En este caso


si se tiene total control sobre los valores que se pasan al método, por lo que si tiene sentido
realizar suposiciones sobre dichos valores.

  • Se puede utilizar aserciones, incluso en métodos públicos, para validar casos que se sabe
nunca sucederán.

  • No utilizar aserciones que puedan causar efectos colaterales. Una aserción siempre debe


dejar al programa en el mismo estado en el que se encontraba antes de ejecutarse.

Ejemplos:

También podría gustarte