Welche Kriterien sind nötig, um gute Software zu programmieren? (+Beispiel)
Akzeptanz (Software muss von den Benutzern akzeptiert werden; verständlich, nützlich und kompatibel mit anderen Systemen sein)
Verlässlichkeit (Zuverlässigkeit, Informationssicherheit, Betriebssicherheit)
Effizienz (Systemressourcen wie Speicher und Prozessorkapazität minimieren; gute Reaktionszeit, schnelle Verarbeitungszeit und geringe Ressourcennutzung)
Wartbarkeit (Software sollte so geschrieben sein, dass sie weiterentwickelt werden kann, um sich an verändernde Kundenbedürfnisse anzupassen; Softwareanpassungen sind unvermeidlich)
Anwendungsfälle zu verschiedenen Softwaretypen zuordnen
Etischer KOntext für Softwareprogrammierer.
Warum macht er Sinn und warum ist es wichtig sich Gedanken darüber zu machen?
Softwareentwickler sollen sich verpflichten, Analyse, Spezifikation, Entwurf, Entwicklung, Test und Wartung von Software zu einem nützlichen und geachteten Beruf zu machen. In Übereinstimmung mit ihrem Verpflichtungen gegenüber der Gesundheit, Sicherheit und dem Wohlergehen der Öffentlichkeitsollen Softwareentwickler sich an die folgenden acht Prinzipien halten:
Öffentlichkeit: Handeln in Übereinstimmung mit öffentlichem Interesse
Kunde und Arbeitgeber: Im Interesse ihrer Kunden und Arbeitgeber handeln (decken mit öffentlichem Interesse)
Produkt: Produkt soll höchstmöglichen professionellen Standards entsprechen
Beurteilung: Bei der Beurteilung eines Sachverhalts Integrität und Unabhängigkeit bewahren
Management: Für Software-Engineering verantwortliche Manager -> ethischen Grundsätzen verpflichtet fühlen und in diesem Sinne handeln
Beruf: Integrität und den Ruf des Berufs in Übereinstimmung mit dem öffentlichen Interesse fördern
Kollegen: fair und hilfsbereit gegenüber Kollegen sein
Selbst: lebenslangen Lernprozess in Bezug auf den Beruf unterwerfen
Warum ist es wichtig sich an den Kodex zu halten?
Falsche oder schlechte Programmierungen können schlimmstenfalls tödliche Folgen für den Anwender haben. Beispielsweise sollten Medizinprodukte möglichst akkurat und ohne Fehler programmiert werden.
Was sind die 2 Arten von Softwareprodukten?
Generische Produkte (eigenständige Systeme, die entwickelt und von jedem Kunden auf dem freien Markt erworben werden können)
Angepasste (oder bestellte) Softwaresysteme (Im Auftrag eines Kunden speziell für diesen hergestellt)
Scrum/ Agile Methoden -> Beschreiben der einzelnen Rollen und Aufgaben.
Scrum -> Agile Methoden des Softwareengineerings
Platooning App. Was haben wir gemacht und wofür haben wir es gemacht?
Platooning: Automatisiertes und vernetztes Fahren, bei dem zwei oder mehr Fahrzeuge digital miteinander gekoppelt werden. Dabei wird nur das erste Fahrzeug aktiv vom Fahrer gesteuert und die anderen folgen digital angehängt in einem geringen Abstand. Vorteile:
Geringe Abstände z.B. bei LKWs (Entlastung der Autobahn)
Hintere Fahrer nur Überwachungsaufgaben
Geringerer Kraftstoffverbrauch (Windschatteneffekt)
Nachteile: Gesetzeslage etc./ Umsetzbarkeit
Ablauf in unserem Projekt:
Umfeldanalyse Platooning (Vorteile/ Nachteile; Akteure, Funktionen/ Arten; Gesetze; Stand der Technik)
Anforderungssammlung (Platooning-App) -> funktionale und nicht funktionale Anforderungen
Priorisierung der Anforderungen -> Nutzen von verschiedenen Sichten, um alle Anforderungen zu finden
Anforderungen formulieren -> Lastenheft
Festlegen von Arbeitspaketen
Mengengerüst aufgestellt (Wie viele Nutzer …)
Frage: Finanzierung der App/ des Projekts
Entwicklung der App mit Android Studio -> Rapid Prototping (schnelle Entwicklung eines Prototypen)
Android Studio als Entwicklungsumgebung mit Java Code (Präsi dazu anschauen)
Funktionale und nicht-funktionale Anforderungen.
Eine funktionale Anforderung legt fest, was das Produkt tun soll. Sie machen eine Aussage über eine zu erfüllende Eigenschaft oder zu erbringende Leistung eines Produktes, Systems oder Prozesses.
Bsp.: Der Fahrer muss über die App einen Platooning-Partner finden können.
Nicht-funktionale Anforderungen beschreiben, wie gut das System die Leistung erbringen soll und werden vielfach als Randbedingungen und Qualitätseigenschaften verstanden.
Bsp.: Das Finden eines Partners darf nicht länger als 10 Sek. dauern.
Was sind die Phasen des Spiralmodells?
Start
Spezifikationen der Geschäftsanforderungen
Durchführbarkeitsstudie
Ermittlung der Benutzeranforderungen
Spezifikationen der Benutzeranforderungen
Entwicklung eines Prototypen
Ermittlung der Systemanforderungen
Spezifikation und Modellierung der Systemanforderungen
Review
Dokumentation der Systemanforderungen
Ermittlung der Anforderungen
Spezifikation der Anforderungen
Validierung der Anforderungen
Was sind die verschiedenen Sichten bei der Anforderungsermittlung?
Funktional/ Nicht-Funktional | Muss-Funktion (KO-Kriterium) / Kann-Funktion
Usersicht (Fahrer, Spediteur, Entwickler)
Schnittstellensicht (Client – Server; App – Bordcomputer)
Objektsicht (LKW, Fahrer, Fahrt)
Modulsicht (Log In, Profil)
Prozesssicht (Partner finden; Anmeldung)
Datensicht
Was sind die verschiedenen Softwarearchitekturen?
Monolithische Architektur (Blogging-Plattformen)
Client Server Architektur (E-Mail-Dienste)
Microdienste Architektur (E-Commerce Plattform)
Schichten Architektur (Unternehmensanwendung)
Peer to Peer Architektur (Filesharing-System)
Serverlose Architektur (Serverlose Webanwendung für Bildverarbeitung)
Event driven Architektur (System für die Echtzeitverarbeitung von Sensordaten)
Safety und Security Engineering
Safety Engineering: Konzentration darauf, Systeme so zu gestalten, zu implementieren und zu betreiben, um sicherzustellen, dass sie unter allen Bedingungen sicher und zuverlässig funktionieren. Das Hauptaugenmerk liegt darauf, physische Schäden oder Verletzungen für Menschen und Umwelt zu vermeiden.
Security Engineering: Konzentration auf den Schutz von Informationen, Systemen und Netzwerken vor unbefugtem Zugriff, Manipulation oder Zerstörung. Das Hauptziel besteht darin, die Vertraulichkeit, Integrität und Verfügbarkeit von Daten und Ressourcen sicherzustellen. Security Engineering konzentriert sich auf digitale Aspekte, um die Integrität von Software und Daten zu schützen.
Wofür braucht man Softwareingenieure?
Fachleute für Planung, Entwicklung, Implementierung und Wartung von Softwareanwendungen und -systemen
Spielen eine entscheidende Rolle in fast allen Branchen
Tragen dazu bei, die Art und Weise zu verändern/ entwickeln, wie Organisationen arbeiten, kommunizieren und ihre Geschäftsziele erreichen
Wartbarkeit von Quellcode ist dabei ein entscheidender Aspekt (Klarheit und Lesbarkeit, Modularität, Dokumentation, Konsistenz …)
Was ist Resillienz und was sind Anti Patterns?
Resilienz: Beschreibt die Fähigkeit eines Systems, widerstandsfähig gegenüber Fehlern, Ausfällen oder unerwarteten Bedingungen zu sein und sich schnell von solchen Ereignissen zu erholen. Ein resilientes Software-System ist in der Lage, einen akzeptablen Betriebszustand aufrechtzuerhalten, selbst wenn es unerwartete Belastungen oder Störungen ausgesetzt ist.
Anti Patterns: Wiederkehrende Muster oder Praktiken in der Softwareentwicklung, die als schlecht oder ineffizient gelten. Antipattern können in verschiedenen Phasen des Softwareentwicklungsprozesses auftreten, von der Planung und Architektur bis zur Implementierung und Wartung. Antipattern sollten möglichst identifiziert und vermieden werden, um die Qualität, Wartbarkeit und Skalierbarkeit von Softwareprojekten zu verbessern.
Beispiele:
Big Ball of Mud-Antipattern (undurchsichtiges und schlecht strukturiertes System)
Spaghetti Code-Antipattern (unstrukturierter und schwer verständlicher Code)
Copy-Paste-Antipattern (unkritische Kopieren und Einfügen von Codeabschnitten)
Not-Invented-Here-Antipattern (Ablehnung der Verwendung externer Bibliotheken oder Frameworks)
Was ist ein Softwareingenieur?
Projektmanager einer Produktentwicklung
Was sind Softwareentwickler?
Übernimmt Teilaufgaben in einem Entwicklungsbereich
Was ist Standardsoftware?
Bereits am Markt verfügbare Software, welche in der Regel nicht individuelle angepasst wird.
Beispiele: Spiele, Office Produkte
Was ist individual Software?
Software, welche für den Kunden extra programmiert wird und nicht einfach am Markt abrufbar ist.
Beispiele: Kernkraftwerke, Staudamm, ISS
Was sind Anwendungsarten von Software?
1. Eigenständige Anwendungen
Besitzen alle nötigen Funktionalitäten und müssen nicht mit einem Netzwerk verbunden sein (CAD-Programme)
2. Interaktive transaktionsbasierte Anwendungen
Anwendungen werden auf einem Entfernten PC durchgeführt – Benutzer greifen von ihrem eigenen PC drauf zu (Cloud basierte Email)
3. Eingebettet Steuerungssysteme
Softwaresteuerungssysteme die Hardwaregeräte steuern und verwalten (ABS System)
4. Stapelverarbeitende Systeme
Geschäftssysteme, die zur Verarbeitung großer Datenmengen entworfen wurden (Lohnauszahlungssysteme)
5. Unterhaltungssysteme
Für die private Nutzung zur Unterhaltung ihrer Nutzer
6. Systeme für die Modellierung und Simulation
Systeme für die Modellierung von physikalischen Vorgängen oder Situationen
7. Systeme zur Datenerfassung und -analyse
Systeme, die Daten aus ihrer Umgebung sammeln und diese Daten an andere Systeme zur Verarbeitung senden
8. Systeme von Systemen
Systeme, die in Unternehmen eingesetzt werden und aus vielen anderen Systemen zusammengesetzt werden (ERP-System)
Was ist Low Code?
bezeichnet eine Entwicklungsumgebung für Software, die die Entwicklung mit visuellen Applikationsdesign-Werkzeugen und anderen grafischen Modellierungsverfahren ermöglicht,
Anstatt klassische textbasierte Programmiersprachen zu verwenden.
Dadurch kann die Entwicklungs- und Bereitstellungszeit für Software deutlich verringert werden.
Aufgrund dieser potentiellen Vorteile können Low-Code-Plattformen die Kosten für Projektplanung, Mitarbeitertraining und die eigentliche Entwicklung deutlich senken
Was ist DevOps?
Zuletzt geändertvor einem Jahr