Solidez (informática)

From Wikipedia, the free encyclopedia

En informática, la solidez (Robustness en inglés) es la capacidad de un sistema informático para hacer frente a errores durante la ejecución[1][2] y a entradas erróneas.[2] La solidez puede abarcar muchas áreas de la informática, como la programación sólida, el aprendizaje automático sólido y la red de seguridad sólida. Las técnicas formales, como las pruebas fuzz, son esenciales para demostrar la solidez, ya que este tipo de pruebas implican entradas no válidas o inesperadas. También se puede utilizar la inyección de fallos para probar la solidez. Varios productos comerciales realizan pruebas de solidez de análisis de software.[3]

En general, construir sistemas sólidos que abarquen todos los puntos de fallo posibles es difícil debido a la gran cantidad de entradas y combinaciones de entradas posibles.[4] Dado que probar todas las entradas y combinaciones de entradas requeriría demasiado tiempo, los desarrolladores no pueden analizar todos los casos de forma exhaustiva. En su lugar, el desarrollador intentará generalizar dichos casos.[5] Por ejemplo, imagine que introduce algunos valores enteros. Algunas entradas seleccionadas podrían consistir en un número negativo, un cero y un número positivo. Al utilizar estos números para probar el software de esta forma, el desarrollador generaliza el conjunto de todos los reales en tres números. Se trata de un método más eficaz y manejable, pero más propenso al fracaso. La generalización de los casos de prueba es un ejemplo de una técnica para hacer frente a los fallos, en concreto, los debidos a la introducción de datos no válidos por parte del usuario. Por lo general, los sistemas también pueden fallar por otros motivos, como la desconexión de la red.

En cualquier caso, los sistemas complejos deben gestionar con elegancia los errores que se produzcan. Hay muchos ejemplos de sistemas con éxito. Algunos de los sistemas más robustos son evolutivos y pueden adaptarse fácilmente a nuevas situaciones.[4]

Desafíos

Los programas y el software son herramientas centradas en una tarea muy específica, por lo que no son generalizados ni flexibles,[4] Sin embargo, las observaciones en sistemas como Internet o los sistemas biológicos demuestran la adaptación a sus entornos. Una de las formas en que los sistemas biológicos se adaptan al entorno es mediante el uso de la redundancia.[4] Muchos órganos son redundantes en los seres humanos. El riñón es un ejemplo. Por lo general, los seres humanos sólo necesitan un riñón, pero tener un segundo riñón permite prever posibles fallos. Este mismo principio puede aplicarse al software, pero existen algunas dificultades. Cuando se aplica el principio de redundancia a la informática, no se sugiere añadir código a ciegas. Añadir código a ciegas introduce más errores, hace el sistema más complejo y lo hace más difícil de entender.[6] El código que no aporta ningún refuerzo al ya existente no es deseable. Por el contrario, el nuevo código debe poseer una funcionalidad equivalente, de modo que si una función se rompe, otra que proporcione la misma función pueda sustituirla, mediante la diversidad manual o automatizada del software. Para ello, el nuevo código debe saber cómo y cuándo acomodarse al punto de fallo[4] lo que significa que hay que añadir más lógica al sistema. Pero a medida que un sistema añade más lógica, componentes y aumenta de tamaño, se vuelve más complejo. Por tanto, al hacer un sistema más redundante, el sistema también se vuelve más complejo y los desarrolladores deben considerar el equilibrio entre redundancia y complejidad. En la actualidad, las prácticas informáticas no se centran en la construcción de sistemas sólidos,[4] sino más bien en la escalabilidad y la eficiencia. Una de las principales razones por las que hoy en día no se presta atención a la solidez es porque es difícil de hacer de forma general.[4]

Ámbitos

Véase también

Referencias

Related Articles

Wikiwand AI