의도된 탐지는 코드 동작에는 문제가 없지만, 분석 도구가 규칙의 보수적 해석에 따라 잠재적 위험이 있을 수 있다고 판단하여 의도적으로 탐지한 경우를 의미합니다.
의도된 탐지는 오탐과 차이가 있습니다.
| 구분 | 오탐(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;
}아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.