문제

당신은 어떤 도구를 사용하 찾을 사용하지 않는/죽은 코드에서 큰 자바 프로젝트?우리의 제품 개발되었습니다 몇 년 동안,그것은 매우 어렵게 수동으로 검출하는 코드가 더 이상 사용합니다.우리가 그러나를 삭제하려고 많이 사용되지 않는 코드로 가능하다.

제안에 대한 일반적인 전략/기술(이외에 특정 도구)에도 감사합니다.

편집: 참고로 우리는 이미 사용하는 코드 검사 도구(클로버,IntelliJ)지만,이 작은 도움이됩니다.죽은 코드는 여전히 단위 테스트,보여줍니다로 덮여 있습니다.내 생각에 이상적인 도구를 식별 클러스터의 코드는 아주 작은 다른 코드에 따라서 그것을 할 수 있도록,대한 docues 매뉴얼 검사입니다.

도움이 되었습니까?

해결책

실행중인 시스템에 코드 사용량을 유지 한 다음 몇 달 또는 몇 년 동안 사용되지 않는 코드 검사를 시작합니다.

예를 들어 미사용 클래스에 관심이있는 경우 인스턴스를 만들 때 모든 클래스를 로그로 계산할 수 있습니다. 그런 다음 작은 스크립트는 이러한 로그를 전체 클래스 목록과 비교하여 사용되지 않은 클래스를 찾을 수 있습니다.

물론, 방법 수준에 빠지면 성능을 명심해야합니다. 예를 들어, 메소드는 첫 번째 사용 만 기록 할 수 있습니다. 나는 이것이 Java에서 어떻게 가장 잘 이루어 졌는지 모른다. 우리는 이것을 역동적 인 언어 인 SmallTalk에서 수행 했으므로 런타임에 코드 수정을 허용합니다. 우리는 로깅 호출로 모든 메소드를 도구하고 메소드가 처음으로 기록 된 후 로깅 코드를 제거하므로 일정 시간이 지나면 더 이상 성능 페널티가 발생하지 않습니다. 어쩌면 정적 부울 깃발과 함께 Java에서 비슷한 일을 할 수 있습니다 ...

다른 팁

합리적으로 잘 작동하는 Eclipse 플러그인입니다 사용하지 않은 코드 감지기.

전체 프로젝트 또는 특정 파일을 처리하고 다양한 미사용/죽은 코드 방법을 보여줄뿐만 아니라 가시성 변경을 제안합니다 (즉, 보호 또는 개인).

코드로 최근 Eclipse Project와 함께 Google에서 출시되었습니다. 무료이며 매우 효과적입니다. 플러그인에는 '데드 코드를 찾으십시오'하나/많은 진입 점이있는 기능. 꽤 잘 작동합니다.

나는 놀랐다 대리자 여기서 언급되지 않았습니다. 주변에서 가장 성숙한 제품 중 하나입니다.

대리자 무료 Java 클래스 파일 Shrinker, Optimizer, Obfuscator 및 Pre Verifier입니다. 사용되지 않은 클래스, 필드, 방법 및 속성을 감지하고 제거합니다. 바이트 코드를 최적화하고 사용하지 않은 지침을 제거합니다. 짧은 무의미한 이름을 사용하여 나머지 클래스, 필드 및 메소드의 이름을 바꿉니다. 마지막으로 Java 6 또는 Java Micro Edition의 처리 된 코드를 선사시킵니다.

Proguard의 일부 사용은 다음과 같습니다.

  • 소규모 코드 아카이브, 네트워크 전체의 빠른 전송, 더 빠른로드 및 작은 메모리 발자국을위한보다 컴팩트 한 코드를 작성합니다.
  • 프로그램과 라이브러리를 리버스 엔지니어링하기가 더 어렵습니다.
  • 데드 코드를 나열하므로 소스 코드에서 제거 할 수 있습니다.
  • 더 빠른 클래스 로딩을 최대한 활용하기 위해 Java 6 이상의 기존 클래스 파일을 재사용하고 사전 검토합니다.

여기서 목록 데드 코드의 예 : https://www.guardquare.com/en/products/proguard/manual/examples#deadcode

일식에서 한 가지 일로 알려진 한 가지 일은 단일 수업에서 모든 방법을 개인으로 변경 한 다음 내가 어떤 불만을 얻는 지 확인하는 것입니다. 사용되는 방법의 경우 오류가 발생하고 가능한 가장 낮은 액세스 수준으로 반환합니다. 사용하지 않는 방법의 경우 사용하지 않은 방법에 대한 경고가 발생하면 삭제할 수 있습니다. 그리고 보너스로서, 당신은 종종 개인이 될 수 있고 개인을 만들 수있는 몇 가지 공개 방법을 찾습니다.

그러나 그것은 매우 매뉴얼입니다.

테스트 커버리지 도구를 사용하여 코드베이스를 계측 한 다음 테스트가 아닌 응용 프로그램 자체를 실행하십시오.

엠마 그리고 Eclemma 주어진 코드 실행에 대해 어떤 클래스가 실행되는지에 대한 좋은 보고서를 제공합니다.

우리는 사용하기 시작했습니다 버그를 찾으십시오 코드베이스의 대상이 풍부한 환경에서 리팩토링을위한 펑크를 식별하는 데 도움이됩니다. 나는 또한 고려할 것이다 구조 101 코드베이스 아키텍처에서 너무 복잡한 지점을 식별하려면 실제 늪이 어디에 있는지 알 수 있습니다.

이론적으로는 사용하지 않은 코드를 결정적으로 찾을 수 없습니다. 이것에 대한 수학적 증거가 있습니다 (글쎄, 이것은보다 일반적인 정리의 특별한 경우입니다). 궁금한 점이 있다면 정지 문제를 찾아보십시오.

이것은 여러 가지 방법으로 Java 코드로 나타날 수 있습니다.

  • 사용자 입력, 구성 파일, 데이터베이스 항목 등을 기반으로 클래스로드;
  • 외부 코드로드;
  • 객체 나무를 제 3 자 라이브러리로 전달합니다.
  • 등.

즉, 나는 Idea Intellij를 나의 선택의 IDE로 사용하며 모듈, 미사용 방법, 미사용 회원, 미사용 클래스 등의 원인 의존성을위한 광범위한 분석 도구를 가지고 있습니다. 태그는 사용되지 않지만 공개 방법은보다 광범위한 분석이 필요합니다.

Eclipse Goto Windows> 기본 설정> Java> 컴파일러> 오류/경고
그리고 그들 모두를 오류로 변경합니다. 모든 오류를 수정하십시오. 이것은 가장 간단한 방법입니다. 아름다움은 이것이 당신이 쓰는 동안 코드를 정리할 수 있다는 것입니다.

스크린 샷 이클립스 코드 :

enter image description here

Intellij에는 사용되지 않는 코드를 감지하기위한 코드 분석 도구가 있습니다. 당신은 가능한 많은 필드/방법/클래스를 가능한 한 비공개로 만들어야하며, 더 미사용 방법/필드/클래스가 나타날 것입니다.

또한 코드 볼륨을 줄이는 방법으로 중복 코드를 찾으려고 노력합니다.

마지막 제안은 사용하면 코드를 더 간단하게 만드는 오픈 소스 코드를 찾는 것입니다.

구조 101 슬라이스 관점 "고아"또는 "고아의 목록 (및 종속성 그래프)을 제공합니다. 여러 떼""기본 "클러스터와의 종속성이없는 클래스 또는 패키지.

DCD는 일부 IDE 용 플러그인이 아니지만 Ant 또는 독립형에서 실행할 수 있습니다. 정적 도구처럼 보입니다 PMD와 FindBugs가 할 수없는 일을 할 수 있습니다. 나는 그것을 시도 할 것이다.

추신 아래의 의견에서 언급했듯이 프로젝트는 지금 github.

코드를 프로파일하고 코드 커버리지 데이터를 제공하는 도구가 있습니다. 이것은 코드가 얼마나 많이 호출되는지 알 수 있습니다. 이러한 도구 중 하나를 얻을 수있어 고아 코드가 얼마나 많은지 알아낼 수 있습니다.

  • FindBugs는 이런 종류의 일에 탁월합니다.
  • PMD (Project Mess Detector)는 사용할 수있는 또 다른 도구입니다.

그러나 어느 쪽도 찾을 수 없습니다 공개 정적 방법 작업 공간에는 사용되지 않습니다. 누구든지 그러한 도구를 알고 있다면 알려주십시오.

Emma와 같은 사용자 적용 도구. 그러나 그것은 정적 도구가 아닙니다 (즉, 회귀 테스트와 가능한 모든 오류 사례를 통해 실제로 응용 프로그램을 실행해야합니다.

그럼에도 불구하고 엠마는 매우 유용합니다.

코드 검사 도구와 같은 마 Cobertura 며,클로버,을 계측하는 코드 및 기록의 어떤 부분이 그것을 가 호출되고 실행하여 제품군 시험이다.이것은 매우 유용하며,중요한 부분이되어야의 개발 과정이다.그것은 당신을 도울 것입니다 어떻게 당신의 테스트를 다룹니다.

그러나,이것은 동일하지 않을 식별로 실제 죽은 코드입니다.그것은 단지 식별 코드에는(또는 포함되지)에 의하여 테스트합니다.이 줄 수 있는 틀린 확실성(만약 당신의 테스트를 커버하지 않는 모든 시나리오)뿐만 아니라 틀린 네거티브(경우에 당신의 테스트에 액세스 코드를 실제로 적용되는 현실 세계에서 시나리오).

내가 상상하는 최고 방법을 정말 식별 코드는 것을 계측하는 코드 범위에서 도구를 실행하는 사용자 환경을 분석 코드 검사 기간 동안 시간입니다.

는 경우에 당신은 실행에 부하 균형 잡힌 중복된 환경(하지 않을 경우,왜?) 다음 난 것은 의미가 악기만 하나의 인스턴스의 응용 프로그램을 구성하는 부하를 분산 혹은 임의로,그러나,작은 부분의 사용자가에서 실행된 인스턴스입니다.이 경우 연장된 기간 동안(지 확인하는 것을 덮여 모두 실제 사용 시나리오 같은 계절 변화에 따라),당신은을 정확하게 볼 수 있는 코드의 영역에 액세스하에서 실제 사용하고있는 부분은 정말에 접속되지 않고,따라서 죽은 코드입니다.

난 개인적으로 이행하지 않는 방법을 알고 상기 도구를 사용할 수 있습을 계측하고 분석하는 코드고 있지 않은지를 통해 호출되는 테스트-그러나 나는 그들이 될 수 있습니다.

Java 프로젝트가 있습니다. 죽은 코드 탐지기 (DCD). 소스 코드의 경우 잘 작동하지 않지만 .jar 파일의 경우 정말 좋습니다. 또한 클래스와 방법별로 필터링 할 수 있습니다.

Netbeans 다음은 NetBeans 용 플러그인입니다 죽은 코드 탐지기.

사용하지 않은 코드를 연결하고 강조 할 수 있다면 더 나을 것입니다. 여기에 투표하고 의견을 제시 할 수 있습니다. 버그 181458- 사용하지 않은 공개 수업, 방법, 필드 찾기

이클립스는 도달 할 수없는 코드를 표시/강조 할 수 있습니다. Junit은 코드 적용 범위를 보여줄 수 있지만 일부 테스트가 필요하며 관련 테스트가 누락되었는지 또는 코드가 실제로 사용되지 않았는지 결정해야합니다.

Clover Coverage Tool이 사용되는 코드를 코딩하고 강조하는 Clover Coverage 도구를 찾았습니다. Google CodePro Analytics와 달리 웹 applications에서도 작동하며 경험에 따라 Google CodePro에 대해 잘못 될 수 있습니다).

내가 알아 차린 유일한 단점은 Java 인터페이스를 고려하지 않는다는 것입니다.

Doxygen을 사용하여 호출되지 않은 메소드를 찾기 위해 메소드 콜 맵을 개발합니다. 그래프에서 발신자가없는 메서드 클러스터 섬을 찾을 수 있습니다. 항상 메인 진입 점에서 시작해야하므로 라이브러리에는 작동하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top