Testen mit Haskell

Tests sind für gute Softwarequalität unerlässlich. Obwohl wir hier in diesem Blog immer wieder über die Vorzüge funktionaler Programmierung in Bezug auf Softwarequalität und geringe Fehlerraten berichten, gilt dies natürlich auch für mit funktionalen Sprachen realisierte Projekte. Um Softwaretests zu schreiben stehen den Entwicklern und Testern in funktionalen Sprachen dieselben Mittel wie z.B. in objekt-orientierten Sprachen zur Verfügung. Allerdings gestaltet sich das Testen in funktionalen Sprachen oftmals deutlich einfacher, da Zustand explizit gehandhabt wird (siehe auch folgende Blogartikel: 1, 2, 3), wodurch Fehler leichter zu reproduzieren sind und aufwändiges Initialisieren von zu testenden Objekte oft entfällt.

In diesem Artikel möchte ich ein Framework vorstellen, mit dem wir bei uns in der Firma sämtliche Tests auf Codeebene für unsere Haskell-Software organisieren. Das Framework integriert dabei verschiedene Testmethoden (Unit-Tests, randomisierte Tests mit QuickCheck, auch diskutiert in diesem Blogartikel), ermöglicht schnelles Hinzufügen von neuen Testfällen und bereite Fehlermeldung so auf, dass die Ursache eines Fehlers einfach lokalisierbar ist. Das Framework steht unter einer Open-Source-Lizenz.

Weiterlesen...

Eclipse Xtend

Wir haben gerade ein Kundenprojekt im Eclipse- bzw. Eclipse-Modeling-Framework-Umfeld fertiggestellt, das aus der Erstellung von mehreren Plugins für die bestehende Anwendung des Kunden bestand. Wir haben dabei die Programmiersprache Xtend in der Version 2.4.3 eingesetzt. Dieser Artikel geht auf unsere Erfahrungen mit Xtend ein, die, soviel sei schon einmal vorweg genommen, eher negativ sind.

Weiterlesen...

Buildsysteme mit Haskell

Willkommen im Neuen Jahr! Der Blog Funktionale Programmierung startet direkt durch und beschäftigt sich im ersten Artikel im Jahr 2014 mit einem in Haskell geschriebenen Buildsystem namens shake.

Größere Softwareprojekte benutzen (fast) alle ein Buildsystem, um aus Quellcode automatisch ein fertiges Softwareprodukt zu erstellen. Dazu gehört z.B. das Kompilieren von Quelldateien, das Linken von Objektdateien, das Generieren von Dokumentation oder das Zusammenstellen von Distributions-Archiven.

Dieser Blogartikel gibt eine Einführung in das in Haskell geschriebene Buildsystem shake. Dieses System hat den Vorteil, dass Abhängigkeiten zwischen Build-Artefakten dynamisch, d.h. während das Buildsystem läuft, entstehen können. Bei make, dem wohl bekanntesten Buildsystem, müssen Abhängigkeiten hingegen vor Aufruf des Buildsystems bekannt sein, was in der Praxis häufig zu Einschränkungen und Problemen führt.

Wir benutzen bei uns in der Firma shake, um unser Produkt Checkpad MED zu kompilieren. Hier spielt shake seine Stärken voll aus, denn ein wichtiger Bestandteil der Checkpad-Infrastruktur ist Codegenerierung. Dank dynamischer Abhängigkeiten ist es möglich, mit einem Aufruf des Buildsystems das Programm zur Codegenerierung zu kompilieren, den Code selbst zu generieren und den generierten Code zu kompilieren und zu linken.

Neil Mitchell, der Autor von shake, hat eine Variante des Tools für den Einsatz bei Standard Chartered entwickelt, um wirklich große Softwareprojekte effizient kompilieren zu können. Details hierzu sowie detaillierte Infos zur internen Architektur von shake finden Sie in diesem Artikel.

Weiterlesen...