Robustez (computación)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En informática, la robustez es la capacidad de un sistema informático para hacer frente a errores durante la ejecución y hacer frente a entradas erróneas. La robustez puede abarcar muchas áreas de la informática, como la programación robusta, el aprendizaje automático robusto y la red de seguridad robusta. Las técnicas formales, como las pruebas de fuzz, son esenciales para mostrar robustez, ya que este tipo de prueba implica entradas no válidas o inesperadas. Alternativamente, la inyección de fallas se puede usar para probar la robustez. Varios productos comerciales realizan pruebas de robustez de análisis de software.

Introducción

En general, construir sistemas robustos que abarquen cada punto de posible falla es difícil debido a la gran cantidad de posibles entradas y combinaciones de entradas. Dado que todas las entradas y combinaciones de entradas requerirían demasiado tiempo para probarlas, los desarrolladores no pueden ejecutar todos los casos de forma exhaustiva. En cambio, el desarrollador intentará generalizar tales casos.Por ejemplo, imagine ingresar algunos valores enteros. Algunas entradas seleccionadas pueden consistir en un número negativo, cero y un número positivo. Al usar estos números para probar el software de esta manera, el desarrollador generaliza el conjunto de todos los reales en tres números. Este es un método más eficiente y manejable, pero más propenso a fallar. La generalización de casos de prueba es un ejemplo de una sola técnica para lidiar con fallas, específicamente, fallas debido a una entrada de usuario no válida. En general, los sistemas también pueden fallar debido a otras razones, como desconectarse de una red.

Independientemente, los sistemas complejos aún deben manejar cualquier error encontrado con gracia. Hay muchos ejemplos de tales sistemas exitosos. Algunos de los sistemas más robustos son evolutivos y se pueden adaptar fácilmente a nuevas situaciones.

Desafíos

Los programas y el software son herramientas enfocadas en una tarea muy específica y, por lo tanto, no son generalizadas ni flexibles. 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 a los entornos es mediante el uso de la redundancia. Muchos órganos son redundantes en los humanos. El riñón es uno de esos ejemplos. Los humanos generalmente solo necesitan un riñón, pero tener un segundo riñón deja espacio para la falla. Este mismo principio puede aplicarse al software, pero existen algunos desafíos. Al aplicar el principio de redundancia a la informática, no se sugiere agregar código a ciegas. Agregar código a ciegas introduce más errores, hace que el sistema sea más complejo y lo hace más difícil de entender.El código que no proporciona ningún refuerzo al código ya existente no es deseado. En cambio, 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 puede reemplazarla, utilizando diversidad de software manual o automatizada. Para hacerlo, el nuevo código debe saber cómo y cuándo acomodar el punto de falla. Esto significa que se necesita agregar más lógica al sistema. Pero a medida que un sistema agrega más lógica, componentes y aumenta de tamaño, se vuelve más complejo. Por lo tanto, al hacer un sistema más redundante, el sistema también se vuelve más complejo y los desarrolladores deben considerar equilibrar la redundancia con la complejidad.

Actualmente, las prácticas de las ciencias de la computación no se enfocan en construir sistemas robustos. Más bien, tienden a centrarse 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 robustez es porque es difícil hacerlo de forma general.

Áreas

Programación robusta

La programación robusta es un estilo de programación que se enfoca en manejar terminaciones inesperadas y acciones inesperadas. Requiere código para manejar estas terminaciones y acciones correctamente al mostrar mensajes de error precisos e inequívocos. Estos mensajes de error permiten al usuario depurar el programa más fácilmente.

Principios

ParanoiaAl crear software, el programador asume que los usuarios quieren descifrar su código. El programador también asume que su propio código escrito puede fallar o funcionar incorrectamente.EstupidezEl programador asume que los usuarios intentarán entradas incorrectas, falsas y malformadas. Como consecuencia, el programador devuelve al usuario un mensaje de error inequívoco e intuitivo que no requiere buscar códigos de error. El mensaje de error debe tratar de ser lo más preciso posible sin confundir al usuario, de modo que el problema se pueda solucionar con facilidad.Implementos peligrososLos usuarios no deben obtener acceso a bibliotecas, estructuras de datos o punteros a estructuras de datos. Esta información debe ocultarse al usuario para que no la modifique accidentalmente e introduzca un error en el código. Cuando dichas interfaces se construyen correctamente, los usuarios las usan sin encontrar lagunas para modificar la interfaz. La interfaz ya debería estar correctamente implementada, por lo que el usuario no necesita realizar modificaciones. Por lo tanto, el usuario se centra únicamente en su propio código.no puede pasarMuy a menudo, el código se modifica y puede introducir la posibilidad de que ocurra un caso "imposible". Por lo tanto, se supone que los casos imposibles son altamente improbables. El desarrollador piensa en cómo manejar el caso que es muy improbable e implementa el manejo en consecuencia.

Aprendizaje automático robusto

El aprendizaje automático robusto generalmente se refiere a la solidez de los algoritmos de aprendizaje automático. Para que un algoritmo de aprendizaje automático se considere robusto, el error de prueba debe ser consistente con el error de entrenamiento o el rendimiento es estable después de agregar algo de ruido al conjunto de datos.

Diseño de red robusto

El diseño robusto de redes es el estudio del diseño de redes frente a demandas variables o inciertas. En cierto sentido, la solidez en el diseño de redes es amplia, al igual que la solidez en el diseño de software, debido a las amplias posibilidades de cambios o entradas.

Algoritmos robustos

Existen algoritmos que toleran errores en la entrada o durante el cómputo. En ese caso, el cálculo eventualmente converge a la salida correcta. Este fenómeno ha sido llamado "atracción de la corrección".

Contenido relacionado

Recursividad (computación)

En informática, la recursividad es un método para resolver un problema computacional donde la solución depende de soluciones a instancias más pequeñas...

Evaluación perezosa

En la teoría del lenguaje de programación, evaluación perezosa, o llamada por necesidad, es una estrategia de evaluación que retrasa la evaluación de una...

Red semántica

Una red semántica, o red de marcos, es una base de conocimiento que representa relaciones semánticas entre conceptos en una red. Esto se utiliza a menudo...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save