SWDE 2019

HSLU SWDE 2019 HS

HSLU SWDE 2019 HS


A. B.
Diese Lernkarten behandeln fortgeschrittene Themen der Informatik auf Universitätsniveau, mit Fokus auf Softwareentwicklung und Architektur. Sie decken Bereiche wie Modultests, Schnittstellen, Java-Programmierung und Fehlerbehandlung ab, wobei auch Werkzeuge und Techniken wie RMI, JPA und Unit-Testing-Frameworks wie JUnit behandelt werden. Die Karteikarten sind besonders nützlich für Studierende und Entwickler, die ihr Verständnis von Softwarearchitektur, Teststrategien und objektorientierter Programmierung vertiefen möchten, um robuste und wartbare Software zu erstellen.
Flashcards
61
Students
8
Language
German
Category
Computer Science
Level
University
Created / Updated
29.12.2019 / 29.01.2022

Flashcards

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

Study