Your browser doesn't support the features required by impress.mod.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

17.02.2017 DHd2017, Bern | 31.05.2017, SoSe 2017, Mainz

Nachhaltige Softwareentwicklung in den Digital Humanities

Konzepte und Methoden

Slides: https://digicademy.github.io/2017-dhd-sustainable-software

Torsten Schrade | @digicademy | Twitter digicademy | CC-BY 4.0

Gliederung

  1. Herausforderungen für die nachhaltige Entwicklung von Software in den Digital Humanities
  2. Konzepte und Methoden für die nachhaltige Entwicklung von Software in den Digital Humanities
  3. Anwendungsbeispiel: Das Corpus Vitrearum Medii Aevi

01

Herausforderungen

Für eine nachhaltige Entwicklung von Software in den Digital Humanities

Das Problem

Gründe für nicht nachhaltige Softwareentwicklung

  • Ausgelaufene Projektfinanzierung wodurch der Weiterbetrieb der Software nicht mehr gewährleistet ist
  • Entwickler_innen, die dem Projekt nicht mehr zu Verfügung stehen, aber vor ihrem Weggang die ausschließlichen Wissensträger waren
  • Veraltete und/oder nicht mehr wartbare Software-Infrastruktur (mit implizitem, undokumentierten "Infrastrukturwissen")
  • Veralteter oder unverständlicher Programmcode, der von neu einsteigenden Entwickler_innen weitergeführt werden muss
  • Vermeidbare Sicherheitslücken in der Software, die erst im Produktivbetrieb auffallen und einen Weiterbetrieb der Software verhindern
  • Bugs in der Software, die erst im Produktivbetrieb auffallen, da vorher keine Softwaretests durchgeführt wurden
  • Datenverluste oder unerwartetes Verhalten der Software, da die Anwendung nicht unter Produktiv-Bedingungen (infrastrukturell gesehen) entwickelt wurde
  • Fehlendes Monitoring der Forschungssoftware, wodurch Störfälle nicht oder erst spät auffallen

Eine weitere Herausforderung

Die schnellen technischen Innovationszyklen im Verhältnis zu den Projektlaufzeiten

Übrigens...

Alle diese Gründe sind nicht unbedingt spezifisch für die Digital Humanities!

Doch die Digital Humanities diskutieren Lösungsansätze aus der freien Wirtschaft und der Softwareindustrie bisher nur sehr begrenzt...

Aktuelle Studie

Simon Hettrick, The Software Sustainability Institute, 2016

PDF: http://bit.ly/23jxw7D
"Many researchers know how to code, but few understand the wider set of skills that are needed to develop reliable, reproducible and reusable software. [...] software engineering should be incorporated [...] at the very start of a research career" [S.14]
"We must raise awareness of the fundamental role of software in research [...] All stakeholders, from researchers to policymakers, must be included in this awareness raising campaign" [S.11]
"Research software should be recognised as a valuable research object in line with the investment it receives and the research it makes possible [...] Research software should become a citable scientific deliverable of equivalent value to researchers as that of a publication" [S.11]

Digital Humanities Craftsmanship!

Auf die Praxis gerichtete, methodische Kompetenzen

"Digital Humanities Craftsmanship" meint...

  • eine schon im Studium beginnende Beschäftigung mit dem Thema Softwareentwicklung,
  • einen durch ausreichend Entwicklungspraxis erzielten Kompetenzaufbau,
  • eine kontinuierliche Verbesserung der eigenen entwicklerischen Fähigkeiten und eine beständige Justierung des eigenen Wissens auf neue Technologien und Methoden,
  • ein methodisches Wissen um die Prinzipien nachhaltiger Softwareentwicklung auf allen Tätigkeitsebenen (auch Digital Humanities Projektmanager_innen müssen wissen, wie gute und nachhaltige Software entwickelt wird),
  • eine Anerkennung von guter, nachhaltig entwickelter Forschungssoftware als eigene wissenschaftliche Leistung, vergleichbar mit Publikationen.

Digital Humanities Craftsmanship NOW!

Einstieg in die Materie

Literatur und Linktipps

02

Konzepte und Methoden

Für die nachhaltige Entwicklung von Software in den Digital Humanities

Kommunikation? Kommunikation!

Exkurs: Der Webdesigner und die Hecke...

Ein Twitter-Erlebnis von @webrocker

Mein Medium "Web" ist extrem komplex, verändert sich ständig und erfordert die konstante Bereitschaft, sich weiterzubilden [...] Nach einem in dieser Hinsicht eher recht interessanten Arbeitstag twitterte ich gestern Abend also:
efeu hecke geschnitten. das leben kann so schön einfach sein… einfache arbeit, sofort ergebnis, brain idled… toll. und keiner redet rein.
— a Tom (@webrocker) 5. August 2014

Die Antwort-Lawine

@webrocker „Der alte Schnitt der Hecke hat uns besser gefallen. Können wir die zum Vergleich noch mal sehen?“
— Frederic Hemberger (@fhemberger) 5. August 2014
@fhemberger @webrocker „Das grün ist irgendwie … nicht grün genug. Findet meine Frau auch. Und … kann man die Hecke größer machen?“
— Matthias Mees (@yellowled) 5. August 2014
"Das ist doch nur Garten, keine Raketenwissenschaft" @MadeMyDay
— a Tom (@webrocker) 6. August 2014
@webrocker Wir sind ein bisschen enttäuscht, das das Design der Hecke nicht so richtig unserem Entwurf in Word entspricht.
— ker0zene (@ker0zene) 6. August 2014
Möchte eine einfache #Hecke, die ich nicht pflegen muss. Eine Reihe Blätter, keine Äste, keine Wurzeln. Untergrund ist Beton. @webrocker
— Regimekritiker (@regimekritiker) 7. August 2014

Nachhaltige Entwicklung

Iterativ, kontinuierlich, beständige Kommunikation

  • Jede Phase (Konzeption, Entwicklung, Deployment, Kontrolle) kann als iterativer, sich gegenseitig beeinflussender Kreislauf begriffen werden (dunkle und hellgraue Pfeile)
  • In Einklang mit agilen Entwicklungsprinzipien sollten kleinschrittige Iterationen gewählt werden, die idealerweise genau ein Software-Feature in den Blick nehmen
  • Im Sinne einer "Continuous Delivery" (kontinuierliche Bereitstellung) wird für jedes Feature der links dargestellte Entwicklungszyklus durchlaufen
  • Dies führt zu einer beständigen und nachvollziehbaren Abgeschlossenheit einer Forschungssoftware auf allen Ebenen
  • Zentrales Element ist die kontinuierliche Kommunikation aller Projektbeteiligten untereinander in allen Entwicklungsphasen

Konzeptionsebene

Domain Driven Design (DDD)

  • Domain-Driven Design ist eine konzeptionelle Herangehensweise an die Modellierung komplexer Software.
  • Das Hauptaugenmerk fällt dabei auf die Einführung einer ubiquitären (allgemein verständlichen) Sprache, welche in allen Bereichen der Softwareerstellung von den Konzeptionsgesprächen mit den Fachwissenschaftler_innen bis hin zur Code-Ebene verwendet werden sollte.
  • Durch regelmäßige Iterationen nach dem DDD-Prinzip kann sich die Software kontinuierlich mit der sich stetig wandelnden Projektrealität verändern. Die Codebasis bleibt dabei im Einklang mit der Konzeptions- bzw. Modellierungsebene.

Siehe auch D. Kasper, M. Grüntgens: Nachhaltige Konzeptionsmethoden für Digital Humanities Projekte. Vortrag auf der DHd2017, 15.02.2017

Beispiel einer Basis-Domänenmodellierung für die Plattform Hessische Kunstdenkmäler.

Konzeptionsebene

Behaviour Driven Development (BDD)

  • BDD beschreibt die Funktionalität einer Anwendungsdomäne mittels formalisierter Szenarien.
  • BDD ist ein "outside-in"-Ansatz, der mit dem Blick der Nutzer_innen auf eine Forschungssoftware blickt und deren Funktionalität in ausführbaren Tests dokumentiert.
  • Die Tests werden in natürlicher Sprache nach einem festen Dreischritt-Prinzip formuliert.
  • Dadurch kann die oftmals "flüchtige" (= wenig nachhaltige) Präsentationsschicht einer Software in Zusammenarbeit mit den Fachwissenschaftler_innen gemeinsam beschrieben und nachhaltig dokumentiert werden.

Siehe auch D. Kasper, M. Grüntgens: Nachhaltige Konzeptionsmethoden für Digital Humanities Projekte. Vortrag auf der DHd2017, 15.02.2017

Testszenarien für das Such-Feature von Gutenberg Biographics in natürlicher, allgemeinverständlicher Sprache

Entwicklungsebene: DevOps

DevOps: Nachhaltigkeit durch "Infrastructure as Code"

  • DevOps benutzt Werkzeuge, um eine automatische Reproduzierbarkeit der Softwareanwendung einschließlich ihrer Umgebung zu erreichen.
  • Der große Vorteil liegt in der automatisch enstehenden Dokumention und Nachvollziehbarkeit spezialisierter Software-Infrastrukturen. Es gibt kein implizites Wissen mehr, dass nur "der Admin" hat.
  • Gleichzeitig wird die Laufzeitumgebung von der Hardware abstrahiert (bspw. durch Virtualisierung). Eine Forschungssoftware wird somit "cloud-fähig", bzw. kann in beliebigen Infrastrukturen reproduziert werden.
  • Die Konfigurationen sind meist einfache Textdateien in einer bestimmten Syntax, die sich gut versionieren lassen. Somit lässt sich jede Modifikation an einer Anwendungsumgebung sauber dokumentieren und protokollieren.

Entwicklungsebene: Coding

Feste Begrifflichkeiten, Coding Guidelines, Pair Programming

  • Die innerhalb einer Anwendungsdomäne festgelegten Begrifflichkeiten sollten konsequent im Code durchgehalten werden.
  • Idealerweise wird der Code "sprechend" geschrieben. Durch den Einsatz einer verständlichen Sprache kann die meiste Funktionalität von allen Projektbeteiligten verstanden werden.
  • Bei der Abstraktion helfen Frameworks, die Prinzipien des Domain Driven Design integrieren (jeweils sprachenspezifisch, für PHP bspw. das Flow Framework oder auch Symfony).
  • Daneben ist der konsequente Einsatz von Coding Guidelines entscheidend für die Nachhaltigkeit.
  • Methoden wie bspw. das "Pair Programming" können helfen, besseren Code zu schreiben und die Wissensträgerschaft auf mehrere Schultern im Team zu verteilen.

Nach DDD-Prinzipien entwickelter, verständlicher Code einer Anwendung

Entwicklungsebene: Design

Geräteunabhängigkeit, Style Guides, Barrierearmut

  • In der Präsentationsschicht einer Anwendung sollte (insbesondere im Bereich von Webapplikationen) auf Geräteunabhängigkeit geachtet werden (Responsive Design).
  • Barrierearme Entwicklung führt dazu, dass die Präsentationsschicht einfacher, effizienter, besser nachvollziehbahr und somit nachhaltiger gestaltet wird.
  • Auch hier helfen Frameworks (bspw. Bootstrap, Foundation oder auch Microframeworks) Zeit bei der Implementierung zu sparen und gleichzeitig standardkonform zu arbeiten.
  • Es empfiehlt sich, schon in der frühen Designphase bei Wireframes und MockUps auf Webtechnologien zu setzen (HTML5/CSS3). So angelegte Designs können gut versioniert und bereits mittels BDD getestet werden. Zudem ergibt ist ein besserer Feedback-Prozess, da die Oberfläche schon funktional ist.

Ein geräteunabhängiges (responsives) Design für die Präsentationsschicht ist nachhaltiger und zugänglicher.

Commit

Versionskontrolle auf allen Ebenen

  • Alle bisher genannten Konzepte streben eine Versionierbarkeit ihrer Outputs an, was die Nachvollziehbarkeit und somit die Nachhaltigkeit auf der Software-Ebene deutlich steigert.
  • Auf diese Weise hergestellte Software legt nicht nur offen, wie sie funktioniert, sondern wie sie hergestellt wurde.
  • Dem Commit in ein Versionskontrollsystem kommt im nachhaltigen Entwicklungsprozess eine zentrale Bedeutung zu: Durch einen Commit werden automatisierte Test- und Bereitstellungsroutinen in Gang gesetzt (z.B. mittels einer Continuous Integration Software wie bspw. Jenkins).
  • Schlägt ein Test- bzw. Buildprozess nach einem Commit fehl, erhalten die Projektbeteiligten sofort Feedback. Die fehlerhafte Software wird dabei nicht auf das Produktiv-System ausgespielt sondern kann zuerst korrigiert werden.

Versionskontrolle mit Git

Deployment-Ebene

Automatisiertes Testing

  • Idealerweise gibt es in einem nachhaltigen Entwicklungsprozess unterschiedliche Testebenen: Auf der Code-Ebene sind dies Unit-Tests, die einzelne Einheiten (Units) einer Software auf korrekte Funktionsweise überprüfen.
  • Darauf folgt die Ebene der Akzeptanztests (hier kommt ein BDD Framework wie bspw. Behat zum Einsatz). Die in der Modellierungs- und Entwicklungsphase erstellten Szenarien werden getestet.
  • Im Bereich Webapplikationen sind auch explorative Tests (manuelle Tests) zuweilen als dritte Teststufe notwendig, da die Vielzahl an Endgeräten und die unterschiedlichen Browser oft eine manuelle Überprüfung notwendig machen. Hier helfen virtuelle Maschinen und Smartphone- bzw. Tablet-Emulatoren oder ein auf das Cross-Browser-Testing spezialisierter (kommerzieller) Webdienst.

Test-Run des vorher gezeigten Such-Szenarios von Gutenberg Biographics mit Behat.

Kontrollebene

Automatisches und kontinuierliches Monitoring

  • Ist eine Applikation erfolgreich in die Produktiv-Umgebung eingespielt, ist zur Sicherstellung des Betriebs und somit der nachhaltigen Verfügbarkeit der Anwendung ein kontinuierliches Monitoring unabdingbar.
  • Nur durch ein Monitoring können unvorhergesehene Bugs oder Seiteneffekte beim Betrieb einer Software frühzeitig erkannt und bearbeitet werden.
  • Auch für das Monitoring existieren sehr gute Programme wie bspw. Nagios oder Zabbix oder Cacti, die mit denen sich eine 24/7 Überwachung der Applikation umsetzen lässt.

03

Anwendungsbeispiel

Das Corpus Vitrearum Medii Aevi

Corpus Vitrearum Medii Aevi

Projektarchitektur und Online-Applikation

  • Forschungsplattform mit digitalem Bildarchiv (hochauflösende TIFFs) unter CC BY-NC 4.0 Lizenz.
  • Metadaten werden als XMP direkt in die Bilder eingebettet. Dadurch können die Forschungsprimärdaten (Bilder) und die zugehörigen Metadaten vollständig separat von der eigentlichen Webapplikation gehalten werden. Nachhaltigkeit durch Systemneutralität der Daten.
  • Die Webapplikation speist bzw. extrahiert den Datenbestand, auf dem die Online-Funktionalitäten umgesetzt sind, immer aus den Forschungsprimärdaten (den Bildern mit eingebetteten Metadaten).

Corpus Vitrearum Medii Aevi

Verständliche und einheitliche Sprache auf allen Ebenen

Domain Model

Applikations-Code

Datenbankschema

XMP Schnittstelle

Es wurde bei der Umsetzung darauf geachtet, auf allen Ebenen eine durchgängige, der Wissensdomäne bzw. dem Forschungsgegestand "Glasmalerei" angemessene Sprache einzusetzen. Von der Modellierung über das Datenbankschema bis hin zum Code und den offenen Schnittstellen.

Als Vokabular wurden hierbei die Begrifflichkeiten aus dem XMP-Standard gewählt, da für sie bereits Definitionen existieren. Für CVMA-spezifische Begrifflichkeiten wurde ein eigenes, kontrolliertes Vokabular eingeführt und veröffentlicht. Siehe: https://lod.academy/cvma/ns/xmp/

Corpus Vitrearum Medii Aevi

Testing und Monitoring

  • Für die Funktionalitäten der CVMA-Oberfläche wurden umfangreiche BDD-Testszenarien entwickelt. Diese werden vor jedem Deployment von neuen Funktionalitäten in das Produktiv-System ausgeführt.
  • Ein Zabbix-basiertes Monitoring macht frühzeitig auf Unregelmäßigkeiten im Betrieb oder Lastspitzen aufmerksam (bspw. via automatischer E-Mail-Benarichtigungen an die DevOps).

BDD Tests

Zabbix Monitoring

Fazit

Nachhaltige Softwareentwicklung in den Digital Humanities bedeutet...

F I N I S

Danke für Ihre Aufmerksamkeit!

Quellenangaben

Literatur

Verwendete Software

Download