En el programa de computadora, una aserción es un predicado (es decir, una declaración true-false) puesto en un programa para indicar que el del revelador piensa que el predicado es siempre verdad en ese lugar.
Por ejemplo, el código siguiente contiene dos aserciones:
lang=" del
el x > 0 y x > 1, y ellas son de hecho verdades en los puntos indicados durante la ejecución.
Las aserciones se utilizan para ayudar a especificar programas y a razonar sobre la corrección de programa. Por ejemplo, una condición previa - una aserción puesta al principio de una sección del código - determina el sistema de los estados bajo los cuales se espera que el código sea ejecutado. Un Postcondition - colocado en el extremo - describe el estado previsto en el final de la ejecución.
Las aplicaciones antedichas del ejemplo que la notación para incluir aserciones utilizó por C. Hoare en su " de papel 1969; una base axiomática para el " de la programación de computadora ;. Porque esa notación no se puede utilizar en lenguajes de programación existentes, los programadores incluyen generalmente aserciones usar la característica del comentario de su lenguaje de programación. Aquí está un ejemplo usar el C :
lang=" del
Los apoyos se incluyen en el comentario para ayudar a distinguir este uso de un comentario de otras aplicaciones.
Varios lenguajes de programación modernos incluyen una declaración de la aserción, que es esencialmente una aserción que se comprueba en el tiempo de pasada . Si una aserción evalúa a falso, un " failure" de la aserción; resultados, que pueden hacer la ejecución abortar o causar la falta de ser reconocido de una cierta otra manera. Esto se piensa para ser más fácil al elimina errores de que el mensaje de error o el comportamiento culpable que resultarían si la aserción era falsa y desenfrenada.
El uso de aserciones ayuda al programador para diseñar, para convertirse, y a la razón sobre un programa.
El resto de este artículo se centra en el uso de tales declaraciones de la aserción y las compara al tratamiento de errores.
Este acercamiento es también útil en las idiomas que no lo apoyan explícitamente: la ventaja de usar declaraciones de la aserción algo que aserciones en los comentarios es que las aserciones se pueden comprobar cada vez el programa están funcionadas; si la aserción se sostiene no más, un error puede ser divulgado. Esto evita que el código salga de la sinc. con las aserciones (un problema que puede ocurrir con comentarios).
% está el &mdash del operador del resto del (no módulo); si su primer operando es negativo, el resultado puede también ser negativo. Aquí, el programador ha asumido que total es no negativo, de modo que el resto de una división con 2 sea siempre 0 o 1. La aserción hace esta asunción el &mdash explícito; si countNumberOfUsers vuelve un valor negativo, es probable un insecto en el programa. Una ventaja importante de esta técnica es que cuando ocurre un error está detectada inmediatamente y directo, algo que más adelante con sus efectos secundarios a menudo obscuros. Desde la aserción una falta divulga generalmente la localización del código, una puede establecer claramente a menudo el error sin el depuración adicional.
Las aserciones también se ponen a veces en los puntos que la ejecución no se supone alcanzar. Por ejemplo, las aserciones se podían poner en la cláusula de default de la declaración de switch en idiomas tales como C, C++, y Java . Los casos que no son manejados intencionalmente por el programador levantarán un error y abortan el programa algo que silenciosamente continuando en un estado erróneo.
En el Java, aserciones ha estado una parte de la lengua desde la versión 1. Las faltas de la aserción dan lugar a levantar un Las construcciones de la aserción en una lengua permiten el desarrollo Prueba-conducido fácil (TDD) sin el uso de una biblioteca de tercera persona. Las aserciones estáticas son particularmente útiles en la plantilla de tiempo de compilación metaprogramming . El retiro de aserciones del código de la producción se hace casi siempre automáticamente. Es hecho generalmente vía la compilación condicional, por ejemplo usando el preprocesador en el C o el C++ o pasando una opción al motor runtime, como en el Java . Alguna gente, sin embargo, se opone al retiro de aserciones citando una analogía que la ejecución con la aserción en etapa del desarrollo y sin ella es en la práctica como la natación practicante en una piscina con un salvavidas y la natación entonces que va en el mar sin un salvavidas. Ella agrega que las aserciones también podrían ayudar a hacer el del programa a prueba de averías. Considerar el ejemplo de usar siguiente una aserción para manejar un error: lang=" del El programador puede también elegir combinar aserciones y el tratamiento de errores estándar para el mismo problema. Esto es útil en las situaciones donde el programador quiere ser alertado inmediatamente sobre un error, pero todavía lo tiene manejado con seguridad en " world" verdadero; situaciones. En el ejemplo antedicho usar malloc, esto significaría incluyendo el tratamiento de errores robusto en caso de falta, pero también accionar una aserción de modo que el programa alerte el programador si ocurre el error mientras que adentro eliminar errores del modo. Esto permite el programador más fácilmente a los insectos del hallazgo, mientras que permite que el usuario final funcione con el programa sin mensajes de error innecesarios. Esta táctica es generalmente solamente provechosa cuando el error especificado no estrellará el programa ni destruirá datos, pero en lugar de otro hará el programa funcionar lentamente o menos eficientemente. .
AssertionError cuando el programa se funciona con con las banderas apropiadas, sin las cuales se no hacen caso las declaraciones de la afirmación. En el C y el C++, el estándar Assert.h del del jefe encendido los agregan que definen el afirman (la aserción del ) como macro que señale un error en el caso de falta, terminando generalmente el programa. Aserciones durante el ciclo de desarrollo
Durante el ciclo de desarrollo, el programador funcionará con típicamente el programa con las aserciones permitidas. Cuando ocurre una falta de la aserción, el programador se notifica inmediatamente del problema. Muchas puestas en práctica de la aserción también pararán el &mdash de la ejecución de programa; esto es útil, desde entonces si el programa continuó funcionando después de que ocurriera una violación de la aserción, él pudo corromper su estado y hacer la causa del problema más difícil localizar. Usar la información proporcionó por la falta de la aserción (tal como la localización de la falta y quizás de un rastro de apilado, o aún el contexto completo de la aserción fall si un punto de desempate del usuario se acciona en vez de parar el programa), el programador puede fijar generalmente el problema. Así, las aserciones son una herramienta muy de gran alcance en el depuración. Aserciones estáticas
Las aserciones que se comprueban en de tiempo de compilación se llaman las aserciones estáticas. Deben bien-ser comentadas siempre. Aserciones de incapacidad
Las aserciones se ejecutan generalmente para poderlas ser permitidas o inhabilitar, generalmente sobre una base programa-ancha; idiomas que distinguen diversos tipos de &ndash de la aserción; e. &ndash pre- y de los postconditions; permitir generalmente que éstos sean inhabilitados independiente. Si las aserciones son lisiadas, las aserciones no se comprueban en el tiempo de pasada. Esto permite que un programador ponga aserciones también en lugares donde estarían prohibitivos los gastos indirectos de comprobarlos de otra manera (e., validar contra los límites de arsenal al tener acceso a elementos de arsenal). Puesto que las aserciones son sobre todo una herramienta de desarrollo, son a menudo lisiadas cuando se lanza el programa. Porque algunas versiones del programa incluirán aserciones y algunas no, es esencial que la incapacidad de aserciones no cambia el significado del programa. Es decir las aserciones deben estar libres de los efectos secundarios a la alternativa en el caso C o el C++ es redefinir el macro afirma para evaluar la expresión incluso cuando las aserciones son lisiadas, aunque ésta reduce los ahorros debido a suprimir aserciones y puede no ser lo que esperan otros programadores. Comparación con el tratamiento de errores
Vale el distinguir de aserciones del tratamiento de errores rutinario. Las aserciones se deben utilizar para documentar situaciones lógicamente imposibles y para descubrir el errors&mdash programado; si el " impossible" ocurre, después algo fundamental es claramente incorrecto. Esto es distinto del tratamiento de errores: la mayoría de las condiciones de error son posibles, aunque algunas puedan ser extremadamente poco probables de ocurrir en la práctica. Usar aserciones como tratamiento de errores de fines generales un mecanismo es generalmente imprudente: las aserciones no permiten la recuperación agraciada de errores, y una falta de la aserción parará a menudo la ejecución de programa precipitadamente. Las aserciones también no exhiben un mensaje de error de uso fácil. malloc puede volver un indicador de NULL si la memoria no podría ser asignada. Esto es posible: el sistema operativo no garantiza que cada llamada a malloc tendrá éxito, y el programa se debe preparar para manejar la falta. Una aserción no es probablemente la mejor opción aquí, porque una falta del malloc no es lógicamente imposible - es una posibilidad legítima, no obstante no la que se presentarán muy a menudo en la práctica. La aserción en este ejemplo responde a un propósito útil, al menos: documenta que el programador ha decidido deliberadamente a no proporcionar el tratamiento de errores robusto para las faltas de la asignación de memoria. Ver también
Lengua de la definición de la aserción
Diseño por el contrato
Lógica de Hoare
Análisis estático del código
Java que modela la lengua Random links: Código del oro | Zack justo | Aire Kazakhstan | Universidad de ITE del oeste