7. ICS Development I Flashcards
Was ist Software?
ICS = Information and Communication Software
- Computerprogramme und ihre dazugehörige Dokumentation
- Software wird nur für bestimmte Kunden (individuelle Software) oder für einen allgemeinen Markt (Standardsoftware) entwickelt
- Gute Software soll dem Benutzer die erforderlichen Funktionalitäten und Performance liefern und wartbar, zuverlässig und nutzbar sein
Wer braucht Software?
• Die meiste Software, die in Organisationen benutzt wird, ist für Leute mit speziellen Bedürfnissen entwickelt worden
- Stakeholder ist jeder, der ein Interesse an der Software hat
- Ein Benutzer ist jemand, der die Software benutzt, um Aufgaben auszuführen
- Manchmal sind Stakeholder Benutzer, aber die meisten Stakeholder nutzen die Software nicht selbst (z.B. ist ein CEO oft an der Entwicklung von Software beteiligt, auch wenn er diese nie benutzt)
Wer erstellt Software?
• Wird typischerweise von einem Team von Softwareentwicklern entwickelt, bestehend aus:
- Business-Analysten oder Anforderungsanalysten, die Anforderungen an die Software verfassen, indem sie Benutzer oder Stakeholder interviewen
- Designer und Architekten, die die technische Architektur und das System der Software planen, entwerfen und modellieren
- Programmierer, die den Code für die Software schreiben
- Tester, die verifizieren, dass die Software den Anforderungen entspricht und sich wie erwartet verhält
Warum schlagen Softwareentwicklungsprojekte oft fehl?
- Leute fangen an zu programmieren, bevor sie das Problem verstehen
- Das Team hat eine unrealistische Vorstellung davon, mit wieviel Arbeit die Entwicklung verbunden ist
- Fehler werden früh eingebaut, aber spät entdeckt
- Manager versuchen Qualität in die Software zu „testen“
- Kommunikationsschwierigkeiten zwischen den einzelnen Teammitgliedern
Was versichert den Erfolg eines Softwareprojekts?
• Anwendung von „Good Engineering Practices“:
- Manager und Teams möchten oft wichtige Engineering Praktiken überspringen (Aufwandsschätzung, Anforderungsakquisation,…)
- Wenn es schneller wäre, die Software ohne diese Praktiken zu erstellen, würde dies niemals verwendet werden
- Grund für die Anwendung dieser Verfahren ist, Zeit zu sparen und die Softwarequalität durch genaue Planung und frühzeitige Erkennung von Fehlern zu verbessern
Software Engineering (SE) / Softwareentwicklung
- Diziplin, die sich mit allen Aspekten der Softwareproduktion beschäftigt
- Engineering als Disziplin bedeutet die Anwendung geeigneter Theorien und Methoden zur Lösung von Problemen, unter Berücksichtigung organisatorischer und finanzieller Grenzen
- Software Engineering deckt alle Aspekte der Software Produktion ab:
- Technischer Entwicklungsprozess (Hauptaufgabe)
- Projektmanagement, Entwicklung von Tools, Methoden, etc. um die Softwareproduktion zu unterstützen
• Software Engineering ist ein Teil des ICT-Projekt Managements
Wichtige Ziele der Softwareentwicklung
- Entwicklung von Software nach festgelegten Qualitätsstandards
- Vermeidung von schlimmen Verzögerungen und Überschreitungen des Budgets
- Anpassung an sich verändernde Anforderungen bei Einhaltung von Budget und Terminen
Software-Projektplanung: Vision and Scope Document
- Eines der wichtigsten Werkzeuge eines Projektmanagers
- Ermöglicht den Stakeholdern und Entwicklern ein gemeinsames Verständnis von den Bedürfnisse, die die Software erfüllen muss
- Typische Dokumentengliederung:
- Problemstellung
a) Projekthintergrund
b) Interessengruppen (Stakeholder, User etc)
c) … - Vision der Lösung
a) Vision Statement
b) Liste der Features
c) …
Projektplan
• Wird von vielen Leuten in einer Organisation verwendet
- Projektmanager: Kommunikation des Projektstatus an die Stakeholder, Planung der Teamaktivitäten
- Teammitglieder: Kontext ihrer Arbeit verstehen
- Stakeholder: Sicherstellen, dass Projekt auf Kurs ist
• Projektplan besteht aus
- Leistungsbeschreibung (Statement of Work / SOW): Liste der zu entwickelnden Funktionen und deren geschätzte Entwicklungszeit
- Ressourcenliste: Liste aller Ressourcen, die für das Projekt benötigt werden
- Work Breakdown Structure: Liste der Aufgaben, die für die Entwicklung wichtig sind
- Projektzeitplan: Zuordnung der Ressourcen und Zeit zu einer benötigten Aufgabe
- Risikoplan: Risiken, die das Projekt bedrohen und potenzielle Lösungen
Scheduling (Entwicklung eines Projektplans)
- Zuordnung der Ressourcen zu den Aufgaben
- Identifizieren von Abhängigkeiten zwischen den Aufgaben
- Entwicklung eines Plans
- Scheduling: Benötigter Aufwand und Ressourcenallokation der Aufgaben sowie Abhängigkeiten zw. Aufgaben müssen bekannt sein
- Forward Calculation:
- Earliest Start Schedule (ES) wird bestimmt
- Earliest Finish Schedule (EF) kann auf Basis von ES (und Länge und Abhäng. der Aufgaben) berechnet werden
• Backward Calculation:
- Finish Schedule wird bestimmt
- Die späteste (latest) Start Schedule kann auf Basis der EF (und Länge und Abhäng. der Aufgaben) berechnet werden
Slack und kritischer Pfad
Slack = Pufferzeit
• Slack einer Aktivität:
- Total Slack: zulässige Verzögerung einer Aktivität ohne eine Verletzung des Projekttermins
- Free Slack: zulässige Verzögerung einer Aktivität, die keinen Einfluss auf den frühsten Start einer Nachfolgeaktivität hat
- Kritische Aktivität: Aktivität ohne Slack
- Kritischer Pfad: Pfad innerhalb eines Netzwerkplans, der nur kritische Aktivitäten enthält
Risikoplan
- Liste von allen Risiken, die das Projekt bedrohen, zusammen mit einem Plan, der die Risiken abwenden kann
- Einen Risikoplan entwerfen:
- Brainstorming von potenziellen Risiken
- Ermitteln der Bedeutsamkeit jedes Risikos
- Erstelle einen Abschwächungsplan
Software Engineering Prozess - Ansätze
- Es gibt viele verschiedene Arten von Software und es gibt kein universelles Set von SE Methoden, die auf alle Arten anwendbar sind
- Welche Arten von Software-Engineering-Methoden anzuwenden sind, hängt ab von:
- Art der zu entwickelten Anwendung
- Anforderung des Kunden
- Hintergrund des Entwicklerteams
- Software Engineering Process: Strukturiertes Set von Akitivtäten, um eine Software zu entwickeln
- Alle Software Engineering Prozesse weisen folgende Aspekte auf:
- Anforderungs-Spezifikationen
- Design und Implementierung
- Validierung (Evaluation der Features im Bezug auf die Anforderungen)
- Evolution (Modifizieren der Software im Bezug auf Kundenbedürfnisse)
Software Anforderungen
- Softwareanforderungen spezifizieren das gewünschte Verhalten einer Software
- Anforderungsanalysten erstellen Softwareanforderungen durch Anforderungserhebungen (z.B. Interviews mit den Nutzern & Stakeholdern, Beobachtung der Nutzer bei der Arbeit)
- Softwareanforderungen sollten in einer Software-Anforderungsspezifikation dokumentiert werden, die dem entsprechenden IEEE Standard entspricht
Use Cases
- Eine Beschreibung einer bestimmten Interaktion, die ein Benutzer mit einer Software haben kann
- Sind einfache Mittel, um die Funktionalität einer Software zu beschreiben
- Beschreiben weder interne Abläufe der Software, noch erklären sie, wie die Software implementiert wird
Funktionale versus nicht funktionale Anforderungen:
- Funktionale Anforderungen definieren das explizit wahrnehmbare Verhalten einer Software (Einloggen, Berechnung, etc)
- Nicht-funktionale Anforderungen definieren Merkmale einer Software, die ihr Verhalten nicht beeinflussen (Qualitätsattribute, z.B. Benutzerfreundlichkeit, Leistung, Fehlerbehandlung)