swe, Checkfragen

Checkfragen aus dem Unterricht Softwarekonstruktion

Checkfragen aus dem Unterricht Softwarekonstruktion

Jasmin Lienhard

Jasmin Lienhard

Set of flashcards Details

Flashcards 55
Language Deutsch
Category Computer Science
Level University
Created / Updated 14.01.2014 / 10.03.2014
Weblink
https://card2brain.ch/box/swe_checkfragen
Embed
<iframe src="https://card2brain.ch/box/swe_checkfragen/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Wie kann ich eine Applikation, die ich in meiner Entwicklungsumgebung (z.B. Eclipse) entwickelt habe, ohne diese starten? 

 

Entweder indem ich das Projekt „Deployed“ habe (.exe. oder .jar) oder eines der Source-Files über die Konsole aufrufe. 

 

Wie kann ich mein Projekt, welches ich in Eclipse entwickelt habe, auch ohne Eclipse zusammenbauen? 

 

Mit der Konsole und dem Befehl javac (genau so wie es „Ant“ macht).
Javac includeantruntime="false" srcdir="${src.dir}" destdir="${bin.classes.dir}" classpathref="application.classpath" deprecation="on"
debug="on"
/> 

 

Wie kann ich eine Applikation so weit entwickeln, dass sie auf einem beliebigen Computer per Knopfdruck installierbar und lauffähig ist? 

 

Der Deployvorgang muss automatisiert werden, z.B. mit einem Installer oder einem JAR. Dazu gehört auch das mitliefern benötigter Bibliotheken und Ressourcen. 

 

Ich habe mich verrannt beim Programmieren und möchte gerne wieder zurück dorthin wo ich vor ein paar Stunden war. Diese Lösung lief wenigstens noch.
Ich habe eine Erweiterung an einem bestehenden Programm gemacht und jetzt läuft nichts mehr. Wie kann ich dies künftig verhindern, bzw. möglichst früh erkennen? 

 

Durch automatisiertes Testen und Builden. Zudem kann durch „Branch“ oder „Tag“ lauffähiger Code ge-snapshoted werden. Zudem kann mit einer geeigneten Umgebung (Versionisierung) eine bestimmte Version des Codes zu jedem Zeitpunkt wiederhergestellt werden. 

 

Um nachvollziehen zu können was vor sich geht, habe ich meinen Code mit print-Statements gespickt. Nun will ich die Software verkaufen und muss diese print-Statements alle wieder entfernen. Ginge das nicht einfacher? 

 

Naiv: Refactoring und alle „print“-Statements löschen.
Professionell: 

 

Ich finde es mühsam, zum Erstellen meiner Software immer die nötigen Dateien (kompilierter Code, Icons, Bilder, Texte, Sounds) zusammenkopieren zu müssen und in ein ZIP- oder JARFile zu verpacken. Soll ich dafür ein eigenes Programm schreiben, das mir dies erledigt? Wie? 

 

Ein Build-Script kann diese Aufgabe übernehmen. Dazu wird apache-ant benötigt. 

 

Ich möchte ein Testprogramm schreiben. Wie mache ich das am besten? 

 

Mit Hilfe der zwei Methoden, Grenzwertanalyse und Äquivalenzklassen 

 

Was soll ich überhaupt testen? 

 

a. Alles, was scheitern kann. Setter/Getter scheitern selten. Sie werden oft implizit getestet.

b. So viel, dass das System nicht abbricht, wenn es von Usern benutzt wird. Wähle ein minimales Set an Daten, um eine maximale Test Coverage zu erreichen 

 

Wann soll ich was testen? 

 

So oft wie möglich, aber sicher immer vor dem Commit. 

 

Ich muss ein neues Projekt einrichten. Wie soll ich das am besten machen? Wie soll die Verzeichnisstruktur aussehen, was kommt wohin? 

 

-trunk, -tag, -branch 

 

Was ist eigentlich gut wartbarer und gut lesbarer Code? Gibt es dazu Richtlinien? Wie lassen
sich diese durchsetzen? 

 

Code, der sich an Standards und Richtlinien hält. Die Richtlinien dazu sind z.T. von Oracle gegeben, andererseits kann auch das Projekt selbst per XML Formatierungen vorgeben. Lesbarer Code verfügt zudem über ein JavaDoc. Sie lassen sich mit Plug-Ins wie Checkstyle, Metrics oder CodeStyle überprüfen. 

 

Ich entwickle meine Software weiter und werde bald Version 2 auf den Markt bringen. Wöchentlich kommen aber noch Problemmeldungen meiner Kunden herein, die noch Version 1.x verwenden. Wie behalte ich den Überblick? 

 

Indem ich für die zweite Version einen Branch erstelle, danach kann ich die erste Version ausbessern, während ich in die zweite neue Features einbaue. 

 

Was ist „gute Software“, gibt es Qualitätsrichtlinien? 

 

Ps: Schaue in einer anderen Karteisorte!

Was ist SW-Qualität? 

 

siehe andere Kartei

Wir sind ein Team von Softwareentwicklern. Wie sollen wir miteinander zusammenarbeiten? Wie sollen wir unsere Arbeitsteilung, unsere Aufgaben verwalten? 

 

z.B. mit einem ScrumBoard. 

 

Wie soll ich meinen Code dokumentieren? 

 

Javadoc, zusätzlich nur so viel wie nötig (Dokumente etc.). 

 

Wir entwickeln Software im Team. Wie weiss ich wer gerade an welchem File arbeitet, was wer geändert hat und wie sollen wir die geänderten Files austauschen – das gibt immer ein grosses Durcheinander. 

 

Mit einem automatisierten Versionsmanagement, z.B. SVN oder GitHub. 

 

Sie werden zum Projektleiter eines neuen Softwareentwicklungsprojektes ernannt. Als eine derersten Aufgaben müssen Sie sich überlegen, wie Sie die im Verlauf des Projektes anfallenden Artefakte (insb. Sourcecode, auch andere wichtige Artefakte) verwalten wollen.


a) Beschreiben Sie die Ziele, die Sie mit dem Konfigurationsmanagement erreichen wollen und begründen Sie diese. 

 

Das Software-Versionsmanagement verfolgt das Ziel, dass jede Änderung eindeutig nachvollziehbar ist und jede beliebige Version eines Artefaktes wieder hergestellt werden kann. Folgedne Probleme sollen behoben werden:

  • Bugs die behoben wurden, tauchen wieder auf
  • Dateien gehen verloren
  • Frühere Releases der Software können nicht mehr erstellt werden
  • Gleicher oder ähnlicher Code existiert mehrfach in verschiedenen Projekten
  • Zwei Entwickler ändern dieselbe Datei gleichzeitig ohne es zu merken 

 

Sie werden zum Projektleiter eines neuen Softwareentwicklungsprojektes ernannt. Als eine derersten Aufgaben müssen Sie sich überlegen, wie Sie die im Verlauf des Projektes anfallenden Artefakte (insb. Sourcecode, auch andere wichtige Artefakte) verwalten wollen.

b) Welche Artefakte eines Projektes sollten generell unter Konfigurationsmanagement (und damit Versionskontrolle) gestellt werden, werden also zu einem „Configuration Item“? Geben Sie zunächst die Kriterien dafür an, wann etwas unter CM gestellt werden soll und dann erst die Artefakte. 

 

Konfigurationsmanagement beinhaltet: - Versionsmanagement Konfigurationsplanung

  • Tool-Selektion
  • Release-Planung & Management
  • Reporting des Konfigurationsstatus - Change-Request Management
  • Konfigurationskontrolle
  • Konfigurations-Identifikation 

 

Was versteht man unter einem „Changeset“, wie lässt sich dieser unter SVN ermitteln? 

 

Changeset ist eine Sammlung von Änderungen

mit einem eindeutigen Namen -> ein Patch mit einem Namen auf den man sich beziehen kann -> Revisionsnummer bei SVN. 

 

Was ist der Zweck der Verzeichnisse trunk, branches, und tags? 

 

Ort für Hauptentwicklungsverlauf

 

Was ist der Zweck der Verzeichnisse trunk, branches, und tags? 

 

 

Verzweigung von Entwicklungsverläufen und selbst wieder Entwicklungsverläufe 

 

Was ist der Zweck der Verzeichnisse trunk, branches, und tags

 

 

Identifiziert/markiert eine bestimmte Revision und fügt zusätzliche Info hinzu

 

Was ist der Zweck des Verzeichnisses, Head?

bezeichnet aktuelle Version der Configuration- Items in Trunk 

 

In welchen der Verzeichnisse darf gearbeitet (d.h. „committed“) werden, in welchen nicht?
(inkl. Begründung). 4. In welchen der Verzeichnisse aus 3) darf gearbeitet (d.h. „committed“) werden, in welchen nicht? (inkl. Begründung). 

 

Nur in den Branches. Der Trunk soll als Master dienen, in ihn werden funktionierende Branches committed. Es ist verboten, in einen Tag zu committen. Tags enthalten stets bestimmte Resultate, die aus einem bestimmten Grund als Tag festgehalten wurden. 

 

 Beschreiben Sie den Arbeitsprozess bzgl. VCS wenn Sie als Entwickler den Auftrag erhalten, eine
Änderung an bestehendem Code durchzuführen. Begründen Sie jeden einzelnen Schritt. 

 

- update - ändern - update - commit 

 

Erklären Sie die Begriffe: branching, tagging, Working Copy, update, commit 

 

Zu Deutsch: Verzweigung in Varianten. Branching ist das duplizieren eines Objektes unter Versionskontrolle mit dem Ziel, dass parallel gearbeitet werden kann. Dur ch Branchen wird auch automatische das spätere mergen in den Head-Branch angeboten.

Erklären Sie die Begriffe: branching, tagging, Working Copy, update, commit 

 

Unter Tagging versteht man die Benennung von Dateiversionen, die beim Erstellen eines Tags gemacht werden muss.

Erklären Sie die Begriffe: branching, tagging, Working Copy, update, commit 

 

lokale Kopie aller relevanten Projektdateien. Da wo der Entwickler arbeitet! 

 

Erklären Sie die Begriffe: branching, tagging, Working Copy, update, commit 

 

Abgleich des Repos mit der Working Copy -> von Repo lesen (Entwicklerversion / Repoversion abgleichen)

 

Erklären Sie die Begriffe: branching, tagging, Working Copy, update, commit

 

Dateien unter Versionskontrolle bringen/ Dateien aufs Repo schreiben 

 

Subversion erlaubt das „Locking“ von Files. Wozu dient das Konzept? Welche Alternativen kennen Sie? 

 

File Locking wird dazu angewendet, dass ein doppelter Zugriff, zur selben Zeit auf dieselbe Datei vermieden werden kann. Dabei hat also nur eine Person gleichzeitig Zugriff auf eine Datei. Dieses Vorgehen entspricht Lock- Modify-Unlock.

Eine Alternative wäre Copy-Modify-Merge. Bei diesem Vorgehen können alle User an einer Datei arbeiten. Sobald ein User die Datei publiziert hat, erhalten alle anderen User einen out-of-date Fehler und müssen ihre Datei comparen. Dadurch wird auf dem Server eine neue, gemergte Datei erstellt. Alle anderen User müssen ihre lokalen Kopien aktualisieren. 

 

Was versteht man unter „Regressionstests“? 

 

Tests, die immer wieder durchgeführt werden. Stellen sicher, dass alte Bugs nicht wieder einmal auftreten. 

 

Wie kann mit Tests die Korrektheit von Code nachgewiesen werden? 

 

Die Korrektheit des ganzen Codes kann nie mit Testing nachgewiesen werden. Es können lediglich Komponenten darauf getestet werden, ob sie den Erwartungswert erfüllen. 

 

Welche Art von Tests werden bei Unit-Tests durchgeführt – white-box oder black-box Test? Begründen Sie Ihre Antwort. 

 

Unit-Tests können sowohl Black-Box als auch White-Bos Tests sein. Man kann einfach eine gesamte Methode/Klasse von aussen testen, aber auch jeden Code Pfad. 

 

Warum soll der Test-Code nicht im gleichen Verzeichnis wie der produktive Code abgelegt werden, jedoch in der gleichen Package-Struktur?

 

Weil die Tests isoliert von dem eigentlichen produktiven Code durchgeführt werden müssen. 

 

Was macht einen „guten“ Test aus? Erklären Sie die wesentlichen Prinzipien mit eigenen Worten. 

 

A-TRIP: Automatic, Thorough (Code Coverage), Repeatable, Independent, Professional (Standards) 

 

Warum verwendet die assertEquals-Methode in JUnit für den Vergleich von double-Werten das zusätzliche Argument „delta“. (übrigens tun das auch die anderen Test-Frameworks). 

 

Double können rundungen enthaltenàman kann ein delta angeben, welches bestimmt, wie genau der überprüfende Wert mit dem Output- Wert übereinstimmen soll. 

 

Eine Möglichkeit des Testen besteht aus der „Reverse Relationship“ und „Cross-checking by other Means“. Erklären Sie diese beiden Techniken mit eigenen Worten. Was sind die Vorteile dieser Ansätze? 

 

  • Reverse Relationship
    • checking by applying the logical inverse
  • Cross-Checking
    • cross-check the result with an other test which does the same. 

 

 Erklären Sie in eigenen Worten die beiden Konzepte Äkquivalenzklassen und Grenzwertanalyse. Was ist deren Zweck? 

 

Äquivalenzklassen

Dienen der Qualitätsprüfung von Software. Ziel ist es, eine hohe Fehlerentdeckungsrate mit einer möglichst geringen Anzahl an Testfällen zu erreichen. Es werden also Klassen gebildet, welche bezüglich den Ein- und Ausgabedaten ähnlich sind (Verhalten).