근접 일치를 위해 두 개체를 비교하고 일부 신뢰 수준 [0,1]을 반환하는 정적 메서드가 있다고 가정 해 보겠습니다.메소드에서 선택적 디버그 정보를 반환하는 방법은 무엇입니까?
class Foo
{
...
static double Compare(const Foo& foo1, const Foo& foo2);
...
};
이제 구성의 설정에 따라 비교 세부 정보를 포함하는 추가 디버그 정보를 반환해야합니다. 이 디버그 정보는 프로덕션 환경에서는 사용되지 않지만 테스트/디버깅 목적으로 만 사용되므로 적절한 구현 방법이 무엇인지 궁금합니다.
1 : 추가 클래스 CompareResult 및 저장의 신뢰도 +이 옵션 정보를 생성
나는 적어도 세 가지 옵션을 참조하십시오. 필요한 경우 옵션 정보를 채우지 마십시오.
가장 깨끗한 것으로 보이지만 반환 결과를 선택적 정보와 결합해야하는지 잘 모르겠습니다.
2 : 출력 변수 (우리는 추가 클래스를 생성 할 필요가 없습니다 이런 식으로,하지만 조금 증가 할 우리의 메소드 서명)
static double Compare(const Foo& foo1, const Foo& foo2, CompareOptionalInfo* out_compare_info = nullptr);
3 : 옵션 - 정보 검색 방법과 별도의 비교 방법 .
static double Compare(const Foo& foo1, const Foo& foo2);
static CompareOptionalInfo GetCompareOptionalInfo();
이 옵션은 메서드 호출간에이 선택적 정보를 저장하고 정적 비교 메서드에서 인스턴스 비교 메서드로 전환해야 할 수 있습니다. 그러나 적절한지 아닌지 다시 한 번 확신합니다.
당신의 경험에 비추어 볼 때 OOP 세계에서 적절한 방법은 옵션 정보 (주로 디버그 모드에서만 사용됨)를 메서드에서 반환하는 것입니까?
디버거를 사용 하시겠습니까, 아니면 디버그 모드로만 추가 정보를 인쇄 하시겠습니까? gdb를 사용하고'call Foo :: compare (foo1, foo2)'와 같은 명령을 사용하려면 옵션 1의'compare_optional_info_ '를 물어볼 수 없습니다. – Franck
프로덕션 코드를 디버그 모드로 빌드하려고합니까? 테스트 또는 별도의 테스트 프로그램을 사용하고 있습니까? – Peter
이것은 의견을 바탕으로 한 질문이 될 것입니다 (주제가 아님). 필자는 일반적으로 유닛이 내 기능을 "블랙 박스"로 테스트하여 스펙을 따르고 실패 할 경우 (dbug 관점에서) 내부에서 일어나는 일만 돌보고 싶습니다. 거기에 무언가가 있다면 당신은 정말로 단위 테스트를하고 싶을 것입니다. 아마도 여러분은 테스트를 할 수있는 자신의 함수 (옵션 1 또는 2)에 넣을 수 있습니다. 테스트 세부 사항으로'API '를 손상시키는 대신 별도로 함수를 테스트 할 수 있습니다. 또 다른 가능성은 함수에서 조건 적으로 로깅 정보를 컴파일하는 것입니다. – Galik