나는 변수 이름에 대한 오타와 같은 어리석은 일을 할 때 컴파일러가 불평하는 데 익숙하지만 JavaScript에는 이것을 통과시키는 습관이 있습니다.
JavaScript 용 정적 분석 도구가 있습니까?
나는 변수 이름에 대한 오타와 같은 어리석은 일을 할 때 컴파일러가 불평하는 데 익숙하지만 JavaScript에는 이것을 통과시키는 습관이 있습니다.
JavaScript 용 정적 분석 도구가 있습니까?
답변:
JSLint가 시작하기에 가장 좋은 곳이라는 데 동의합니다. 참고 자바 스크립트 린트가 에서 별개입니다 JSLint . 또한 제한된 테스트에서 구현에 약간의 거친 부분이 있지만 JSure를 확인하는 것이 좋습니다 . Linux 버전도 잘 실행되었습니다. (개발자 인 Berke Durak은이 문제가 해결되면 다시 연락하겠다고했지만 그로부터 소식을 듣지 못했습니다.)
좋은 C 검사기에서 얻는 것만 큼 JavaScript 정적 분석에서 기대하지 마십시오. Durak이 말했듯이 "자바 스크립트의 동적 특성 때문에 사소하지 않은 분석은 매우 어렵습니다."
(이번에는 JSLint의 Konfabulator 위젯을 사용하는 또 다른 더 모호한 Mac 전용 버그 : BBEdit 문서 아이콘을 위젯으로 드래그하면 문서가 휴지통으로 이동합니다. 개발자 인 Douglas Crockford는 Mac에서 위젯을 사용해 보지 않았습니다.)
2009 년 8 월 10 일 : 오늘 정적 분석 심포지엄 에서 Simon Holm Jensen은 Anders Møller와 Peter Thiemann이 함께 작성한 TAJS : Type Analyzer for JavaScript 에 대한 논문을 발표했습니다 . 논문에서는 위의 도구에 대해 언급하지 않았지만 Jensen은 일부 도구를 살펴 보았지만 인상적이지 않았다고 말했습니다. TAJS의 코드는 올 여름에 제공 될 예정입니다.
업데이트 된 답변, 2017 : 예. ESLint를 사용하십시오. http://eslint.org
뿐만 아니라 JSLint (이미 언급 한 플래시 쉐리 던의 대답 )와 폐쇄 컴파일러 (이전에 언급 awhyte의 대답 나는 또한 실행 혜택을 많이 찍었습니다) JSHint 및 PHP CodeSniffer을 . 2012 년 현재, 네 가지 도구 모두 무료 오픈 소스이며 그 뒤에 대규모의 활발한 개발자 커뮤니티가 있습니다. 그들은 수행하는 검사의 종류가 각각 약간 다릅니다 (그리고 보완 적이라고 생각합니다).
JSLint 는 그렇게 설계되었으며 여전히 Douglas Crockford의 개인 보풀 도구입니다. 그것은 훌륭한 기본 규칙 세트 와 함께 제공됩니다 -Crockford 자신의 것, 그는 JavaScript와 그 함정에 대해 계속 배우 면서 지속적으로 업데이트 됩니다 . JSLint는 매우 독단적 이며 이것은 일반적으로 좋은 것으로 간주됩니다. 따라서 (의도적으로) 개별 규칙을 구성하거나 비활성화하기 위해 수행 할 수 있는 제한 이 있습니다. 그러나 이로 인해 레거시 코드에 JSLint를 적용하기가 어려울 수 있습니다.
JSHint 는 JSLint와 매우 유사하지만 (사실 JSLint 포크로 시작 되었습니다) 명령 줄 옵션이나 파일을 통해 모든 JSLint 검사를 구성하거나 비활성화 하는 것이 더 쉽고 / 가능 .jshintrc
합니다 .
특히 수백 개의 오류가 있더라도 JSHint에게 파일의 모든 오류 를보고하도록 지시 할 수 있다는 점이 마음에 듭니다 . 대조적으로 JSLint에는 maxerr
구성 옵션 이 있지만 일반적으로 많은 수의 오류가 포함 된 파일을 처리하려고 할 때 상대적으로 조기에 구제됩니다.
폐쇄 컴파일러는 코드가있는 경우, 점에서 매우 유용 하지 않습니다 폐쇄 컴파일, 당신은 매우 어떤 느낌이 코드는 말했다 수 있다 깊이 몇 가지 근본적인 방법으로 씻어 버렸어요. 폐쇄 편집 가능성과 같은 "통역"구문 검사에 JS 세계에서 존재하는 가장 가까운 일 php -l
또는ruby -c
Closure는 또한 누락 된 매개 변수 및 선언되지 않거나 재정의 된 변수와 같은 잠재적 문제에 대해 경고합니다 . 예상 한 경고가 표시되지 않으면 다음 옵션을 사용하여 Closure를 호출하여 경고 수준을 높여보십시오.--warning_level VERBOSE
PHP CodeSniffer 는 JavaScript 와 PHP 및 CSS를 구문 분석 할 수 있습니다 . CodeSniffer phpcs -i
는 인라인 제어 구조 및 불필요한 공백 에 대한 검사를 포함하여 JavaScript 코드에 대한 많은 유용한 스 니프를 포함하는 몇 가지 다른 코딩 표준과 함께 제공됩니다 .
다음은 버전 1.3.6부터 PHP CodeSniffer에서 사용할 수있는 JavaScript 스 니프 목록입니다. 여기에 모두 한 번에 실행할 수 있는 사용자 지정 규칙 세트가 있습니다. 사용자 지정 규칙 세트를 사용하면 적용 할 규칙 을 쉽게 선택하고 선택할 수 있습니다. 기본적으로 지원되지 않는 특정 "하우스 스타일"을 적용하려는 경우 자신 만의 스 니프를 작성할 수도 있습니다 . Afaik CodeSniffer는 새로운 정적 분석 규칙의 사용자 지정 및 생성을 지원하는 여기에 언급 된 네 가지 중 유일한 도구입니다. 그러나 한 가지주의 사항 : CodeSniffer는 언급 된 도구 중 가장 느리게 실행됩니다.
Google의 "Closure"JS 컴파일러 는 컴파일 시간에 구성 가능한 경고 및 오류를 생성합니다. 철자가 틀린 변수와 메서드, 그리고 실수를 확실히 찾습니다. JsDoc을 Closure 방식으로 작성하려는 경우 유형 정보로도 많은 작업을 수행 할 수 있습니다.
YUI "Compressor"도구도 경고를 생성 할 수 있지만 아직 시도하지는 않았습니다.
Eclipse에 빌드 된 Aptana IDE에 대해서는 운이 좋지 않았지만 다른 사람들은 좋아합니다. JS IDE의 Stack Overflow 토론을 참조하세요.
내가 마지막으로 확인한 무료가 아닌 IntelliJ IDE는 뛰어난 JS 지원을 제공합니다. 입력 할 때 맞춤법이 틀린 변수 및 메서드 등을 감지하고 강조 표시합니다. 자동 완성 기능도 있습니다.
요약하면 JSLint, JSHint, Plato, ESLint, Google Closure-Linter가 사용 가능한 도구입니다. Windows 용 Google Closure-Linter를 사용하는 동안 설치 문제가 발생했습니다. 그러나 웹 페이지에는 Windows 지원이 실험적이라고 언급되어 있습니다. 잘 작동하는 다른 도구를 찾아서 시도했습니다. 여기에 대한 링크가 있습니다 : http://esprima.org/
또한 이것은 Esprima 도구에 대한 github 링크입니다 : https://github.com/ariya/esprima
나는 ESlint를 시험해 보았고 그것이 좋다는 것을 알았습니다 .. 거기에 사용자 정의 규칙을 추가 할 수도 있습니다. 여기에 github repo가 있습니다 : https://github.com/nzakas/eslint 그리고 여기에 대한 소개가 있습니다 : http : // www. nczonline.net/blog/2013/07/16/introducing-eslint/
범용 목록보다 보안에 더 중점을 둔 목록은 Mozilla Wiki의 Security / B2G / JavaScript 코드 분석 에서 찾을 수 있습니다.
이 문서의 목적은 향후 Mozilla 프로젝트에 포함 시키거나 내부 용으로 사용하기에 적합한 JavaScript 코드 분석 도구를 수집하는 것입니다.
또한 보안 분석을 수행하는 상용 제품이 하나 이상 있습니다. Burp는 새로운 JavaScript 분석 기능을 제공합니다.
Burp의 최신 릴리스에는 JavaScript 코드의 정적 분석을위한 새로운 엔진이 포함되어 있습니다. 이를 통해 Burp 스캐너는 다음과 같은 다양한 새로운 취약점을보고 할 수 있습니다.
- DOM 기반 XSS
- 자바 스크립트 삽입
- 클라이언트 측 SQL 주입
- WebSocket 하이재킹
- 로컬 파일 경로 조작
- DOM 기반 개방형 리디렉션
- 쿠키 조작
- Ajax 요청 헤더 조작
- DOM 기반 서비스 거부
- 웹 메시지 조작
- HTML5 저장소 조작
상업 영역에서 Coverity Static Analysis 는 버전 7.7 (2015 년 중반)부터 JavaScript 분석을 지원합니다. 오타에 대한 특정 문의와 관련하여 최신 릴리스 (8.0, 2016 년 초)에 나타나는 내 애완 동물 프로젝트 는 프로그램 요소 이름에서 오타 를 찾습니다 .
프로젝트의 핵심 개발자로서 저의 뻔뻔한 플러그를 받아들이십시오. 아직 C / C ++ 분석 만큼 성숙하지는 않았지만 Coverity의 JavaScript 분석은 동일한 엔진을 거의 공유하며 낮은 값의 고 가치 결함을 찾는 데 초점을 맞추고 있습니다. 오 탐지 결함보고 비율. 일반적인 프로그래밍 오류를 찾는 것 외에도 JavaScript (및 기타 언어)에서 보안 결함을 찾는 데 집중하고 있습니다.
이제 여기에 몇 가지 오타가 있습니다 (독자가 얼마나 쉽게 간과 할 수 있는지 강조하기 위해 정확한 오타가 독자를위한 연습으로 남았습니다).
commands-packages-query.js : (안정된 링크) (최신 버전)
나는 이런 종류의 Jslint 를 좋아한다 ...
Flow 는 주석이 있거나없는 정적 분석을 수행합니다.
주석이 필요한 경우 구문은 TypeScript 와 호환됩니다 .
다음을 사용하여 패키지 를 설치하십시오 .
npm install --global flow-bin
도구도 있습니다. gulp-flowtype 및 아마도 SublimeLinter-flow를 살펴보십시오.
JSAnalyse가 방금 codeplex에 게시되었습니다. 자바 스크립트 파일 간의 종속성을 분석하는 도구입니다. 허용 된 종속성을 정의 할 수도 있으며 JSAnalysis는 정의 된 규칙이 충족되었는지 여부를 확인합니다. 이를 통해 대규모 프로젝트에서도 자바 스크립트 종속성을 추적하고 깨끗한 아키텍처를 가질 수 있습니다.
JSAnalyse는 명령 줄 도구로 실행하거나 Visual Studio Layer Diagramm을 통해 구성 할 수 있습니다. 또한 빌드에 쉽게 통합 할 수 있습니다. 게이트 체크인을 사용하면 종속성을 제어 할 수 있습니다.
우리의 SD ECMAScript를 CloneDR은 많은 자바 스크립트 소스 코드베이스를 통해 정확한 중복 된 코드와 가까운 미스 사본을 찾기위한 도구입니다.
언어 구문을 사용하여 탐지를 안내하므로 형식 변경, 삽입 / 삭제 된 주석, 이름이 변경된 변수 및 일부 삽입 / 삭제 된 명령문에도 불구하고 복제본을 찾습니다.
이 사이트에는 Google의 Closure 라이브러리에서 실행되는 샘플 CloneDR이 있습니다.
전체 공개, 나는 이것 뒤에 있습니다 : http://www.toptensoftware.com/minime 축소, 난독 화 및 합리적인 린트 스타일 검사 집합을 수행합니다.