Open Source im professionellen Einsatz
Linux-Magazin 05/2016
© boettcher, 123RF

© boettcher, 123RF

Static Code Analyzer für Javascript, PHP, Python und die Shell

Doktor Skript

Admins jonglieren fast täglich mit Quellcode. Shell- und Python-Skripte automatisieren Aufgaben, auf Servern laufen PHP- und Javascript-Anwendungen. Verantwortungsbewusste Admins testen ihre Software daher vor Inbetriebnahme, ein paar ausgeklügelte Tools sagen ihnen, wo es noch wehtut.

1112

Ein nützliches Shellskript schreibt ein Admin im Alltagsstress schnell herunter – mitunter dauert es nur ein paar Tage, bis es ihm um die Ohren fliegt. Dann beginnt eine penible, zeitaufwändige und meist auch hektische Fehlersuche. Glücklicherweise existieren so genannte Static Code Analyzer.

Diese Werkzeuge untersuchen den Quellcode auf Fehler und typische Probleme. Sie spüren Tippfehler auf, die ein Mensch im Zeichensalat gern übersieht – von nicht initialisierten Variablen bis hin zu falsch gesetzten Semikola. Ob und wann ein Fehler vorliegt, entscheiden vorgegebene Prüfregeln. Die ergänzt der Programmierer bei manch einem Werkzeug noch um eigene Testkriterien.

Static heißen die Code Analyzer, weil sie sich lediglich den (statischen) Quellcode ansehen. Sie treffen somit keine Aussagen zum späteren Laufzeitverhalten. Immerhin führen einige Tools eine so genannte Datenflussanalyse durch und verfolgen Variablen durch den Programmcode. So spüren sie etwa ungenutzte oder überflüssige Variablen auf.

Bei dynamisch typisierten Programmiersprachen, etwa bei Python, steht der Typ einer Variablen allerdings erst zur Laufzeit fest. Die Analysewerkzeuge müssen dann erraten, welche Daten später zur Laufzeit in welchen Variablen liegen könnten. Das führt dazu, dass sie mitunter eigentlich korrekte Stellen als fehlerhaft anmahnen (False Positives).

Aufgehübscht

Viele Static Code Analyzer kreiden einen schlechten Programmierstil an und fungieren so nebenbei als Stylechecker. Dabei legen sie allgemein akzeptierte Coding Style Guides zugrunde – im Fall von Python etwa den PEP8-Standard [1]. Abschließend erzeugen einige der Tools Statistiken, die ebenfalls Hinweise auf Verbesserungen geben. Melden sie beispielsweise viele identische Zeilen, lagert der Entwickler diese, wo es passt, in eine eigene Funktion aus.

Die meisten Static Code Analyzer sind Kommandozeilen-Programme, die der Entwickler in (Shell-)Skripte oder eine eigene Toolchain einbindet. Nur einige bringen ein Frontend mit, das in der Regel bloß die Ausgaben der Kommandozeilen-Version anzeigt. Im Idealfall integrieren sich die Werkzeuge in Texteditoren oder IDEs. So stößt der Programmierer bereits bei der Code-Eingabe auf Fehler.

Zu den ersten Static Code Analyzern gehörte Lint (deutsch: Fussel). Es nahm C-Programme unter die Lupe und diente als Namengeber für zahlreiche ähnliche Tools. So kümmert sich Pylint um Python-Programme. Abgesehen vom ähnlichen Namen und demselben Grundprinzip haben diese Linter genannten Tools aber nichts miteinander gemein.

Javascript

Für Javascript gibt es gleich mehrere Linter (Tabelle 1), etwa JS-Lint von Douglas Crockford (Abbildung 1). Das Tool ist auch in Javascript geschrieben, Interessierte probieren es direkt auf der Homepage aus, der Quellcode wartet auf Github [2]. JS-Lint prüft neben der Syntax auch den Programmierstil und deckt einige strukturelle Probleme auf.

Tabelle 1

Static Code Analyzer für Javascript

Name

Lizenz

URL

Closure Tools

Apache License 2.0

https://developers.google.com/closure/

Flow

BSD-Lizenz

http://flowtype.org

ES-Lint

MIT-Lizenz

http://eslint.org

JS-Hint

MIT Expat License und Json License

http://jshint.com

JS-Lint

eigene (Open Source)

http://jslint.com

JS-Prime

MIT-Lizenz

https://github.com/dpnishant/jsprime

Plato

MIT-Lizenz

https://github.com/es-analysis/plato

Tajs

Apache License 2.0

https://github.com/cs-au-dk/TAJS

Abbildung 1: Auf der JS-Lint-Homepage muss der Entwickler lediglich den Javascript-Code in das große Feld eintippen und lässt ihn dann per JS-Lint-Button überprüfen.

Das Tool geht restriktiver vor, als es der ECMA-Script-Standard in der Version 6 vorschreibt. So erzwingt es etwa ein Semikolon am Ende jeder Anweisung und verbietet den Operator »==« . JS-Lint unterliegt einer modifizierten MIT-Lizenz. Anwender dürfen das Tool nur für gute und nicht "für böse Zwecke" einsetzen. Die Free Software Foundation stuft die Lizenz daher als unfrei ein.

Eine Alternative ist JS-Hint. Es prüft wie JS-Lint die Syntax, beanstandet einen schlechten Programmstil und weist auf typische Probleme hin, etwa eine implizite Typkonvertierung. JS-Hint kennt in der aktuellen Version ECMA Script 3, 5.1 und 6. Das Tool lässt sich ebenfalls direkt auf seiner Homepage ausprobieren (Abbildung 2). Bei Bedarf integrieren Entwickler JS-Hint als Javascript-Modul in die eigenen Webseiten.

Abbildung 2: Bei JS-Hint handelt es sich um eine Alternative zu JS-Lint, die ebenfalls in einem Browser läuft. Die Software erkennt schlechten Programmierstil und implizite Typkonvertierungen.

Daneben existiert es als Kommandozeilen-Version, die jedoch Node JS voraussetzt. Zudem fühlt sich JS-Hint in zahlreiche Texteditoren zu Hause, darunter Vim, Emacs, Sublime, Atom und Brackets. Das Tool unterliegt in einem Teil allerdings der Json-Lizenz, die eine ähnliche Klausel wie JS-Lint verwendet.

Unter einer reinen MIT-Lizenz steht ES-Lint. Im Gegensatz zu JS-Lint und JS-Hint verpackt das Tool jede Prüfregel in ein eigenes Plugin, das der Programmierer jederzeit ein- und ausschaltet – sogar zur Laufzeit. User steuern eigene Plugins bei. Die mitgelieferten Regeln decken Syntaxfehler ab, prüfen Best Practices (wie den Einsatz von »eval()« ), bemeckern zu komplexe Konstrukte und verweisen auf schlechten Programmierstil.

Das Tool unterstützt ECMA Script 6, Nutzer müssen den Support für den Standard aber explizit aktivieren. Sie testen ES-Lint direkt auf der Internetseite [3], eine ebenfalls verfügbare Kommandozeilen-Version setzt Node JS voraus.

Als Closure Tools stellt Google verschiedene Werkzeuge für Javascript-Programmierer bereit. Darunter befindet sich auch der Closure Compiler (Abbildung 3). Er verwandelt nicht nur Javascript-Anweisungen in "kompakten, hoch-performanten" Code, sondern führt nebenbei auch einen Syntaxcheck durch, prüft Variablen respektive ihre Typen und warnt vor typischen Problemen.

Abbildung 3: Der Closure Compiler entfernt eigentlich alle überflüssigen Zeichen aus dem Quellcode, korrigiert diesen aber auch: In der Abbildung hat er ein Semikolon ergänzt.

Der Closure Compiler lässt sich online auf Appspot nutzen [4], lokal als Java-Programm in einer Kommandozeilen-Version oder per REST-API ansprechen. Er unterstützt ECMA Script 3, 5 und Teile der Version 6. Als Ergänzung bietet Google den Closure Linter an, der den Programmierstil unter die Lupe nimmt [5]. Er folgt dabei dem Google Javascript Style Guide [6] und mahnt unter anderem fehlende Semikola an.

Das von Facebook entwickelte Flow stürzt sich primär auf den Datenfluss und untersucht Variableninhalte und ihre Typen. Es meckert beispielsweise, wenn eine Funktion etwas berechnet, der Programmierer sie aber mit einem Text aufruft. Flow durchforstet allerdings nur Javascript-Dateien, die der Entwickler mit einem entsprechenden Kommentar kennzeichnet. Mehr noch: Über zusätzliche Annotations an den Variablen gibt er deren gewünschte Typen vor.

Über entsprechende Plugins integriert er das Tool in Vim, Emacs und Nuclide. Zudem kann er Flow als Server betreiben, der Javascript-Dateien nach einer Änderung automatisch neu untersucht. Das Tool selbst ist in Ocaml verfasst.

Die Entwicklung von JS-Prime liegt zwar schon seit zwei Jahren auf Eis, das Tool klopft jedoch Javascript-Code explizit auf einige Sicherheitslücken ab. Darüber hinaus kommt es mit minifiziertem Java-Code zurecht. Der Nutzer bedient es über eine Weboberfläche.

Viele weitere im Internet verfügbare Tools spannen lediglich andere Kollegen ein. So greift Tajs auf den Closure Compiler zurück, während Plato das Duo JS-Hint und ES-Lint zur Arbeit schickt.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Pylint.org: Eigene Homepage für Code-Checker

    Pylint, ein statischer Code-Checker für Python, besitzt jetzt eine eigene Homepage unter Pylint.org.

  • Statische Analyse

    Tools zur statischen Analyse durchkämmen selbst gestrickten Code nach Fusseln und Knötchen. Was Open-Source-Werkzeuge für C, C++, Java und Python leisten, beschreibt dieser Artikel.

  • Pylint 1.0: Neue Checks und Python 3.3

    Nach zehn Jahren Entwicklung hat Pylint, ein statisches Analyse-Tool für die Programmiersprache Python, die Versionsnummer 1.0 erreicht.

  • Statische Codeanalyse für PHP

    Das Linux-Magazin 08/12 stellt freie Tools zur statischen Codeanalyse für C/C++, Java und Python vor. Dieser Artikel beschreibt Werkzeuge für die Web-Skriptsprache PHP.

  • Sichere Programme

    In fast jeder Software stecken Fehler, nicht wenige davon untergraben sogar die Sicherheit. Was können die Entwickler schon bei Beginn dagegen tun? Ein Überblick.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.