문제

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

JavaScript용 정적 분석 도구가 있나요?

도움이 되었습니까?

해결책

JSLINT가 시작하기에 가장 좋은 곳이라는 데 동의합니다. 주목하십시오 자바 스크립트 보풀 구별됩니다 jslint. 또한 체크 아웃을 제안합니다 jsure, 제한된 테스트에서 구현에 거친 가장자리가 있었지만, 인텔 Mac 버전은 시작에 충돌했지만 PowerPC 버전은 인텔에서도 잘 작동했지만 Linux 버전도 잘 진행되었습니다. . (개발자 인 Berke Durak 은이 문제가 해결되었을 때 나에게 돌아올 것이라고 말했다. 그러나 나는 그에게서 듣지 못했다.)

좋은 C 검사기에서 얻을 수있는만큼 JavaScript 정적 분석에서 많은 것을 기대하지 마십시오. Durak은“JavaScript의 역동적 인 특성으로 인해 사소한 분석이 매우 어렵습니다.”라고 말했습니다.

(이번에는 JSLINT의 KONFABUNGER WIDGET를 사용하여 또 다른 모호한 MAC 전용 버그 : BBEDIT 문서 아이콘을 위젯으로 드래그하면 문서를 쓰레기로 이동합니다. 개발자 Douglas Crockford는 Mac에서 위젯을 시도하지 않았습니다.

2009 년 8 월 10 일 : 오늘 정적 분석 심포지엄, Simon Holm Jensen은 논문을 발표했습니다 TAJS : JavaScript 용 분석기를 입력하십시오, Anders Møller와 Peter Thiemann과 함께 작성되었습니다. 이 논문은 위의 위의 도구를 언급하지 않았지만 Jensen은 자신이 그 중 일부를보고 감동하지 않았다고 말했습니다. TAJS 코드는 이번 여름 언젠가 이용할 수 있어야합니다.

다른 팁

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


에 추가 jslint (이미 언급되었습니다 플래시 셰리 던의 대답) 그리고 클로저 컴파일러 (이전에 언급되었습니다 awhyte의 대답) 나는 또한 달리기로부터 많은 혜택을 얻었습니다. Jshint 그리고 PHP CodesNiffer. 2012 년 현재, 4 개의 도구는 모두 무료 오픈 소스이며 그 뒤에는 크고 활발한 개발자 커뮤니티가 있습니다. 그것들은 그들이 수행하는 수표의 종류에서 각각 약간 다릅니다.

jslint Douglas Crockford의 개인 줄무늬 도구로 설계되었으며 여전히입니다. 그것은 함께 배송합니다 엄청난 기본 규칙 세트 - Crockford 's, 지속적으로 업데이트되었습니다 그는 계속 배우고 있습니다 JavaScript와 그 함정에 대해. jslint입니다 고도로 의견이 있습니다 그리고 이것은 일반적으로입니다 좋은 것으로 보입니다. 따라서 (의도적으로) a 제한된 금액 개별 규칙을 구성하거나 비활성화 할 수 있습니다. 그러나 이것은 레거시 코드에 jslint를 적용하기가 어려울 수 있습니다.

Jshint JSLINT와 매우 유사합니다 (실제로 인생을 시작했습니다 JSLINT FORK로서) 그러나 더 쉽고 가능합니다. 구성 또는 비활성화 명령 줄 옵션을 통해 또는 .jshintrc 파일.

나는 특히 Jshint에게보고하라고 말할 수 있다는 것을 특히 좋아합니다. 모두 수백 가지 오류가 있더라도 파일의 오류 중 하나입니다. 대조적으로, jslint에는 a가 있습니다 maxerr 구성 옵션은 일반적으로 많은 오류가 포함 된 파일을 처리하려고 할 때 일반적으로 비교적 일찍 구제됩니다.

폐쇄 컴파일러 코드 인 경우 매우 유용합니다 습관 폐쇄와 함께 컴파일하면 매우 확실한 코드를 느낄 수 있습니다. ~이다 근본적인 방식으로 깊게 호흡했습니다. 클로저 컴파일은 아마도 JS 세계에서 "통역사"구문 확인과 같은 가장 가까운 것일 수 있습니다. php -l 또는 ruby -c

폐쇄 잠재적 인 문제에 대해 경고합니다 누락 된 매개 변수 및 선언되지 않은 또는 재정의 된 변수와 같은. 당신이 기대하는 경고가 보이지 않으면, 옵션으로 폐쇄를 호출하여 경고 수준을 늘리십시오. --warning_level VERBOSE

PHP CodesNiffer JavaScript를 구문 분석 할 수 있습니다 PHP 및 CSS뿐만 아니라. CodesNiffer는 여러 가지 다른 코딩 표준을 제공합니다 ( phpcs -i 확인)에 대한 수표를 포함하여 JavaScript 코드에 대한 많은 유용한 스 니프가 포함되어 있습니다. 인라인 제어 구조 그리고 불필요한 공백.

여기에 있습니다 JavaScript Sniffs 목록 버전 1.3.6 기준으로 PHP CodesNiffer로 제공되며 다음은 다음과 같습니다. 한 번에 모두 실행할 수있는 사용자 정의 규칙 세트. 사용자 정의 규칙 세트를 사용하면 쉽습니다 규칙을 선택하고 선택하십시오 당신은 신청하고 싶습니다. 그리고 당신은 심지어 할 수 있습니다 나만의 스 니프를 작성하십시오 상자에서 지원되지 않는 특정 "하우스 스타일"을 시행하려면. Afaik CodesNiffer는 새로운 정적 분석 규칙의 사용자 정의 및 생성을 지원하는 4 가지 도구입니다. 그러나 한 가지주의 사항 : CodesNiffer는 언급 된 도구 중 가장 느리게 실행됩니다.

Google의 "폐쇄"JS 컴파일러 컴파일 타임에 구성 가능한 경고 및 오류를 생성합니다. 그것은 확실히 잘못된 변수와 방법과 아티브 실수를 발견합니다. JSDOC에 폐쇄 방식을 기꺼이 작성하려는 경우 유형 정보로도 많은 일을 할 수 있습니다.

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

나는 일식을 기반으로 한 Aptana IDE에 많은 운이 없었지만 다른 사람들은 그것을 좋아합니다. JS IDE에 대한 스택 오버 플로우 토론을 참조하십시오.

내가 마지막으로 확인한 무료가 아닌 Intellij Ide는 탁월한 JS 지원을 받았습니다. 입력 할 때 철자가 틀린 Vars 및 메소드를 감지하고 강조합니다. 자동 완성이 있습니다.

요약하면 JSLINT, JSHINT, PLATO, ESLINT, Google Closure-Linter가 사용 가능한 도구입니다. Windows 용 Google Closure-Linter를 시험해 보면서 설치 문제에 직면했습니다. 그러나 웹 페이지에서 Windows 지원이 실험적이라고 언급합니다. 잘 작동하는 다른 도구를 찾아서 시도했습니다. 다음은 다음과 같은 링크입니다.http://esprima.org/

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

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

이 게시물에서는 언급되지 않은 위키의 도구는 다음과 같습니다. 면밀히 살펴보다. 초점은 Linters의 규칙을 코딩하기보다는 런타임 오류 및 품질 문제를 찾는 것입니다. 또한 TypeScript, React 및 Vue.js를 다룹니다.

GitHub 프로젝트에 대해 시도해 볼 수 있습니다.

나는 eslint를 시험해 보았고 좋은 것을 발견했다 .. 당신은 또한 거기에 맞춤 규칙을 추가 할 수 있습니다 .. https://github.com/nzakas/eslint 그리고 여기에 대한 소개가 있습니다. http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

범용 목록보다 보안에 더 초점을 맞춘 내용은 다음 Mozilla Wiki에서 찾을 수 있습니다. 보안/B2G/JavaScript 코드 분석

이 문서의 목적은 다가오는 모질라 프로젝트를 포함하거나 내부 사용에 적합한 JavaScript 코드 분석 도구를 수집하는 것입니다.

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

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

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

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

프로젝트의 주요 개발자로서, 내 뻔뻔한 플러그를 받아들이십시오. C/C ++ 분석, Coverity의 JavaScript 분석은 동일한 엔진의 많은 부분을 공유하며, 허위 양성 결함 보고서의 낮은 비율로 고 부가가치 결함을 찾는 데 중점을 둡니다. 우리는 일반적인 프로그래밍 오류를 찾는 것 외에도 JavaScript (및 기타 언어)에서 보안 결함을 찾는 데 중점을두고 있습니다.

이제 여기에 찾은 오타가 있습니다 (독자를위한 운동으로 남은 정확한 오타, 이것들이 얼마나 쉽게 간과 될 수 있는지 강조하기 위해) :

merge.js : (안정적인 링크) (최신 개정)

명령 -packages-query.js : (안정적인 링크) (최신 개정)

Series-Pie-Tests.js : (안정적인 링크) (최신 개정)

oldline_case.js : (안정적인 링크) (최신 개정)

좋아요 jslint 이런 종류의 일을 위해 ...

흐름 주석이 있거나없는 정적 분석을 수행합니다.

주석이 필요한 경우 구문은 호환됩니다. TypeScript.

설치 패키지 와 함께 :

npm install --global flow-bin

툴링도 있습니다. 살펴보십시오 gulp-flowtype 그리고 아마도 Sublimelinter-Flow

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

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

http://jsanalyse.codeplex.com/

우리의 sd ecmascript clonedr 대형 JavaScript 소스 코드베이스에서 복제 된 코드의 정확하고 거의 근접한 사본을 찾는 도구입니다.

언어 구문을 사용하여 감지를 안내하므로 형식 변경, 삽입/삭제 된 주석, 이름이 바뀌고 삽입/삭제 된 문장에도 불구하고 클론을 찾을 수 있습니다.

이 사이트에는 Google의 폐쇄 라이브러리에서 샘플 클로네드가 실행됩니다.

전체 공개, 나는 이것 뒤에있다 : http://www.toptensoftware.com/minime 미니 화, 난독 화 및 합리적인 보풀 스타일 점검 세트를 수행합니다.

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