의도된 탐지란 무엇인가요?

수정일 화, 11 11월 시간: 11:02 AM

의도된 탐지는 코드 동작에는 문제가 없지만, 분석 도구가 규칙의 보수적 해석에 따라 잠재적 위험이 있을 수 있다고 판단하여 의도적으로 탐지한 경우를 의미합니다.


의도된 탐지는 오탐과 차이가 있습니다.


구분오탐(False Positive) 의도된 탐지(Intentional Detection)
의미도구가 잘못 탐지한 오류 (도구 오작동)도구는 올바르게 탐지했으나, 코드 동작상 문제 없음
도구 상태비정상 동작정상 동작 (의도적 탐지)
결과 처리도구 개선 필요예외 승인 또는 주석 처리 가능


참고 : 오탐(False Alarm)이란?


MISRA 2008 07_01_01(값이 변경되지 않는 변수는 const로 선언되어야 함) 예제

  • key는 생성 이후 **수정되지 않으므로 const std::string**으로 선언하는 것이 MISRA 2008 07_01_01 취지에 부합합니다.

  • 라이브러리 핸들 포인터를 읽기 전용으로만 사용할 범위에서는 const VendorSDK::Handle*로 보관하는 편이 안전합니다.

  • 도구는 “상용 라이브러리 호출이라 실제 동작엔 문제 없음”이어도, 규칙의 보수적 해석에 따라 잠재 위험을 예방하려고 경고(의도적 탐지)할 수 있습니다.

// (상용) 라이브러리 헤더 가정
namespace VendorSDK {
    struct Handle { /* ... */ };

    // 읽기 전용 API: 상태만 조회, 외부 인자 수정 없음
    int get_status(const Handle* h);
    int read_config(const Handle* h, const char* key, /*out*/ char* buf, int buflen);
}

#include <cstdio>
#include <string>

int main() {
    VendorSDK::Handle h{};
    std::string key = "mode";   // ← 이 변수는 아래에서 절대 수정되지 않음 (읽기 전용 사용)

    // key C-문자열 포인터만 전달되고, key 자체는 수정되지 않지만
    // key가 const로 선언되지 않아 Rule 7-1-1 위반 가능
    char buf[32] = {};
    int st = VendorSDK::get_status(&h);
    (void)st;

    // 라이브러리 인자: 읽기 전용 핸들 포인터 전달 OK.
    // 하지만 key 변수 자체가 non-const.
    VendorSDK::read_config(&h, key.c_str(), buf, sizeof buf);

    // 또한 읽기 전용으로만 쓰는 핸들 포인터를 지역 변수에 보관하면서 const 누락
    const VendorSDK::Handle* ph = &h; // ← 이건 준수 예시, 아래 줄은 비준수 예시용
    VendorSDK::Handle* ph_nonconst = &h; // ← 읽기 전용으로만 쓸 계획이라면 const가 바람직

    std::printf("cfg=%s\n", buf);
    return 0;
}

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.