remarks generate example c# assert code-contracts defensive-programming fail-fast

generate - params comments c#



¿Cómo combinar técnicas de programación defensiva juntas? (2)

Abrazaría totalmente los contratos como en los blogs de vista previa y leyendo el documento pdf más largo.

Los contratos no son solo para funciones públicas. Lo importante es que proporciona una manera para que el compilador razona sobre el código. Así que úsalo en todas tus funciones según sea apropiado. Eso te da el máximo beneficio. Solo usarlo en funciones públicas es como decir que solo estás probando funciones de nivel superior. Está incorrecto.

Sus casos de prueba de función eliminarán cualquier lógica que aún se necesite probar en la función después de que el Contrato pre / post y las llamadas invariantes hagan su trabajo.

Sea claro sobre los 3 escenarios de uso, cuál funciona para su código y sus problemas. Lo ideal es que los pueda ejecutar en su código de producción y luego reducirlos en función de las pruebas de rendimiento.

Asegúrese de que sus documentos generados incluyan sus contratos, es un buen beneficio.

¡También me gustan los DevExpress CodeRush y Refactor! Herramientas profesionales. Tienen refactorizaciones específicas para Contratos, como un par de clics para convertir los parámetros de entrada en contratos requeridos, etc. Además, tienen un buen análisis de código que aumentará la calidad del código en general.

Puede ver algunos códigos con los Contratos aquí: https://searchcode.com/codesearch/view/14318515/

En cuanto a toda la mejor práctica enchilada todo en un proyecto. Bueno, te estoy mirando Microsoft. Tsk.

Henk hizo un buen trabajo con el resto de sus preguntas.

La pregunta que quiero hacerle es bastante amplia, pero al mismo tiempo es muy concreta. Primero, debo decir que me interesaron principalmente las respuestas que son aplicables en el entorno .net.

Bueno, quiero aumentar el nivel del código que produzco. Ahora utilizo principalmente el TDD y el análisis de código estático para asegurarme de que mi código sea correcto. Recientemente escuché el discurso de Dino Esposito sobre los contratos de código y ahora quiero usarlo junto con otras técnicas. Mientras escuchaba a Dino, también recordaba Debug.Assert() y Trace.Assert() .

Para ser concreto voy a hacer varias preguntas:

  • ¿Cómo debo escribir los contratos y las pruebas unitarias para complementarse?
  • ¿Debo usar contratos de código en todos los métodos o solo en métodos públicos?
  • ¿Debo evitar el uso de Debug.Assert() ? ¿Cuándo está bien usarlos? (Por ejemplo, observe que las invariantes en .net se verifican solo en la salida de método / propiedad pública. Entonces, ¿está bien hacer algunas verificaciones en medio del método con un simple Assert() ?)
  • ¿Podría por favor recomendarme el proyecto de código abierto donde todas estas técnicas se usan correctamente porque una imagen vale más que mil palabras?

Debe comenzar por estudiar el manual (bastante bueno) de Contratos.

  • Tiene un capítulo y código de ejemplo sobre la integración de la prueba unitaria. Mucha más información si sigues los enlaces de Pex.
  • Utilizar contratos en todos los miembros públicos siempre. Para los miembros privados: a veces.
  • aún podría usar Debug.Assert () pero Contracts.Assert () sería la opción más lógica.
  • Ejemplos de proyectos ... No sé ninguno. Pero mira los contratos definidos para el BCL.