27
Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar „Softwareentwicklung in der Wissenschaft“ 2015 Hamburg 5. Mai 2015 [email protected]

Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Einblicke ins Testen und die testgetriebeneEntwicklung (TDD) in wissenschaftlicher

Softwareentwicklung

Im Seminar „Softwareentwicklung in der Wissenschaft“ 2015

Hamburg 5. Mai 2015

[email protected]

Page 2: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 2 / 27

Ausgangspunkte

◼ Nanthaamornphong et al., Mai-Juni 2014"Building CLiiME via Test-Driven Development: A Case Study" – Neuentwicklung

◼ Clune, T.L. und Rood, R.B., Nov.-Dez 2011"Software Testing and Verification in Climate Model Development" – Rewrite & Neuentwicklung

◼ Rilee, M.; Clune, T., 2014"Towards Test Driven Development for Computational Science with pFUnit" – Frameworks

Page 3: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 3 / 27

Agenda

◼ Bestandsaufnahme◼ Voraussetzungen für TDD◼ Beispiele◼ Fazits

Page 4: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 4 / 27

Agenda

◼ Bestandsaufnahme◼ Voraussetzungen für TDD◼ Beispiele◼ Fazits

Page 5: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 5 / 27

Ziele und Begrifflichkeit

◼ Ziel der wissenschaftlichen Softwareentwicklung◾ Das wissenschaftliche Verständnis erhöhen

◼ Vergleiche◾ Validation: mit Beobachtungen / Messungen◾ Verifikation: mit analytischen Testfällen und

anders berechneten Ergebnissen

Page 6: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 6 / 27

Haltung gegenüber Tests

◼ Modellvalidation und Softwareverifikation werden vermischt

[...] the community isn’t aware of pervasive unit testing’s benefits and has misconceptions about the nature and difficulty of implementing unit tests. [Clune, 2011, „Software Testing and Verification in Climate Model Development“]

◼ eigener wissenschaftlicher Teststil in Forschergruppen

Page 7: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 7 / 27

„Bildet die Software die Realität ab?“

◼ Tests auf Systemebene z.B.◾ Realistische Eingangsdaten◾ Stürzt die Simulation ab?◾ paralleler Betrieb◾ Checkpoints

◼ Übereinstimmung des theoretischen Modells und der Software wird angenommen

◼ Komponententests / Unittests◾ Filigrane Tests meist nicht vorhanden

Page 8: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 8 / 27

Agenda

◼ Bestandsaufnahme◼ Voraussetzungen für TDD◼ Beispiele◼ Fazits

Page 9: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 9 / 27

Warum braucht die Wissenschaft TDD?

◼ passt besser als plan-driven development◼ reduziert Entwicklungsrisiken für Änderungen◼ früh gefundene Fehler sind günstiger◼ filigrane Tests laufen schneller◼ motivierende Fortschrittsanzeige

◼ Erstrebenswert:◾ Testframework◾ Unittests ständig während der Programmierung,

Systemtests nächtlich oder wöchentlich

Page 10: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 10 / 27

Besonderheiten für wissenschaftliche Soft- wareentwicklung und Hochleistungsrechnen

◼ parallele Ausführung◼ numerische Algorithmen

◾ feinkörnig implementieren◾ Objektorientierung verwenden

◼ Fließkomma Arithmetik◾ Tests mit relativer und absoluter Toleranz◾ Filigrane Tests um Fehlerakkumulation zu

verhindern◼ (Chaostheorie)

Page 11: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 11 / 27

Tests in der Wissenschaft

◼ Konflikt mit Genauigkeit numerischer Approximation◾ besser: synthetische Werte auf kleinen Gittern

⇒ Überschaubares Ergebnis

◼ Altlastencode / Legacy code◾ wenn möglich in testbare Teile zerlegen◾ Ansatz: neue Funktionalität in testbare Funktionen

diese aus Altlast nur aufrufen.◾ Bei Erweiterung Beständigkeit der Altlast testen

Page 12: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 12 / 27

Agenda

◼ Bestandsaufnahme◼ Voraussetzungen für TDD◼ Beispiele◼ Fazits

Page 13: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 13 / 27

PARAMESH – Tests vor TDD

◾ ist ein Framework zur parallelen Implementation von mehrdimensionalen partiellen Differentialgleichungen

◾ u.a. automatische Gitterverfeinerung

Tests◾ während der Entwicklung sehr wichtig◾ keine Unittests, Teststframework oder Einheitlichkeit◾ Standalone Programme, meist per Hand ausgeführt◾ „eigener“ Codeabschnitt, „eigene“ Tests◾ Tests nicht dokumentiert

Page 14: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 14 / 27

TDD Bsp.: Community Laser-Induced

Incandescence Modeling Environment – CLiiME

◾ Simuliert von Laser angeregtes Glühen von Partikeln

◾ erstes agiles Projekt am Institut◾ 3 Entwickler und 1 Fachexperte◾ Fortran für die Numerik, Java fürs GUI

Tests◾ echte Unittests mit Testklassen◾ kurze Tests ⇒ übersichtlich, präzise

Page 15: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 15 / 27

example of unit testing code for the absorption energy.

[Nanthaamornphong, 2014, Figure 2]

subroutine absorption_energy_input(this) [...]

real(rkind) :: expect = 2.441e-10 absorption = absorptionEnergy() Qabs = absorption%Energy() call assert(error_within_tolerance(expect, Qabs), & error_message("Qabs = 2.441e-10 is expected"))end subroutine

subroutine absorption_energy_default(this) [...] !Result from running the Igor code real(rkind) :: expect = 1.441E-10 character(len=*) :: filename='default.txt' absorption = absorptionEnergy(filename=filename) Qabs = absorption%Energy(properties,laser) call assert(error_within_tolerance(expect, Qabs), & error_message("Qabs = 1.44E-10 is expected"))end subroutine

Page 16: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 16 / 27

Numerische Funktionen in CLiiME

◼ Zerlegung in einfache Operationen◼ Test: Vergleich mit extern berechneten

Beispielwerten◼ relative Fehlertoleranz von 10 %

Page 17: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 17 / 27

TDD Regeln in CLiiME

◼ Unabhängigkeit◼ keine manuelles Setup◼ Test sollen schnell laufen◼ Entwickeln bis Tests erfüllt werden ◼ Test erstellen, wenn ein Bug gefunden wird◼ Tests müssen vor Repository Check-in erfüllt sein

Page 18: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 18 / 27

Weitere TDD Beispiele

◼ Gtraj – Rewrite◾ 2 Fehler gefunden:

Grenzfallproblem, Fehler in komplexer Numerik◾ Wissenschaftler wollten erst implementieren, dann

testen◾ Vernachlässigung bei Erfolgsphase

◼ Snowflake – Neuentwicklung◾ saubere Mathematik als Vorlage◾ 12h Programmierung

⇒ 800 Zeilen Tests, 700 Zeilen Implementation◾ auf Anhieb korrekt

Page 19: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 19 / 27

Agenda

◼ Bestandsaufnahme◼ Voraussetzungen für TDD◼ Beispiele◼ Fazits

Page 20: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 20 / 27

Fazits I◼ Tests…

◾ fördern Wartbarkeit und flexible Software◾ dokumentieren Sinn und Zweck gewisser Codeteile◾ ermöglichen schadenloses Refactoring

⇒ bessere Codequalität◾ ermöglichen einfachere Erweiterung◾ definieren konkrete Ansprüche◾ dienen als Anwendungsbeispiel◾ bewirken Erfolgserlebnisse◾ reduzieren explizite Autorenzuordnung

◼ Filigrane Tests…◾ lassen sich schnell und ständig ausführen

Page 21: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 21 / 27

Fazits II Wissenschaft sensibilisieren

◼ Implementation ≠ Theorie◼ Tests fördern Verständnis der Theorie◼ Tests zeigen, dass das wissenschaftliche

Verständnis vertrauenswürdig umgesetzt ist⇒ Vertrauen ins Modell steigt⇒ Vertrauen in Prognosefähigkeit steigt

◼ Zusammenspiel Wissenschaft und Softwareentwickler◾ TDD verbessert Zusammenarbeit

▪ Wissenschaftler stellt Anforderungen▪ Entwickler entwickelt und verbessert Code

Page 22: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 22 / 27

Wissenschaftler Entwickler

[Nanthaamornphong, 2014, Figure 1]

Page 23: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 23 / 27

Fazit III Probleme

◼ Altlasten◾ Benötigen besondere Beachtung

◼ striktes TDD liefert keine Antwort für numerische Funktionen

◼ Filigrane Tests mit Objekten und Mocks in Tests◾ Mocks sind (in Fortran) kaum automatisch zu

generieren◾ Objektorientierung müsste sich erst durchsetzen

◼ es werden automatische easy-to-use undeasy-to-lern Frameworks gebraucht

◼ Unterstützung durch IDE

Page 24: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 24 / 27

Einschub: pFUnit (seit 2005)

Paralleles Fortran Unittesting Framework◼ Für

◾ Mehrdimensionale Arrays◾ Fließkommazahlen

▪ Relative und absolute Fehler, NaNs◾ Parallelismus

▪ MPI▪ OpenMP

◼ Mockgenerator

Page 25: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 25 / 27

Fazit IV Ratschläge

◼ Vor Projektstart: Schulung in agiler Softwareentwicklung und TDD

◼ vorteilhaft: Mentor für Agilität◼ bei „größeren“ Projekten: zentrale

Fehlerverwaltung◼ Evaluation der Tests◼ Beachte: Mehr Code zu warten

Page 26: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 26 / 27

Mein Fazit

◼ Testgetriebene Entwicklung kann in Wissenschaft angewendet werden

◼ TDD benötigt Lernprozess bei Wissenschaftlern◼ Viel Hoffnung in TDD◼ Mehr Softwareentwickler in Wissenschaft

⇒ besserer Wissenschaftlicher Code◼ TDD ist ein guter aber anspruchsvoller Ansatz

Page 27: Einblicke ins Testen und die testgetriebene Entwicklung (TDD ......Einblicke ins Testen und die testgetriebene Entwicklung (TDD) in wissenschaftlicher Softwareentwicklung Im Seminar

Hamburg, 05.05.2015 Marek Jacob, Testing: Case studies 27 / 27

Quellen

◼ Nanthaamornphong, A.; Carver, J.C.; Morris, K.; Michelsen, H.A.; Rouson, D.W.I.,"Building CLiiME via Test-Driven Development: A Case Study",Computing in Science & Engineering , vol.16, no.3, pp.36,46, May-June 2014, doi: 10.1109/MCSE.2014.33

◼ Clune, T.L.; Rood, R.B., "Software Testing and Verification in Climate Model Development", Software, IEEE , vol.28, no.6, pp.49,55, Nov.-Dec. 2011, doi: 10.1109/MS.2011.117

◼ Rilee, M.; Clune, T., "Towards Test Driven Development for Computational Science with pFUnit", Software Engineering for High Performance Computing in Computational Science and Engineering (SE-HPCCSE), 2014 Second International Workshop on , vol., no., pp.20,27, 21-21 Nov. 2014, doi: 10.1109/SE-HPCCSE.2014.5