enercast GmbH

Mit UML Lab innovative Softwareprodukte agil und effizient entwickeln

enercast GmbH

Performance bei Online-Prognosen für Erneuerbare Energien

Der Ausbau und der Verbrauch erneuerbarer Energien soll in den nächsten 10 Jahren verdoppelt werden. Energieträger wie Wind und Solar sind nahezu unerschöpfliche Energiequellen, deren Leistungspotenzial weit größer ist, als der deutsche Stromverbrauch. In der Praxis ist das Einspeisen von Solar- und Windenergie in die Stromnetze jedoch ein großes Problem. Niemand weiß genau, wann der Wind bläst oder wie die Sonne scheint. Die Schwankungen belasten die Netze, führen zu erheblichem Energieverlust und lassen den Strompreis stark schwanken. Die Enercast GmbH löst dieses Problem durch eine Software-as-a-Service-Lösung zur Prognose von Wind- und Sonnenenergie.

Der Webservice enercast.de stellt vielseitige Prognosen rund um die Produktion, die Einspeisung und den Handel von Energie aus Wind- und Photovoltaik-Anlagen zur Verfügung. Er bietet einen detaillierten Überblick, an welchem Ort, zu welcher Uhrzeit und in welchen Mengen Wind- und Sonnenenergie in Deutschland produziert wird. Aus der Vorhersage europäischer Wetterdienste und satellitengestützter Strahlungsmeldungen berechnen die Algorithmen von enercast individuelle Ertragsprognosen. Das System führt die Berechnungen durch und verarbeitet hierbei Hunderte Terrabyte an Wetterdaten und Geoinformationen.

Der Prognosespezialist richtet sich damit an an Stromhändler, Netzbetreiber, Betriebsführer, Smart-Home- und Smart-Grid-Anbieter. Diese können mit enercast.de die Produktion von Wind- und Solarenergie prognostizieren und diese Energie effizient in die Netze und Energiemärkte einspeisen.

Projektaufgabe:

Für die 15-Minuten-genauen Leistungsprognosen bildet das Datenmodell von enercast.de unterschiedliche Datenstrukturen ab und setzt sie zueinander in Beziehung:

  • Geoinformationen und Messdaten mit mehr als 750 Millionen Datensätzen,
  • aktuelle Wetterdaten,
  • Standorte von über 1.2 Millionen Wind- und Solarparks

Die hohe Nachfrage nach unterschiedlichen Webservices vergrößerte in den letzten Jahren die zu verarbeitende Datenmenge und erhöhte die hierfür benötigte Verarbeitungszeit. Deshalb wurde das enercast-Datenmodell mit JPA (Hibernate) in den letzten 4 Jahren von 8 Softwareentwicklern kontinuierlich weiter entwickelt. Das Modell bestand deshalb inzwischen aus vielen verschiedenen Teilmodulen mit über 2.000 Klassen.

enercast.de ist eine Software-as-a-Service-Lösung der enercast GmbH. Das Unternehmen mit Sitz in Kassel fokussiert sich auf komplexe Anwendungslösungen für die Energiebranche.

Der Software Engineering Prozess der enercast GmbH ist hierbei geprägt von einer engen Verbindung zur wissenschaftlichen Forschung und einer Vernetzung mit der Energiewirtschaft. Das Unternehmen arbeitet beispielsweise eng mit dem Fraunhofer-Institut für Wind- und Energiesystemtechnik (Fraunhofer IWES) zusammen. Über die Innogy Venture ist zudem der Energiekonzern RWE an enercast beteiligt.

Technischer Hintergrund:

In Java werden die Methoden hashCode() und equals() verwendet, um die Identität von Objekten zu überprüfen. Dies übernimmt normalerweise die Java VM. Für Datenbankanwendungen, bei denen beispielsweise zwei unterschiedliche Java-Objektinstanzen dasselbe reale Objekt beschreiben, ist das unzureichend. Deshalb ist es erforderlich, beide Methoden in jeder Klasse des Datenmodells zu überschreiben und in der Implementierung die Werte der jeweiligen Attribute zu berücksichtigen. Hierzu gibt es zahlreiche Implementierungsmöglichkeiten, jede mit eigenen Vor- und Nachteilen. Im Fall von enercast hat der Projektleiter Bernd Kratz die konkrete Implementierung vorgegeben, diese sollte mit UML Lab für das gesamte Datenmodell vereinheitlicht werden. 

Werden hashCode() und equals() überschrieben, sollte dies in allen Klassen auf die gleiche Weise erfolgen. Ein manuelles Vorgehen ist hierbei oftmals lästig, wenig kreativ und erfordert gleichwohl ein hohes Maß an Konzentration und Ausdauer von den beteiligten Softwareentwicklern. Darüber hinaus müssen bei einer Erweiterung der Klassen um ein Attribut stets beide Methoden angepasst werden. 

Bei der Analyse, welche Verbindungen zwischen zwei Objekten bestehen und ob zwei Objekte in Wahrheit gleich sind, werden bei der Überprüfung auch mal sehr große Teile des Datenmodells aus der Datenbank geladen. Dies führt zu einem übergroßen Speicherbedarf (Memory-Footprint) der Anwendung und deshalb zu einer schlechten Performance. Gerade für sehr große Datenbanken wie die der enercast GmbH ist aber ein möglichst geringer Footprint nötig.

Lösung:

Yatta Solutions unterstützte die enercast GmbH deshalb bei der Vereinheitlichung und Refaktorierung ihres Datenmodells mit UML Lab. UML Lab verwendet für das Round-Trip-EngineeringNG einen templatebasierten Ansatz für Code-Modell-Transformationen. Dabei werden dieselben Templates, die üblicherweise nur für die Codegenerierung verwendet werden, auch für das Reverse Engineering genutzt. Hieraus resultiert eine äußerst flexible und leistungsfähige Lösung zum agilen Modellieren von Softwaresystemen. 

Die durchgeführten Arbeitsschritte bei der enercast GmbH waren im Detail:

1. Implementierungsvorgaben im Code Style spezifizieren

Die Templates für hashCode() und equals() wurden anhand der enercast Requirements in einem eigenen Code Style implementiert. Daran angeschlossen wurden sie in einem Beispielprojekt getestet und in Zusammenarbeit mit der enercast GmbH iterativ vervollständigt.

2. Templates erweitern

Im zweiten Schritt wurden die Templates erweitert, um beliebige alte Implementierungen der beiden Methoden einlesen zu können. Die Erweiterung diente dazu, die Templates mit den neuen Anforderungen zu verwenden, wenn sie auf den bestehenden Code passten. Entsprach die Implementierung nicht den Anforderungen, wird das Projekt zwar vollständig eingelesen, aber die entsprechende Methode(n) im Modell mit einem eigenen UML Keyword markiert.

«if hasKeyword(„legacyHashCode“)»
   …legacy Implementierung…
«else»
   …optimale Implementierung…
«endif»

3. Reverse Engineering

Der bestehende enercast Source Code wurde anschließend mit UML Lab durch das Template-basierte Reverse Engineering eingelesen. Existierende hashCode() und equals() Methoden, die nicht den Requirements entsprachen, wurden dabei im Modell - an Hand der Templates - automatisch mit dem entsprechenden Keyword („legacyHashCode“ oder „legacyEquals“) markiert. Die so markierten Methoden waren im Anschluss leicht im Klassendiagramm identifizierbar, da sie per Modellvalidierung anhand dieser Keywords automatisch grafisch hervorgehoben werden konnten.

4. Modell-basiertes Refactoring

Zur Modellrefaktorierung wurde daraufhin ein kurzes Script in QVTo angelegt. Das Script entfernte beim Anwenden auf das Modell vollautomatisch alle legacy-Keywords. Daran angeschlossen wurden automatisch neue optimierte Methodenrümpfe generiert. 

Dieser Schritt kann optional auch ohne QVTo Script durch die beteiligten Entwickler manuell im Code durchgeführt werden. Die Automatisierung durch UML Lab spart jedoch mühsame Kleinarbeit. Das Ergebnis kann in jedem Fall im Modell nachvollzogen und geprüft werden.

5. Codegenerierung

Mit Hilfe des "Compare Generated Code"-Dialogs wurden die geänderten Implementierungen bearbeitet. Dabei gab es im enercast-Projekt nur Änderungen in den Methodenrümpfen von hashCode() und equals(). Entsprach der Code den Anforderungen, wurden die Änderungen durch die UML Lab Codegenerierung auf den Source Code angewandt.

Der gesamte Zyklus kann beliebig häufig wiederholt werden. Im Fall von enercast.de wurde sehr agil auf die sich ändernden Anforderungen an die Methodenimplemen­tie­rung reagiert.

Technischer Nutzen

  • Einfache Anpassung des UML Lab Codegenerators an spezifische Projektanforderungen
  • Werkzeug-gestütztes Refactoring vereinheitlicht automatisch gewachsene Implementierung
  • Einheitliche Implementierung von hashCode() und equals()
  • Optimierter Speicherbedarf der Applikation
  • Hoch qualitatives Datenmodell
  • Hochgradig skalierbare Anwendung durch neues Datenmodell

Kundennutzen der enercast GmbH

  • Performantes und leistungsfähiges Softwaresystem
  • Kostengünstiges, schnelles und zukunftsfähiges Datenmodell