# 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