Entwicklung von Software Flashcards
Definition Softwareentwicklung
Auf Grundlage des Entwurfs wird ein Softwaresystem in einer Programmiersprache entwickelt
Ziele der Softwarewiederverwendung
- Herstellkosten verringern
- Wartungskosten verringern
- Projektdauer verkürzen
- Qualität erhöhen
–> Wiederverwendung von ganzen Anwendungen, Klassen, Komponenten
Kriterien für Entscheidung über Wiederverwendung
- Entwicklungszeit der Software
- Nutzungsdauer der Software
- Erfahrungen und Kenntnisse des Entwicklungsteams
- Kompromissbereitschaft der Kunden
Softwarewiederverwendung mithilfe von..
- Schnittstellen (APIs)
- Code-Generatoren
Komponentenbasiertes Softwareengineering
- unabhängig konzipierte Komponenten werden zu einem Anwendungssystem integriert
- Standardsoftware oft nicht flexibel genug
UML-Komponentendiagramm
zeigt die von einer Komponente benötigten und die von einer Komponente angebotenen Schnittstellen
Komponenten vs. Klassen
- werden bereits kompiliert auf Komponentenplattform installiert
- definieren keine Objekte
- nur über Schnittstellen ansprechbar (Blackbox)
- entwickelt gemäß Komponentenmodell (standardisiert)
- größere Funktionalität als Klassen
Inkompatibilität zwischen Komponenten
- Bezeichnung von Operationen unterscheiden sich
- unterschiedliche Parameter
Prinzipien verlässlicher Entwicklung
- getter/setter-Methoden
- keine ungefangenen Exceptions
- Vermeidung von Fließkommazahlen, Pointern, Nebenläufigkeit
Defensive programming
- Überprüfungen im Code, die für Algorithmus nicht notwendig wären
- Fehler in Spezifikation werden damit nicht entdeckt
Weiterentwicklung von Software
nach Go-live:
- Fehlerbehebung
- Softwareanpassung oder Plattformanpassung
- Hinzufügen oder Ändern von Funktionen
Weiterentwicklung von Software: Wartbarkeit
- teuer, daher: während Entwicklung darauf achten
- Experten für Technik (werden weniger)
- Struktur und Architektur wird mit der Zeit aufwendiger
Weiterentwicklung von Software: Reengineering
- Neuimplementierung von Legacy-Systemen
- geringeres Risiko und Kosten als Neuentwicklung
- Funktionalität ändert sich nicht
Strategien zur Weiterentwicklung von Legacy-Systemen
- Abschalten des Systems bei großer Änderung der Geschäftsprozesse seit Einführung
- regelmäßige Wartung bei akzeptablen Kosten (bleibt in Betrieb)
- System unstrukturiert + schlecht wartbar, aber geschäftskritisch: Software Reengineering
Revision Control System (RCS)
- Software zu Versionsverwaltung von Dateien und Dokumentation von Änderungen
- verwaltet einzelne Dateien, keine Projekte
- keine Checksumme, daher anfälliger für Fehler
- mittlerweile von CVS abgelöst
Concurrent Versions Systems (CVS)
- Software zur Versionsverwaltung von Dateien (meist Quelltext)
- alle Dateien in zentralem Repository (einzelne Dateien können dennoch verändert o. wiederhergestellt werden)
- Überblick über Versionen und Koordination größerer Projekte
- von Git abgelöst
Git
- Software zur verteilten Versionsverwaltung von Dateien
- kein zentraler Server (jeder Nutzer eigene Kopie)
- branching und merging
- kryptographische Versionsverwaltung der Projektgeschichte durch Hash-Werte
GNU Bazaar
- Versionsverwaltung Quellcode für Open-Source-Projekte
- einfache Bedienung, Zuverlässigkeit, Flexibilität
- Verwaltung von Entwicklungszweigen (Branching & Merging)
- lokal oder für Zusammenarbeit über Netzwerk