Software Testing (4/4) – Automated UI Tests

Diagram: amount of runs per use case

Former posts of this series always explained the solutions of the testing approaches. Let me now try to inspire you to understand my motivation in writing this series, as automated UI tests were my main motivator to finally increase the … Weiterlesen

Software Testing (3/4) – Integration Tests

TL;DR
A data model and the related database of course change from time to time. New features are introduced, old and deprecated data types are removed and new relations embedded. Data integrity ensures your application works as it’s supposed to. Consider two different scenarios:

  1. Another system introduces changes, which affects the API in whatever way. You are able to say for sure, no changes of your own system lead to this error and you can easily take action to solve this issue instead of tracking down the instance which could have been responsible for the error. In theory ;-)
  2. Some changes lead to side effects and affect other test scenarios. React on them and keep everybody’s daily-business up and running instead of facing a problem several days after a change, when the error finally occurs.

At last: be honest. How many times did you think: „This solution is engraved in stone, my children’s children will still benefit from this“ – and now let’s face reality ;-)
(mehr …)

Software Testing (2/4) – Unit Tests

TL;DR
Unit tests are a a great way to ensure that a function behaves as intended and returns the expected result. The idea is to only test a specific function or method and thus ensure the reliability of a small brick in the wall, which shall not be tested all over again and again by the user. (mehr …)

Software Testing (1/4) – Introduction

Testing pyramid - illustrating the kinds of existing software test opportunities

First of all, I do not want to discuss what kind of software developing process one should choose or prefer. If it’s either TDD in combination with Scrum or Waterfall – I don’t mind. The intention of this series about … Weiterlesen

Analyse, Testing, Segmentierung, Targeting, Personalisierung, Automatisierung: Wunsch und Wirklichkeit im Digital Marketing (Vortrag)

Untitled

Ausgehend von einem klassischen Webauftritt kann man heute schnell zum Eindruck gelangen, dass man im Digital Marketing gerade vom Markt abgehängt wird: Digital Marketing Lösungen, z.B. für Targeting oder Personalisierung, scheinen heute ohne grosse Mühen Conversion-Steigerungen von 5 % zu … Weiterlesen

Toolvergleich JMeter versus ProxySniffer

JmeterVsPS2

Es gibt  eine Vielzahl  von Tools im Internet, die sich ausführlich mit dem Thema Lasttests befassen. Es  gibt viele Tools die ganz einfach einen Server mit einer vorgebebenen Requestabfolge anfragen können, in der Regel  ein paar Logfiles aufbereiten und die … Weiterlesen

3rd-Party Interface Testing mit Cucumber – Teil I

cucumber_logo

Das altbekannte Problem In einer Software muss ein 3rd Party Service über eine definierte Schnittstelle eingebunden werden. Das Verhalten der Schnittstelle muss vorab getestet und verifiziert werden. Solche Tests sind Behaviour Driven, sprich das Verhalten der Schnittstelle wird vor der Integration in das … Weiterlesen

Eine Tour durch die Testpyramide

Stellen sie sich vor der Compiler ihrer Programmiersprache würde nicht nur Typfehler, sondern auch einen Großteil der Verhaltensfehler in der Applikation finden können. Welche Auswirkung würde das wohl auf die Qualität ihrer Software haben? Gerade Praktiken der agilen Softwareentwicklung wie die schnelle, häufige Veröffentlichung oder sogar die kontinuierliche Veröffentlichung (Continuous Delivery) sind ohne ein schnelles und umfassendes Feedback über die Softwarequalität nicht denkbar. Automatische Tests können genau dieses Feedback geben – und dennoch werden sie von sehr wenigen Projekten genutzt.

Leider ist die Erstellung von effektiven automatischen Tests eine Fähigkeit, die bei der Ausbildung von Softwareentwicklern oft zu kurz kommt. Viele naive Ansätze der Testautomatisierung, wie etwa mit Tools, die wenig Aufwand durch Aufnahme und Wiedergabe von UI-Interaktionen versprechen, können schnell dazu führen, dass ein Team von dem Vorhaben frustriert ist und den Wert der automatischen Tests in Frage stellt. Das kann etwa dann der Fall sein, wenn kleine Änderungen an dem User Interface dazu führen, dass eine ganze Reihe an Tests fehlschlagen und Entwickler vor der Frage stehen, ob es sich tatsächlich um eine Regression handelt oder um eine falsche Fehlermeldung.

Im Extremfall führt dieser Missstand dazu, dass Änderungen am User Interface nur widerwillig von den Entwicklern vorgenommen werden. Es ist eine paradoxe Situation, da doch gerade durch die Tests auch bei tiefgreifenden Änderungen mehr Sicherheit und damit eine deutlich erhöhte Flexibilität der Software erreicht werden sollte. Die richtige Herangehensweise an Testautomatisierung ist deshalb der Schlüssel für eine frustfreie und wirtschaftliche automatisierung von Testfällen und Grundlage für rapide und häufige Lieferung von Software.

(mehr …)

Automatisierte Integrationstests für Webservices

Einen Webservice im Integrationstest anzusprechen hat vieles mit dem berüchtigten Schuss auf ein bewegtes Ziel gemeinsam: der Webservice ist aus Sicht des Tests schwer berechenbar und flüchtig. Netzwerkprobleme, eine Änderungen an der Datenbasis (z.B. durch vergessene „Aufräumarbeiten“ nach einem Test) oder die Änderung der Schnittstelle können zum ungewollten Scheitern der Integrationstests führen. Vor allem wenn sich die Daten des Webservices oft ändern, wie es bei Information Retrieval- oder PIM Systemen der Fall ist, kann der Aufwand der betrieben werden muss um die Tests laufend anzupassen bald die durch eine Automatisierung erhoffte Zeitersparnis übersteigen.

Aber selbst wenn der Webservice recht statisch ist, ist die Zeit für einen HTTP Round-Trip, der vielleicht auch noch eine Datenbankquery anstößt, ein unliebsamer Flaschenhals, der die Testausführung ausbremst. Mit den richtigen Techniken und Tools kann man jedoch auch flüchtige Webservices zähmen und so den Aufwand automatisierter Tests auf ein Minimum beschränken.

(mehr …)