대규모 Java 프로젝트에서 사용하지 않거나 죽은 코드를 찾기 위해 어떤 도구를 사용합니까? 우리 제품은 몇 년 동안 개발되어 왔으며 더 이상 사용하지 않는 코드를 수동으로 감지하기가 매우 어려워지고 있습니다. 그러나 사용하지 않는 코드는 가능한 많이 삭제하려고합니다.
일반적인 전략 / 기술에 대한 제안 (특정 도구 제외)도 높이 평가됩니다.
편집 : 우리는 이미 코드 범위 도구 (Clover, IntelliJ)를 사용하고 있지만 도움이 거의 없습니다. 데드 코드에는 여전히 단위 테스트가 있으며 적용되는 것으로 표시됩니다. 이상적인 도구는 다른 코드가 거의없는 코드 클러스터를 식별하여 문서 검사를 수동으로 수행 할 수 있다고 생각합니다.
답변
실행중인 시스템을 계측하여 코드 사용 로그를 유지 한 다음 몇 달 또는 몇 년 동안 사용되지 않은 코드 검사를 시작합니다.
예를 들어, 사용하지 않는 클래스에 관심이있는 경우 인스턴스가 작성 될 때 모든 클래스가 로깅되도록 인스트루먼트 될 수 있습니다. 그런 다음 작은 스크립트가이 로그를 전체 클래스 목록과 비교하여 사용하지 않는 클래스를 찾을 수 있습니다.
물론, 방법 수준에 들어가면 성능을 염두에 두어야합니다. 예를 들어, 메소드는 첫 번째 사용 만 기록 할 수 있습니다. 이것이 Java에서 어떻게 가장 잘 수행되는지 모르겠습니다. 우리는 이것을 동적 언어 인 스몰 토크 (Smalltalk)에서 수행했으며, 따라서 런타임에 코드를 수정할 수 있습니다. 우리는 로깅 호출로 모든 메소드를 계측하고 메소드가 처음으로 기록 된 후 로깅 코드를 제거하므로 일정 시간이 지나면 더 이상 성능 불이익이 발생하지 않습니다. 정적 부울 플래그를 사용하여 Java에서 비슷한 작업을 수행 할 수 있습니다 …
답변
합리적으로 잘 작동하는 Eclipse 플러그인은 Unused Code Detector 입니다.
전체 프로젝트 또는 특정 파일을 처리하고 다양한 미사용 / 불량 코드 방법을 보여줄뿐만 아니라 가시성 변경을 제안합니다 (예 : 보호되거나 비공개 일 수있는 공용 방법).
답변
CodePro 는 최근 Eclipse 프로젝트와 함께 Google에서 출시했습니다. 무료이며 매우 효과적입니다. 플러그인에는 하나 / 많은 진입 점이 있는 ‘ Dead Code 찾기 ‘기능이 있습니다. 꽤 잘 작동합니다.
답변
나는 ProGuard 가 여기에 언급되지 않았다는 것에 놀랐 습니다. 가장 성숙한 제품 중 하나입니다.
ProGuard 는 무료 Java 클래스 파일 축소 기, 최적화 프로그램, 난독 화기 및 사전 검증기입니다. 사용하지 않는 클래스, 필드, 메소드 및 속성을 감지하고 제거합니다. 바이트 코드를 최적화하고 사용하지 않는 명령어를 제거합니다. 의미없는 짧은 이름을 사용하여 나머지 클래스, 필드 및 메서드의 이름을 바꿉니다. 마지막으로 Java 6 또는 Java Micro Edition의 처리 된 코드를 사전 검증합니다.
ProGuard의 일부 용도는 다음과 같습니다.
- 더 작은 코드 아카이브, 더 빠른 네트워크 전송, 더 빠른 로딩 및 더 작은 메모리 풋 프린트를위한 더 콤팩트 한 코드 작성.
- 프로그램과 라이브러리를 리버스 엔지니어링하기 어렵게 만듭니다.
- 죽은 코드를 나열하여 소스 코드에서 제거 할 수 있습니다.
- 빠른 클래스 로딩을 최대한 활용하기 위해 Java 6 이상의 기존 클래스 파일을 대상으로 지정하고 사전 검증합니다.
데드 코드 목록의 예는 다음과 같습니다. https://www.guardsquare.com/en/products/proguard/manual/examples#deadcode
답변
Eclipse에서 단일 클래스의 것으로 알려진 한 가지 방법은 모든 메소드를 개인용으로 변경 한 다음 어떤 불만이 있는지 확인하는 것입니다. 사용되는 메서드의 경우 오류가 발생하고 가능한 가장 낮은 액세스 수준으로 되돌립니다. 사용하지 않는 메소드의 경우, 사용되지 않은 메소드에 대한 경고가 발생하여 삭제 될 수 있습니다. 그리고 보너스로 종종 비공개로 만들 수있는 공개 방법을 찾을 수 있습니다.
그러나 그것은 매우 수동적입니다.
답변
테스트 적용 범위 도구를 사용하여 코드베이스를 계측 한 다음 테스트가 아닌 응용 프로그램 자체를 실행하십시오.
Emma 와 Eclemma 는 특정 코드 실행에 대해 어떤 클래스가 실행되는지에 대한 훌륭한 보고서를 제공합니다.
답변
코드베이스의 풍부한 리팩토링 환경에서 펑크를 식별하기 위해 버그 찾기 를 사용하기 시작했습니다 . 또한 코드 101 의 아키텍처에서 너무 복잡한 스팟을 식별하기 위해 Structure 101 을 고려 하여 실제 늪이 어디에 있는지 알 수 있습니다.