Statische Codeanalyse & Testing

Wie ist Statische Codeanalyse & Testing? Was gibt es für Möglichkeiten?

Was ist Statische Codeanalyse?

Für die statische Codeanalyse werden sogenannte Linter genutzt. Er kommt in der Softwareentwicklung zur Sicherung der Code-Qualität zum Einsatz. Für verschiedene Programmiersprachen gibt es verschiedene Linter, unter Web-Entwicklern ist ESLint wohl der bekannteste. Es gibt für jede Programmierspracche eigene Linter. Kommen in einem Projekt mehrere Programmiersprachen zum Einsatz, werden dafür entsprechend mehrere Linter benötigt.

Neben ESLint gibt es aber auch noch JSLint & JSHint diese sind aber veraltet.

Github hat einen eigenen Super-Linter entwickelt:

Über den Super-Linter sollen viele Anforderungen automatisiert werden können. So verhindert das Tool, dass fehlerhafter Code in den Masterbranch eines Projektes gemerged wird, hilft bei der Etablierung von Best Practices beim Schreiben von Code über verschiedene Programmiersprachen hinweg und erstellt Richtlinien für Layout und Formatierung. Außerdem soll der Super Linter unter anderem dabei helfen, den Ablauf von Code-Reviews zu streamlinen. Hier gehts zum Repository des Super-Linters.

Testing

Ein Softwaretest prüft und bewertet Software auf Erfüllung der für ihren Einsatz definierten Anforderungen und misst ihre Qualität. Die gewonnenen Erkenntnisse werden zur Erkennung und Behebung von Softwarefehlern genutzt. Sprich es muss bspw. getestet werden ob eine Webseite aufgerufen werden kann, Formulare ausfüllbar sind, Button anklickbar oder ob der richtige Text angezeigt wird.
Es gibt drei verschiedene Testmethoden:

Test_Pyramide simform.com
Unit-Tests
kleine Tests, mit denen eine ganz spezifische Funktionalität getestet werden soll.
Integration-Tests
Tests, mit denen das Zusammenspiel verschiedener Funktionalitäten getestet werden soll.
End-to-End-Testing
Testing des gesamten Programmflows von Anfang bis Ende.

Testing-Tools:

Damit man nicht selbst alles mühselig selbst schreiben und testen muss gibt es diverse Testing-Tools die einen dabei unterstützen.

Jest
Jest ist ein JavaScript Testframework, das auf Einfachheit setzt. Eingesetzt werden kann es in Projekten mit Babel, TypeScript, Node, React, Angular, Vue und vielen mehr. In Jest muss keine Konfiguration gemacht werden. Zudem werden die Tests parallelisiert, indem sie in eigenen Prozessen ausgeführt werden, um die Leistung zu maximieren.
Cypress
Mit Cypress können End-to-End-Tests während des Entwicklungsprzesses gemacht werden. Ebenfalls aber auch Unit tests & Integration Tests. Die Tests laufen aber nur innerhalb des Browsers und sind daher etwas limitiert. Beispielsweise ein Test auf einen neuen Tap ist mit Cypress nicht möglich. Die Methoden auf denen Cypress basiert sind folgende:
                
    describe()
    context()
    it()
    before()
    beforeEach() 
    afterEach() 
    after()
    .only() 
    .skip()                
            
Was kann Cypress noch:
  • macht Schnappschüsse des Frameworks zum Zeitpunkt der Testausführung. Hier durch können Testschritte besser beleuchtet werden.
  • Keine Wartebefehle wie bspw. in Selenium. Cypress wartet automatisch auf Befehle.
  • Während man Befehle schreibt, führt Cypress diese in Echtzeit aus und gibt während der Ausführung visuelles Feedback.
Selenium
Ein weiteres beliebtes Testautomatisierungs Tool ist Selenium. Wobei Selenium ist in erster Line kein Testautomatisierung Tool, sondern ein Browser Automatisierungstool, welches in Verbindung mit einem Testingframework (wie bspw. JUnit, TestNG) zu einem Testautomatisierung Tool wird. Es ermöglicht Testfälle für den gewünschten Browser mithilfe der Selenium WebDriver-API und dem Testingframework. Der Selenium Web Driver verwendet das JSON-Wire-Protocol für die Testfälle, dies kann man in drei Hauptschritte für die Ausführung unterteilen:
  • Die Testbefehle werden in eine URL übersetzt
  • Browsertreiber erhalten die URLs über den HTTP-Server
  • Die URLs werden als Anforderungen an die tatsächlichen Browser weitergeleitet und alle Befehle in den Testscripten werden ausgeführt

Hier siehst du den Aufbau des Selenium Webdrivers- Frameworks:

Selenium_Webdriver_Framework

Für weitere Infos kannst du hier nachschauen: Selenium Webdriver Tutorial

Jasmine
Dies ist ein verhaltensgesteuertes JavaScript Framework zum testen von JavaScript-Anwendungen. Jasmine bietet Dienstprogramme, mit denen automatisierte Tests für synchronen und asynchronen Code ausgeführt werden können. Doch was kann Jasmine genau?
  • schnelligkeit, geringen Overload und keine externen Abhängigkeiten
  • kann mit verschiedenen Sprachen verwendet werden, wie bspw. auch Ruby und Phyton
  • kein DOM benötigt
  • es bietet eine saubere und leicht verständliche Syntax sowie eine umfangreiche und unkomplizierte API
  • Unit-Testing
Mocha
Mocha ist ein funktionsreiches JavaScript-Testframework, das auf Node.js und im Browser ausgeführt wird. Mocha wird oft zusammen mit der Assertion-Bibliothek Chai im Unit-Test Umfeld eingesetzt.
Mocha bietet zudem:
  • Cross-Browser-Support
  • Berichtserstellung
  • synchrones und asynchrones Testen
  • Definition der Test-Sammlungen
  • eine frei wählbare und austauschbare Assertion-Bibliothek
Zurück