Esta idea simplemente equivale a un método "Self_Test" dentro del contexto de un diseño orientado a objetos o basado en objetos. Si utiliza un lenguaje compilado basado en objetos como Ada, el compilador marcará todo el código de autocomprobación como no utilizado (nunca invocado) durante la compilación de producción y, por lo tanto, todo se optimizará, ninguno aparecerá en el ejecutable resultante.
Usar un método "Self_Test" es una muy buena idea, y si los programadores estuvieran realmente preocupados por la calidad, todos lo estarían haciendo. Sin embargo, una cuestión importante es que el método "Self_Test" debe tener una disciplina intensa, ya que no puede acceder a ninguno de los detalles de implementación y en su lugar debe confiar únicamente en todos los demás métodos publicados dentro de la especificación del objeto. Obviamente, si la autocomprobación falla, la implementación deberá cambiar. La autocomprobación debe probar rigurosamente todas las propiedades publicadas de los métodos del objeto, pero nunca depender de ningún modo de ningún detalle de una implementación específica.
Los lenguajes basados en objetos y orientados a objetos con frecuencia proporcionan exactamente ese tipo de disciplina con respecto a los métodos externos al objeto probado (hacen cumplir la especificación del objeto, impiden el acceso a los detalles de su implementación y generan un error de compilación si se detecta cualquier intento de este tipo). ) Pero todos los métodos internos del objeto tienen acceso completo a cada detalle de implementación. Por lo tanto, el método de autocomprobación se encuentra en una situación única: debe ser un método interno debido a su naturaleza (la autocomprobación es obviamente un método del objeto que se está probando), pero necesita recibir toda la disciplina del compilador de un método externo ( tiene que ser independiente de los detalles de implementación del objeto). Pocos lenguajes de programación ofrecen la capacidad de disciplinar un objeto ' s método interno como si fuera un método externo. Así que este es un problema importante de diseño del lenguaje de programación
En ausencia de un soporte de lenguaje de programación adecuado, la mejor manera de hacerlo es crear un objeto complementario. En otras palabras, para cada objeto que codifique (llamémoslo "Big_Object"), también crea un segundo objeto complementario cuyo nombre consiste en un sufijo estándar concatenado con el nombre del objeto "real" (en este caso, "Big_Object_Self_Test "), y cuya especificación consiste en un único método (" Big_Object_Self_Test.Self_Test (This_Big_Object: Big_Object) return Boolean; "). El objeto complementario dependerá entonces de la especificación del objeto principal, y el compilador aplicará completamente toda la disciplina de esa especificación contra la implementación del objeto complementario.