Open Source im professionellen Einsatz
Linux-Magazin 01/2016
© dzmitri mikhaltsow, 123RF

© dzmitri mikhaltsow, 123RF

Tipps für Programmierer

Aus dem Nähkästchen

Wer jahrzehntelang programmiert, füllt im Lauf der Zeit seine persönliche Trickkiste und hat Best-Practice-Tipps parat. Der Perlmeister bildet da keine Ausnahme und öffnet in dieser Ausgabe des Linux-Magazins seinen erprobten Fundus.

653

Online PLUS

Im Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/Ausgaben/2016/01/plus

Bei jedem neuen Perl-Projekt – und ich fange jede Woche mehrere davon an – gilt es zunächst, die Arbeitsumgebung abzustecken. Schließlich soll später kein Haufen Spaghettiskripte herumliegen, die keiner pflegen will oder – wegen Erinnerungslücken – kann. Auf dem CPAN steht eine Reihe von Template-Generatoren bereit. Neulich fiel mir App::Skeletor auf, das sich, über Template-Module erweitert, an lokale Gegebenheiten anpassen lässt. Kurzerhand schrieb ich Skeletor::Template::Quick, um das Original an meine Bedürfnisse anzupassen, und stellte es aufs CPAN.

Wer die Autoren-Info, wie Abbildung 1 zeigt, in der Datei »~/.skeletor.yml« im Homeverzeichnis ablegt und nach der Installation des Template-Moduls vom CPAN den Befehl »skel Foo::Bar« aufruft, bekommt blitzschnell eine Handvoll vordefinierter Dateien für eine neue CPAN-Distribution in ein neues Verzeichnis »Foo-Bar« gepflanzt. Alternativen wären das Perl beiliegende Tool »h2xs« oder das CPAN-Modul Module::Starter.

Abbildung 1: Der Skeletor erzeugt das Rohgerüst für ein neues CPAN-Modul.

Um künftige Nutzer eines neuen Moduls auf dem CPAN als Mitstreiter zu rekrutieren, enthält das miterzeugte, Perl-typische »Makefile.PL« einen Link auf das Github-Repository mit dem Sourcecode. Auf http://search.cpan.org steht der Verweis später gleich neben dem Link zum Herunterladen des Moduls, und der Autor freut sich auf Github über Pull-Requests zur Verbesserung des Codes (Abbildung 2).

Abbildung 2: Auf dem CPAN-Server steht unter Repository ein Link zum Github-Projekt des Moduls.

Solides Fundament

Der Template-Generator erzeugt im neu angelegten Verzeichnis alles, um gleich loszulegen: von den Moduldateien (»lib/Foo/Bar.pm« ) bis zu Beispielskripten wie »eg/foo-bar« und einer Testsuite (»t/001Basic.t« ) steht im neu erzeugten Verzeichnis alles bereit. Die Codedateien verfügen nicht nur über praktische Code-Snippets, sondern geben auch Templates für die Dokumentation vor. Das ist wichtig, denn zu dokumentieren, wie man den programmierten Code nutzt, sollte nie als lästige Pflicht gelten.

Wenn ich neuen Code entwerfe, schreibe ich zuerst auf, wie die Zielgruppe meine technischen Wunderwerke nach meiner Vorstellung nutzt. Meist sind es objektorientierte Module, und vor der ersten Zeile der Implementierung schreibe ich in den Abschnitt »SYNOPSIS« im »POD« -Bereich des Sourcecodes, wie die neue Klasse instanziert wird und was nachher aufgerufene Methoden machen:

my $m = MyModule->new;
$m->dosomething( 42 );

Diese leichte Übung hilft oft herauszufinden, ob das erdachte Interface wirklich eine schlaue Idee ist. Wenn es sich nur umständlich handhaben lässt oder verkehrt anfühlt, ist es schnell korrigiert, denn noch ist kein Code nachzubessern.

Stehen bleiben, TDD-Polizei!

Als vor etwa zehn Jahren das Test-Driven Development (TDD, [2]) aufkam, nach dessen Lehre Entwickler erst einen Testfall schreiben und anschließend das neue Feature einfügen, sprangen viele begeistert auf den Zug auf. Im Pair-Programming entstand neuer Code und jedem neuen Feature ging ein Testfall voraus, der vor der Komplettierung fehlschlug (roter Balken) und nach erfolgreichem Abschluss durchlief (grüner Balken).

Irgendwann war aber aus dem Verfahren die Luft raus und viele Programmierer kehrten zum alten Trott zurück. Zwei Dinge habe ich behalten: Änderungen im Code erstelle ich nach der Theorie des Minimum viable Product, klopfe erst mal die gewünschte Funktion rein, teste und nutze anschließend Refactor-Methoden, um das Projekt sauber zu halten.

Immer wenn ich einen Fehler finde und im Code berichtige, versuche ich auch einen Testfall einzufügen, der ohne den Bugfix Alarm schlägt und nach der Behebung ruhig durchläuft. Das ist unbezahlbar, um Regressionen zu vermeiden, die unvermeidlich auftreten, wenn der Code komplexer wird oder sich das Projekt der zehnten Release nähert.

So hat sich nach dem Verfahren "Steter Tropfen höhlt den Stein" mit verhältnismäßig geringem Aufwand eine erstaunlich umfangreiche Testsuite gebildet, die auch sorgfältigste Programmierer nicht ad hoc aus dem Boden stampfen könnten.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 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

  • Der Screencast zum Perl-Snapshot Linux-Magazin 08/2013

    Am Anfang war der Test: Loginsystem, agil entwickelt. Test-driven Development mit einer nebenbei generierten Testsuite verspricht Code mit weniger Fehlern. Michael "Perlmeister" Schilli betritt gleich den Pfad der Agilität und findet am Wegesrand zufällig ein passendes, nagelneues CPAN-Modul.

  • Perl-Snapshot Linux-Magazin 2012/08

    Perlmeister Michael Schilli hat seinen Snapshot verfilmt.

  • Perl-Snapshot

    Wer Programme in der weiten Welt zu verteilen gedenkt, sollte sie vorab fit für fremde Kulturen machen. Um seine selbst verfassten Perl-Module auf mehreren Linux-Distributionen in einem Rutsch zu testen, schnappt sich Perlmeister Schilli die Linux-Containers-Technik und das ressourcenschonende Docker-Projekt.

  • Perl-Snapshot

    Ein neuer Service auf Travis-ci.org listet fein säuberlich Github-Projekte eines Entwicklers auf, schickt den Code bei jedem Push durch deren Testsuites und gibt Rückmeldung, falls der Build bricht. In den zurückgelieferten Testergebnissen machen neugierige Perl-Skripte Zusatzinformationen sichtbar.

  • Perl-Snapshot

    Mike Schilli hat seine Trickkiste geöffnet und gibt im Video Tipps für Programmierer. 

comments powered by Disqus

Ausgabe 01/2017

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

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