Recientemente descubrí Design by Contract (DbC) y me parece una forma extremadamente interesante de escribir código. Entre otras cosas, parece ofrecer:
- Mejor documentación Como el contrato es la documentación, es imposible que uno esté desactualizado. Además, debido a que el contrato especifica exactamente lo que hace una rutina, ayuda a admitir la reutilización.
- Depuración más simple. Dado que la ejecución del programa se detiene en el momento en que falla un contrato, los errores no pueden propagarse y la afirmación específica violada se resaltará presumiblemente. Esto ofrece soporte durante el desarrollo y durante el mantenimiento.
- Mejor análisis estático. DbC es básicamente una implementación de la lógica de Hoare, y deberían aplicarse los mismos principios.
Los costos, en comparación, parecen ser bastante pequeños:
- Mecanografía extra con los dedos. Dado que los contratos tienen que ser explicados.
- Toma cierta cantidad de entrenamiento para sentirse cómodo con la redacción de contratos.
Ahora, estando familiarizado con Python principalmente, me doy cuenta de que de hecho es posible escribir condiciones previas (simplemente lanzando excepciones para entradas inapropiadas) e incluso es posible usar aserciones para probar nuevamente ciertas condiciones posteriores. Pero no es posible simular ciertas características como 'viejo' o 'resultado' sin un poco de magia adicional que, en última instancia, se consideraría no Pythonic. (Además, hay algunas bibliotecas que ofrecen soporte, pero en última instancia obtengo la sensación de que sería un error usarlas, ya que la mayoría de los desarrolladores no lo hacen). Supongo que es un problema similar para todos los demás idiomas (excepto, por supuesto, , Eiffel).
Mi intuición me dice que la falta de apoyo debe ser el resultado de algún tipo de rechazo a la práctica, pero la búsqueda en línea no ha sido fructífera. Me pregunto si alguien puede aclarar por qué la mayoría de los idiomas modernos parecen ofrecer tan poco soporte. ¿La DbC es defectuosa o demasiado cara? ¿O es simplemente obsoleto debido a la programación extrema y otras metodologías?