
¿Qué
significa la violación de un contrato?. La violación
de un contrato representa un defecto en el software. Dependiendo
del tipo de aserción es la ubicación del defecto.
Si se viola una precondición, entonces existe un defecto
en el cliente. Si se viola la poscondición o el invariante
de clase, existe un defecto en el proveedor. Es importante que
se puedan monitorear las aserciones en tiempo de ejecución
con propósitos de testeo, afirmación de calidad
(las actividades de QA se basan en lo previsto por los contratos)
y depuración. Es decir, no son solamente un mecanismo
de especificación y documentación (en Eiffel existe
una forma de visualizar una clase llamada contract form
que muestra la clase con sus rutinas publicadas con pre y poscondiciones
y el invariante de clase), sino que además cumplen un
rol importante durante todas las etapas del desarrollo de software.
Es importante que el desarrollador tenga la opción de
elegir en tiempo de compilación que aserciones monitorear.
Luego de la depuración y el testeo, es posible generar
el sistema de producción con las aserciones sin habilitar
(evitando el chequeo en tiempo de ejecución). En general
es recomendable mantener habilitado el chequeo de las precondiciones.
Meyer hace una detallada explicación de esto (Meyer,1997).
La violación de una aserción en tiempo de ejecución
produce un excepción que puede ser posteriormente manejada.
Los contratos de software sirven como vehículo de comunicación
entre desarrolladores, entre gerentes y desarrolladores, para
realizar manuales, etc. Pero además son una de las herramientas
más importantes para realizar reuso de software. El contrato
permite conocer qué se está reusando y bajo qué
condiciones. Un interesantísimo artículo de Jézéquel
y Meyer dan cuenta de como la utilización de contratos
podría haber evitado pérdidas millonarias en un
proyecto de software (Jézéquel, 1997).