Softwarequalität - Agile Verfahren und Qualitätssicherung PDF
Document Details

Uploaded by AchievablePlateau
Deutsche Hochschule für angewandte Wissenschaften
Tags
Related
- Vorlesung Softwaretechnik - Muster in der Softwareentwicklung PDF
- Ajwiba Klausur PDF
- Grundlagen der sicheren Softwareentwicklung (SoSe 2024) PDF
- IT Sicherheit PDF: Grundlagen und Konzepte
- Softwarequalität PDF - Managementprozesse, Vorgehensmodelle
- Konstruktive Qualitätssicherung - Softwarequalitat PDF
Summary
Dieses Dokument behandelt agile Verfahren und Qualitätssicherung in der Softwareentwicklung. Es untersucht Kernprinzipien, Besonderheiten wie kontinuierliche Integration und Testen, sowie die Philosophie der testgetriebenen Entwicklung. Es bietet auch Fragen zur Selbstüberprüfung des Gelernten.
Full Transcript
Softwarequalität ······························································································ 6 Agile Verfahren und Qualitätssicherung Lernziele des Kapitels: Im abschließenden Kapitel unseres Lernskripts erkunden wir, wie sich viele der bisher erlernten Konzepte in d...
Softwarequalität ······························································································ 6 Agile Verfahren und Qualitätssicherung Lernziele des Kapitels: Im abschließenden Kapitel unseres Lernskripts erkunden wir, wie sich viele der bisher erlernten Konzepte in der agilen Softwareentwicklung wiederfinden und diese prägen. Agile Methoden bringen eine iterative Entwicklungsphilosophie mit sich, die Flexibilität und Kundenzufriedenheit in den Vordergrund rückt. Qua- litätssicherung wird als kontinuierlicher Prozess verstanden, unterstützt durch Praktiken wie kontinuierliche Integration und kontinuierliches Testen, sowie Tes- tautomatisierung. Nach dem Studium dieses Kapitels festigen die Leserinnen und Leser ihr Ver- ständnis für: Kernprinzipien des Agilen Vorteile agiler Herangehensweisen die Philosophie der testgetriebenen Entwicklung (TDD) Im abschließenden Kapitel unseres Lernskripts richten wir den Fokus speziell auf die agile Softwareentwicklung und deren Einfluss auf die Softwarequalitätssiche- rung. Agile Ansätze bieten eine flexible und iterative Entwicklungsmethodik, die sich deutlich von den traditionellen, wasserfallartigen Vorgehensweisen unter- scheidet. Hierbei stehen Anpassungsfähigkeit und Kundenzufriedenheit im Vorder- grund, was besondere Herausforderungen, aber auch Chancen für die Qualitätssi- cherung mit sich bringt. Viele Eigenschaften oder Herangehensweisen der agilen Softwareentwicklung sind im Laufe des Skripts bereits angeklungen und wir nutzen dieses letzte Kapitel somit indirekt auch als eine Art Wiederholung (zumindest in Teilen). 6.1 Kernprinzipien des Agilen Agile Methoden basieren auf dem sogenannten „Agilen Manifest“, welches vier Grundwerte betont: Individuen und Interaktionen über Prozesse und Werkzeuge Funktionierende Software über umfassende Dokumentation ···················································································································· 111 Softwarequalität ······························································································ Zusammenarbeit mit dem Kunden über Vertragsverhandlung Reagieren auf Veränderung über das Befolgen eines Plans Diese Werte führen zu einer Entwicklungspraxis, die Flexibilität, kontinuierliches Feedback, schnelle Anpassungen und die Lieferung inkrementeller Wertbeiträge in den Mittelpunkt stellt. 6.2 Besonderheiten der Agilen Qualitätssicherung Agile Entwicklungsansätze bringen eine Reihe von Konsequenzen mit sich, welche im Sinne der Softwarequalität Beachtung finden sollten: Kontinuierliche Integration und Testing: Agile Softwareentwicklung verlangt nach kontinuierlicher Integration und kontinuierlichem Testen (vgl. auch Ab- schitt 5.3.2). Dies bedeutet, dass Codeänderungen regelmäßig und häufig in das Hauptentwicklungsrepository 14 integriert und automatisierte Tests durchge- führt werden, um Probleme frühzeitig zu erkennen und zu beheben. Automatisierung: Um mit dem schnellen Tempo der agilen Entwicklung Schritt zu halten, ist die Automatisierung von Tests unerlässlich. Sie ermöglicht es, häu- fige und regelmäßige Releases zu unterstützen und die Qualität durchgängig zu überprüfen. Anpassungsfähige Planung: Qualitätssicherungspläne sind nicht statisch, son- dern entwickeln sich mit dem Produkt. In jeder Iteration oder „Sprint“ 15 werden neue Erkenntnisse und Anforderungen in die Planung einbezogen, was eine dy- namische Anpassung der Qualitätssicherungsstrategien ermöglicht. Interdisziplinäre Teams: In agilen Teams arbeiten Entwickler, Tester und oft auch Kunden zusammen. Diese enge Zusammenarbeit führt zu einem besseren Verständnis für Qualitätserwartungen und fördert eine gemeinsame Verant- wortung für das Endprodukt. 14 Ein Repository ist ein zentraler Ort, an dem Softwareentwickler den Quellcode ihres Pro- jekts speichern und verwalten können. Es handelt sich um einen speziellen Ordner oder Speicherbereich, der Versionskontrollinformationen enthält und normalerweise mit einer Versionsverwaltungssoftware wie Git, Mercurial oder SVN verwaltet wird. 15 Bei der agilen Softwareentwicklung ist ein „Sprint“ eine festgelegte Zeitspanne, in der ein spezifisches Arbeitspaket abgeschlossen werden muss. Sprints sind ein Kernbestandteil von Scrum, einer der beliebtesten agilen Methoden. Ein Sprint dauert in der Regel zwischen ei- ner und vier Wochen – zwei Wochen sind ein häufig gewählter Standard. ···················································································································· 112 Softwarequalität ······························································································ User Stories und Akzeptanzkriterien: Die Definition von Akzeptanzkriterien in User Stories sorgt dafür, dass die Qualitätssicherung bereits bei der Anforde- rungserhebung beginnt. Tests können auf diesen Kriterien basieren und stellen sicher, dass die entwickelte Software den Nutzeranforderungen entspricht (vor allem Abnahmetests; siehe Abschnitt 5.3.4). Refactoring: Regelmäßiges Refactoring ist notwendig, um den Code sauber und wartbar zu halten (mehr dazu unten). Dabei wird die interne Struktur des Codes verbessert, ohne das äußere Verhalten zu verändern, was die langfristige Qua- lität und Flexibilität der Software erhöht. Refactoring ist Teil von der sogenann- ten „Testgetriebenen Entwicklung (TDD)“, welche als nächstes ausführlicher geschildert wird. Testgetriebene Entwicklung (TDD): ist eine zentrale Technik in der agilen Ent- wicklung. Hierbei werden Tests vor dem eigentlichen Code geschrieben, was Entwickler dazu anhält, Qualität von Anfang an zu berücksichtigen und die Ent- wurfsgüte zu erhöhen. Wir widmen diesem wichtigen Ansatz abschließend ei- nen eigenen Abschnitt. 6.3 Testgetriebene Entwicklung (TDD) Testgetriebene Entwicklung (TDD) ist ein Softwareentwicklungsprozess, der sich durch das Schreiben von Tests vor der eigentlichen Implementierung des Codes auszeichnet. Dieser Ansatz betont eine umgekehrte Reihenfolge im Vergleich zu traditionellen Entwicklungsmethoden, bei denen zuerst die Anwendungsfunktiona- lität implementiert und anschließend getestet wird. Der TDD-Prozess folgt einem iterativen Zyklus, der aus den folgenden Schritten besteht (siehe Abbildung 20): Schreiben eines Tests: Der Entwicklungszyklus beginnt mit dem Schreiben ei- nes automatisierten Tests für eine neue Funktion oder Verbesserung. Dieser Test beschreibt das erwartete Verhalten der noch nicht implementierten Funk- tion. Zu diesem Zeitpunkt wird der Test fehlschlagen, da der zugehörige Code noch nicht existiert. Dabei handelt es sich in der Regel um ein Unit-Test (siehe Abschnitt 5.3.1). Wie bereits dargelegt handelt es sich dabei um automatisierte Tests, die einzelne Komponenten oder Einheiten des Codes isoliert testen, um sicherzustellen, dass jede Funktion wie erwartet arbeitet. Eine Einheit kann eine einzelne Funk- tion, Methode oder Klasse sein, je nach dem Design der Anwendung. Der Fokus ···················································································································· 113 Softwarequalität ······························································································ auf Unit-Tests in TDD ist wesentlich, da diese Tests schnell und automatisiert ausgeführt werden können, was sofortiges Feedback über die Funktionsweise des neu geschriebenen Codes ermöglicht. Implementierung des Codes: Anschließend wird minimaler Code geschrieben, um den Test zu bestehen. Das Ziel in dieser Phase ist nicht, perfekten oder voll- ständigen Code zu schreiben, sondern lediglich den Test zu erfüllen. Testausführung: Der zuvor geschriebene Test wird ausgeführt. Wenn der Test fehlschlägt, wird der Code angepasst, bis der Test erfolgreich ist. Refactoring: Nachdem der Test erfolgreich ist, kann der Code überarbeitet wer- den, um Duplikationen zu entfernen, die Lesbarkeit zu verbessern und die Ar- chitektur der Anwendung zu optimieren. Wichtig dabei ist, dass nach jedem Refactoring die Tests erneut ausgeführt werden, um sicherzustellen, dass keine bestehende Funktionalität gebrochen wurde. Wiederholung: Dieser Zyklus wird für jede neue Funktion oder Verbesserung wiederholt. Mit jedem Durchlauf wächst die Testabdeckung, und die Software wird kontinuierlich auf Fehler geprüft. Abbildung 20: Testgetriebene Softwareentwicklung, i. A. a. Krypczyk & Bochkor (2018, S. 320) („Re.“ Steht für „Refactoring“) Die testgetriebene Entwicklung (TDD) bringt zahlreiche Vorteile mit sich, die sich positiv auf den gesamten Softwareentwicklungsprozess auswirken. Einer der her- ausragendsten Vorteile ist die deutlich verbesserte Codequalität. Indem ···················································································································· 114 Softwarequalität ······························································································ Entwicklerinnen Tests vor der eigentlichen Implementierung des Codes schreiben, wird von Beginn an ein höherer Qualitätsstandard gesetzt. Dies führt zu saubere- rem, robusterem und weniger fehleranfälligem Code. Ein weiterer wesentlicher Vorteil ist die Tatsache, dass die Tests als eine Form der Dokumentation fungieren. Sie bieten eine klare Beschreibung dessen, was der Code bewirken soll, was nicht nur die Einarbeitung neuer Teammitglieder erleichtert, sondern auch als nützliche Referenz für die Zukunft dient. Ein weiterer signifikanter Vorteil ist die Reduktion der Fehlerquote. Da der Code kontinuierlich gegen die definierten Tests geprüft wird, werden Fehler frühzeitig erkannt und behoben. Dies trägt zur Stabilität und Zuverlässigkeit der Software bei. Darüber hinaus ermöglicht die Sicherheit, die durch die umfassenden Tests geboten wird, einfacheres und sichereres Refactoring des Codes. Entwickler können den Code strukturieren und optimieren, ohne befürchten zu müssen, bestehende Funk- tionalitäten zu beeinträchtigen. Dies ist besonders wertvoll in einem sich schnell entwickelnden Projekt, wo Anforderungen sich ändern und der Code regelmäßig angepasst werden muss. Schließlich kann die testgetriebene Entwicklung die Entwicklungsgeschwindigkeit über den gesamten Lebenszyklus des Projekts hinweg erhöhen. Obwohl zu Beginn mehr Zeit für das Schreiben der Tests aufgewendet wird, reduziert sich der Auf- wand für das Debugging und die Fehlerbehebung in späteren Phasen erheblich. Dies führt zu einer effizienteren Entwicklung und schnelleren Iterationen. Zusam- mengefasst fördert TDD nicht nur eine hohe Codequalität und Stabilität, sondern verbessert auch die Wartbarkeit und Flexibilität der Software, was zu einer insge- samt effizienteren und effektiveren Entwicklung führt. 6.4 Fazit Agile Softwareentwicklung und Qualität Agile Softwareentwicklung verändert die Art und Weise, wie wir über Softwarequa- lität denken und diese sichern. Qualität ist nicht mehr das Endziel einer langen Ent- wicklungsphase, sondern ein kontinuierlicher Prozess, der mit der ersten Codezeile beginnt und eng mit dem Kundenfeedback verflochten ist. Agile Ansätze fördern eine Kultur, in der Qualität in jede Phase der Softwareentwicklung eingebettet ist. Dies verlangt eine aktive Beteiligung aller Teammitglieder und eine Bereitschaft, Prozesse und Produkte ständig zu hinterfragen und zu verbessern. ···················································································································· 115 Softwarequalität ······························································································ Mit diesem Verständnis endet unser Skript, doch die Reise zur Meisterung agiler Qualitätssicherung ist ein fortlaufender Lernprozess. Die agile Welt ist dynamisch und erfordert eine ständige Anpassung und Weiterentwicklung der Praktiken. Die Prinzipien und Methoden, die wir diskutiert haben, bilden das Fundament, auf dem Teams ihre eigenen, maßgeschneiderten Strategien aufbauen können. Es geht nicht nur darum, Regeln zu befolgen, sondern vielmehr darum, den Sinn hinter den Prin- zipien zu verstehen und sie in den Kontext des eigenen Projekts zu integrieren. Der wahre Wert agiler Entwicklung zeigt sich darin, wie Teams reagieren, sich anpassen und aus ihren Erfahrungen lernen, um kontinuierlich qualitativ hochwertige Soft- ware zu liefern, die nicht nur technischen Standards genügt, sondern auch echten Nutzerbedürfnissen entspricht. 6.5 Kontrollfragen Was beschreibt am besten das Prinzip der kontinuierlichen Integration in der agi- len Softwareentwicklung? Multiple-Choice-Fragen: A) Regelmäßige und gründliche Dokumentation aller Codeänderungen. Übung B) Regelmäßige Vertragsverhandlungen mit dem Kunden zur Anforderungsbestäti- gung. C) Kontinuierliches Sammeln von Kundenfeedback zu fertigen Softwarefeatures. D) Regelmäßige Integration von Codeänderungen in das Hauptentwicklungsreposi- tory und Durchführung automatisierter Tests. Was ist ein charakteristisches Merkmal der Testgetriebenen Entwicklung (TDD)? Multiple-Choice-Fragen: A) Code wird nachträglich durch ausführliche Dokumentation getestet. B) Tests werden nur nach jeder Implementierungsphase ausgeführt. C) Tests werden vor der Implementierung des Codes geschrieben. D) Code wird einmalig am Ende der Entwicklungsphase refaktoriert. ···················································································································· 116