Competencia Robustez vs Corrección [cerrado]

17

Leyendo "Código Completo 2" en un párrafo de Calidad de Requisitos encontré esto:

¿Se especifican compensaciones aceptables entre atributos competitivos, por ejemplo, entre robustez y corrección?

(lo anterior es un punto de una gran lista de casillas de verificación para verificar la calidad de los requisitos)

Entonces, encontré muchas definiciones de Robustez y Corrección, en la web, libros académicos, etc.

p.ej :

En el libro "Construcción de software orientado a objetos, 2ª edición, Bertrand Meyer, Prentice-Hall, 1997":

  • Corrección: El grado en que un sistema está libre de [defectos] en su especificación, diseño e implementación.
  • Robustez: El grado en que un sistema continúa funcionando en presencia de entradas inválidas o condiciones ambientales estresantes.

A pesar de esto, no está claro por qué y en qué situaciones estos dos podrían estar en conflicto.

Mi pregunta es: ¿por qué estos dos atributos están en competencia ?

vencedor
fuente
11
Diferentes libros dan diferentes definiciones a estos términos. (Por lo general, los libros escritos para programadores comunes no usan las mismas definiciones que las publicaciones académicas). Quizás pueda ver cómo los define este libro, si es que lo hace. (A veces estos términos son utilizados por libros sin ninguna definición.)
rwong
No conozco ninguna definición de "robusto" que no sea "maneja con gracia todo tipo de entradas inesperadas" (además de las entradas funcionalmente requeridas).
Kaz
He editado mi pregunta tratando de ser lo más clara posible para que pueda volver a abrirse.
vencedor el

Respuestas:

36

Hay muchas situaciones en las que estos dos podrían estar en conflicto. Por ejemplo, la robustez puede implicar resistencia bajo una carga pesada. Si una respuesta aproximada (es decir, incorrecta) a una solicitud se puede calcular mucho más rápido que una respuesta exacta (correcta), es importante saber si el sistema debe entregar un resultado aproximado o si no puede entregarse por completo.

Kilian Foth
fuente
17

Estos dos son solo ejemplos como usted dijo. De hecho, todos los requisitos no funcionales de ese tipo pueden potencialmente entrar en conflicto entre sí. En el libro "Construyendo arquitecturas evolutivas" hay una tabla de aproximadamente un centenar de estas "-ilidades" (como también se las llama a menudo).

Es una especie de ejercicio para los arquitectos de software considerar el posible conflicto entre dos de estos. Básicamente, puede decidir cuáles de estos son importantes para sus proyectos y luego realizar un seguimiento de estos conflictos.

Para volver a su ejemplo preciso y echar un vistazo a la definición del término robustnessen Wikipedia:

En informática, la robustez es la capacidad de un sistema informático para hacer frente a errores durante la ejecución [1] [2] y hacer frente a entradas erróneas.

Como puede ver en la definición, la robustez implica errores . Por otro lado, desea tener la corrección, lo que básicamente significa la ausencia de errores.

Para hacer más aparente el conflicto, consideremos un campo de entrada simple. Desde el requisito de corrección, es más fácil rechazar cualquier entrada errónea realizada por el usuario. Pero la robustez requiere que pueda trabajar con esta entrada, lo que puede no ser del todo correcto.

Para llevarlo todo a su libro: ¿cuál es la compensación aceptable ahora? Supongamos que escribe una aplicación científica en la que el usuario puede ingresar una cantidad de voltaje, incluida la magnitud. Entonces las entradas correctas serían algo así como "10 kV" o "200 mV". Las compensaciones aceptables pueden incluir entradas permitidas como "10kV", "10kVolt", o incluso solo "10" y, en aras de la corrección, asigne estas a un valor de voltaje válido. Tenga en cuenta que esto sigue siendo una compensación y no una cosa de "lo mejor de ambos mundos". Considere mayúsculas y minúsculas: "10 kV" y "10 KV" pueden estar bien, pero "10 mV" y "10 MV" pueden no estarlo. La corrección se vuelve cuestionable ya que no estás seguro si es mili o mega ahora,

Franco
fuente
5

Un ejemplo práctico es XHTML vs. HTML .

  • Los navegadores (en modo estricto) rechazan XHTML que tiene errores de sintaxis. Esto garantiza que no se muestren resultados incorrectos al usuario y ayuda a encontrar los errores.
  • Los navegadores intentan seguir analizando el código HTML incluso si tiene problemas muy obvios. Esto a menudo permite al usuario ver la página, incluso si el contenido está maltratado un poco.

Por lo tanto, XHTML apunta a la corrección, mientras que HTML apunta a la robustez. Actualmente HTML parece más popular, pero ambas partes tienen buenos argumentos.

jpa
fuente