SWDE 2019
HSLU SWDE 2019 HS
HSLU SWDE 2019 HS
-
- 1 / 61
-
Cartes-fiches
Was bedeutet die Abkürzung SCM und VCS?
SCM = Source Code Management
VCS = Version Control System
Was macht ein VCS? Welche Möglichkeiten bietet es?
Es ist ein System welches die zeitliche Entwicklung von Artefakten in sogenannten Revisionen (Überarbeitungsstände) festhält.
- Für Teamarbeit mit gemeinsamen Quellen
- Automatisiertes Merging bei Konflikten
- Datenhaltung entweder zentral oder Verteilt
Warum sind VCS keine Backupsysteme?
- Kein zuverlässiger Schutz vor HW-Defekt
- Bewusst keine automatische Synchronisation
Was sind "Changesets"?
Änderungen innerhalb einer Transaktion
Artefakte in das Repository schreiben (auch checkin)
- lokale Veränderungen in das Repository zurückschreiben
- werden damit für Dritte bei Aktualisierung sichtbar
Wie lautet das Fachwort für das Markieren eines Revisionsstandes mit einem Namen?
tagging
Was bedeutet "Branching"?
Parallele, voneinander getrennte Entwicklungszweige
- Für Bugfixing bereits abgeschlossener Versionen
- Für Prototypen, Tests und Experimente
- Für spezielle (Änderungs-) Workflows
Falls es keine "Wegwerfentwicklung" ist, ist später ein "Merging" notwendig.
Was verwaltet man in einem SCM?
Welche Konzeptunterschiede gibt es bei SCMs?
- Zentrale und Verteilte Systeme
- Optimistische und pessimistische Lockverfahren
- Versionierung auf Basis einer Datei, der Verzeuchnisstruktur (FS) oder der Änderung (Changeset)
Was versteht man unter "Modularisierung"?
Modularisierung beschreibt die Technik oder den Vorgang ein grosses Ganzes in mehrere kleinere, in sich abgeschlossene Einheiten zu unterteilen.
- Wird in verschiedensten Bereichen eingesetzt
- Lässt ein grosses Ganzes durch die Aufteilung in einzelne "Module" einfacher verständlich und Beherrschbar machen
Was ist die kleinste Einheit in der objektorientierten SW-Entwicklung?
Klasse
Was ist die grösste Einheit in der objektorientierten SW Entwicklung?
Vollständige Applikation, oder komplettes SW-System
Wann ist ein Modul sinnvoll und funktional?
Wenn es eine möglichst abgeschlossene und austauschbare Einheit bildet.
Worüber interagieren Module miteinander?
Schnittstellen
Was sind die zwei wichtigsten Kriterien zur Modularisierung?
Kopplung (Coupling)
- Beschreibt das Ausmass der Kommunikation zwischen Modulen.
- Mass für die Abhängigkeiten zwischen den einzelnen Modulen.
- Ziel: Minimierung der Kopplung!
Kohäsion (Cohesion)
- Ausmass der Kommunikation innerhalb eines Moduls
- Mass für den internen Zusammenhalt eines Moduls
- Ziel: Maximierung der Kohäsion!
Welches sind die Ziele von Kopplung und Kohäsion bei der Modularisierung?
Was besagt das SoC- und SRP-Prinzip?
Ein Modul soll eine möglichst in sich geschlossene Aufgabe erfüllen und einen starken inneren Zusammenhalt aufweisen.
Daraus ergeben sich:
- Information Hiding - Die Implementation (Umsetzung) eines Modules bleibt vor dem Nutzer verborgen, und kann somit auch jederzeit verändert werden.
- Lose Kopplung: Die nur über die Schnittstelle mögliche Nutzung des Modules fördert die möglichst lose Kopplung zwischen den Modulen.
Was sind die vier Kriterien für den Entwurf eines Modules?
Zerlegbarkeit / Dekomposition
- Die einzelnen Module sind möglichst unabhängig voneinander.
Kombinierbarkeit
- Die entstandenen Module sind flexibel sinnvoll kombinierbar
Verständlichkeit
- Die Module sind einzeln ohne Kontext verständlich
Stetigkeit / Kontinuität
- DIe Module haben eine gewisse Beständigkeit
Was sind die wichtigsten Eigenschaften von Modulen?
- Ein Modul soll so unabhängig und in sich abgeschlossen sein, dass es möglichst einfach Verständlich ist
- Ein Modul soll möglichst einfach verwendbar und verständlich sein
Welche Arten von Modulen gibt es?
- Bibliothek / Library
- Abstrakte (komplexere) Datentypen
- Modellierung / Abstraktion physischer Systeme
- Modellierung / Abstraktion logisch-konzeptioneller Systeme
Was ist eine Komponente?
Eine Komponente erfüllt strengere Kriterien als ein Module, denn es benötigt zusätzlich noch einen Kontext. z.B. Laufzeitcontainer.
Wozu werden "Schnittstellen" verwendet?
Damit Module oder Komponenten untereinander kommunizieren können.
Was sind die Vorteile von Schnittstellen?
- Schnittstellen machen SW einfacher verständlich
Es genügt die Schnittstelle zu betrachten, man muss nicht unbedingt Implementierung verstehen
- Schnittstellen reduzieren Abhängigkeiten
Schnittstellen konzentrienen die Abhängigkeiten in sich, und vermeiden somit Abhängigkeiten bei der Implementierung.
- Schnittstellen erleichtern die Wiederverwendung
Erlauben die einfache Wiederverwendung und den Austausch bewährter Implementierungen.
Was is einer der wichtigsten Aspekte der SW-Architektur?
Die Definition der Beziehungen zwischen den einzelnen Teilen. Diese Beziehungen werden über Schnittstellen realisiert.
Was bedeutet der Begriff "Services" im Kontext der Schnittstelle?
Eine Schnittstelle die so weit abstrahiert ist, dass sie sich primär über die Fachlichkeit definiert, und die dahinterliegende Technik idealerweise vollständig isoliert.
- Beispiel: Webservice - ein fachlicher Service, der über Webprotokolle angeboten wird und die Implementation (Plattform, Sprache, Technologie) tatsächlich vollständig abstrahiert.
Was bedeutet der Begriff "API" im Kontext der Schnittstelle?
API = Application Programming Interface
Meist dehr technisch orientierte Schnittstelle welche die Anbindung einer Komponente auf Quellcodebene definiert.
Beispiel: Java Persistence API (JPA) - definiert eine einheitliche Schnittstelle zur Persistierung von Objekten in beliebigen DBMS.
Was beinhaltet ein Buildprozess?
- Arbeit im Team --> Gemeinsame Codebasis --> VCS
- Code aufgeteilt auf mehrere --> Projekte/Module/Komponenten
- Binaries erstellen für Deployment
- Testfälle ausführen, Test-Report erstellen
- Qualitätssicherung (Codeanalyse, Metriken=
- Distributionen zusammenstellen und Deployment
All diese Tätigkeiten um aus Quellartefakten ein fertiges Produkt zu erstellen bezeichnet man als Buildprozess
Was sind die Vorteile eines Automatisierten Buildprozess?
- Automatischer Ablauf, keine Interaktion mehr
- Reproduzierbare Ergebisse
- Lange Builds können z.B. über Nacht laufen
- Unabhängig von der IDE und Plattformübergreifend
- Automatischer Aufruf von Kompiler, Packer, Tests und Deploying
- vereinfachter Umgang mit Ressourcen
- Abhängigkeiten zwischen Daten überprüfen und steuern
- Abstraktion der Plattformspezifika
Was sind typische Buildtools?
Ant - altes bewährtes Werkzeug, Java und XML
Maven - populäres, etabliertes Werkzeug, Java und XML
Buildr - junges Werkzeug, Ruby Script
Gradle - populäres, junges Werkzeug, Groovy-Script mit DSL
Bazel - Buildwerkzeug von Google, Java mit Python-like Scripts
Grundkonzepte von Maven
Deklarativer Ansatz ( nicht imperativ)
Zentrales Element pro Projekt ist das Project Object Model (POM)
Definiert alle Metainformationen, Plugins und Dependencies.
Welchen Ansatz verfolgt die Deklaration des Projektes in XML?
Was beschreibt das Dependency Management?
Es beschreibt die Organisation und die Techniken für den Umgang mit Abhängigkeiten zu anderen Modulen, Packages, Libraries, Bundles oder Komponenten
Diese können Intern (innerhalb vom Projekt) sowie extern bestehen
Was sind "dependency scopes"? Was sind die drei Wichtigsten?
Damit wird der Zweick und Geltungsbereich einer Dependency definiert. (Scope)
Die drei Wichtigsten:
compile - Dependency wird zum Kompilieren benötigt
test - Dependency wird ausschliesslich für Testfälle benötigt
runtime - Dependency wird nur für Laufzeit, nicht aber für Kompilation benötigt, z.B. für dynamisch geladene Implemantationen
Was sind "Transitive Dependencies"?
Modul A ---> Modul B ----> Modul C
Maven löst diese automatisch auf.
- Modul A ist von Modul B und dieses von Modul C abhängig
- Modul A ist somit --> transitiv auch von Modul C abhängig
- Für die Kompilation ist Modul C somit auch nötig
Sind Dependencies grundsätzlich versioniert?
Semantic Versioning, was sind die 3 Releaseformen und wie werden sie versioniert?
- Major Release (X.x.x)
Veränderungen in der API, in der fachlichen Funktion und/oder Konfiguration welche zu früheren Versionen nicht kompatibel sind.
- Minor Release (x.X.x) Erweiterungen in der API, der fachlichen Funktion oder der Konfiguration welche zu früheren Versionen rückwärtskompatibel sind
- Bugfix/Maintenance Release (x.x.X.) Reine Korrekturen oder Änderungen in der Implementation, voll rückwärtskompatibel. Keine neuen Funktionen oder veränderte Funktionen
Was bedeutet die "Versionierung mit Snapshots"?
Immer wieder fixe Versionen sind hinderlich, da sie sonst für jede kleinste Änderung fortschreiten müsste und daher eine Unmenge an nutzlosen Versionen produziert würde. Darum -SNAPSHOT Konzept. Versionen die diesen Appendix tragen gelten als "erneuerbar" und noch nicht stabil sondern in Entwicklung. Wird bei jedem Build immer wieder vom Repository aufgelöst und aktualisiert. Diese sind mit Timestamps versehen.
Beispiel: 4.0.0-SNAPSHOT
- ist die noch nicht stabil veröffentlichte, zukünftige Version 4.0.0.
In welcher Form wird am häufigsten Deployed? Was sind die Eigenheiten?
Die häufigste Art von Deployment sind JAR-Dateien. Mach dem Deployment darf je nach Repository häufig nichts mehr verändert werden, da die Stabilität der Builds gewährleistet sein muss. Oft dürfen Entwickler nicht direkt deployen. Stattdessen gibt es einen nachvollziehbaren, automatisierten und verifizierbaren Release-Prozess welcher von einem Buildserver ausgeführt wird.
Testing. Warum testen wir?
Um eine höhere Qualität zu erreichen. Qualität ist die Übereinstimmung mit den Anforderungen unter gleichzeitiger Einhaltung von Qualitätskriterien.
- Die Anforderungen müssen überprüfbar formuliert sein
- typisch in Form von System- und Testspezifikation
Testing. Was sind Qualitätskriterien?
- Funktionalität
- Zweckdienlichkeit
- Robustheit
- Zuverlässigkeit
- Sicherheit
- Effizienz
- Benutzbarkeit
- Geschwindigkeit