Questa idea equivale semplicemente a un metodo "Self_Test" nel contesto di un progetto basato su oggetti o orientato agli oggetti. Se si utilizza un linguaggio basato su oggetti compilato come Ada, tutto il codice di auto-test verrà contrassegnato dal compilatore come non usato (mai invocato) durante la compilazione di produzione, e quindi sarà tutto ottimizzato - nessuno di questi apparirà nel risultante eseguibile.
L'utilizzo di un metodo "Self_Test" è un'ottima idea e, se i programmatori fossero davvero interessati alla qualità, lo farebbero tutti. Un problema importante, tuttavia, è che il metodo "Self_Test" deve avere una disciplina intensa, in quanto non può accedere a nessuno dei dettagli di implementazione e deve invece fare affidamento solo su tutti gli altri metodi pubblicati all'interno delle specifiche dell'oggetto. Ovviamente, se l'autotest fallisce, l'implementazione dovrà cambiare. L'autotest dovrebbe testare rigorosamente tutte le proprietà pubblicate dei metodi dell'oggetto, ma non fare mai affidamento in alcun modo sui dettagli di qualsiasi implementazione specifica.
I linguaggi object-based e object-oriented forniscono frequentemente quel tipo di disciplina rispetto ai metodi esterni all'oggetto testato (applicano la specifica dell'oggetto, impedendo qualsiasi accesso ai dettagli dell'implementazione e sollevando un errore di compilazione, se tale tentativo è rilevato). Ma tutti i metodi interni dell'oggetto hanno accesso completo a tutti i dettagli di implementazione. Quindi il metodo di autotest si trova in una situazione unica: deve essere un metodo interno a causa della sua natura (l'autotest è ovviamente un metodo dell'oggetto testato), ma deve ricevere tutta la disciplina del compilatore di un metodo esterno ( deve essere indipendente dai dettagli di implementazione dell'oggetto). Pochi, se qualche linguaggio di programmazione fornisce la capacità di disciplinare il metodo interno di un oggetto come se fosse un metodo esterno. Quindi questo è un importante problema di progettazione del linguaggio di programmazione.
In assenza di un adeguato supporto per il linguaggio di programmazione, il modo migliore per farlo è creare un oggetto associato. In altre parole, per ogni oggetto che codi (chiamiamolo "Big_Object"), crei anche un secondo oggetto companion il cui nome consiste in un suffisso standard concatenato con il nome dell'oggetto "reale" (in questo caso, "Big_Object_Self_Test "), e la cui specifica consiste in un singolo metodo (" Big_Object_Self_Test.Self_Test (This_Big_Object: Big_Object) return Boolean; "). L'oggetto associato dipenderà quindi dalla specifica dell'oggetto principale e il compilatore applicherà completamente tutta la disciplina di tale specifica rispetto all'implementazione dell'oggetto associato.