Konstruktive Qualitätssicherung - Softwarequalitat PDF

Summary

Dieser Textabschnitt befasst sich mit konstruktiven Maßnahmen zur Qualitätssicherung in der Softwareentwicklung. Es werden bewährte Verfahren und Strategien zur Fehlervermeidung erläutert und auch das Usability Engineering wird betrachtet, um die Benutzerfreundlichkeit zu optimieren. Der Text behandelt auch Qualitätsmerkmale wie Fehlerfreiheit, Flexibilität, Bedienbarkeit und Effizienz.

Full Transcript

Softwarequalität ······························································································ 3 Konstruktive Qualitätssicherung Lernziele des Kapitels: Konstruktive Qualitätsmaßnahmen sind bewährte Verfahren und Strategien, um die Qualität durch Fehlervermeidung zu fördern. Da...

Softwarequalität ······························································································ 3 Konstruktive Qualitätssicherung Lernziele des Kapitels: Konstruktive Qualitätsmaßnahmen sind bewährte Verfahren und Strategien, um die Qualität durch Fehlervermeidung zu fördern. Das Entstehen von Fehlern soll also schon im Vorhinein unterbunden werden. Nach dem Studium dieses Abschnittes entwickeln die Leserinnen und Leser ein erstes Verständnis für:  die Strategie konstruktiver Qualitätssicherung  den Einsatz bewährter Verfahren  das Bauen auf bewährte Bestandteile  die Verwendung bewährter Strukturen  Usability Engineering und User Experience Design Konstruktive Qualitätsmaßnahmen sind präventive Techniken und Methoden, die in den Softwareentwicklungsprozess integriert werden, um die Qualität des End- produkts von Anfang an sicherzustellen. Statt auf die Identifizierung und Korrektur von Fehlern nach ihrer Entstehung zu warten (was als analytische oder reaktive Qualitätsmaßnahme bekannt ist und welche wir später noch kennenlernen wer- den), zielen konstruktive Maßnahmen darauf ab, die Entstehung von Fehlern von vornherein zu vermeiden. Diese Maßnahmen sind entscheidend, da sie dazu bei- tragen, die Kosten zu senken und die Effizienz zu steigern, indem sie die Notwen- digkeit nachträglicher Korrekturen verringern. Nach der Definition von Schneider (2012, S. 177-178) wird eine Maßnahme der kon- struktiven Qualitätssicherung zugeordnet, wenn klar benannt werden kann, welche Qualitätsaspekte damit gezielt verbessert werden sollen. Es wird also erwartet, dass ein klarer Zusammenhang zwischen der ergriffenen Maßnahme und dem an- gestrebten Qualitätsziel besteht. Es muss zielgerichtet gearbeitet werden und es sollen keine ‚blinden‘ Aktionen gesetzt werden, die dem Anschein nach insgesamt einen positiven Nutzen haben könnten. Es ist allerdings kein Problem, wenn neben dem angestrebten Ziel durch die Maßnahmen auch andere positive Eigenschaften gefördert werden. Besonders häufig werden folgende Qualitätsmerkmale von kon- struktiven Maßnahmen adressiert (Schneider, 2012, S. 177-178): ······················································································································ 52 Softwarequalität ······························································································ Fehlerfreiheit (Korrektheit): Dieser Aspekt wird oft mit konstruktiver Qualitäts- sicherung verfolgt und umfasst verschiedene ausgeklügelte Methoden. Flexibilität: Oft durch architektonische Vorgaben oder den Einsatz von Design- mustern gefördert, wo die Beziehung zwischen Maßnahme und Qualitätsver- besserung besonders offensichtlich ist. Bedienbarkeit (Usability): Konstruktiv unterstützt durch Maßnahmen des Usa- bility Engineering, die parallel zum Projekt durchgeführt werden und frühzeitig zu verbesserter Bedienbarkeit führen, im Gegensatz zur analytischen Evalua- tion der Benutzeroberfläche. Usability ist seit mindestens 20 Jahren ein großes Thema in der Software-Entwicklung und wir gehen auf dieses Thema explizit in Abschnitt 3.4 ein. Laufzeiteffizienz: Kann durch Simulationen und Modellierungen verbessert werden, was vor allem in der eingebetteten Softwareentwicklung nützlich ist, um Algorithmen und Durchlaufzeiten zu optimieren. Um die genannten Qualitätsmerkmale zu unterstützen, greifen die konstruktiven Maßnahmen auf konkrete „bewährte Verfahren“, „bewährte Bestandteile“ und „bewährte Strukturen“ zurück, deren Effektivität durch langjährige Anwendungser- fahrung bestätigt wurde (siehe Abbildung 8). Abbildung 8: Illustration verschiedener konstruktiver Qualitätsmaßnahmen, i. A. a. Schneider (2012, S. 180) Diese lassen sich drei Kategorien zuordnen: „Bewährte Verfahren“, „Bewährte Be- standteile“ und „Bewährte Strukturen“. ······················································································································ 53 Softwarequalität ······························································································ 3.1 Bewährte Verfahren Im Rahmen der konstruktiven Qualitätssicherung finden bewährte Verfahren An- wendung, die sich über verschiedene Ebenen erstrecken und bereits ihre Wirksam- keit unter Beweis gestellt haben. Sie manifestieren sich in Werkzeugen und Aktivi- täten, die dazu dienen, erfolgreiche Praktiken zu reproduzieren. Schulungen und gezielte Fortbildungen zählen zur konstruktiven Qualitätssi- cherung, denn sie verhelfen den Teams dazu, wertvolle Erkenntnisse und Fä- higkeiten aus erfolgreich abgeschlossenen Projekten zu erlangen. Diese proak- tiven Methoden sind darauf ausgerichtet, den Qualitätsstandard der Korrekt- heit sicherzustellen, indem sie genau vorschreiben, wie man vorgeht, um die Entstehung von Fehlern von vornherein auszuschließen. Solche präventiven Ansätze, angewendet bevor Schwierigkeiten auftreten, verbessern die Kompe- tenzen der Entwickler erheblich und ermöglichen es ihnen, ein Höchstmaß an Genauigkeit und Fehlerfreiheit in ihrer Arbeit zu erreichen. Spezialisierte Fort- bildungskurse, die auf spezifische Qualitätskriterien wie die Lesbarkeit oder Testbarkeit ausgerichtet sind, tragen ebenso zur Qualitätssteigerung bei. Auf der Ebene der Teamdynamik helfen Maßnahmen wie Konfliktmanagement und Teambildung, zwischenmenschliche Hindernisse zu überwinden und tragen so- mit zur Verbesserung der Abstimmung, Konsistenz und Klarheit von Schnittstel- len bei (Schneider, 2012, S. 180-181). Für komplexe Vorgänge werden reife Prozesse dokumentiert und in Prozess- modellen festgehalten. In den 1990er Jahren wurde die Bedeutung solcher strukturierten Prozesse für die Softwareentwicklung erkannt. Seither wird gro- ßer Wert auf Prozessreife gelegt (vgl. Abschnitt 2.3), was bedeutet, dass ein qualitativ hochwertiger Prozess wiederholbar, anpassungsfähig und idealer- weise quantitativ steuerbar sein sollte. Ein solchermaßen reifer Prozess erlaubt eine zielgerichtete Steuerung und hat einen direkten, positiven Einfluss auf die Qualität der entwickelten Software. Ein gut etablierter Prozess ist ein mächtiges Werkzeug, um bewährte Vorgehensweisen in der Softwareentwicklung effi- zient und wirksam umzusetzen, was sich unter anderem in einer verbesserten Planbarkeit und Vorhersehbarkeit von Projekten niederschlägt und Schätzun- gen zuverlässiger macht. Auch die etablierten Verfahrensmodelle für die Soft- wareentwicklung können unter dieser Hinsicht betrachtet werden, denn sie wurden entworfen, um Fehlern vorzubeugen. Moderne Verfahren setzen bei ······················································································································ 54 Softwarequalität ······························································································ den Anforderungen an, und machen darauf aufmerksam, dass es nicht aus- reicht, eine mangelhafte Spezifikation „korrekt“ umzusetzen. Stattdessen müs- sen Anforderungen von Anfang an „fehlerfrei“ verstanden und laufende Ände- rungen berücksichtigt werden. Agile Methoden, die sich in vielerlei Hinsicht von traditionellen Softwareentwicklungsverfahren unterscheiden, illustrieren die- sen Ansatz sehr gut (Schneider, 2012, S. 180-181). Checklisten, basierend auf Erfahrungen aus der Vergangenheit, erinnern Teams daran, bekannte Fallstricke zu vermeiden und unterstützen sie dabei, sich adä- quat auf Testphasen vorzubereiten. Sie dienen als Gedächtnisstütze für erfolg- reiche Strategien aus früheren Projekten, sodass kostbare Lernerfahrungen nicht wiederholt werden müssen. Auch formulierte Richtlinien erfüllen einen ähnlichen Zweck wie Checklisten, nur dass sie Erfahrungswissen in konkrete Handlungsanweisungen umwandeln. Sowohl Checklisten als auch Richtlinien dienen dazu, von Beginn an die bestmöglichen Praktiken anzuwenden (Schneider, 2012, S.180-181). Aufgrund der starken Verbreitung von Richtlinien in der Softwareentwicklung, gehen wir im folgenden Absatz gesondert auf sie ein. 3.1.1 Richtlinien in der Softwareentwicklung Software-Richtlinien sind systematisch formulierte Anweisungen oder Empfehlun- gen, die darauf abzielen, die Entwicklung, den Einsatz und die Wartung von Soft- wareprodukten zu standardisieren und zu optimieren. Sie dienen als Leitfaden für Entwicklerinnen und Projektteams, um Qualitätsmerkmale wie Sicherheit, Kompa- tibilität und Benutzerfreundlichkeit zu gewährleisten. Somit helfen sie dabei, kon- sistente und qualitativ hochwertige Code-Standards zu etablieren. Durch die Defi- nition von Best Practices für die Codierung können Entwickler Fehler vermeiden, die Lesbarkeit des Codes verbessern und die Wartbarkeit der Software langfristig sicherstellen. Dabei können sich Richtlinien auf verschiedene Aspekte der Software- entwicklung beziehen, von der Codierung und Architektur bis hin zu Design, Benut- zererfahrung (UX) und Datenschutz. Hier einige Beispiele: Sicherheit: In Sicherheitsrichtlinien werden Vorgehensweisen und Techniken festgelegt, um Schwachstellen zu vermeiden und die Resilienz der Software ge- genüber Angriffen zu erhöhen. Dies umfasst Richtlinien zur sicheren Handha- bung von Benutzerdaten, zur Authentifizierung und Autorisierung sowie zur Verschlüsselung von Daten. ······················································································································ 55 Softwarequalität ······························································································ Interoperabilität: Richtlinien zur Förderung der Interoperabilität legen Stan- dards für die Entwicklung von Software fest, die eine nahtlose Integration und Kommunikation mit anderen Systemen und Anwendungen ermöglicht. Dies ist besonders wichtig in heterogenen IT-Umgebungen und bei der Nutzung von APIs. Benutzererfahrung (User Experience): User Experience-Richtlinien bieten An- leitungen zur Gestaltung benutzerfreundlicher Schnittstellen. Sie berücksichti- gen Aspekte wie Zugänglichkeit, Konsistenz der Benutzeroberfläche und intui- tive Bedienbarkeit, um eine positive Benutzererfahrung zu gewährleisten. Mehr Informationen unten in Abschnitt 3.4. Datenschutz und Compliance: Datenschutzrichtlinien sind entscheidend, um die Einhaltung gesetzlicher Vorgaben und Normen, wie der Datenschutz- Grundverordnung (DSGVO) in der EU, zu gewährleisten. Sie geben vor, wie per- sonenbezogene Daten gesammelt, verarbeitet und gespeichert werden dürfen. Notationskonventionen: Für das tägliche Programmieren sollten sehr bald auch für Anfängerinnen und Anfänger sogenannte Notationskonventionen re- levant werden. Durch das Befolgung kann die Softwarequalität direkt und schon bei Programmierübungen gehoben werden. Daher widmen wir diesem Thema einen extra Absatz. 3.1.1.1 Notationskonventionen Notationskonventionen, auch bekannt als Codierungsstandards oder Programmier- stile, sind eine Sammlung von Richtlinien für das Schreiben von Code. Ihre Bedeu- tung im Bereich der Softwareentwicklung kann nicht hoch genug eingeschätzt wer- den, da sie auf verschiedenen Ebenen zur Verbesserung der Code-Qualität beitra- gen. Zunächst erhöhen sie die Lesbarkeit des Codes, was bedeutet, dass sowohl andere Entwickler als auch der ursprüngliche Autor den Code zu einem späteren Zeitpunkt leichter verstehen können (z. B. bei einer Fehlersuche). Dies ist von un- schätzbarem Wert in der langfristigen Pflege und Weiterentwicklung von Software- projekten. Darüber hinaus verbessert ein konsistenter Code die Wartbarkeit, da Fehler schneller identifiziert und Änderungen effizienter implementiert werden können. Einheitliche Programmierstile kommen auch der Teamarbeit zugute. Wenn Ent- wickler im Team mit einem gemeinsamen Set an Konventionen arbeiten, wird die ······················································································································ 56 Softwarequalität ······························································································ Zusammenarbeit wesentlich erleichtert und der Prozess der Code-Überprüfung (Code-Review) wird effektiver und weniger zeitaufwendig. Schließlich dienen klare Notationskonventionen als wertvolle Lernressourcen, besonders für Anfänger, da sie als Wegweiser zu bewährten Methoden und Techniken in der Softwareentwick- lung fungieren. Sie bieten eine strukturierte Grundlage, auf der neue Entwickler aufbauen können, und tragen so zur Verbreitung von Best Practices innerhalb der Entwicklergemeinschaft bei. Notationskonventionen umfassen Aspekte wie die Benennung von Variablen, die Formatierung von Anweisungen und die Organisation von Codeblöcken. Die Einhal- tung solcher Konventionen ist besonders wichtig in Projekten mit mehreren Ent- wicklern, um sicherzustellen, dass der Code von jedem im Team leicht verstanden und bearbeitet werden kann. Beispiele für Notationskonventionen: Benennung von Variablen und Funktionen: Namen sollten aussagekräftig und konsistent sein, um den Zweck oder Inhalt zu verdeutlichen. Zudem sollten sie nach Möglichkeit kurz sein und keine Missverständnisse verursachen. Einrückung und Leerzeichen: Die Verwendung von Einrückungen und Leerzei- chen verbessert die Lesbarkeit des Codes, indem sie die Struktur visuell hervor- hebt. Klammern: Die Platzierung von Klammern kann je nach Sprache variieren, sollte aber innerhalb eines Projekts konsistent sein. Kommentare und Dokumentation: Regelmäßige und sinnvolle Kommentare im Code helfen, die Funktionsweise und Absicht von komplexen Codeabschnitten zu erklären. Notationskonventionen am Beispiel Python Da Python eine der weltweit am weitesten verbreiteten Programmiersprachen ist und zudem gerne für die Einführung in das Programmieren Verwendung findet, wollen wir hier beispielhaft einige konkrete Python Konventionen benennen: ······················································································································ 57 Softwarequalität ······························································································ Einrückungen: Verwenden Sie 4 Leerzeichen pro Einrückungsebene und keine Tabs. def meine_funktion(): if True: return True Maximale Zeilenlänge: Beschränken Sie alle Zeilen auf maximal 79 Zeichen. ergebnis = funktion_mit_sehr_langem_namen(variable_eins, variable_zwei, variable_drei, variable_vier) Importe: Importieren Sie jede Bibliothek in einer separaten Zeile. import os import sys Variablennamen: Benutzen Sie snake_case für Funktionen und Variablennamen. meine_variable = 10 def meine_funktion(): pass Klassennamen: Benutzen Sie CamelCase für Klassennamen. class MeineKlasse: pass Leerzeilen: Benutzen Sie zwei Leerzeilen vor Klassendefinitionen und eine Leerzeile vor Funktionsdefinitionen. def funktion_eins(): pass class MeineKlasse: def methode_eins(self): pass ······················································································································ 58 Softwarequalität ······························································································ Kommentare: Kommentare sollten klar und auf den Punkt gebracht sein. Inline- Kommentare werden sparsam verwendet. # Das ist ein klarer Kommentar variable = 10 Whitespace in Ausdrücken und Anweisungen: Vermeiden Sie unnötige Leerzei- chen. # Eine Liste von Temperaturen temperaturen = [22, 24, 19, 23, 25] # Zugriff auf die Elemente der Liste erste_temperatur = temperaturen letzte_temperatur = temperaturen[-1] Operatoren: Setzen Sie Leerzeichen um die meisten Operatoren. x = y + z Unterstriche in numerischen Literalen (ab Python 3.6). # Sie können Unterstriche in numerische Literale einfügen, um die Lesbarkeit zu verbessern. preis = 10_000_000 Namensgebung: Wählen Sie aussagekräftige Bezeichnungen für Variablen. class Einkaufswagen: def __init__(self): self.artikel = [] self.anzahl_artikel = 0 def artikel_hinzufuegen(self, artikel_name, anzahl): self.artikel.append((artikel_name, anzahl)) self.anzahl_artikel += anzahl def gesamtpreis_berechnen(self, preisliste): gesamtpreis = 0 for artikel, anzahl in self.artikel: gesamtpreis += preisliste[artikel] * anzahl return gesamtpreis # Erstellen eines Einkaufswagens mein_einkaufswagen = Einkaufswagen() # Hinzufügen von Artikeln mein_einkaufswagen.artikel_hinzufuegen('Apfel', 3) mein_einkaufswagen.artikel_hinzufuegen('Brot', 1) ······················································································································ 59 Softwarequalität ······························································································ # Preisliste preisliste = {'Apfel': 0.5, 'Brot': 2.0} # Berechnen des Gesamtpreises gesamtpreis = mein_einkaufswagen.gesamtpreis_berechnen(preisliste) print(f'Der Gesamtpreis beträgt: {gesamtpreis} Euro') In diesem Beispiel sind die Klassennamen (Einkaufswagen), Funktionsnamen (arti- kel_hinzufuegen, gesamtpreis_berechnen) und Variablennamen (artikel, an- zahl_artikel, preisliste, gesamtpreis) so gewählt, dass sie ihren Zweck klar beschrei- ben und Stilrichtlinien folgen. 3.2 Bewährte Bestandteile Der Einsatz von „bewährten Bestandteilen“ hat in der konstruktiven Qualitätssiche- rung eine herausragende Bedeutung, weil diese eben ihren Wert bereits in der Pra- xis unter Beweis gestellt haben und durch eine erfolgreiche Anwendung in früheren Projekten ausgezeichnet sind. So tragen bewährte Komponenten und Dokumenta- tionen nicht nur zu einer beschleunigten Fertigstellung bei, sondern erhöhen typi- scherweise auch die Qualitätsstandards, da sie bereits von früheren Fehlern berei- nigt sind. Würde man diese Elemente neu entwickeln, müsste man diese Verbesse- rungen erneut vornehmen. Die Verwendung von, zum Beispiel, bereits vorhande- nen Code-Bibliotheken erlaubt es, bewährte Algorithmen und Datenstrukturen di- rekt zu integrieren, ohne sie neu programmieren zu müssen, was sowohl Zeit spart als auch die Qualität sichert (Schneider, 2012, S. 181-182). Bewährte Bestandteile werden je nach Kontext unterschiedlich eingesetzt: Bibliotheken bieten fertige Funktionen, die in neue Software integriert werden können. Sie stellen essenzielle Hilfsmittel dar, um die Entwicklung zu vereinfa- chen. So bietet etwa die math-Bibliothek in Python Zugriff auf mathematische Funktionen wie sqrt, welche die Quadratwurzel einer Zahl berechnet. Anstatt eine eigene Funktion zur Berechnung der Quadratwurzel zu implementieren, können Entwicklerinnen einfach math.sqrt aufrufen, wodurch der Code effizi- enter, wartbarer, lesbarer und auch fehlerresistenter wird. Komplementär dazu stehen Komponenten, die als größere Einheiten eigene und wiederverwendete Teile kombinieren, die dann konfiguriert werden, um ein umfassenderes System zu bilden. Diese Philosophie ist in der Literatur auch ······················································································································ 60 Softwarequalität ······························································································ als Komponentenbasierte Softwareentwicklung (Component-Based Software Engineering) bekannt. Eine Komponente ist ein Softwareobjekt, das so entwor- fen wurde, dass es unabhängig von anderen Komponenten funktioniert und über klar definierte Schnittstellen kommuniziert. Dies ermöglicht Entwicklern, Funktionen und Dienste effizient zu bündeln und wiederzuverwenden, wodurch die Entwicklung beschleunigt, die Wartbarkeit verbessert und die Kos- ten gesenkt werden können. Bewährte Komponenten weisen mit großer Wahr- scheinlichkeit weniger Fehler und Bugs auf als eigens implementierte Module mit derselben Funktionalität. Frameworks sind umfangreiche Sammlungen von vordefinierten Klassen, Bib- liotheken und Funktionen, die Entwicklerinnen einen strukturierten Rahmen für die Entwicklung von Anwendungen bieten. Diese Strukturen sind ausgiebig getestet und optimiert worden, was sie zu bewährten Bestandteilen macht, die die Entwicklung vereinfachen und die Qualität der endgültigen Softwarepro- dukte verbessern. Durch die Integration dieser fertigen und erprobten Ele- mente in ihre Softwareprojekte können Entwickler Zeit sparen, die Effizienz steigern und die Qualität des Endprodukts erheblich verbessern. Frameworks verkörpern das Konzept der Wiederverwendung in der Softwareentwicklung, indem sie den Entwicklerinnen ermöglichen, sich auf die einzigartigen und in- novativen Aspekte ihrer Anwendungen zu konzentrieren, statt Zeit mit der Lö- sung von allgemeinen Problemen zu verbringen, die bereits effektiv von der Community adressiert wurden. Zur Kategorie der konstruktiven Qualitätssicherung zählen ebenso bewährte Arbeitswerkzeuge, die sich im Laufe der Zeit als hilfreich für Softwareentwick- ler etabliert haben. Hier umfasst die Palette alles von fortgeschrittenen Ent- wicklungsumgebungen wie Eclipse bis hin zu Tools für das Konfigurationsma- nagement wie Git, CVS oder Subversion, sowie Testwerkzeuge wie JUnit. Ob- wohl diese Tools möglicherweise nicht dem neuesten Stand der Technik ent- sprechen, ist ihre bewährte Zuverlässigkeit und Effektivität von größerer Be- deutung. Werkzeuge wie Eclipse, CVS, SVN und JUnit haben sich in der Praxis als robust und zuverlässig erwiesen. Optimalerweise konserviert ein Unterneh- men solche bewährten Erfahrungen und setzt diese Werkzeuge weiterhin ein, besonders wenn sie sich im spezifischen Anwendungsbereich des Unterneh- mens bewährt haben (Schneider, 2012, S. 183). ······················································································································ 61 Softwarequalität ······························································································ 3.3 Bewährte Strukturen Nicht immer ist es möglich, ein konkretes Modul oder ein Stück Code erneut zu verwenden. Jedoch können oftmals zumindest bestimmte theoretische Konzepte übernommen werden, welche etablierte Muster oder Strukturen vorgeben. Somit steht zumindest schon mal ein stützender Rahmen, wenn auch die Details noch aus- gearbeitet werden müssen. Zu den prägnantesten Beispielen bewährter Strukturen zählen Architekturen und Design Patterns, die jeweils als Blaupause für den Entwurf dienen. Die Nutzung dieser bewährten Strukturen ermöglicht es, von den Erfahrun- gen zahlreicher Entwicklerinnen zu profitieren und gängige Fehler zu vermeiden. Zu einem kurzen Exkurs zu Softwarestrukturen und Architekturen wird in Abschnitt 4.3 eingeladen. Umfassende Architekturen wie die Drei-Schichten-Architektur bieten eine breite Anwendbarkeit. Eine Vielzahl von Anwendungen kann von der Drei-Schichten-Ar- chitektur profitieren, da sie vielfältige Implementierungsmöglichkeiten bietet (Schneider, 2012, S.184). Design Patterns, wie sie von Gamma et al. 1995 beschrieben wurden, zielen auf sehr spezifische Einsatzszenarien ab und versprechen klare Qualitätssteigerungen, wobei oft eine erhöhte Flexibilität im Vordergrund steht. Dabei handelt es sich um erprobte Lösungsschablonen für wiederkehrende Designprobleme und Herausfor- derungen, die sich während des Softwareentwicklungsprozesses ergeben. Diese Muster dienen als Leitfaden, um gängige Probleme bei der Gestaltung von Soft- warearchitekturen auf elegante und effiziente Weise zu lösen. Durch ihre Verwen- dung können Entwickler die Wartbarkeit, Erweiterbarkeit und Flexibilität ihrer An- wendungen erheblich verbessern. Designmuster sind in drei Hauptkategorien un- terteilt, die verschiedene Aspekte der Softwareentwicklung adressieren. Erzeugungsmuster, auch Creational Patterns genannt, konzentrieren sich auf die Objekterstellung und bieten Mechanismen zur Steuerung der Instanziierung. Statt direkt neue Instanzen zu erzeugen, ermöglichen diese Muster eine flexiblere und kontrollierte Objekterzeugung. Bekannte Beispiele hierfür sind das Singleton-Mus- ter, das sicherstellt, dass eine Klasse nur ein einziges Mal instanziiert wird, und das Factory-Method-Muster, das die Erstellung von Objekten in Unterklassen auslagert, um die Flexibilität bei der Objekterzeugung zu erhöhen. ······················································································································ 62 Softwarequalität ······························································································ Strukturmuster, auch Structural Patterns genannt, helfen bei der Gestaltung der Beziehung zwischen Objekten und Klassen. Sie zielen darauf ab, größere Strukturen durch einfache Komposition von Objekten zu bilden, wodurch die Softwarearchi- tektur flexibler und robuster wird. Das Adapter-Muster ermöglicht beispielsweise die Zusammenarbeit von Klassen mit inkompatiblen Schnittstellen, und das Com- posite-Muster ermöglicht es, Objekte zu Baumstrukturen zusammenzufassen, um Teil-Ganzes-Hierarchien zu repräsentieren. Verhaltensmuster, auch Behavioral Patterns genannt, beschäftigen sich mit effek- tiven Kommunikationsmustern zwischen Objekten. Sie verbessern die Interaktion und die Verantwortungszuteilung unter Objekten, was zu klareren und dynami- scheren Beziehungen führt. Das Observer-Muster erlaubt es beispielsweise, dass sich ein Objekt bei Änderungen eines anderen Objekts automatisch aktualisiert, während das Strategy-Muster ermöglicht, den Algorithmus einer Funktion dyna- misch zu ändern. Durch den Einsatz von Designmustern können Softwareentwicklerinnen auf einen reichen Schatz an bewährten Lösungsansätzen zurückgreifen, die nicht nur die Ent- wicklungszeit verkürzen, sondern auch zu einer erhöhten Qualität und Wartbarkeit des Codes beitragen. Darüber hinaus fördern sie eine einheitliche Sprache, die das Verständnis und die Kommunikation innerhalb von Entwicklungsteams und der ge- samten Softwareentwicklungscommunity erleichtert. 3.4 Usability Engineering und User Experience Design Usability Engineering ist ein benutzerzentrierter Ansatz in der Softwareentwick- lung, der darauf abzielt, die Benutzerfreundlichkeit und die Zufriedenheit der Nut- zer mit dem Endprodukt zu maximieren. Es ist eine Disziplin, die sich mit der Ge- staltung benutzerfreundlicher interaktiver Systeme beschäftigt und dabei Aspekte wie Verständlichkeit, Erlernbarkeit und Effizienz der Benutzerschnittstellen berück- sichtigt. In der Literatur zur Softwarequalität wird Usability Engineering teilweise bei den konstruktiven Qualitätsmaßnahmen aufgeführt, denn es zielt darauf ab Mängel am User Interface von Anfang an zu eliminieren. ······················································································································ 63 Softwarequalität ······························································································ 3.4.1 Was sind Usability Engineering und User Experience Design? Usability Engineering basiert auf der Prämisse, dass Softwareprodukte für ihre Be- nutzer verständlich, effizient und angenehm in der Anwendung sein sollten. Um dieses Ziel zu erreichen, werden Usability-Prinzipien und -Techniken während des gesamten Entwicklungsprozesses angewendet, beginnend mit der Konzeption bis hin zum finalen Produkt. Usability Engineering beinhaltet die Analyse der Benutzer- bedürfnisse, die Entwicklung von Designlösungen, die iterative Erstellung von Pro- totypen und die Durchführung von Benutzertests (Nielsen, 1994). In den letzten Jahren hat sich der Begriff Usability Engineering zu User Experience Design (UX Design) ausgeweitet. Während Usability Engineering sich hauptsächlich auf die Benutzerfreundlichkeit und Effizienz von Produkten konzentriert, umfasst User Experience Design ein breiteres Spektrum an Aspekten, die die gesamte Erfah- rung einer Person mit einem Produkt oder Dienst betreffen. So bezieht sich User Experience Design nicht nur auf die praktische Benutzbarkeit, sondern auch auf die Emotionen, Wahrnehmungen, Präferenzen und das Verhalten der Nutzer vor, wäh- rend und nach der Nutzung des Produkts. Es umfasst zusätzlich zur Usability As- pekte wie Ästhetik oder Emotionale Verbindung. User Experience Design berück- sichtigt somit das ganzheitliche Nutzererlebnis und zielt darauf ab, Produkte zu schaffen, die nicht nur funktional und benutzerfreundlich sind, sondern auch in je- der Hinsicht zufriedenstellend, ansprechend und zugänglich. Es geht darum, posi- tive Erfahrungen zu schaffen, die die Bedürfnisse und Erwartungen der Nutzer er- füllen oder übertreffen (Rogers, Sharp, & Preece, 2011). 3.4.2 Wie wird Usability Engineering und UX durchgeführt? Der Prozess des Usability Engineering erfolgt in mehreren Schritten. Das Verfahren ist dabei nicht immer strikt zu verfolgen, sondern kann den situativen Gegebenhei- ten angepasst werden. Eine mögliche Abfolge von Untersuchungsfolgen könnte wie folgt aussehen: 1. Benutzeranalyse: Das Verständnis der Zielgruppe, ihrer Bedürfnisse, Fähigkei- ten und Erwartungen ist grundlegend. Dies beinhaltet die Sammlung von Daten durch Beobachtungen, Interviews und Fragebögen. ······················································································································ 64 Softwarequalität ······························································································ 2. Anforderungserhebung: Auf Basis der Benutzeranalyse werden die Anforde- rungen an die Usability definiert. Diese Anforderungen werden in messbare Usability-Ziele umgesetzt. 3. Design und Prototyping: Es werden Designkonzepte entwickelt, die auf den An- forderungen und den Prinzipien guter Usability basieren. Prototypen – von Pa- pierprototypen bis hin zu interaktiven digitalen Modellen – werden erstellt, um Designideen zu visualisieren und zu testen. 4. Benutzertests: Die Prototypen werden in iterativen Zyklen getestet, wobei re- ale Benutzer typische Aufgaben durchführen. Die Leistung und die Zufrieden- heit der Benutzer werden dabei bewertet. Im V-Modell können Benutzertests beziehungsweise Usability Tests auf der höchsten Testebene zur Abnahme der Anforderungsanalyse zum Einsatz gebracht werden (siehe auch Abschnitt 5.3.4). 5. Iteration und Verfeinerung: Basierend auf dem Feedback aus den Benutzer- tests werden die Designlösungen angepasst und verbessert. Dieser Prozess wird so lange wiederholt, bis die Usability-Ziele erreicht sind. 6. Implementierung und Bewertung: Das finale Design wird implementiert. Nach der Veröffentlichung des Produkts können weitere Bewertungen durchgeführt werden, um sicherzustellen, dass die Usability-Ziele im realen Einsatz erreicht werden. Usability Engineering ist kein einmaliger Schritt, sondern ein Prozess, der parallel zur Softwareentwicklung stattfindet. Idealerweise beginnt er zu Beginn des Projekts und setzt sich kontinuierlich bis zum Abschluss fort. Der Einbezug von Usability- Überlegungen in den frühen Phasen der Entwicklung kann grundlegende Desig- nentscheidungen beeinflussen und trägt dazu bei, kostspielige Änderungen in spä- teren Phasen zu vermeiden. 3.4.3 Beitrag von Usability und UX zur Softwarequalität Die Einbindung von Usability Engineering und UX in den Entwicklungsprozess hat einen direkten Einfluss auf die Qualität der Software. Eine verbesserte Usability führt zu einer höheren Benutzerzufriedenheit, geringeren Schulungskosten, weni- ger Benutzerfehlern und einer effizienteren Nutzung der Software. All dies trägt zur ······················································································································ 65 Softwarequalität ······························································································ Wertsteigerung des Produkts bei und kann einen entscheidenden Wettbewerbs- vorteil darstellen. Software, die aus Sicht der Usability gut konzipiert ist, wird wahr- scheinlicher angenommen und kann zu einer stärkeren Kundenbindung führen. Für Usability und User Experience (UX) ist die ISO 9241 Reihe ausschlaggebend, ins- besondere der Teil 210: Ergonomie der Mensch-System-Interaktion – Teil 210: Menschzentrierte Gestaltung von interaktiven Systemen (früher bekannt als ISO 13407). Diese internationale Norm legt Prinzipien und Leitlinien für das mensch- zentrierte Design von interaktiven Systemen fest, mit dem Ziel, Systeme zu entwi- ckeln, die nutzbar und auf die Bedürfnisse, Präferenzen und Einschränkungen der Endnutzer abgestimmt sind. ISO 9241-210 betont die Wichtigkeit der Einbeziehung von Benutzern in den Ge- staltungsprozess und die Notwendigkeit, Usability-Ziele, Nutzeranforderungen und -erfahrungen während des gesamten Entwicklungsprozesses zu berücksichtigen und zu evaluieren. Die Norm befasst sich mit Themen wie: Verstehen und Definieren des Kontexts der Nutzung Identifizieren der Nutzerbedürfnisse und Anforderungen Gestaltung der Interaktion und des Interfaces Durchführung von Nutzertests und Bewertung der Usability Iterative Gestaltung und Entwicklung 3.5 Kontrollfragen Welche der folgenden ist KEINE konstruktive Qualitätsmaßnahme in der Soft- Übung wareentwicklung? Multiple-Choice-Fragen: A) Designmuster anwenden B) Code nach der Implementierung testen C) Usability während des Entwurfs berücksichtigen D) Architektonische Vorgaben festlegen ······················································································································ 66 Softwarequalität ······························································································ Welche Rolle spielen Notationskonventionen in der Softwareentwicklung? Multiple-Choice-Fragen: A) Sie bieten verschlüsselte Sicherheitsprotokolle für Datenübertragungen. B) Sie stellen Anleitungen für konsistenten und lesbaren Code bereit. C) Sie regulieren die Performance von Netzwerkkomponenten. D) Sie geben die grafische Benutzeroberfläche einer Software vor. Warum ist der Einsatz von „bewährten Bestandteilen“ in der Softwareentwick- lung von großer Bedeutung? Multiple-Choice-Fragen: A) Sie erfordern eine längere Entwicklungszeit. B) Sie sind mit höheren sofortigen Kosten verbunden. C) Sie erhöhen die Wahrscheinlichkeit von Fehlern in neuen Projekten. D) Sie tragen zu einer beschleunigten Fertigstellung und höheren Qualitätsstan- dards bei. Welche internationale Norm legt Prinzipien und Leitlinien für das mensch- zentrierte Design von interaktiven Systemen fest? Multiple-Choice-Fragen: A) ISO 9001 B) ISO 9241-210 C) ISO 13407 D) ISO 14001 ······················································································································ 67

Use Quizgecko on...
Browser
Browser