ZHAWNotes/Notes/Semester 4/SWEN2 - Software Entwicklung 2/SEP.md

200 lines
9 KiB
Markdown
Raw Normal View History

2023-06-21 16:58:00 +00:00
# Software Engineering Prüfungsstoff
Dieses Dokument hält die verschiedenen Themen fest, welche im Rahmen der SEP unter Umständen angesprochen werden.
## Einführung Softwareentwicklung
- Sie können Vor- und Nachteile der plangetriebenen Methoden aufzählen
> Plangetriebene Projekte legen ihre Ziele und den Umfang des Projekts zu Beginn fest. Weitere Schritte passieren sequentiell.
>
> Man spricht hierbei vom Wasserfall-Modell
>
> Projekte können durch das Wasserfall-Modell nicht auf Änderungen an der Infrastruktur antworten oder die Ziele aufgrund anderer Anlässe verändern.
>
> Agile Projektmethoden leisten Abhilfe.
- Sie wissen, für welche Arten von Projekten die plangetriebenen Methoden verwendet resp. nicht verwendet werden sollten.
> Einsetzen für:
> - Projekte ohne jegliche Abhängigkeiten
> - Projekte ohne sich ändernder Umgebung
> Nicht einsetzen für:
> - Software-Projekte
> - Projekte mit dynamischen Umgebungen
- Sie können die drei Gesetze der Softwareentwicklung erklären
> - Humphrey's Law - "Menschen wissen nicht, was sie wollen, bevor sie es sehen"
> - Ziv's Law - "Softwareentwicklung ist unvorhersehbar und kann nie vollends verstanden werden"
> - Conway's Law - "Software ist ein Spiegel der Firma und der Menschen, die sie entwerfen"
## Agile Manifesto
- Sie können die "Values" des "Agile Manifesto" aufzählen und deren Bedeutung erklären
> - "Individuals and interaction over processes and tools":
> Es sollen auf Individuen und die Interaktionen mit ihnen, statt auf Prozesse und Tools geachtet werden.
> Dadurch kann u.a. sichergestellt werden, dass die Stärken der Team-Mitglieder besser eingesetzt werden.
> - "Working software over comprehensive documentation":
> Eine schnelle Fertigstellung des Codes sorgt für möglichst schnell verfügbares Feedback.
> - "Customer collaboration over contract negotiation":
> Dies soll sicher stellen, dass alle beteiligten zum selben Ziel hin arbeiten.
> - "Responding to change over following a plan":
> Auf Anregungen des Kunden, falls sich Ziele ändern sollten, soll zeitnahe eingegangen werden. Es soll nicht auf alte Ziele beharrt werden.
- Sie kennen die "12 Principles" hinter dem "Agile Manifesto" und können diese erklären.
> - Customer Satisfaction
> - Welcome Change
> - Deliver Frequently
> - Working Together
> - Motivated Team
> - Face to Face
> - Working Software
> - Constant Pace
> - Good Design
> - Simplicity
> - Self Organisation
> - Reflect and Adjust
- Sie können die Bedeutung des agilen Manifesto für Softwareentwicklung einordnen
> Hält die Prinzipien der agilen Community im Bereich Software-Entwicklung fest.
## Agile
- Sie kennen die folgenden Begriffe und können sie erklären:
- Risk:
> Event that never happened before and might limit the success of the project if it happens.
- Cost of Change
> Die Kosten (bspw. in Aufwand), die ein Feature wert ist (Story Points)
- Four Variables (Iron Triangle)
> Zeit, Ressource, Qualität, Scope (Features) - alle haben Einfluss aufeinander - nichts kann zugleich 100% ausgeprägt sein.
## eXtreme Programming
- Sie können erklären, was eXtreme Programming ist.
> eXtreme Programming ist eine Methode zum Umsetzen von Projekten in Umgebungen und mit Anforderungen, die sich ständig ändern.
- Sie können die folgenden Begriffe erklären:
- Core Values
> - Communication
> - Simplicity
> - Feedback
> - Courage
> - Respect
- Principles
> - Fundamental Principles
> - Rapid Feedback
> - Assume Simplicity
> - Incremental Change
> - Embracing Change
> - Quality Work
> - Other Principles
> - Teach Learning
> - Small Initial Investment
> - Play to Win
> - Concrete Experiments
> - Open, Honest Communication
> - Work with People's Instincts, not Against them
> - Accepted Responsibility
> - Local Adaption
> - Travel Light
> - Honest Measurement
- Cost of Change
> Story Points
- Business Value
> The amount of money an organization will make by having the corresponding feature
- Sie kennen folgende XP Practices und können sie erklären
- The Planning Game
> Ehrliche, instinktive Vergabe von Story-Points (Zeit-Poker)
- Small Releases
> Kleine Änderungen vermeiden grosse Fehler
- Metaphor
> Alle beteiligten Personen (auch Kunden) sollen sich verstehen - es wird ein gemeinsames Vokabular benötigt
- Simple Design
> Besteht alle Tests. Keine Code-Duplikation. Hat so wenig Klassen/Methoden wie möglich.
- Unit-Testing
> Alle automatisierten Prozesse des Projekts **müssen** getestet sein
- Refactoring
> Gibt es Refactorings, die das Einbauen eines Features erleichtert, soll dieses immer als erstes umgesetzt werden.
- Pair-Programming
> Code wird zu zweit geschrieben. Eine Person schreibt Code, die andere beobachtet und bewertet den Prozess/bringt Innovation.
- Collective Code Ownership
> Jede beteiligte Person hat 100%ige Verantwortlichkeit über den Code
- Continuous Integration
> Code wird min. 1x pro Tag getestet. Dies muss automatisiert sein.
- 40 Hours Week
> Auf die Work-Life Balance der Mitarbeiter muss geachtet werden. Nicht zu viel Überzeit.
- On-Site Customer
> Ein Kunde muss vor Ort beim Team sein, um Fragen zu beantworten
- Coding Standards
> Egal
- Test-Driven Development
> Tests werden gem. Erwartungen geschrieben. Erst dann wird der Code dazu implementiert.
- Slack
> Kleine Aufgaben einplanen, die eingestampft werden können, falls die Zeit knapp wird.
- Incremental Design
> Probleme in kleine Bestandteile aufteilen, um diese einzeln zu lösen.
- Self-Organized Team
> Self sprechend
## Software Craft
- Sie kennen Gründe, wieso das Manifest für Software Craft notwendig wurde.
> - Establish Principles
> - Develop School
> - Vocal Community
> - Create Visibility
> - Guidance for New Developers
- Sie kennen die Formate der Software Craft Community, wie ein Austausch geschaffen wird und deren Prinzipien
> Durch Konferenzen und Online-Portale (SC, SoCraTes, Software Crafters Zurich, Software Crafters Manila), weitere Aktivitäten
- Sie können erklären, wie man als Softwareentwickler üben kann
- Sie können Coding Dojo und Code Katas ausführlich erklären
> "A bunch of coders get together, code, learn, and have fun. It's got to be a winning formula!" Emily Bache
## Pyramid of Agile Competence
- Sie kennen die "Pyramid of Agile Competencies" und können die drei Ebenen erklären
> - Agile Values
> - Craftsmanship, Organization Culture, Transparency & Openness
> - Collaboration Practices
> - Agile Champion, Customer & Requirements, Communication
> - Technical Practices
> - Testing, CI, Clean Code
## User Stories
- Sie beschreiben die Ziele, die Anwendung und wie das Format einer Userstory aufgebaut ist.
- Sie kennen die Zusammenhänge zwischen Epics, Themes und Stories
> - Epics sind grosse User Stories
> - Theme ist ein Verbund mehrerer User Stories
- Sie kennen die Eigenschaften einer guten Userstory
## Estimation and Planning
- Sie kennen die folgenden Begriffe und können diese erklären
- User Stories
- User Roles
- Epics
- Themes
- Story Points
- Velocity
> Das Ergebnis von $\text{Story Points} \div \text{Time}
- Planning Poker
- Conditions of Satisfactions
> Bedingungen, unter denen eine User Story als abgeschlossen gilt
- Levels of Planning
> Aufteilung von Teilaufgaben in...
> - Strategy
> - Portfolio
> - Product
> - Release
> - Iteration
> - Day
- Product Backlog
> Sammlung offener Aufgaben
- Priorisierung (der User Stories)
- Techniques for Estimating
> Planning Poker
- Sie kennen die folgenden Begriffe und können diese erklären:
- Planning for Value
> Aufgaben nach deren Wert im Projekt priorisieren
- Financial Value
> Aufgaben nach finanziellen Wert für Kunden-Firma priorisieren
- Risk
> Siehe Abschnitt "Agile"
- New Knowledge
> Der Zeitaufwand, der dazu aufgewendet werden muss, sich neues Wissen anzueignen
## Build Automation, CI, CD, DevOps
- Sie können die Arten von Software Automation, Arten von Automation und Ziele erklären
> Arten von Software Automation:
> - on-demand: Automation wird auf Verlangen ausgelöst
> - scheduled: Automation wird regelmässig ausgeführt (bspw. nächtlich, monatlich o.ä.)
> - triggered: Automation wird durch Vorkommnis ausgelöst (bspw. sobald Änderungen am Code veröffentlicht werden.)
> Arten von Automation:
> - Continuous Integration: Automatisiertes Testen
> - Continuous Deployment: Automatisiertes Veröffentlichen/Installieren/Ausliefern