복붙노트

[RUBY-ON-RAILS] 레일 응용 프로그램에서 사용하지 않는 코드 찾기

RUBY-ON-RAILS

레일 응용 프로그램에서 사용하지 않는 코드 찾기

어떻게 코드가 생산에서 실행되지 않는 것을 찾을 수 있습니까?

응용 프로그램은 잘 테스트이지만, 사용되지 않는 코드를 테스트 테스트의 많은이있다. 테스트를 실행할 때 따라서 그들이 혜택을 얻을 ... 나는 내 시간을 낭비 유지, 리팩토링 좋아하고이 혼란을 정리 것입니다. 내가 나를 안내하는 생산 ENV를 하시려는 이유는 백그라운드 작업을 많이 가지고,이입니다. Heroku가에서 실행 나는 프로파일에서 어떤 성능의 영향을 보상하기 위해 동력계를 회전 할 수 있습니다.

관련 질문은 어떻게 루비 응용 프로그램에서 사용하지 않는 방법을 찾을 수 있습니까? 도움이되지 않습니다.

보너스 : 측정 코드의 라인이 실행되는 빈도를 표시합니다. 내가 원하지만 내가 할 이유를 알고하지 마십시오! :)

해결법

  1. ==============================

    1.정상적인 상황에서는 접근 방식은 코드 커버리지에 대한 테스트 데이터를 사용하는 것입니다,하지만 당신은 당신이 테스트 코드의 일부를 가지고 있지만 생산 응용 프로그램에 사용되지 않습니다 말한대로, 당신은 약간 다른 무언가를 할 수 있습니다.

    정상적인 상황에서는 접근 방식은 코드 커버리지에 대한 테스트 데이터를 사용하는 것입니다,하지만 당신은 당신이 테스트 코드의 일부를 가지고 있지만 생산 응용 프로그램에 사용되지 않습니다 말한대로, 당신은 약간 다른 무언가를 할 수 있습니다.

    그냥 명확성을 위해 첫째 : 마 자동 도구를 신뢰하지. 그들은 단지 당신이 아무것도 더 적극적으로 테스트 것들에 대한 결과를 보여줍니다.

    우리 뒤의 부인으로, 나는 당신이 당신의 생산 응용에 (루비 1.9에 대한 rcov 또는 simplecov 같이) 코드 검사 도구를 사용하여 실제로 사용자가 사용하는 코드 경로를 측정 제안한다. 이러한 도구는 원래 측정 테스트 커버리지를 위해 설계 동안, 당신은 또한 생산 범위를 위해 사용할 수

    시험 시간 프레임 동안 모든 관련 코드 경로가 방문하고 있다는 가정 하에서, 당신은 나머지를 제거 할 수 있습니다. 불행하게도,이 가정은 대부분의 아마 완벽하게 유지되지 않습니다. 당신은 여전히 ​​부분을 제거 할 때 응용 프로그램에 대한 지식과 그 내부 동작을 적용해야합니다 그래서. 사람들은 종종 직접 실행하지 만 시스템의 다른 부분을 구성하는 데 사용됩니다로 (모델 참조처럼) 선언적 부분을 제거 할 때이 더욱 중요하다.

    위의와 결합 될 수있는 또 다른 방법은 당신이에 설정 및 해제 할 수있는 뛰어난 기능으로 응용 프로그램을 리팩토링하는 것입니다. 그럼 당신은 아무도 불평하지 않는 경우 사용하지 않는 오프 체크를로 의심되는 기능을 설정할 수 있습니다 :

    그리고 마지막 참고로 : 당신은 당신의 전체 분석을 할 수있는 마법 도구를 찾을 수 없습니다. 어떤 도구는 코드의 특정 부분이 실제 사용자 여부에 의해 사용 여부를 알 수 있기 때문이다. 도구가 할 수있는 유일한 방법은 당신의 코드가 어떻게 든 특정 지점에서 호출되는 경우를 말하고, (다소) 정적 도달 성 그래프를 만들 수 있습니다. 정적 분석은이 상황을 레일에서 많이 사용되는 메타 프로그래밍 또는 동적 호출의 얼굴에 많은 통찰력을 가지고하지 않는 한 루비 같은 동적 언어로도이 달성 오히려 어렵다. 몇 가지 도구가 실제로 코드를 실행하거나 그래서 테스트 범위에서 통찰력을 얻을하려고합니다. 그러나 확실히 마법 주문이 없다.

    그래서 레일 응용 프로그램의 높은 내부 (대부분 숨겨져) 복잡성을 주어, 당신은 손으로 분석의 대부분을 주위받지 않습니다. 가장 좋은 조언은 아마 당신의 응용 프로그램을 모듈화하고 사용하지 않는 f를 시험에 특정 모듈을 해제하려고하는 것입니다. 이것은 적절한 통합 테스트에 의해 지원 될 수 있습니다.

  2. ==============================

    2.아마 당신은 사용하지 않는 방법과 클래스를 확인 rails_best_practices를 사용하려고 할 수 있습니다.

    아마 당신은 사용하지 않는 방법과 클래스를 확인 rails_best_practices를 사용하려고 할 수 있습니다.

    https://github.com/railsbp/rails_best_practices : 여기가 GitHub의에 있습니다.

    당신의 Gemfile에 '보석'rails_best_practices " '다음 실행 rails_best_practices을 넣습니다. 구성 파일을 생성하는

  3. ==============================

    3.coverband 보석 체크 아웃, 당신이 정확하게 당신이 찾고있는 무엇 무엇을하지 않습니다.

    coverband 보석 체크 아웃, 당신이 정확하게 당신이 찾고있는 무엇 무엇을하지 않습니다.

  4. ==============================

    4.저도 같은 문제를 겪고 난 내가 상자의 모든 정보를 사용할 수 밖에 가질 것을 깨달았다 몇 가지 대안을 모색 후 - 로그 파일을. 다음과 같이 우리의 로그 형식은

    저도 같은 문제를 겪고 난 내가 상자의 모든 정보를 사용할 수 밖에 가질 것을 깨달았다 몇 가지 대안을 모색 후 - 로그 파일을. 다음과 같이 우리의 로그 형식은

    Dec 18 03:10:41 ip-xx-xx-xx-xx appname-p[7776]:   Processing by MyController#show as HTML
    

    그래서 나는이 정보를 구문 분석하는 간단한 스크립트를 만들어

    zfgrep Processing production.log*.gz |awk '{print $8}' > ~/tmp/action
    
    sort  ~/tmp/action | uniq -c |sort -g -r > ~/tmp/histogram
    

    어떤 주어진 컨트롤러 # 액션 액세스 한 횟수의 결과를 생산했다.

    4394886 MyController#index
    3237203 MyController#show
    1644765 MyController#edit
    

    다음 단계는 응용 프로그램의 모든 컨트롤러 # 액션 쌍의 목록과 비교하는 것입니다 (레이크 경로 출력을 사용하거나 제품군을 테스트하기 위해 동일한 스크립트를 할 수 있습니다)

  5. ==============================

    5.나는 루비와 RoR에 매우 익숙하지 해요,하지만 난 어떤 미친 추측을 건의 할 것입니다 무엇을 :

    나는 루비와 RoR에 매우 익숙하지 해요,하지만 난 어떤 미친 추측을 건의 할 것입니다 무엇을 :

    추신. Alt + 넷빈즈에서 F7 또는 RubyMine와 아마 솔루션은 훨씬 더 :)

  6. ==============================

    6.이미 비공개로 의심스러운 방법을 (어쩌면 응용 프로그램을 중단 할 것을) 표시하는 생각이있어.

    이미 비공개로 의심스러운 방법을 (어쩌면 응용 프로그램을 중단 할 것을) 표시하는 생각이있어.

    내가 과거에했던 작은 변화 : 그것을 기록하기 위해 모든 의심스러운 방법에 작은 조각의 코드를 추가합니다. 내 경우는 사용자가 팝업 "- 당신이 정말로 IT에 문의하시기 바랍니다 필요하다면 당신은 사용되지 않는 기능이라고"이었다. 1 년 후에 우리가 정말 사용 된 것을 좋은 개요를 (그것이 비즈니스 애플리케이션이고 기능 만 년에 한 번이 필요한 경우)했다.

    귀하의 경우에만 사용을 기록해야합니다. 합리적인 기간 이후에 기록되지 않습니다 것을 다 사용되지 않습니다.

  7. ==============================

    7.개체 #의 method_missing을 무시합니다. 내부는 데이터 저장소에, 비동기 호출 클래스와 메소드를 기록합니다. 그런 다음 수동으로 method_missing에 전달되는 인수에 따라 적절한 인수를 사용하여 원래의 메소드를 호출합니다.

    개체 #의 method_missing을 무시합니다. 내부는 데이터 저장소에, 비동기 호출 클래스와 메소드를 기록합니다. 그런 다음 수동으로 method_missing에 전달되는 인수에 따라 적절한 인수를 사용하여 원래의 메소드를 호출합니다.

    그런 다음 응용 프로그램의 오브젝트 트리의 내용을 데이터 저장소의 데이터를 비교합니다.

    면책 조항 :이 반드시 상당한 성능 및 리소스 고려가 필요합니다. 또한, 작업에 그것을 얻기 위해 땜질 조금 걸릴 것입니다,하지만 이론적으로 작동합니다. 나는 그것을 구현하는 원래 포스터에 운동으로 떠날거야. ;)

  8. ==============================

    8.당신이 다음이를 사용하는 모든 사용자 journies를 기록하고 rcov 또는 비슷한에 그 테스트를 묶을 수 sahi 같은 것을 사용하여 테스트 스위트를 만드는 노력했다.

    당신이 다음이를 사용하는 모든 사용자 journies를 기록하고 rcov 또는 비슷한에 그 테스트를 묶을 수 sahi 같은 것을 사용하여 테스트 스위트를 만드는 노력했다.

    당신은 당신이 모든 사용자 journies을 가지고 있지만 당신이 밖으로 적어도 가래침을 rcov 것을 볼 수 있습니다 그 이후 분명히 적용되지 않습니다 물건을 치기 시작 보장해야합니까.

  9. ==============================

    9.이것은 매우 적극적인 접근 방식 아니지만, 자주 사용되지 않는 것으로 의심 뭔가 내가 지난 한 달 정도 생산 언제든지 호출했다 있는지 확인하기 위해 새로운 유물에서 수집 한 결과를 사용했습니다. 애플 리케이션 나는 아주 작은 생각되었습니다에서이를 사용하고, 대규모 응용 프로그램에 대한 상당히 비싼했습니다.

    이것은 매우 적극적인 접근 방식 아니지만, 자주 사용되지 않는 것으로 의심 뭔가 내가 지난 한 달 정도 생산 언제든지 호출했다 있는지 확인하기 위해 새로운 유물에서 수집 한 결과를 사용했습니다. 애플 리케이션 나는 아주 작은 생각되었습니다에서이를 사용하고, 대규모 응용 프로그램에 대한 상당히 비싼했습니다.

    내가 직접 사용한 적이 있지만, 레이저 보석에 대한이 게시물은 정확한 문제 해결에 대해 이야기하는 것 같다.

  10. ==============================

    10.그것은 완벽한 솔루션이 아니라 넷빈즈에서 예를 들어, 당신은 그 (누르거나 Alt + F7)에서 마우스 오른쪽 버튼을 클릭하여 방법의 용도를 찾을 수 있습니다. 방법은 사용하지 않는 경우 그래서, 당신은 그것을 볼 수 있습니다.

    그것은 완벽한 솔루션이 아니라 넷빈즈에서 예를 들어, 당신은 그 (누르거나 Alt + F7)에서 마우스 오른쪽 버튼을 클릭하여 방법의 용도를 찾을 수 있습니다. 방법은 사용하지 않는 경우 그래서, 당신은 그것을 볼 수 있습니다.

  11. ==============================

    11.비공개로 의심스러운 방법을 표시합니다. 그 코드를 중단하지 않는 경우 방법은 클래스 내부에서 사용하는 경우 확인합니다. 당신은 일을 삭제할 수 있습니다

    비공개로 의심스러운 방법을 표시합니다. 그 코드를 중단하지 않는 경우 방법은 클래스 내부에서 사용하는 경우 확인합니다. 당신은 일을 삭제할 수 있습니다

  12. from https://stackoverflow.com/questions/9735307/find-unused-code-in-a-rails-app by cc-by-sa and MIT license