Intelligente Testauswertung in Deployment Pipelines

RIGHT

Andreas Mautz

  • Erstes Programm 1996
  • Erster Magento Shop 2008
  • Dazwischen 3 Jahre QA für große Projekte
  • CTO @ webvisum
  • Mitglied im FireGento Vorstand
  • @mautz_et_tong
Hallo BOTTOM

Deployment Pipeline

  • Automatisiert
  • Gekapselt
BOTTOM
Baut Tested Deployed

Testauswertung

  • Normalisierung
  • Verlauf

Intelligenz

  • Grenzwerte
  • Trends

Brauche ich das?

RIGHT

Kommt drauf an...

Nein:

Wenn ihr nie Fehler macht

Wenn euch Testen egal ist

Wenn ihr nicht wisst, dass der Kunde Testen bezahlen sollte

In allen anderen Fällen:

JA!

Entwickler

  1. Testen ist Standard, nicht Ausnahme
  2. Testen spart Zeit, Geld und Nerven
  3. Testen erhöht die Softwarequalität

DevOps

  1. Test Chaining
  2. Pipeline Design
  3. Grenzwerte
RIGHT

Shopbetreiber

  1. Protokollierte Verbesserung
  2. Einfache Kontrolle
  3. Blick über den Tellerrand
RIGHT

Entscheider

  1. Effiziensteigerung
  2. Sicherheit
  3. Teamentwicklung
RIGHT

Was brauche ich, um zu starten?

Kommt drauf an...

Ich gebe euch jetzt keine Liste in die Hand, aber das kommt Open Source Backend von Eigenbau auf Laravel Frontend von Eigenbau auf vue 23 Testkategorien in der Pipeline Von Codeception gerade Wechsel auf cypress

Vorbereitung und TTFR*

*TTFR = Time To First (Test) Result

RIGHT
Fast and cheap: don't test at all Good and fast: start local testing with grumphp and start blaming yourself Good and cheap: framework (when it is done) - use given tools only

Lessons learned:

Wie haben wir das gemacht?

Lokal (grumphp)

Pipeline Design (Gitlab)

Acceptance Testing (Codeception / Cypress.io)

Static Testing

RIGHT
Es gibt zig Tools und zig Variantn zu testen, wichtig ist, anzufangen und kontinuierliche Verbesserung und dann Additivität (neue Testmethoden hinzu Best Practise in Pipelines: local > static > komplexe Testssetup (acceptance, API)

Add > Test > React > Repeat

Jedes Projekt ist erstmal ein Patient

RIGHT
Monitorung und ALLES beobachten Kleine Dinge sofort fixen: Wie bei nem INtensivpatienten: Kleinigkeiten können nerven, viele Kleinigkeiten können töten. Patient bekommt alles, was nötig ist

Diät

  • Lokal Testen spart Pipeline Runs und gibt direktes Feedback
  • Jeder Test soll maximal einmal pro Piepline laufen
  • Grenzwerte setzen und dagegen arbeiten
  • Ständige Verbesserung der Werte
RIGHT
diet, test as less as possible in the project pipeline but as much as needed The faster your pipeline is, the better use grumphp for local pre-commit testing you delta test each part of your software once in the pipeline there is no need for codesniffing a module twice whitout a change beeing made

Teile und herrsche

  • Trenne framework (core) testing, Drittanbieter-Module und Eigentwicklung
  • Parallelisierung von Tests spart Zeit
RIGHT
Your core version does not change as often as the code is changed by a third party or the code is changed. If so, turn the next one over. we build weekly automated magento core builds which are tested vanilla -> all versions that we use plus one ahead if there is one we build automated project builds including current magento version and third party modules (nighlys) we use grumphp to test every commit with different static tests on code smell (phpcs, phpmd, psalm) 10 jobs with 30 minutes serial: 300 minutes, 5 hours. 10 jobs with 30 minutes parallel with 5 runner: 60 minutes

Den Turm zu Babel einreißen

  • Normalisierung der Projekt-Setups
  • Dokumentierter Test-Context (wo, was, wer, wie)
  • Imitiere die Produktivumgebung so nah wie nötig

Vertraue der Macht

  • Hauptinformationen identifizieren und extrahieren (regex FTW)
  • Vergleichbare Grundlage schaffen
  • Ergebnisse interpretieren
  • Ständig inkrementelle Verbesserungen umsetzen
runned test are just fire and forget. Informations are lost (beside gitlab job history) regex all the stuff: make a quality number out of summaries, reports and return 0,1,2 if you want to measure things over time e.g detecting trends, you have to collect and compare against time discuss the complete image of all test, after running the tests separately, dig deeper into on topic if needed clever: - configurable gitlab params for finetuning projects an make projects better and better without hazing anybody - Don't think of traffic lights in testing aspects, when you start. You won't have a code coverage of 100% overall in the beginning. define guard rails - seperate the test run from the analysis - run tests with summary - collect summaries - evaluate them

ServiceTweet:

Verbesserung der Code Qualität ist ein Beitrag gegen Burn Out bei Entwicklern!

Fragen?

Danke!

RIGHT

SOURCES

  • GrumPHP
  • Codeception
  • Cypress
  • GitLab