데드 코드
Dead codedead code라는 용어는 여러 가지 정의를 가지고 있다.어떤 사람들은 런타임에 절대 실행할 수 없는 코드(즉, 메모리의 명령)를 참조하기 위해 이 용어를 사용한다.[1][2][3]컴퓨터 프로그래밍의 일부 영역에서 dead code는 실행되지만 다른 계산에는 결코 사용되지 않는 프로그램의 소스 코드의 섹션이다.[4][5]데드 코드의 실행은 계산 시간과 메모리를 낭비한다.
비활성 연산 결과는 절대 사용되지 않을 수 있지만 예외를 발생시키거나 일부 글로벌 상태에 영향을 미칠 수 있으므로 이러한 코드를 제거하면 프로그램 출력이 변경되고 의도하지 않은 버그가 발생할 수 있다.컴파일러 최적화는 일반적으로 데드 코드 제거가 프로그램 출력에 영향을 줄 것인지에 대한 모호성이 있는 경우 데드 코드 제거에 대한 접근방식에서 보수적이다.프로그래머는 정적 및/또는 인라인 함수를 추가로 사용하고 링크 시간 최적화를 사용할 수 있도록 하여 컴파일러를 지원할 수 있다.
예
인트로 foo (인트로 iX, 인트로 IY) { 인트로 IZ = iX/IY; 돌아오다 iX*IY; } 위의 예에서는, 비록 의 분업화가 이루어지기는 했지만.iY에 의한 iX는 계산되어 사용되지 않으며, 0에 의한 분할이 발생할 경우 예외를 발생시킨다.따라서 데드코드를 제거하면 프로그램의 출력이 변경될 수 있다.
분석
데드 코드 제거는 프로그램에서 데드 코드를 제거하는 컴파일러 최적화의 한 형태다.데드 코드 분석은 정적 코드 분석과 데이터 흐름 분석의 한 형태인 실시간 변수 분석을 사용하여 수행할 수 있다.이는 대조적으로 제어 흐름 분석을 기반으로 한 접속 불가 코드 분석이다.
데드 코드 제거 기술은 도달할 수 없는 코드 제거 및 중복 코드 제거와 동일한 종류의 최적화에 있다.
대형 프로그래밍 프로젝트에서는 데드 코드를 인지하고 제거하는 것이 어려울 때가 있는데, 특히 전체 모듈이 데드 코드에 도달했을 때 더욱 그러하다.테스트 비계는 코드가 아직 살아있는 것처럼 보이게 할 수 있으며, 때때로 계약 언어는 코드가 더 이상 관련이 없는 경우에도 코드를 전달해야 할 수 있다.[6]
일부 IDE(Xcode, Visual Studio 2010[7] 및 Eclipse Galileo[8] 등)는 컴파일 단계에서 데드 코드를 찾을 수 있는 기능을 가지고 있다.
대부분의 최적화 기법이 구현에서 데드 코드를 제거하려고 하는 동안, 크기에 대한 극단적인 형태의 최적화는 때때로 다른 관련성이 없는 코드 부분을 함께 접을 수 있도록(그러므로 결합 크기를 줄임) 고의적으로 데드 코드를 도입하고 신중하게 형상화하는 것이 바람직할 수 있다.코드를 통한 첫 번째 실행 경로를 해치지 않지만, 코드의 다른 섹션이 데드코드가 될 수 있는 대체 실행 경로에 필요한 조치를 수행하기 위해 사용된다.보다 기능적인 수준에서는, 이것은 인위적으로 무해/유용한 부작용의 도입과 코드의 중복성의 감소 둘 다로 볼 수 있지만, 또한 opcode 레벨까지 사용되어, 코드의 연속적인 도입 없이는 코드 시퀀스를 접을 수 없는 짧은 명령의 사용을 허용할 수도 있다.데드 코드로 인한 측면 공격
참고 항목
참조
- ^ 훙웨이자이, 종속유형을 통한 데드코드 제거
- ^ [1] DO-178B
- ^ DO-178B 위키백과/DO-178B.
- ^ 데브레이, S. K, 에반스, W, 무스, R, 그리고 데 서터, B. 2000.코드 압축을 위한 컴파일러 기술.ACM Trans.프로그램.랭. 시스템 22, 2 (2000년 3월), 378-415.
- ^ 아펠, A. W. 1998년 자바 현대 컴파일러 구현케임브리지 대학 출판부.
- ^ Douglas W. Jones Dead Code Maintenance, Risks 8.19 (1989년 2월 1일) 웨이백머신에 2011-07-08 보관
- ^ 하빕 헤이데리안, 마이크로소프트
- ^ Eclipse 개발자 가이드
외부 링크
- DCD(Dead Code Detector)는 Java/J에서 사용되지 않는 코드를 찾기만 하면 됨EE 응용 프로그램
- 일부 Java Dead Code Detector의 비교
- Dead Java 코드를 찾기 위한 UCDetector Eclipse PlugIn