PHP 정적 분석 도구 요약

사진작가BenUnsplash감사합니다.👌
PHP 정적 분석을 실행하면 시간의 추이에 따라 코드의 질을 유지하는 데 도움이 될 것이다. 특히 많은 프로그래머들이 개발한 대형 프로젝트에서 더욱 어려워질 것이다.사람마다 서로 다른 코드 스타일과 문제를 처리하는 방식이 있다.시간이 지날수록 코드가 혼란스러워지고 유지보수가 불가능해질 수 있습니다.
정적 분석 도구는 개발자가 이 문제를 해결하는 데 도움을 줄 수 있다. 그들은 인코딩 표준을 실행하고 흔히 볼 수 있는 오류를 검출하며 코드 블록을 정리한다.
이 블로그 글은 PHP 정적 분석에 사용되는 일반적인 코드 표준과 도구를 이해하고 개발 과정에서 코드의 질과 유지보수성을 향상시키는 방법을 보여 드리겠습니다.
이것들은 모두 네가 오늘 무료로 사용할 수 있는 도구다.
PHP 개발에서 확인하십시오.

어떤 PHP 정적 분석 도구를 선택해야 합니까?

1: 코드 탐지기
Code Sniffer는 PHP 코드에서 엄격한 스타일 가이드를 실시하는 가장 유행하는 도구라고 할 수 있다.그것은 유행하는 인코딩 표준 PSR2, Zend, PEAR 등을 지원한다.현재 대부분의 사람들이 PSR 표준 시리즈를 사용하고 있습니다. FIG group 에서 만들어졌기 때문에, 사용할 표준을 찾고 있다면 PSR2는 좋은 선택입니다.코드 탐지기는 인코딩 표준을 만들 수 있습니다.대부분의 경우, 이것은 필요없지만, 만약 당신이 모험을 느낀다면, 당신은 볼 수 있습니다. documentation
다음은 코드 탐지기가 생성한 출력의 예이다
$ phpcs tests.php --report-full --standard=PSR2
FILE: tests.php
--------------------------------------------------------------------------
FOUND 7 ERRORS AND 2 WARNINGS AFFECTING 6 LINES
--------------------------------------------------------------------------
  2 | WARNING | [ ] Line exceeds 120 characters; contains 128 characters
  3 | WARNING | [ ] Line exceeds 120 characters; contains 139 characters
  8 | ERROR   | [ ] Each class must be in a namespace of at least one leve
  8 | ERROR   | [ ] Class name "foo_foo" is not in camel caps format
 16 | ERROR   | [ ] Method name "foo_foo::bar_bar" is not in camel caps
 23 | ERROR   | [ ] Each class must be in a file by itself
 23 | ERROR   | [ ] Each class must be in a namespace of at least one leve
 33 | ERROR   | [x] Expected 1 newline at end of file; 0 found
 33 | ERROR   | [x] A closing tag is not permitted at the end of a file
-------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-------------------------------------------------------------------------------
보시다시피 코드 탐지기는 검출된 코드 충돌에 대한 상세한 요약을 보여 줍니다.예 several output formats. 따라서 읽기 어려운 보고서를 원한다면 XML이나 CSV 데이터를 출력할 수 있습니다.최근에 그들은 개발자마다 가져온 오류의 백분율을 보여주는 오류 보고서를 출력할 수 있는 옵션을 도입했다.
코드 탐지기도 흔히 볼 수 있는 의미 오류를 방지할 수 있지만, 주요 중점은 코드 표준을 집행하는 것이다.의미 오류 검출을 더 잘 지원할 수 있는 다른 도구도 있지만, 인코딩 표준을 엄격히 준수하는 데 있어서 코드 탐지기와 비교할 수 있는 도구는 없다.

2:PHPMD
PHP Mess DetectorPHP Depend 기반의 다방면 정적 분석 PHP 도구입니다.PHPMD에서 감지되는 문제 유형은
  • 코드 크기 분석 코드가 복잡하고 프로젝트가 관리할 수 없을 때 경고합니다.최대 클래스 길이, 방법 길이, 코일 복잡도 등 한도값을 정의할 수 있습니다
  • 디자인 검측과 소프트웨어 디자인과 관련된 문제, 예를 들어 eval,goto,exit, 과도한 결합 등
  • Naming은 변수, 클래스 이름과 방법명이 적합한지 확인한다(너무 길지도 짧지도 않다).좋은 이름을 사용하는 것은 코드를 읽는 사람에게 매우 중요하기 때문에 이런 분석을 과소평가해서는 안 된다.
  • 쟁의가 있는 명명약정과 기타 최상의 실천에 관한 일부 규칙은 각 항목에 적용되지 않는다
  • UnusedDetects에서 정리해야 할 사용하지 않은 코드 블록
  • 다음은 PHPMD 출력의 예입니다.
    $ phpmd tests.php text ruleset
    tests.php:8 The class foo_foo is not named in CamelCase.
    tests.php:8 The property $my_property is not named in camelCase.
    tests.php:16    Avoid unused parameters such as '$arg1'.
    tests.php:16    Avoid unused parameters such as '$arg2'.
    tests.php:16    bar_bar accesses the super-global variable $_POST.
    tests.php:16    The method bar_bar is not named in camelCase.
    tests.php:19    Avoid unused local variables such as '$some_name'.
    tests.php:27    The method barBar has 11 parameters. Consider to reduce parameter number under 10.
    tests.php:29    Avoid unused local variables such as '$someName'.
    
    규칙 세트는 활성화할 검사 목록을 포함하는 XML 파일입니다.다섯 개의 주요 클래스 중 하나를 포함할 수 있으며, 이 클래스에서 어떤 규칙을 사용해야 하는지도 지정할 수 있습니다.이 파일을 만드는 방법에 대한 자세한 내용은 documentation를 참조하십시오.
    전반적으로 PHPMD는 고도로 맞춤형 정적 분석기입니다.특정한 코드 표준을 강제로 집행하지는 않지만, 코드를 정리하고, 가능한 오류를 탐지하며, 프로젝트의 복잡성을 관리할 수 있습니다.

    3: PHP 복사/접착 탐지기
    PHPCPD는 세바스티안 버그만(Sebastian Bergmann)이 만든 작은 도구로 프로젝트의 복제를 검사하는 데 사용된다.다음은 간단한 예입니다.
    $phpcpd .
    phpcpd 2.0.1 by Sebastian Bergmann.
    Found 1 exact clones with 19 duplicated lines in 2 files:
    - foo.php:9-28
        bar.php:18-37
    1.32% duplicated lines out of 1439 total lines of code.
    
    시간: 21ms, 메모리: 2.50Mb 자세한 출력 정도와 클론으로 간주되는 최소 행/토큰 수를 제어할 수 있습니다.
    중복된 코드는 중복된 오류를 숨기기 때문에 복제를 하나의 방법이나 클래스로 재구성해서 중복된 줄의 비율을 최대한 낮춰야 합니다.

    4: 자동 코드 수정
    일부 도구는 오류 검출을 뛰어넘어 코드를 자동으로 수정해 줍니다.
    PHP Coding Standards Fixer 사용자가 지정한 인코딩 기준에 따라 복구하는 것을 권장합니다.다음 예제에서는 두 파일에서 발견된 문제를 보여 줍니다.
    $ php-cs-fixer fix --dry-run . --level=psr2
        1) foo.php (php_closing_tag, eof_ending)
        2) bar.php (braces, function_declaration, eof_ending)
    
    PHPCBF는 스크립트이며 일부 오류를 자동으로 수정할 수도 있습니다.최신 버전의 코드 탐지기와 함께 제공되므로 다음과 같이 간단히 실행할 수 있습니다.
    $phpcbf – 표준 = PSR2 테스트.php 파일 2개 수정

    기타 도구
    나는 또 다른 검사할 만한 도구를 언급하고 싶다.첫 번째는 PHPDepend 프로젝트 코드에서 인상적인 metrics 그룹을 생성합니다. 패키지 의존성, 코일 복잡도, 결합 등입니다. 프로그램에서 재구성해야 할 부분을 쉽게 감지할 수 있습니다.
    PHPLOC는 항목에 대한 흥미로운 통계 데이터도 나타냈다.PHPDepend보다 강하지는 않지만 코드 크기, 복잡성, 클래스 수 등 재미있는 개술도 얻을 수 있습니다.
    마지막으로 Security Advisory Checker입니다.Sensio Labs에서 제공되는 이 도구는 Composer 종속 항목에서 보안 취약점을 확인하는 데 사용됩니다.그것은 너의 작곡가와 매우 잘 어울린다.보안 취약성이 있는 데이터베이스의 파일을 잠그고 문제가 발견되면 경고합니다.

    어느 것을 골라야 합니까?
    최종적으로, 이것은 개인의 선택이며, 당신이 일하고 있는 프로젝트의 수요에 달려 있다.범위가 넓은 오류를 덮어쓰고 코드가 일치하도록 여러 도구를 사용하길 원할 수도 있습니다.예를 들어, 스타일시트를 사용하여 코드 탐지기를 구성하고 PHP Mess Detector와 함께 사용할 수 있습니다.이것은 일치성을 강화할 뿐만 아니라, 프로젝트의 핫이슈: 매우 복잡한 코드, 사용하지 않은 코드 세그먼트, 짧은 변수 이름 등을 검사할 수 있습니다. 이외에, 복사 붙여넣기 검사기와 같은 다른 도구를 추가할 수 있습니다.

    작업흐름
    정적 분석을 충분히 이용하기 위해서는 개발 주기에 통합해야 합니다.만약 네가 이 공구들을 독립적으로 사용한다면, 시간이 지나면 너는 그것들을 잊어버릴 것이다.이 점을 해낼 수 있는 몇 가지 방법이 있다.
  • PHP Storm이나 Sublime Text 같은 IDE 편집기에 직접 들어가면 정적 분석 도구를 지원하는 플러그인이 이미 있습니다.모든 내용을 설치하고 설정하면 입력할 때 경고와 건의를 받을 수 있습니다.처음부터 더 좋은 코드를 작성할 수 있기 때문에 이후의 오류 복구를 피할 수 있습니다.
  • 미리 제출 갈고리 IDE가 좋아하는 도구를 지원하지 않거나 제출에 대한 엄격한 규칙을 지키지 않으려면git로 미리 제출 갈고리를 작성할 수 있습니다.이 해결 방안을 사용하면 분석 과정에서 오류가 발생하면 제출 과정을 자동으로 중단할 수 있습니다.
  • 온라인 분석 마지막으로 간단한 방법으로 코드를 분석하고 싶다면 로컬에서 모든 것을 수동으로 설정할 필요가 없다. 예를 들어 Codacy (파렴치한 플러그인) 온라인 코드 심사 서비스를 사용할 수 있다.우리는 이미 본고에서 언급한 검측 도구를 통합하여 매일 서비스를 개선하려고 노력하고 있다.자동화 코드 심사 도구를 사용하는 또 다른 주요 장점은 언제든지 문제를 감시하고 새로운 문제와 복구된 문제를 제출할 수 있도록 하는 것이다.

  • 결론
    PHP는 정태적으로 코드를 분석하고 개발을 지도할 수 있는 인상적인 도구를 가지고 있다.당신은 엄격한 표준, 관리 복잡성과 의미 검사 문제를 집행할 수 있습니다. 이것은 대형 소프트웨어 프로젝트의 유지보수 문제를 해결하는 데 큰 도움이 될 것입니다.만약 당신의 팀이 PHP 개발을 사용할 때 이러한 기능이 없었다면, 한번 시도해 보셔야 합니다.평론에서 저에게 어떻게 진전되었는지 알려주세요.

    좋은 웹페이지 즐겨찾기