El Crecimiento de la fiabilidad del Software: Software Reliability Growth Models

29.08.2021

¿Pueden los fallos del Software asimilarse a modelos probabilísticos?

Esta pregunta siempre es una buena discusión técnica entre ingenieros, matemáticos y amantes de la filosofía. Si el software es determinista intrínsecamente, ¿por qué lo podemos modelar de manera probabilística? ¿nos es útil? ¿en qué situaciones o proyectos nos es conveniente?

En este artículo ponemos todas las bases más actuales por las cuales, en ciertos ámbitos y proyectos, sí podemos y nos es útil modelar y hablar de tasa de fallo/falla del software o modelos probabilísticos para predecir la fiabilidad del software.


Los modelos de crecimiento de fiabilidad del software o SRGMs (en inglés) más utilizados son los Modelos exponenciales basados en Procesos No homogéneos de Poisson (NHPP)

Introducción:

En la actualidad está ampliamente aceptado que el software no trivial puede modelarse con modelos probabilísticos. Las 3 principales categorías definidas por la normativa IEEE Standard 1633 (IEEE Recommended Practice on Software Reliability, 2008) son las siguientes:

  • Modelos exponenciales basados en Procesos No homogéneos de Poisson (NHPP);
  • Modelos no-exponenciales de Procesos No homogéneos de Poisson (NHPP);
  • Modelos Bayesianos

Las principales conclusiones y bases técnico-filosóficas para modelar de manera probabilística el software en la actualidad son:

  • El software falla;
  • La ocurrencia de los fallos del software puede tratarse de manera probabilística;
  • Es útil utilizar tasas de fallo del software para, por ejemplo, calcular tiempos adecuados de validación hasta el lanzamiento, ver figura siguiente;
  • Las tasas y probabilidades de falla del software se pueden incluir en los modelos de confiabilidad o fiabilidad de los sistemas digitales.

De todas formas, está ampliamente aceptado que la falla del software es básicamente un proceso determinístico. Sin embargo, debido a nuestros conocimientos incompletos, no somos capaces de dar cuenta ni cuantificar completamente todas las variables que definen el proceso de falla de un software complejo. Por lo tanto, usamos modelos probabilísticos para describirlo y caracterizarlo.

Esta base filosófica es esencialmente la misma que se puede utilizar para muchos otros procesos probabilísticos como, por ejemplo, fallos del hardware o lanzar una moneda. En el lanzamiento de una moneda, si uno puede controlar todos los aspectos del lanzamiento (posición, velocidad y fuerza inicial, etc) y repetirlos cada vez, el resultado siempre será el mismo [Diaconis 2007]. Sin embargo, dicho control debe ser tan preciso y detallado que es prácticamente imposible repetir el lanzamiento de manera idéntica fuera de un entorno de laboratorio; por lo tanto, el resultado es incierto y puede modelarse como una variable aleatoria.

El software puede fallar porque el software proporciona un servicio y es posible que el servicio no se entregue, que se entregue incorrectamente o que el software realice una acción no deseada y no prevista.

La ocurrencia de fallas de software es una función de dos factores principales que se desconocen: 

(1) el número y distribución de fallos en el software, y 

(2) la ocurrencia de estados de entrada que desencadenan los fallos, es decir, los eventos desencadenantes. 

En general, el modelado de fallas del software implica modelar estos dos factores.

Las fallas se introducen en el software durante el ciclo de vida del software. El número de fallos en el software es una función de la calidad de las actividades del ciclo de vida del software. Por ejemplo, las especificaciones de requisitos incorrectos pueden introducir fallas en el software. Las pruebas pueden identificar algunas fallas de modo que puedan eliminarse, lo que reducirá el número de fallas y la probabilidad de fallas del software asociadas. De manera similar, los errores en la revisión del software pueden introducir fallas adicionales y aumentar la probabilidad de fallas del software. No es posible identificar y eliminar todos los fallos de un software no trivial. Por lo tanto, los fallos residuales siempre existen en el software. 


¿Puede determinarse una tasa de fallos para el software? 

Actualmente los modelos más extendidos para la predicción de la fiabilidad del software necesitan tener un input de partida con la tasa de fallos actual en el momento del testing. A partir de ese input y adaptando el modelo, los ingenieros de fiabilidad pueden realizar al cálculo de predicción de la fiabilidad futura del software o de igual modo se puede calcular la tasa de fallos futura. De esta manera, en desarrollos de software no triviales, el equipo de desarrollo puede determinar aproximadamente en qué momento se llegará a una tasa de fallos lo suficientemente pequeña para ser aceptable y poder lanzar el producto software al mercado o al cliente final.

En general en todos los modelos más extendidos de cálculo de fiabilidad del software se asume que al encontrar un fallo durante las fases de diseño, desarrollo, verificación o validación dicho fallo se soluciona sin insertar fallos nuevos en el sistema. De este modo la tasa de fallos siempre disminuye con el tiempo (a diferencia de la tasa de fallos en el hardware, que sufre desgaste) y por tanto la fiabilidad siempre aumenta. De ahí que habitualmente se denomine a estos modelos o análisis Crecimiento de la Confiabilidad/Fiabilidad del Software (SOFTWARE RELIABILITY GROWTH MODELS



SOFTWARE FAILURE RATE


Modelos de Crecimiento de la Fiabilidad del Software o SOFTWARE RELIABILITY GROWTH MODELS (SRGMs) en inglés

Modelos NHPP exponenciales

Los SRGMs asumen que la tasa de fallos disminuye exponencialmente con el tiempo. La disminución de la tasa de fallos con respecto al tiempo se asimila al declive de isotopos radioactivos, esto es la ratio con el que disminuyen los isotopos radioactivos es proporcional al inventario/stock inicial de isotopos, el cual decrece exponencialmente con el tiempo.

La mayoría de los modelos NHPP exponenciales asumen que en el momento que se encuentra un fallo del software se arregla perfectamente, por tanto, la tasa de fallos disminuye. Algunos modelos, como el modelo de Musa, introducen un factor de eficacia con respecto al arreglo de los fallos que tiene en cuenta que el proceso no es perfecto.

Modelos NHPP no-exponenciales

Los modelos de crecimiento de fiabilidad no exponenciales asumen que el decrecimiento de la tasa de fallos no sigue una función exponencial. Por ejemplo, el modelado aproxima que dicho decrecimiento sigue una función de densidad probabilística similar a la Gamma o a la distribución de Weibull.

Modelos Bayesianos

Los SRGMs Bayesianos (desarrollados por Littlewood y Verral en 1974) a diferencia de los NHPP asume que la tasa de fallos decrece estocásticamente con el tiempo y usa el teorema de de Bayes y sus derivadas.

En el fondo el modelo Bayesiano es un modelo exponencial que explícitamente incorpora la incertidumbre de la tasa de fallos en el propio modelo. 


Principales usos prácticos de los SRGMs (Software Reliability Growth Models)

Las aplicaciones prácticas de los modelos de crecimiento de la fiabilidad son principalmente para determinar/predecir la calidad y la fiabilidad del software y por tanto cuando liberarlo al mercado.

En software complejo los tiempos de testing se pueden alargar y pueden ser muy caros. Al poder predecir mejor en qué momento se está preparada para el lanzamiento del software la gestión de proyecto se facilita, así como las expectativas y gestión de recursos. 


En Leedeo Engineering, somos especialistas en el desarrollo de proyectos de RAMS, dando soporte a cualquier nivel requerido a las tareas RAM y de Safety, y tanto a nivel de infraestructura o equipamiento embarcado.


¿Te interesan nuestros artículos sobre Ingeniería RAMS y Tecnología?

Suscríbete en nuestra newsletter y te mantendremos informado de la publicación de nuevos artículos.