Software Engineering mit Übungen Franz-Josef Elmer, Universität Basel, HS 2016 Software Engineering 2 Organisation – – Ort: Kleiner Hörsaal 120, Bernoullianum 32 Ablauf: 16:15 Vorlesung 17:00 17:15 Pause Übung 18:45 – Hausaufgaben: ● ● ● – – Vorlesungspräsentation der nächsten Vorlesung lesen und durcharbeiten. Andere Texte lesen und durcharbeiten. Arbeiten am Softwareprojekt Data Repository. Betreuer: Silvan Heller, Fabio Hirt Prüfung: Schriftlich, 16:15-17:15, 20.12. Kreditpunkte: 6 Punkte ● ● Mitmachen in den Übungen und im Softwareprojekt Schriftliche Prüfung Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 3 Was ist Software Engineering? – Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen. (Balzert, Lehrbuch der Software-Technik, 1998 (S.36), 2009 (S.17) – The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (Encyclopedia of Software Engineering, Vol. 2, 1994, p. 1177) – A discipline whose aim is the production of quality software, delivered on time, within budget, and satisfying users' needs. (Stephen R. Schach, Software Engineering, 1993) – Software engineering is the study and application of engineering to the design, development, and maintenance of software.. (Wikipedia, September 2012) Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 4 Was ist Software? – Die Gesamtheit von Softwarekomponenten (Programme, Dokumentationen usw.), die als Ganzes entwickelt, vertrieben, angewendet und gewartet werden. (R. Dumke, Software Engineering, 2000, S.3) – Mögliche Bestandteile von Software: ● ● ● ● ● ● Computer Programm(e) Konfigurationsdaten Installationsprogramm(e) Benutzerhandbuch Handbuch für Systemadministratoren API (Application Programming Interface) Dokumentation Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 5 Software Engineering vs Programmieren Analysieren Spezifizieren Dokumentieren Entwerfen Programmieren = Implementieren Programmieren Testen Konfigurieren Installieren Instandhalten Planen Verwalten Kommunizieren Software Engineering wenn – Auftraggeber ≠ Programmierer ≠ Benutzer – grosse, komplexe Software Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 6 Softwareentwicklung: Kunst oder Wissenschaft? – Softwareentwickler: Ingenieur oder Handwerker? – Software ist anders als Produkte wie Auto oder Hochhaus: ● ● – Beruht nicht auf physikalische Prinzipien deshalb – schwieriger sich die Software vorzustellen – kann nicht berechnet werden wie z.B. die Statik einer Brücke – es ist schwierig ihre Korrektheit zu überprüfen – kann Software leicht geändert werden – kann Software vermessen werden (Qualitätskontrolle?) Besteht aus einer riesigen Zahl von Einzelteilen (Codezeilen) deshalb – tausende Weg führen nach Rom – welcher ist der beste, billigste, schnellste? Zur Softwareentwicklung braucht es: ● Methoden, Werkzeuge und vor allem Erfahrung Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 7 Softwareentwicklung als Prozess – Beginnt mit der Idee ein Problem oder Aufgabe mittels Computer und Software zu lösen. – Endet nicht mit der Auslieferung der Software. – Software Engineering ist der Versuch diesen Prozess systematisch anzugehen. – Am Prozess beteiligte Personen: ● ● ● ● ● ● ● (Potentielle) Benutzer der Software Auftraggeber Projektleiter Softwareentwickler GUI Designer Tester Systemadministrator Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 8 Aspekte des Softwareentwicklungsprozess – Analyse: Was genau soll die Software können? – Entwurf: Wie soll die Software arbeiten? – Implementierung: Ausführbaren Code erzeugen – Test: Unit Tests, Benutzertests, Integrationstests, Systemtests – Inbetriebnahme: Installation, Konfiguration, Schulung, organisatorische Umstellung – Wartung: Fehlerbeseitigung, Software ändern und erweitern Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 9 Teilgebiete des Software Engineering – Requirements Engineering – Architektur und Entwurf (Design) – Implementierung – Qualitätsmanagement (QA = Quality Assurance) – Konfigurationsmanagement – Dokumentation – Projektmanagement Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 10 Requirements Engineering – Requirements: Anforderungen an die Software ● – Spezifikationen ● – Was soll die Software leisten? Wie soll die Software technisch funktionieren? Aufgabe des Requirement Engineers ● ● ● ● Ermittlung der Anforderungen Analyse der Anforderungen Anforderungen dokumentieren Spezifikationen schreiben Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 11 Architektur und Design – Strukturierung der Software ● ● – Architektur ● ● – ● Strukturen im Kleinen Entwurf hängt vom Typ der Programmiersprache (z.B. objektorientiert versus funktional) ab Unified Modeling Language (UML) ● – Big Picture Physische und logische Zerlegung des Softwaresystems in Teilsysteme. (z.B. Client-Server Architektur) Design ● – Zerlegung in Teilbereiche Koppelung der Teilbereiche grafische Beschreibungssprache welche verschiedene (Teil)Ansichten auf Architektur und Design erlaubt. Best Practice ● ● Prinzipien zur Strukturierung von Software Architektur und Design Patterns Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 12 Implementierung – Umsetzung der Spezifikation in ausführbaren Code nach den Architektur- und Designvorgaben = Programmieren – Programmiersprache ● ● – Technologien ● ● – Typ (z.B. prozedural versus funktional) Version (z.B. Java 6 versus Java 8) Frameworks. Beispiel: JDBC (Java Database Connectivity) Bibiliotheken (Libraries). Beispiel: Hibernate Refactoring: Verbesserung des Codes ohne die Funktionalität der Software zu ändern. Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 13 Qualitätsmanagement – Reviews ● ● ● ● – Testing ● ● ● ● ● ● ● – Requirements Architektur und Design Code Dokumentation Unit Tests GUI Tests System Tests Akzeptanz Tests Integrations Tests Manuelle Tests Automatische Tests Metriken ● Statistische Daten über den Code. Beispiel: LOC (Lines of Code) Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 14 Konfiguration Management – Source Code Management ● – Build Management ● – Erzeugung der lauffähigen Software Deployment ● ● ● – Versionsverwaltung der Software Auslieferung Installation Konfiguration Change Management ● Handhabung von Bugs und Änderungswünschen (Change Requests) Universität Basel, HS 2016 © Franz-Josef Elmer 2016 Software Engineering 15 Dokumentation – – – – – – – – – – Anforderungen (Pflichtenheft) Spezifikationen (Lastenheft) Architektur und Design Code inklusive Kommentare API (Application Programming Interface) Testfälle Benutzerhandbücher Administratorhandbuch Tutorials Videos, Webcasts und Webinars Universität Basel, HS 2016 © Franz-Josef Elmer 2016