swe, Checkfragen
Checkfragen aus dem Unterricht Softwarekonstruktion
Checkfragen aus dem Unterricht Softwarekonstruktion
Kartei Details
Karten | 55 |
---|---|
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 14.01.2014 / 10.03.2014 |
Weblink |
https://card2brain.ch/box/swe_checkfragen
|
Einbinden |
<iframe src="https://card2brain.ch/box/swe_checkfragen/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Lernkarteien erstellen oder kopieren
Mit einem Upgrade kannst du unlimitiert Lernkarteien erstellen oder kopieren und viele Zusatzfunktionen mehr nutzen.
Melde dich an, um alle Karten zu sehen.
Erklären Sie in eigenen Worten die beiden Konzepte Äkquivalenzklassen und Grenzwertanalyse. Was ist deren Zweck?
Grenzwertanalyse
Die Grenzwertanalyse ist ein Spezialfall der Äquivalenzklassen. Man geht davon aus, dass
Fehler häufig an den Rändern der Äquivalenzklassen auftreten. Daher werden nicht beliebige Werte, sondern eben die Grenzwerte getestet.
Wie kann mit Tests die Korrektheit von Code nachgewiesen werden?
Man testet, ob die erwarteten Resultate den aktuellen Resultaten entsprechen und ob diese immer wieder zuverlässig reproduziert werden können.
Was versteht man unter „isolierten Testen“? Warum ist das von grosser Bedeutung und durch welche Massnahmen im Software-Entwurf bzw. Implementierung kann dies erreicht werden?
Isoliertes Testen:Ein Modul wird so weit wie möglich ohne Interaktion mit anderen Modulen getestet. Benötigte Module werden simuliert.
Bedeutung: Man stellt so die Unabhängigkeit der Module untereinander sicher und kann bei Fehlern direkt auf die falsche Komponente schliessen.
Was versteht man unter „isolierten Testen“? Warum ist das von grosser Bedeutung und durch welche Massnahmen im Software-Entwurf bzw. Implementierung kann dies erreicht werden?
Isoliertes Testen:Ein Modul wird so weit wie möglich ohne Interaktion mit anderen Modulen getestet. Benötigte Module werden simuliert.
Bedeutung: Man stellt so die Unabhängigkeit der Module untereinander sicher und kann bei Fehlern direkt auf die falsche Komponente schliessen.
Sie werden zum Projektleiter eines neuen Softwareentwicklungsprojektes ernannt. Als eine der ersten 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
CI Best Practices
Drei der „Best Practices“ für kontinuierliche Integration lauten?
Erklären Sie für jede dieser Aussagen, wie dies mit einer CI Umgebung erreicht werden kann, und diskutieren Sie was die Vorteile oder Nachteile davon sind.
Make it easy for anyone to get the latest executable
Jeder kann sich einfach die unter Versionskontrolle stehende, letzte Version herunterladen /checkout. Hat nichts mit dem Code zu tun „latest executable“ Der Build Server erstellt regelmässig geplant oder per Knopfdruck einen fertigen Build der eine ausführbare Datei generiert die jeder ausführen kann. - Everyone can see what's happening
Der Build-Server erstellt ein Build-Report. Anhand dieses Reports kann jeder sehen und nachvollziehen, was genau geschieht.
- Keep the build fast: Es bringt nicht wenn ein Build mehrere Stunden dauert deshalb ist ein schneller Build unerlässlich um nach jeder Änderung direkt auch eine ausführbare Datei zu generieren die auch als Prototyp verwendet werden kann. Vorteile:Jeder sieht sofort wenn etwas fehlschlägt Es können nach Änderung direkt ausführbare Dateien generiert werden. Tests laufen automatisiert. Mann hat immer lauffähiger Code. Nachteile: Abhängige Applikationen können nicht getestet werden. (Datenbanken, Sharepoint) Aufwändig, Hoher Erstintallationsaufwand
Nennen Sie 3 Probleme, die bei der Code- Integration auftreten können und wie diese vermieden oder zumindest früh erkannt werden können.
- Verbindung zum SVN Server schlägt fehlà Monitoring des SVN Servers.
- Fehlerhafter Code wir commited.à Arbeitsabläufe einhalten
- JUnit Test schlägt fehl.àJUnit-Test lokal nach change ausführen bevor commit
Arbeiten mit CI und VCS
Der typische Ablauf beim Arbeiten in einer CI Umgebung lautet:
Update – Test – Change – Test – Update – Commit
Erklären Sie für jeden Schritt dessen Zweck und warum dieser sinnvoll ist.
Mit dem ersten Update wird sichergestellt, dass die Working Copy auf dem neuesten Stand (HEAD Revision) ist. Dadurch vermindert man das Risiko, spätere Konflikte zu haben, da man nur mit den aktuellsten Artefakten arbeitet.
Beim darauf folgenden Testen soll die aktuelle Funktionalität lokal getestet werden. Anhand dieses Testens stellt man sicher, dass die Applikation lokal läuft. Anschliessend können die Änderungen wie gewünscht vorgenommen werden. Beim direkt darauf folgenden Test wird sichergestellt, dass das neu Implementierte funktioniert und keine vorhandene Funktionalität nicht mehr wunschgemäss funktioniert. Erst nach dem erfolgreichen Testen kann man den lokalen Stand wieder committen. Sprich die Working Copy wird mit dem Repository auf dem VCS Server abgeglichen.
Wieso trägt ein CI System zur Risiko- Minimierung bei? Nennen Sie 4 Gründe.
- Integrationsfehlern werden früh erkannt
- Frühe Warnung bei nicht zusammenpassenden Bestandteile
- Erhöhte Code Qualität
- Unit Test entdecken Fehler früh
Beschreiben Sie eine typische CI Umgebung mit Ihren Komponenten und deren Zweck.
- VCS Server
- Build Server
- Build Script
- Deployment Server
Beschreiben Sie eine typische CI Umgebung mit Ihren Komponenten und deren Zweck.
VCS Server
Enthält das Repository in dem alle Files gespeichert werden. Leg eine History der Kommentare und Files ab. Managed Benutzer und verwaltet Änderungen
Beschreiben Sie eine typische CI Umgebung mit Ihren Komponenten und deren Zweck.
Build Server
Der Build Server führt das Build Script(ANT Script) aus. Führt die Tasks nach festgelegtem Zeitplan aus. Und erstellt reports der Builds.
Beschreiben Sie eine typische CI Umgebung mit Ihren Komponenten und deren Zweck.
Build Script
Das Build Script(ANT Script) beinhaltet Targets die je nach Depencies abgearbeitet werden. Targets können beliebige Aktionen ausgeführen (code Coverage, JUnit, Compile, usw)
Beschreiben Sie eine typische CI Umgebung mit Ihren Komponenten und deren Zweck.
Deployment Server
Der Build Server erzeugt Executables die auf dem Deployment Server abgelegt werden. Der Deployment Server testet die generierte Anwendung unter gewissen Umgebungen (verschiedene OSs, Verschiedene Versionen von Komponenten) und stellt diese für den Enduser bereit. (Beispiel Windows Update)
Beschreiben Sie eine typische CI Umgebung mit Ihren Komponenten und deren Zweck.
Was wenn Prozess nicht klar definiert ist?
Ist der Arbeitsprozess nicht klar definiert, schwinden alle Vorteile eines CI-Umfeldes. Jedem Teammitglied muss klar sein, wann es was tun muss, damit die Integration auch funktionieren kann.
- Nur lauffähiger Code Commiten
- Abläufe einhalten update-test-change-test- commit
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.
-
- 1 / 55
-