1 / 12

Programación con Assertions

Programación con Assertions. Qué es un assertion?. Es un enunciado colocado en un programa , que el programador tiene la seguridad de que en ese lugar el e nunciado siempre es verdad . Se utiliza para ayudar en la verificación de la correctitud del programa .

efia
Download Presentation

Programación con Assertions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programacióncon Assertions

  2. Quées un assertion? • Es un enunciadocolocado en un programa, que el programadortiene la seguridad de que en eselugar el enunciadosiempreesverdad. • Se utilizaparaayudar en la verificaciónde la correctituddel programa. • Como precondición • Se coloca al comienzo de una sección de código • Como Post condición •  describe el estado esperado al final de la ejecución.

  3. Funcionamiento • Una vez definidos lo Assertionsse comprueban en tiempo de ejecución o estáticamente a veces.  • Una aserción se evalúa como false en tiempo de ejecución, se produce un error de aserción, que por lo general hace que la ejecución deba abortar.

  4. Mas… • El uso de las afirmaciones ayuda al programador en el diseño, desarrollo y a razonar acerca de un programa. • Se utilizan solamente para comprobar los supuestos en tiempo de ejecución.

  5. Diseñoporcontrato • Las afirmaciones pueden funcionar como una forma de documentación: • Pueden describir el estado del código que se espera encontrar antes de ejecutar (sus condiciones ), y el estado del código que se espera producir cuando termine de ejecutarse • También puede especificar invariantes de una clase.

  6. Ventajas • La ventaja de la utilización de las declaraciones de aserción en lugar de afirmaciones en los comentarios es que el programa puede comprobar las afirmaciones cada vez que se ejecuta, • si la afirmación no se sostiene, un error se puede informar .  • Esto evita que el código de conseguir fuera de sintonía con las afirmaciones (un problema que puede ocurrir con los comentarios).

  7. Ejemplo int total =countNumberOfUsers(); if(total %2==0) { // total es par } else { // total impar y no negativo assert(total %2==1); }

  8. Uso • Para declarar un assertionen una clase Java, se usa la palabra clave assert que tiene la siguiente sintáxis: assert Expresion1; assert Expresión1:Expresión2; • Expresión1 tiene que ser una expresión booleana o se producirá un error de compilación. • Cuando se evalúa un assertionque solo tenga Expresión1, se comprueba la veracidad de la expresión y si es verdadera se continúa la ejecución del programa, pero si es falsa, se lanza una excepción de tipo AssertionError.

  9. Ejemplo: Si supiesemosque…. • Alguna condición debía ser cierta en alguna parte del código (el invariante) lo colocaba como comentario: if (a==1){ ... } elseif (a==2){ ... } else { //cuando a==3 ... } • Aquies donde se puede aplicar la nueva instrucción assert, (y en general para cualquier invariante): if (a==1){ ... } elseif (a==2){ ... } else { assert (a==3) ... }

  10. De esta manera conseguimos proteger el else. Si se entra por el else y el aserto no se cumple, se genera una excepción de tipo AssertionError. • Otro candidato para los asertos es una sentencia switch que no tenga cláusula default. En este caso el aserto comprobará que nunca se entra por el default, de esta manera:

  11. Assertion con switch switch (suerte) { case Moneda.CARA: ... return; case Moneda.CRUZ: ... return; case default: assert false; }

  12. Conclusiones • Los assertions son un buen método para comprobar valores de variables, expresiones y para comprobar estados del programa por donde no se tiene que pasar. • Esto también se puede hacer con una serie de If's, pero no sería tan eficiente, y sobre todo no se podría desactivar cuando uno quiera. • Como moraleja final, en el informe de fallo del Ariane 5 (explotó en el aire por una mala conversión de un float de 64 bits a un integer de 32) donde los asertos (comprobando la buena conversión) hubiesen evitado la catástrofe.

More Related