Ide ini sama dengan metode "Self_Test" dalam konteks desain berbasis objek atau berorientasi objek. Jika menggunakan bahasa berbasis objek yang dikompilasi seperti Ada, semua kode swa-uji akan ditandai oleh kompiler sebagai tidak digunakan (tidak pernah dipanggil) selama kompilasi produksi, dan oleh karena itu semua akan dioptimalkan jauh - tidak ada yang akan muncul di dapat dieksekusi.
Menggunakan metode "Self_Test" adalah ide yang sangat bagus, dan jika programmer benar-benar peduli dengan kualitas, mereka semua akan melakukannya. Namun, satu masalah penting adalah bahwa metode "Self_Test" perlu memiliki disiplin yang kuat, karena metode ini tidak dapat mengakses detail implementasi apa pun dan harus mengandalkan hanya pada semua metode lain yang dipublikasikan dalam spesifikasi objek. Jelas, jika tes mandiri gagal, implementasinya perlu diubah. Tes mandiri harus secara ketat menguji semua properti yang dipublikasikan dari metode objek, tetapi tidak pernah mengandalkan cara apa pun pada detail implementasi apa pun yang spesifik.
Bahasa berbasis objek dan berorientasi objek sering menyediakan jenis disiplin yang tepat sehubungan dengan metode eksternal untuk objek yang diuji (mereka menegakkan spesifikasi objek, mencegah akses ke detail implementasi dan meningkatkan kesalahan kompilasi jika upaya tersebut terdeteksi ). Tetapi metode internal objek itu sendiri semua diberikan akses lengkap ke setiap detail implementasi. Jadi metode uji diri berada dalam situasi yang unik: perlu metode internal karena sifatnya (uji diri jelas merupakan metode objek yang diuji), namun perlu menerima semua disiplin kompilator dari metode eksternal ( itu harus independen dari rincian implementasi objek). Sedikit jika ada bahasa pemrograman memberikan kemampuan untuk mendisiplinkan objek ' Metode internal seolah-olah itu adalah metode eksternal. Jadi ini adalah masalah desain bahasa pemrograman yang penting.
Dengan tidak adanya dukungan bahasa pemrograman yang tepat, cara terbaik untuk melakukannya adalah dengan membuat objek pendamping. Dengan kata lain, untuk setiap objek yang Anda kode (sebut saja "Big_Object"), Anda juga membuat objek pendamping kedua yang namanya terdiri dari akhiran standar yang disatukan dengan nama objek "nyata" (dalam hal ini, "Big_Object_Self_Test" "), dan yang spesifikasinya terdiri dari metode tunggal (" Big_Object_Self_Test.Self_Test (This_Big_Object: Big_Object) mengembalikan Boolean; "). Objek pendamping kemudian akan tergantung pada spesifikasi objek utama, dan kompiler akan sepenuhnya menegakkan semua disiplin spesifikasi itu terhadap implementasi objek pendamping.