Ý tưởng này chỉ đơn giản là một phương pháp "Self_Test" trong bối cảnh thiết kế dựa trên đối tượng hoặc hướng đối tượng. Nếu sử dụng ngôn ngữ dựa trên đối tượng được biên dịch như Ada, tất cả mã tự kiểm tra sẽ được trình biên dịch đánh dấu là không sử dụng (không bao giờ được gọi) trong quá trình biên dịch sản xuất, và do đó tất cả sẽ được tối ưu hóa - không có mã nào xuất hiện trong kết quả thực thi.
Sử dụng phương pháp "Self_Test" là một ý tưởng cực kỳ tốt và nếu các lập trình viên thực sự quan tâm đến chất lượng thì tất cả họ sẽ thực hiện nó. Tuy nhiên, một vấn đề quan trọng là phương pháp "Self_Test" cần phải có kỷ luật nghiêm ngặt, trong đó nó không thể truy cập bất kỳ chi tiết triển khai nào và thay vào đó chỉ phải dựa vào tất cả các phương thức được công bố khác trong đặc tả của đối tượng. Rõ ràng, nếu tự kiểm tra thất bại, việc thực hiện sẽ cần phải thay đổi. Tự kiểm tra phải được kiểm tra nghiêm ngặt tất cả các thuộc tính được công bố của các phương thức của đối tượng, nhưng không bao giờ dựa vào bất kỳ cách nào dựa trên bất kỳ chi tiết nào của bất kỳ triển khai cụ thể nào.
Các ngôn ngữ dựa trên đối tượng và hướng đối tượng thường xuyên cung cấp chính xác loại kỷ luật đó đối với các phương thức bên ngoài đối tượng được kiểm tra (chúng thực thi đặc tả của đối tượng, ngăn chặn mọi truy cập vào chi tiết triển khai của nó và gây ra lỗi biên dịch nếu phát hiện bất kỳ nỗ lực nào như vậy ). Nhưng các phương thức bên trong của đối tượng đều được cấp quyền truy cập đầy đủ vào mọi chi tiết triển khai. Vì vậy, phương thức tự kiểm tra là trong một tình huống duy nhất: nó cần phải là một phương thức bên trong vì bản chất của nó (tự kiểm tra rõ ràng là một phương thức của đối tượng đang được kiểm tra), nhưng nó cần phải nhận tất cả các quy tắc biên dịch của một phương thức bên ngoài ( nó phải độc lập với các chi tiết thực hiện của đối tượng). Rất ít nếu có bất kỳ ngôn ngữ lập trình nào cung cấp khả năng kỷ luật một đối tượng ' Phương thức bên trong như thể nó là một phương thức bên ngoài. Vì vậy, đây là một vấn đề thiết kế ngôn ngữ lập trình quan trọng.
Trong trường hợp không có hỗ trợ ngôn ngữ lập trình phù hợp, cách tốt nhất để làm điều đó là tạo một đối tượng đồng hành. Nói cách khác, đối với mọi đối tượng bạn viết mã (hãy gọi nó là "Big_Object"), bạn cũng tạo một đối tượng đồng hành thứ hai có tên bao gồm một hậu tố chuẩn được nối với tên của đối tượng "thực" (trong trường hợp này là "Big_Object_Self_Test ") và có thông số kỹ thuật bao gồm một phương thức duy nhất (" Big_Object_Self_Test.Self_Test (This_Big_Object: Big_Object) return Boolean; "). Đối tượng đồng hành sau đó sẽ phụ thuộc vào đặc tả của đối tượng chính và trình biên dịch sẽ thực thi đầy đủ tất cả các quy tắc của đặc tả đó đối với việc triển khai của đối tượng đồng hành.