데드 코드 분석
Axivion 정적 코드 분석을 통해 도달 불가능한 코드를 검출하는 방법
Axivion 정적 코드 분석은 다음 유형의 분석을 기반으로 실행되지 않는 코드를 감지합니다.
Axivion 정적 코드 분석은 분석된 소프트웨어의 호출 관계에서 도달성 분석(절차간 제어 흐름 등)을 통해 데드 함수를 찾습니다. 시스템의 프로그램 입력 포인트(예: 메인, 인터럽트 핸들러 또는 콜백)에서 이러한 기능으로 연결이 되지 않기 때문에 이 기능은 호출이 되지 않아 실행되지 않습니다.
심층적인 프로그램 분석을 통해 정적으로 접근할 수 없고 프로그램 논리상 접근할 수 없는 개별 기능 내의 코드 영역도 발견할 수 있습니다(도달할 수 없는 문장, 데드 코드, 중복 캐치 블록). MISRA 규칙 등의 해당 코딩 가이드라인에서 이 분석을 사용합니다. 간단한 예로는 반품 명세서 다음에 오는 코드가 있습니다. 또 다른 예는 관련 조건에서 발생하는 변수 값으로 인해 트래버싱할 수 없는 다른 브랜치입니다. 무한 루프도 감지할 수 있습니다.
데드 코드 방지
실행되지 않는 코드도 주의해야 합니다. 데드 코드는 이해성, 테스트성 및 유지보수성을 복잡하게 만듭니다. 따라서 개발 과정에서 코드 변경으로 인해 '죽는' 영역에 특히 주의를 기울여야 합니다. 스스로 자문해 보세요.
- 데드 코드는 의도적으로 발생한 것인가요? 그리고 데드 코드 라인을 완전히 제거할 수 있나요?
- 나중에 필요한 코드인가요?
- 스프린트 또는 개발 주기가 끝나는 마지막까지 유지되어야 하는 코드인가요?
그렇다면 Axivion 정적 코드 분석의 델타 분석이 필요합니다. 델타 분석의 직접 피드백을 통해 예방적 버그 수정 및 낮은 임계값의 리팩토링을 정확하게 안내할 수 있습니다.
라이브러리를 구축 중인가요? 인터럽트를 사용하세요?
데드 코드 분석에서 통상적인 난제는 라이브러리, 프레임워크 또는 전체 제품군을 개발하는 개발자와 관련이 있습니다. 이 경우, 단일 어플리케이션만을 분석할 수는 없습니다. 그보다는 전체 어플리케이션 세트를 적절한 분석 설정으로 모두 분석해야 합니다. 데드 코드에 대한 질문의 컨텍스트에 따라 다양한 구성 옵션을 통해 '활성' 부분을 지정할 수 있습니다. 예를 들어, API는 분석에서 '활성'으로 간주하도록 표시할 수 있습니다.
운영 시스템의 호출 메커니즘을 구성함으로써 일반 사용 사례를 시뮬레이션하여 그에 따라서 분석 중 인터페이스를 고려합니다.
구성 옵션은 또한 인터럽트 서비스 루틴 및 인터럽트 핸들러를 처리하는 데도 유용합니다. 인터럽트 처리를 위한 해당 기능은 프로그램 코드 수준에서 이미 활성으로 표시할 수 있습니다(키워드 인터럽트, 속성 사용).
방어적 프로그래밍을 하세요?
방어적 프로그래밍 패러다임은 견고한 소프트웨어 개발에 큰 도움이 되지만, 정적 분석의 관점에서 보면 데드 코드 및 도달할 수 없는 코드를 생성하는 경우가 많습니다. 데드 코드는 프로그래밍 오류를 일으키는 경우가 많으므로 일반적인 안전 표준에서 금지합니다. 하지만 데드 코드 부분을 의도적으로 유지하는 것이 좋습니다. 따라서 Axivion Suite에서 유연한 구성 도구를 사용하여 워크플로에서 '의도적으로' 데드 코드를 적절하게 표시하고 위반 관리 시에 고려할 수 있습니다.