Valores predeterminados: ¿son buenos o malos?

12

La pregunta sobre los valores predeterminados en general: valores predeterminados de la función de retorno, valores predeterminados de parámetros, lógica predeterminada para cuando falta algo, lógica predeterminada para el manejo de excepciones, lógica predeterminada para manejar las condiciones de borde, etc.

Durante mucho tiempo, consideré que los valores predeterminados eran una cosa "malvada", algo que "encubre la catástrofe" y da como resultado un error muy difícil de encontrar. Pero recientemente comencé a pensar en los valores por defecto como una especie de deuda técnica ... lo cual no es algo directamente malo, sino algo que podría proporcionar algún "financiamiento a corto plazo" que nos permita sobrevivir al proyecto (cuántos de nosotros podríamos pagar) comprar una casa sin sacar la hipoteca?).

Cuando digo "a corto plazo", no me refiero a "hacer algo rápido primero y refactorizarlo más tarde antes de que llegue a la producción". No: estoy hablando de confiar en valores predeterminados codificados en un software de producción. Concedido: podría causar algunos problemas, pero ¿qué pasaría si solo causara un solo problema en todo un año?

Nuevamente, estoy hablando del software general "promedio" aquí (no es un software para una central nuclear) - el sitio web promedio o una aplicación de UI para el software de contabilidad, lo que significa que las vidas de las personas no están en juego, ni Millones de dólares.

Una vez más, desde mi experiencia, los usuarios de negocios prefieren vivir con el software que "funciona de alguna manera", en lugar de esperar por uno perfecto. Y el uso de valores predeterminados ayuda mucho si desarrolla un software en un estilo RAD. Pero de nuevo, las sesiones de depuración más largas que pasé fueron debido a los errores introducidos por un valor predeterminado que dejó de ser "predeterminado" en el camino o porque un subsistema pequeño se ha actualizado recientemente y, como resultado de esta actualización, no es así. maneja el valor predeterminado correctamente (por ejemplo, lista vacía vs nula o cadena nula vs cadena vacía).

Así que mi pregunta es: ¿son los valores predeterminados buenos o malos? Y si son una deuda técnica, ¿cómo se mide cuánto puede pedir prestado para poder pagar los reembolsos?

Realmente agradecería cualquier entrada.

Saludos.

EDITAR:

Si estoy usando los valores predeterminados como una forma de cortar las esquinas durante el desarrollo, y si el corte de las esquinas produce errores y problemas, ¿cuál es la metodología para recuperarse de estos problemas?

    
pregunta 31.03.2011 - 13:21

5 respuestas

17

El concepto de Convention over Configuration es imposible sin sensible Valores por defecto. La palabra clave aquí es "sensible". Los valores predeterminados deben tener sentido para al menos el 80% (si no más) de todos los usos de una biblioteca / servicio / marco.

Reglas generales generales:

  • Si un valor es sensible al 80% o más usos, debe ser un valor predeterminado
  • Si no hay valores que se usen para la mayoría de los casos, no use valores predeterminados.
  • Los valores predeterminados evitan errores estúpidos del código de configuración. Si los valores predeterminados son razonables para la mayoría de los casos, menos personas se meten con la configuración de trabajo.
  • Las configuraciones no estándar son más visibles cuando usa valores predeterminados.
  • Los valores predeterminados de Bad son peores que los valores predeterminados de no .

Esencialmente, una vez que aprendes cómo funciona la configuración predeterminada, puedes tomar decisiones informadas sobre cómo y cuándo hacer configuraciones no estándar.

    
respondido por el Berin Loritsch 31.03.2011 - 14:22
38

Tomemos, por ejemplo, una biblioteca que implementa el protocolo FTP. Por defecto, se espera que FTP funcione en el puerto 21. Ahora me irritaría mucho si tuviera que especificar el uso del puerto 21 cada vez que construyo un objeto de una clase FTP aleatoria. Si necesito un puerto diferente, permítame especificar.

Los valores predeterminados están perfectamente bien cuando son valores predeterminados sanos.

    
respondido por el Htbaa 31.03.2011 - 13:26
16

Probablemente esté usando una distribución de teclado predeterminada con asignaciones de teclas predeterminadas, asignaciones de botones predeterminadas del mouse, el navegador predeterminado, escribiendo en el idioma predeterminado del sistema, arrancando desde el sistema operativo predeterminado en el cargador de arranque, menús posicionados predeterminados, combinación de colores predeterminada , fuente predeterminada ancho / alto / cara / estilo, conjunto de caracteres predeterminado, resolución de monitor predeterminada, valor predeterminado ... obtienes la idea.

Pero con toda seriedad, creo que la preocupación que tiene no es con los valores predeterminados sino con otra cosa. El comportamiento predeterminado no enmascara los errores inherentemente. La mayoría de las veces, su código se ejecutará en condiciones comunes de todos modos, independientemente de si establece o no los valores predeterminados. Los casos de borde no manejados son cosas que usted querrá asegurarse de evitar independientemente (presumiblemente a través de pruebas adecuadas y adecuadas), cuando se cambian los valores predeterminados o sucede un escenario poco común.

También, el manejo de excepciones "catch-all" es posiblemente una falla de diseño en lugar de cualquier cosa que pueda llamarse "default".

    
respondido por el Rei Miyasaka 31.03.2011 - 14:02
3

Los valores predeterminados deben usarse cuando evitan que el usuario o desarrollador realice tareas repetitivas. Nunca deben usarse para enmascarar errores o excepciones. No es una mala práctica usarlos para evitar errores, pero solo en la medida en que la prevención no oculte algo malo. Los valores predeterminados son una herramienta como todo lo demás. Si se usan correctamente, pueden ahorrarle mucho dolor de cabeza y tiempo. Utilizados incorrectamente pueden derribar toda la casa.

    
respondido por el Joel Etherton 31.03.2011 - 13:42
2

La causa raíz de los problemas que cita no son los valores predeterminados per se, sino los problemas de integración debidos a los contratos de interfaz cambiantes, malentendidos de interpretación y / o suposiciones no válidas. Básicamente, todos estos (ejemplos específicos) parecen ser el resultado de comunicación incorrecta , entre el cliente y el desarrollador, o entre diferentes desarrolladores / equipos. Justo lo suficiente, estos problemas pueden manifestarse como valores predeterminados no válidos, pero también en muchas otras formas.

Maneje la causa raíz, no el síntoma.

Y tenga en cuenta también que, como otros lo han señalado con excelentes ejemplos, los valores predeterminados, cuando se usan de manera inteligente, pueden hacer que la vida de los usuarios sea mucho más fácil. Y ese es nuestro objetivo, ¿no?

    
respondido por el Péter Török 31.03.2011 - 13:57

Lea otras preguntas en las etiquetas