JavaScript 정적 분석 도구가 있습니까? [닫은]


110

나는 변수 이름에 대한 오타와 같은 어리석은 일을 할 때 컴파일러가 불평하는 데 익숙하지만 JavaScript에는 이것을 통과시키는 습관이 있습니다.

JavaScript 용 정적 분석 도구가 있습니까?


1
이제는 날 타입 스크립트가 당신의 친구입니다-그것은 자바 스크립트 암시 적 유형 검사를 지원하고 100 % 가고 싶다면 jsdoc3 또는 google 클로저 주석을 작성할 수 있으며 거기에서 유형을 추론 할 것입니다. vscode 또는 webstorm과 같은 편집자는 즉시 지원합니다. github.com/Microsoft/TypeScript/wiki/…
cancerbero

답변:


49

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의 코드는 올 여름에 제공 될 예정입니다.


2
@UpTheCreek : JSLint는 GitHub에서 사용할 수 있습니다.
Dave Swersky 2012 년

아 맞다 @ 데이브, 그 위대한 :)입니다
UpTheCreek

5
이제 TAJS의 소스 코드를 사용할 수 있습니다.
Rich Dougherty 2012 년

57

업데이트 된 답변, 2017 : 예. ESLint를 사용하십시오. http://eslint.org


뿐만 아니라 JSLint (이미 언급 한 플래시 쉐리 던의 대답 )와 폐쇄 컴파일러 (이전에 언급 awhyte의 대답 나는 또한 실행 혜택을 많이 찍었습니다) JSHintPHP 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는 언급 된 도구 중 가장 느리게 실행됩니다.


2
이제 CPD를 통해 JavaScript 코드 복사-붙여 넣기 감지를 사용할 수 있습니다. 내가 아는 한 이것은 JavaScript를위한 최초의 강력한 오픈 소스 코드 복제 도구입니다! pmd.sourceforge.net에서 "JavaScript 용 도구와 같은 CPD가 있습니까?"라는 질문도 참조하십시오. stackoverflow.com/a/13745190/55478
노아 서스

20

Google의 "Closure"JS 컴파일러 는 컴파일 시간에 구성 가능한 경고 및 오류를 생성합니다. 철자가 틀린 변수와 메서드, 그리고 실수를 확실히 찾습니다. JsDoc을 Closure 방식으로 작성하려는 경우 유형 정보로도 많은 작업을 수행 할 수 있습니다.

YUI "Compressor"도구도 경고를 생성 할 수 있지만 아직 시도하지는 않았습니다.

Eclipse에 빌드 된 Aptana IDE에 대해서는 운이 좋지 않았지만 다른 사람들은 좋아합니다. JS IDE의 Stack Overflow 토론을 참조하세요.

내가 마지막으로 확인한 무료가 아닌 IntelliJ IDE는 뛰어난 JS 지원을 제공합니다. 입력 할 때 맞춤법이 틀린 변수 및 메서드 등을 감지하고 강조 표시합니다. 자동 완성 기능도 있습니다.


11

요약하면 JSLint, JSHint, Plato, ESLint, Google Closure-Linter가 사용 가능한 도구입니다. Windows 용 Google Closure-Linter를 사용하는 동안 설치 문제가 발생했습니다. 그러나 웹 페이지에는 Windows 지원이 실험적이라고 언급되어 있습니다. 잘 작동하는 다른 도구를 찾아서 시도했습니다. 여기에 대한 링크가 있습니다 : http://esprima.org/

또한 이것은 Esprima 도구에 대한 github 링크입니다 : https://github.com/ariya/esprima


7

Wiki 에서 JavaScript 정적 코드 분석을위한 몇 가지 도구를 볼 수 있습니다 .

Wiki에 있지만이 게시물에서 언급하지 않은 도구는 DeepScan 입니다. 그것의 초점은 linter의 코딩 규칙보다는 런타임 오류와 품질 문제를 찾는 것입니다. TypeScript, React 및 Vue.js도 다룹니다.

GitHub 프로젝트에 사용해 볼 수 있습니다.



4

범용 목록보다 보안에 더 중점을 둔 목록은 Mozilla Wiki의 Security / B2G / JavaScript 코드 분석 에서 찾을 수 있습니다.

이 문서의 목적은 향후 Mozilla 프로젝트에 포함 시키거나 내부 용으로 사용하기에 적합한 JavaScript 코드 분석 도구를 수집하는 것입니다.

또한 보안 분석을 수행하는 상용 제품이 하나 이상 있습니다. Burp는 ​​새로운 JavaScript 분석 기능을 제공합니다.

Burp의 최신 릴리스에는 JavaScript 코드의 정적 분석을위한 새로운 엔진이 포함되어 있습니다. 이를 통해 Burp 스캐너는 다음과 같은 다양한 새로운 취약점을보고 할 수 있습니다.

  • DOM 기반 XSS
  • 자바 스크립트 삽입
  • 클라이언트 측 SQL 주입
  • WebSocket 하이재킹
  • 로컬 파일 경로 조작
  • DOM 기반 개방형 리디렉션
  • 쿠키 조작
  • Ajax 요청 헤더 조작
  • DOM 기반 서비스 거부
  • 웹 메시지 조작
  • HTML5 저장소 조작

4

상업 영역에서 Coverity Static Analysis 는 버전 7.7 (2015 년 중반)부터 JavaScript 분석을 지원합니다. 오타에 대한 특정 문의와 관련하여 최신 릴리스 (8.0, 2016 년 초)에 나타나는 내 애완 동물 프로젝트 는 프로그램 요소 이름에서 오타찾습니다 .

프로젝트의 핵심 개발자로서 저의 뻔뻔한 플러그를 받아들이십시오. 아직 C / C ++ 분석 만큼 성숙하지는 않았지만 Coverity의 JavaScript 분석은 동일한 엔진을 거의 공유하며 낮은 값의 고 가치 결함을 찾는 데 초점을 맞추고 있습니다. 오 탐지 결함보고 비율. 일반적인 프로그래밍 오류를 찾는 것 외에도 JavaScript (및 기타 언어)에서 보안 결함을 찾는 데 집중하고 있습니다.

이제 여기에 몇 가지 오타가 있습니다 (독자가 얼마나 쉽게 간과 할 수 있는지 강조하기 위해 정확한 오타가 독자를위한 연습으로 남았습니다).

merge.js : (안정된 링크) (최신 버전)

commands-packages-query.js : (안정된 링크) (최신 버전)

series-pie-tests.js : (안정된 링크) (최신 버전)

outline_case.js : (안정된 링크) (최신 버전)




2

JSAnalyse가 방금 codeplex에 게시되었습니다. 자바 스크립트 파일 간의 종속성을 분석하는 도구입니다. 허용 된 종속성을 정의 할 수도 있으며 JSAnalysis는 정의 된 규칙이 충족되었는지 여부를 확인합니다. 이를 통해 대규모 프로젝트에서도 자바 스크립트 종속성을 추적하고 깨끗한 아키텍처를 가질 수 있습니다.

JSAnalyse는 명령 줄 도구로 실행하거나 Visual Studio Layer Diagramm을 통해 구성 할 수 있습니다. 또한 빌드에 쉽게 통합 할 수 있습니다. 게이트 체크인을 사용하면 종속성을 제어 할 수 있습니다.

http://jsanalyse.codeplex.com/


1

우리의 SD ECMAScript를 CloneDR은 많은 자바 스크립트 소스 코드베이스를 통해 정확한 중복 된 코드와 가까운 미스 사본을 찾기위한 도구입니다.

언어 구문을 사용하여 탐지를 안내하므로 형식 변경, 삽입 / 삭제 된 주석, 이름이 변경된 변수 및 일부 삽입 / 삭제 된 명령문에도 불구하고 복제본을 찾습니다.

이 사이트에는 Google의 Closure 라이브러리에서 실행되는 샘플 CloneDR이 있습니다.


아무도 이것을 시도한 적이 있습니까? 다운로드 또는 주문 버튼을 찾지 못함 ...
Sven Hecht

... 2011 년 1 월부터 ... JavaScript (또는 기타 여러 언어) 용 CloneDR의 평가판을 사용할 수있는 다운로드 링크가 있습니다.
Ira Baxter

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.