La testabilidad del software es el grado en el que un artefacto de software (es decir, un sistema de software, un módulo de software, un documento de requisitos o de diseño) admite la realización de pruebas en un contexto de prueba determinado. Si la testabilidad del artefacto de software es alta, será más fácil encontrar fallas en el sistema (si las tiene) mediante pruebas.
Formalmente, algunos sistemas son comprobables y otros no. Esta clasificación se puede lograr observando que, para que sea comprobable, para una funcionalidad del sistema bajo prueba "S", que toma la entrada "I", debe existir un predicado funcional computable "V" tal que sea verdadero cuando S, dada la entrada I, produzca una salida válida, falso en caso contrario. Esta función "V" se conoce como la función de verificación para el sistema con la entrada I.
Muchos sistemas de software no se pueden probar o no se pueden probar de inmediato. Por ejemplo, el ReCAPTCHA de Google , que no tiene metadatos sobre las imágenes, no es un sistema que se pueda probar. Sin embargo, el ReCAPTCHA se puede probar de inmediato si para cada imagen mostrada hay una etiqueta almacenada en otro lugar. Con esta metainformación, se puede probar el sistema.
Por lo tanto, la capacidad de prueba suele considerarse una propiedad extrínseca que resulta de la interdependencia entre el software que se va a probar y los objetivos de la prueba, los métodos de prueba utilizados y los recursos de prueba (es decir, el contexto de prueba). Aunque la capacidad de prueba no se puede medir directamente (como el tamaño del software), debe considerarse una propiedad intrínseca de un artefacto de software porque está altamente correlacionada con otras cualidades clave del software, como la encapsulación, el acoplamiento, la cohesión y la redundancia.
La correlación entre la "capacidad de prueba" y un buen diseño se puede observar al ver que el código que tiene una cohesión débil, un acoplamiento estrecho, redundancia y falta de encapsulación es difícil de probar. [1]
Un menor grado de capacidad de prueba implica un mayor esfuerzo de prueba . En casos extremos, la falta de capacidad de prueba puede impedir la prueba de partes del software o de los requisitos del software .
La capacidad de prueba, una propiedad que se aplica a las hipótesis empíricas, implica dos componentes. El esfuerzo y la eficacia de las pruebas de software dependen de numerosos factores, entre ellos:
La capacidad de prueba de los componentes de software (módulos, clases) está determinada por factores como:
La capacidad de prueba de los componentes de software se puede mejorar mediante:
Los requisitos deben cumplir los siguientes criterios para poder probarse:
Si se considera el requisito como axioma, la capacidad de prueba se puede tratar afirmando la existencia de una función (software) tal que la entrada genere la salida , por lo tanto . Por lo tanto, el software ideal genera la tupla que es el conjunto de entrada-salida , que representa la especificación.
Ahora, tomemos una entrada de prueba , que genera la salida , que es la tupla de prueba . Ahora, la pregunta es si o no . Si está en el conjunto, la tupla de prueba pasa, de lo contrario, el sistema falla la entrada de prueba. Por lo tanto, es de importancia imperativa averiguar: ¿podemos o no podemos crear una función que se traduzca efectivamente en la noción de la función indicadora de conjunto para el conjunto de especificación ?
Por la noción, es la función de comprobabilidad de la especificación . La existencia no debe simplemente afirmarse, debe probarse rigurosamente. Por lo tanto, obviamente sin consistencia algebraica, no se puede encontrar dicha función y, por lo tanto, la especificación deja de considerarse comprobable.