Scrum

Scrum

Scrum

Scrum ist ein agiles Framework für das Projektmanagement, das speziell dafür entwickelt wurde, Teams dabei zu helfen, komplexe Projekte effizient und flexibel zu managen. Das Grundprinzip von Scrum basiert auf einer iterativen und inkrementellen Arbeitsweise, die es Teams ermöglicht sich schnell an Veränderungen anzupassen und durchgehend Mehrwert zu erzeugen. Die Anwendung von Scrum bringt eine Vielzahl von Vorteilen mit sich:

 

  • Erhöhte Flexibilität und Anpassungsfähigkeit: Durch die iterative Natur von Scrum kann das Team schnell auf Veränderungen reagieren und Anpassungen vornehmen.
  • Höhere Produktqualität: Regelmäßige Überprüfungen und kontinuierliches Feedback fördern die Qualität des Endprodukts.
  • Verbesserte Teamzusammenarbeit: Die klar definierten Rollen und regelmäßigen Treffen fördern eine enge Zusammenarbeit und Kommunikation innerhalb des Teams.
  • Transparenz und Sichtbarkeit: Durch die Scrum Artefakte und Prozessschritte wird der Projektfortschritt für alle Beteiligten transparent und nachvollziehbar.

Artikel, die Sie auch interessieren könnten:

Scrum

Scrum

Scrum ist ein agiles Framework für das Projektmanagement, das speziell dafür...

Weitere Artikel finden Sie in unserem IT-Blog.

Qualitätskriterien für Anforderungen in der Softwareentwicklung

Qualitätskriterien für Anforderungen in der Softwareentwicklung

Qualitätskriterien für Anforderungen in der Softwareentwicklung

Die Definition und Überprüfung von Benutzeranforderungen ist ein wesentlicher Bestandteil des Softwareentwicklungsprozesses. Um sicherzustellen, dass die erfassten Anforderungen den Bedürfnissen der Benutzer entsprechen und von den Entwicklern korrekt umgesetzt werden können, müssen sie bestimmte Qualitätskriterien erfüllen. Im Folgenden werden die wichtigsten Qualitätskriterien erläutert, die Benutzeranforderungen erfüllen müssen, um effektiv und nützlich zu sein.

Artikel, die Sie auch interessieren könnten:

Scrum

Scrum

Scrum ist ein agiles Framework für das Projektmanagement, das speziell dafür...

Weitere Artikel finden Sie in unserem IT-Blog.

Tools und Frameworks für Softwaretests

Tools und Frameworks für Softwaretests

Tools und Frameworks für Softwaretests

Im Software Engineering existieren verschiedene Vorgehensmodelle, die den Rahmen des Entwicklungsprozesses stecken. Klassische Modelle, wie zum Beispiel das Wasserfallmodell, sind in sequenziellen Phasen aufgeteilt. Das V-Modell baut auf dem Wasserfallmodell auf und weist den einzelnen Entwicklungsstufen Testarten zu. Nachfolgend ist das V-Modell mit den entsprechenden Teststufen abgebildet.

Der Entwicklungsprozess beginnt mit der Definition der Anforderungen. Diese können mit Hilfe von Methoden aus dem Requirements Engineering ermittelt werden. Auf Grundlage der Anforderungen erfolgt der Entwurf des funktionalen Systems und der technischen Systemarchitektur. Eine weitere Detaillierung erfolgt im Rahmen des Komponentenentwurfs. Hier werden Klassen im Hinblick auf Attribute und Methoden spezifiziert. Abschließend erfolgt die Implementierung, die die technische Umsetzung adressiert.

 

Testpyramide mit Akzeptanz-Tests an der Spitze, gefolgt von Integrations-, System- und Unittests

 

Den einzelnen Phasen stehen verschiedene Testarten gegenüber, die zur Validierung (Überprüfung, ob das richtige Produkt entwickelt wird) und Verifikation (Überprüfung, ob das Produkt richtig entwickelt wird) dienen. Nachfolgend werden diese genauer beschrieben. Zusätzlich werden verschiedene Tools genannt, die abhängig von der Testart in der Praxis zum Einsatz kommen.

Unit-Tests

Unit-Tests (auch Modultests genannt) bilden die Basis im Testprozess. Im Rahmen dieser, werden einzelne Komponenten einer Anwendung isoliert auf ihre Funktionalität geprüft.

    • Testen findet in der frühen Phase in der Entwicklung statt
    • Automatisierte Tests üblich
    • Als Komponenten werden Funktionen, Klassen, Methoden oder Prozeduren bezeichnet
    • Komponenten werden in der Regel nicht isoliert im System bestehen, daher muss eine Möglichkeit geschaffen werden, diese abgekapselt zu testen

Tools und Frameworks für Unit-Tests

Abhängig von der Programmiersprache, in der die Software entwickelt wurde, eignen sich verschiedene Test-Frameworks.

Java:

JUnit ist ein weitverbreitetes open-source Test-Framework. Es ist in vielen Entwicklungsumgebungen, wie beispielsweise IntelliJ IDEA, bereits integriert. JUnit kommt zudem häufig im Rahmen des test-driven software development zum Einsatz. Das heißt, dass die Testfälle entwickelt werden, bevor die Module und Komponenten überhaupt in Form von Code existieren. Weiterhin können Tests automatisiert werden und die Verwendung des Frameworks ist unabhängig von der Plattform möglich.

TestNG ist ein zu JUnit ähnliches Framework, das als Plugin in verschiedenen Entwicklungsumgebungen eingebunden werden kann. Es bietet einen Support für data-driven testing an und ermöglicht das Ausführen von parallelen Tests. Darüber hinaus ist das Testen von exception handling möglich und ist u.a. auch für Integrationstests anwendbar.

JavaScript:

Jasmine ist ein ebenfalls quelloffenes Test-Framework für Unit-Tests. JavaScript-Module können im Browser als auch unter der Laufzeitumgebung Node.js getestet werden. Weiterhin lässt Jasmine die Durchführung von automatisierten Tests für asynchronen Code zu. 

C++:

– Das GoogleTest-Framework ist für das Testen von Modulen, die in C++ geschrieben sind, gedacht. Tests können in Testsuiten (Sammlung von Testfällen) zusammengefasst werden. Dies ermöglicht es Muster schneller und einfacher zu erkennen.

Integrationstests

Mit Hilfe von Integrationstests wird geprüft, ob die einzelnen Komponenten des Gesamtsystems fehlerfrei zusammenspielen. Auch Fehler in der Schnittstellenentwicklung werden in diesem Zusammenhang getestet.

    • Bei Komponentenintegrationstests wird das Zusammenspiel einzelner Komponenten mit anderen Komponenten getestet
    • Systemintegrationstests funktionieren ähnlich: hier werden Teilsysteme oder Softwarepakete, die wieder mit anderen Teilsystemen oder Paketen zusammenwirken, getestet
    • Eine Teilautomatisierung wird bei Integrationstests angestrebt
    • Weitere Testobjekte können Datenbanken, APIs oder Microservices sein

Tools und Frameworks, die für Modultests angewendet werden, können zum Teil auch für die Integrationstests verwendet werden (z.B. JUnit, TestNG, Jasmine, GoogleTest).

 

Tools und Frameworks für Systemtests

Bei Systemtests wird geprüft, ob die Anwendung als ganzheitliches System funktioniert. In der Regel erfolgt dies mit Hilfe von Testdaten auf einem Testsystem. Gründe hierfür sind u.a., dass die Tests das Produktivsystem beschädigen könnten und sich die Testdaten auf angebundene Datenbanken und Systeme auswirken. Systemtests werden in der Regel nicht von den Entwicklern durchgeführt, sondern von Testern im Rahmen der Qualitätssicherung. Bei automatisierten Tests kann eine Einbeziehung von Entwicklern erforderlich sein.

 

1)  Selenium ist eines der bekanntesten und meist genutzten Frameworks für automatisierte Tests von Webapplikationen. Es ist plattformunabhängig und kann für verschiedene Browser eingesetzt werden. Darüber hinaus lässt das Open-Source-Tool eine Programmierung in einem breiten Spektrum von Programmiersprachen zu. Skripte können in u.a. in PHP, Java, Python, Ruby ausgeführt werden. Die Testautomatisierung kann von der Benutzeroberfläche bis zur Datenbank automatisiert werden. So lassen sich etwaige Systemfehler identifizieren.

2)  Ein ähnliches aber umfangreicheres Framework ist Ranorex. Es ist ein kommerzielles Framework, das nicht nur für automatisierte Tests von Web-Apps sondern auch für mobile und Desktop-Apps verwendet werden kann. Weiterhin ermöglicht es die parallele Ausführung von Tests und eine Testerstellung ohne Programmierung. Weitere Vorteile sind die höhere Nutzerfreundlichkeit und das einfachere Setup gegenüber Selenium.

3)  SoapUI ist ein plattformunabhängiges Testtool für Webservices (SOAP, REST und GraphQL) und ermöglicht ebenfalls automatisierte Tests. Weiterhin können Performance- und Lasttests ausgeführt werden. Es steht eine kostenlose Basisversion zur Verfügung, die für das Testen von Webservices ausreichende Funktionen mitbringt.

4)  Ein weiteres Tool zum Testen der Performance und Last von Webanwendungen ist Gatling.  Es ist als kostenlose Basisversion verfügbar, bietet aber auch in der Enterprise-Version zusätzliche Funktionen. In Gatling ist es möglich mehrere Benutzer in einem Thread zu simulieren oder Lasttests um SQL-Abfragen zu erweitern. Darüber hinaus werden die Programmiersprachen Scala, Kotlin und Java unterstützt.

 

Tools und Frameworks für Abnahmetests

Abnahmetests (auch Akzeptanztest) stehen am Ende der Testphase und dienen als abschließende Prüfung. Die Funktionalität wird unter realen Bedingungen geprüft. Dies kann beispielsweise in Form von Beta-Tests erfolgen. In der Regel werden die Abnahme- und Akzeptanztests vom Kunden oder Endnutzer durchgeführt. Typische Testobjekte sind u.a. Formulare, Reports, Recovery Systeme oder ein vollständig integriertes System

Zur Abnahme von Webanwendungen eignet sich u.a. das plattformunabhängige Test-Framework Cucumber. Es ermöglicht die Prüfung von Anforderungen und ob diese erfüllt wurden. Es unterstützt verschiedene Programmiersprachen, wie z.B. PHP, Python, Perl und Java. Cucumber setzt auf die Beschreibungssprache Gherkin, sodass die Testfälle einfach in Textform vorliegen und somit auch für Personen verständlich sind, die keinen technischen Background haben.

Viele der genannten Tools und Frameworks lassen sich auch stufenübergreifend einsetzen, sodass nicht mehrere Anwendungen implementiert werden müssen und unter Umständen höhere Kosten für Lizenzen entstehen.

Fehler, die erst beim Endnutzer im Produktivsystem auffallen, verursachen deutlich höhere Fehlerbehebungskosten (Link), als solche, die bereits bei der Anforderungsermittlung entstehen. Daher ist das Testen bereits in der frühen Entwicklungsphase unerlässlich.

Artikel, die Sie auch interessieren könnten:

Weitere Artikel finden Sie in unserem IT-Blog.

Requirements Engineering

Requirements Engineering

Requirements Engineering

– Wie sich schon aus dem Namen ableiten lässt, geht es beim Requirements Engineering um die Ermittlung von Anforderungen. Genauer gesagt: Anforderungen an Software, Systeme oder Produkte sollen spezifiziert und verwaltet werden.

Wie wichtig Requirements Engineering in der Entwicklung ist, wird bei der Betrachtung der Fehlerentstehungskurve im Produktlebenszyklus deutlich. Denn ca. 56% der Fehler entstehen bereits in der Spezifikationsphase. Welche Folgen dies haben kann, ist auf unserer Seite Qualitätssicherung detaillierter beschrieben.

Die Anforderungen, die an ein System oder Produkt gestellt werden, bilden die Basis für den Entwicklungsprozess. Herausfordernd bei der Spezifikationsentwicklung ist das Zusammenführen von Informationen aus einer Vielzahl verschiedener Bereiche. Die Berücksichtigung von Kundenbedürfnissen, Kosten, Qualität, Nachfrage, Serviceleistungen, rechtlicher Aspekte – nur um hier einige zu nennen – erhöhen die Komplexität bei der Anforderungsermittlung.

Aufgaben im Requirements Engineering

Nach dem International Requirements Engineering Board (IREB) werden die folgenden vier Aufgaben als Hauptaufgaben genannt:

    • Anforderungsermittlung
    • Anforderungsdokumentation
    • Anforderungsvalidierung
    • Anforderungsverwaltung

Methoden und Techniken zur Anforderungsermittlung

Zunächst müssen die Quellen zur Anforderungsermittlung identifiziert werden. Diese könnten u.a. Stakeholder, Dokumente oder Systeme sein. Gleichzeitig ist es wichtig bei allen beteiligten Personen ein gemeinsames Verständnis über das zu entwickelnde System zu schaffen. Begriffe, die das System definieren, müssen eindeutig sein und den Stakeholdern, Entwicklern und Requirements Engineers bekannt sein. Durch die Erstellung von z.B. Glossaren kann eine gemeinsame Wissensbasis geschaffen werden.

In der Phase der Anforderungserhebung kommen verschiedene Techniken und Methoden zum Einsatz. Ein geeignetes Modell, um zunächst die Relevanz einer Anforderung zu identifizieren, ist das KANO-Modell. Es stellt den Erfüllungsgrad von Anforderungen zur Kundenzufriedenheit in Relation. In diesem werden Systemmerkmale beschrieben, die beim Stakeholder Begeisterung auslösen oder nur als selbstverständlich betrachtet werden.

    • Basisfaktoren: Systemmerkmale, die vom Stakeholder vorausgesetzt werden.
    • Leistungsfaktoren: Systemmerkmale, die explizit vom Stakeholder gefordert werden.
    • Begeisterungsfaktoren: Systemmerkmale, die vom Stakeholder nicht erwartet wurden, aber zu Begeisterung führen.
Auf der x-Achse ist der Erfüllungsgrad und auf der y-Achse, die Kundenzufridenheit aufgetragen. Die Kurven und Geraden stellen die Begeisterungs-, Leistungs- und Basismerkmale dar.

Werden Basisfaktoren nur unzureichend erfüllt, führt dies zu einer sehr viel höheren Unzufriedenheit beim Stakeholder. Werden die Basisfaktoren hingegen sehr gut erfüllt, hat dies jedoch keinen großen Einfluss auf die Zufriedenheit des Stakeholders. Werden Begeisterungsfaktoren nicht ausreichend erfüllt, wird dies vom Stakeholder hingegen weniger abgestraft. Dafür führt die Erfüllung der Begeisterungsfaktoren zu einer überproportionalen Kundenzufriedenheit. Der Erfüllungsgrad der Leistungsmerkmale hingegen wirkt sich hingegen proportional auf die Kundenzufriedenheit aus.

Ermittlungstechniken werden allgemein in Erhebungstechniken und in Entwurfs- und Ideenfindungstechniken unterschieden.

Nach dem IREB kann zur Erhebung von Anforderungen u.a. auf Interviews, Fragebögen, Workshops, Feldbeobachtung, Feedbackanalyse und weiteren Techniken zurückgegriffen werden. Einige Methoden, die sich zum Entwurf und zur Ideenfindung sehr gut eignen sind Brainstorming, die Erstellung von Storyboards oder Prototypen und Design Thinking.

Es existieren jedoch noch viele weitere Methoden und Techniken, die je nach Anwendungsfall individuell zusammengestellt werden müssen.

Dokumentation der Anforderungen

Die Ergebnisse aus der Anforderungsermittlung werden in natürlicher Sprache, in Modellen oder als Mischform festgehalten. Für die verschiedenen Anforderungen, die in der Struktur-, Funktions- und Verhaltensperspektive betrachtet werden können, eignen sich verschiedene Modelle:

    • Strukturperspektive: Es werden Ein- und Ausgabedaten sowie Nutzungs- und Abhängigkeitsbeziehungen betrachtet. Geeignete Modelle sind hier UML-Aktivitätsdiagramme und ER-Diagramme.
    • Funktionsperspektive: Es wird erfasst, welche Informationen durch das System geändert werden. Zur Darstellung eignen sich UML-Aktivitätsdiagramme und Datenflussdiagramme.
    • Verhaltensperspektive: Es werden Zustandsänderungen und ihre Effekte dokumentiert. Diese lassen sich in UML-Zustandsdiagrammen und Statecharts modellieren.

UML-Zustandsdiagramm

Im nachfolgenden Bild ist ein UML-Zustandsdiagramm an einem vereinfachten Beispiel der EC-Kartenzahlung dargestellt.
Das Diagramm besteht in diesem Beispiel aus Zuständen, Pseudozuständen (Start- und Endzustand, Entscheidungsknoten) und Transitionen.
Das Diagramm beginnt mit dem Startzustand (Punkt). Die Karte wird zunächst in das Kartenlesegerät eingesteckt. Dies stellt die erste Transition im Diagramm dar (Pfeil). Als Zustand (Rechteck mit abgerundeten Ecken) folgt, dass die Karte im Kartenlesegerät eingesteckt ist. Danach wird die PIN eingegeben und es folgt ein Entscheidungsknoten. Ist die PIN nicht korrekt so folgt der Zustand “PIN-Eingabe nicht erfolgreich”, bei korrekter PIN folgt der Zustand “PIN-Eingabe erfolgreich”. Nach der erfolgreichen PIN-Eingabe wird die Verbindung zum Server der entsprechenden Bank aufgebaut und der Kontostand mit dem Zahlungsbetrag abgeglichen. Ist das Konto ausreichend gedeckt, wird die Zahlung autorisiert und die Ware kann bezahlt werden. Das Diagramm ist mit dem Endzustand (umrandeter Punkt) abgeschlossen.

Qualitätskriterien für Anforderungen

Wie bereits deutlich geworden ist, sollten Anforderungen im Allgemeinen gut beschrieben sein und damit bestimmte Qualitätskriterien erfüllen. Das IREB führt die folgenden Qualitätskriterien für Einzelanforderungen auf:

    • Adäquat: Die Anforderung reflektiert Bedürfnisse der Stakeholder.
    • Notwendig: Die Anforderung trägt dazu bei, einen Bedarf der Stakeholder zu decken.
    • Eindeutig: Die Anforderung wird von allen Stakeholdern gleich interpretiert.
    • Vollständig: Die Anforderung beschreibt die Funktionalität lückenlos.
    • Verständlich: Die Anforderung ist so beschrieben, dass alle Stakeholder diese verstehen.
    • Überprüfbar: Die Erfüllung der Anforderung ist eindeutig überprüfbar.

Validierung der Anforderungen

Um sicherzustellen, dass die Anforderungen korrekt und von den Stakeholdern auch als notwendig angesehen werden, erfolgt die Validierung der ermittelten Anforderungen. Das IREB schlägt die folgenden vier Prinzipien zur Anforderungsprüfung vor:

    • Beteiligung der Stakeholder
    • Trennung von Fehlererkennung und Fehlerkorrektur
    • Validierung aus unterschiedlichen Sichten
    • Wiederholte Validierung

Techniken, die zur Validierung zum Einsatz kommen sind:

    • Review Techniken
    • Explorationstechniken
    • Probe-Entwicklung

Die Auswahl der Techniken ist abhängig vom Entwicklungsprozess, der Systemkomplexität, als auch vom Risikoniveau.

Verwaltung der Anforderungen

Das Verwalten der Anforderungen läuft parallel zur Anforderungsermittlung, -dokumentation und -validierung. Wesentliche Bestandteile sind die Änderungssteuerung, Versionskontrolle, Überwachung des Anforderungsstatus und die Anforderungsrückverfolgung.

    • Änderungssteuerung: Anforderungsdokumente und Pläne werden aktualisiert, Auswirkungen analysiert und Änderungen vorgeschlagen.
    • Versionskontrolle: Diese zeichnet sich durch die Identifikation von Versionsänderungen der Anforderungsdokumente aus. Es wird ein einheitliches Kennzeichnungsschema für die Änderungen festgelegt.
    • Überwachung des Anforderungsstatus: Es werden Berichte erstell und der Status der Anforderung erfasst.
    • Anforderungsrückverfolgung: Es werden Verknüpfungen zu anderen Systemelementen und Anforderungen definiert.

Wie schon erwähnt, entstehen die meisten Fehler in der Softwareentwicklung bereits in der Spezifikationsphase. Fehler, die schon früh in der Entwicklungsphase entstanden sind, verursachen erhebliche Kosten für die Fehlerbehebung. Darüber hinaus sinkt die Zufriedenheit der Stakeholder durch die entstandenen Fehler und die Nichterfüllung von Anforderungen. Durch Requirements Engineering ist es möglich, Fehler frühzeitig zu erkennen und alle Stakeholder in der Entwicklung einzubeziehen. Es bildet somit die Grundvoraussetzung für effiziente Softwareentwicklung.

Artikel, die Sie auch interessieren könnten:

Scrum

Scrum

Scrum ist ein agiles Framework für das Projektmanagement, das speziell dafür...

Weitere Artikel finden Sie in unserem IT-Blog.

Testautomatisierung

Testautomatisierung

Testautomatisierung

Testautomatisierung steigert die Qualität und Effizienz im Entwicklungsprozess und führt so zu einem besseren Produkt. Gleichzeitig können die Entwicklungsdauer und -kosten reduziert werden. So können Testfälle, die bereits erfolgreich durchgeführt wurden auch bei neuen Releases eingesetzt werden. Ein weiterer Vorteil ist die höhere Abdeckung von Testfällen.

Wann ist Testautomatisierung sinnvoll?

Automatisierte Tests lohnen sich dort, wo wiederkehrende Testfälle entstehen.

Die Testpyramide

Die Testpyramide ist ein Modell, das die einzelnen Teststufen nach ihrem Umfang graphisch darstellt. Die klassischen Teststufen, die auch das ISTQB empfiehlt, sind Akzeptanz-, System-, Integrations- sowie Unittests.

 

Testpyramide mit Akzeptanz-Tests an der Spitze, gefolgt von Integrations-, System- und Unittests

 

Die Spitze der Testpyramide bilden Akzeptanztests. Sie stehen am Ende der Testphase und dienen als abschließende Prüfung. Unter realen Einsatzbedingungen wird die Funktionalität geprüft, dies kann beispielsweise in Form von Beta-Tests erfolgen. Da sie aufwendig und kostspielig sind, sollten sie einen geringen Teil der Gesamttests ausmachen.

Vor den Akzeptanztests stehen die Systemtests, bei denen geprüft wird, ob die Anwendung als ganzheitliches System funktioniert. In der Regel erfolgt dies mit Hilfe von Testdaten auf einem Testsystem.

Den Systemtests gehen die Integrationstests voran. Diese dienen zur Prüfung, ob die einzelnen Komponenten des Gesamtsystems fehlerfrei zusammenspielen.

Die Basis im Testprozess bilden die Unit-Tests, bei denen die einzelnen Komponenten der Anwendung isoliert geprüft werden.

Tools zur Testautomatisierung

Die Liste der Tools zur Testautmatisierung ist lang und die Auswahl abhängig vom Testfall. Um einige beispielhaft zu nennen: Selenium, Soap UI, Cucumber, Ranorex werden häufig in der Automatisierung von Tests angewendet.

Continuous Testing

Eine Herausforderung für das Testen von Software stellt das Continuous Delivery-Prinzip der agilen Softwareentwicklung dar. Durch die kürzeren Entwicklungszeiten und ständige Entwicklung neuer Features muss ein effizientes Testkonzept eingeführt werden. Parallel zur Entwicklung sollten vollautomatisierte Tests die Software-Stabilität prüfen, um eine Beurteilung dieser zu ermöglichen. Ein solches Konzept greift somit nicht erst im Bereich der UI-Tests, sondern bereits auf der Ebene von Integrations- und Unit-Tests.

 

VORTEILE VON TESTAUTOMATISIERUNG

Schnellere Entwicklung

Frühzeitige Aufdeckung von Fehlern

Bessere Systemqualität

Verbesserung der Systemstabilität und Performance

Kostenreduzierung

Fehlerbehebungskosten werden gesenkt

Flexibilität

Tests können unabhängig von Arbeitszeiten ablaufen

Artikel, die Sie auch interessieren könnten:

Weitere Artikel finden Sie in unserem IT-Blog.