# Fragen zur Softwaretechnik Klausur



## b1zarRe (16. Sep 2011)

Hi,

ich schreibe in 2 Wochen eine *Softwaretechnik* Klausur und soweit sitzt das meiste - nur hier und da haben sich noch Fragen ergeben.... Ich wurde leider aus dem Skript bzw. Büchern schlau... vielleicht weiß hier einer etwas:

1.) 
Systeme wie StudiVZ,Facebook, Google oder Ebay sind meiner Meinung nach als große Projekte anzusehen, und deshalb würde ich aufgrund der wichtigen Dokumentation, und mehreren Testphasen auf ein Spiralmodell(*Prozessmodell*) verweisen. Sehe ich das richtig? Oder gibt es irgend einen
Grund, eher ein Wasserfallmodel oder Agiles Modell wie XP vorzuschlagen? Diese beiden sind doch eher für "kleine" bis "normal" große Projekte vorgesehen, richtig? Ab wann ist ein System "klein"...Habt ihr vielleicht Beispiele?

*2.)*
Zu: *Blackbox* und Whitebox Tests. Beim Blackbox Tests sind ja zunächst Testfälle in Äquivalenzklassen einzuordnen und dann daraus Grenzwerttestfälle zu machen. Frage hierbei: Sind logische Fehler aussen vor zu lassen? Zum Beispiel wenn ich die NAtürlichen Zahlen darstellen wollen würde, würde ich 2 Äquivalenzklassen aufstellen: 1. zahl < 0(falsch) sowie zahl >= 0(richtig) und dann bei jedem 2-3 Beispiele angeben. Ich brauceh aber nicht extra ein Test machen für eine logisch falsche Eingabe wie ein boolean Wert oder so, oder? Oder auch noch double Werte zu beachten, wenn ich zb. nur ints erlaubt habe, oder doch!?

Zu *Whitebox*: Anhand der zykl. Zahl finde ich ja die mögliche Pfade eines Programmflusses. Reicht es für jeden Pfad EIN Test zu machen oder müssen/sollen es mehrere sein???

*3.)*
Ist es nicht eigentlich so, dass man in Aktivitätsdiagrammen NUR Aktionen machen darf? Und nicht wie etwa in diesem Wiki Diagramm auch einen Zustand? Siehe "Klausur verfehlt / Klausur bestanden"... das sind für mich keine Aktionen sondern Zustände(mein Prof. ist da sehr penibel...):
http://upload.wikimedia.org/wikipedia/commons/4/48/Aktivity_diagram_2.png

4.)
*Klassendiagramm*:
(Anmerkung: Ich habe bewusst auf Vererbung,Aggregation/Komposition, Getter/Setter Methoden verzichtet... da mein Prof sowas garnicht gerne sieht und lieber etwas übersichtliches und einfaches haben möchte... deshalb auch nur die wichtigsten Attribute/Operationen).

Folgender Fall: Ein Student soll in einer Bibliothek ein Buch suchen & finden sowie ausleihen können. Zeichnen Sie dazu ein Klassendiagramm: http://www8.pic-upload.de/16.09.11/2yyxidxpd2pr.jpg

Zur Erläuterung: Ein Student kann einen SuchPC benutzen, welcher nach Titel, Autor oÄ nach einem Buch suchen kann. Ein Buch hingegen verfügt über n viele Exemplare, welche angeben(indirekt) ob sie ausleihbar sind. Falls der Student ein Buch oder mehrere gefunden hat, kann er sich das "nehmen"(<- das erfolgt ganz physikalisch und deshalb hier nicht modelliert) und benutzt eine Ausleihe, mit welcher er eine Liste von Büchern ausleihen kann.

Fragen hierzu: 
Sind die Multiplizitäten/Kardinalitäten richtig gesetzt?(Da habe ich oft arg Probleme)... Ist zb. 1 Buch hat 1..* Exemplare korrekt? Oder das 1 Student 1 Ausleihe benutzt? Oder müsste ich da von ausgehen, dass es zig Studenten gibt, und es zig Ausleihen gibt also * zu * Beziehung? ODER kann es sein das es sogar kein Studenten gibt, der das benutzt.. also 0 zu * Beziehung?! Finde ich noch sehr schwammig :&


----------



## nillehammer (16. Sep 2011)

> Ab wann ist ein System "klein"...Habt ihr vielleicht Beispiele?


Da es sich hier um Projektmanagement handelt, würde ich hier auf die Anzahl der am Projekt Beteiligten abzielen. Bis 10 Personen würde ich es für klein halten.


> Ich brauceh aber nicht extra ein Test machen für eine logisch falsche Eingabe wie ein boolean Wert oder so, oder? Oder auch noch double Werte zu beachten, wenn ich zb. nur ints erlaubt habe, oder doch!?


Das kommt auf die Schnittstelle an, die Du aufrufst. Wenn sie so getypt ist, dass nur int-Werte übergeben werden können, brauchst (bzw. kannst) Du nicht auf z.B. boolean zu testen. Wenn sie aber z.B. den Aufruf mit Strings zulässt, die nach int konvertiert werden, dann musst Du auch einen Testfall haben, bei dem ein Nicht-Zahl-String übergeben wird.


> Zu Whitebox: Anhand der zykl. Zahl finde ich ja die mögliche Pfade eines Programmflusses. Reicht es für jeden Pfad EIN Test zu machen oder müssen/sollen es mehrere sein???


Eine vollständige Pfadüberdeckung ist bei den meisten Programmen entweder garnicht oder nicht wirtschaftlich umsetzbar, weil es bei Schleifen sehr viele bis unendlich mögliche Pfade geben kann. Für möglichst vollständige Testabdeckung sollte man mehr auf Abdeckung aller Statements und Zweige abzielen.


> Ist es nicht eigentlich so, dass man in Aktivitätsdiagrammen NUR Aktionen machen darf? Und nicht wie etwa in diesem Wiki Diagramm auch einen Zustand? Siehe "Klausur verfehlt / Klausur bestanden"... das sind für mich keine Aktionen sondern Zustände(mein Prof. ist da sehr penibel...):


Ich denke auch, dass das von Dir erwähne Beispiel unkorrekt ist. Korrekterweise müsste man die Prüfung der Punkte als Aktivität oder als Beschriftung des Splits formulieren und dann "Klausur bestanden" bzw. "Klausur verfehlt" an die Kanten schreiben.


> Sind die Multiplizitäten/Kardinalitäten richtig gesetzt?(Da habe ich oft arg Probleme)... Ist zb. 1 Buch hat 1..* Exemplare korrekt? Oder das 1 Student 1 Ausleihe benutzt? Oder müsste ich da von ausgehen, dass es zig Studenten gibt, und es zig Ausleihen gibt also * zu * Beziehung? ODER kann es sein das es sogar kein Studenten gibt, der das benutzt.. also 0 zu * Beziehung?! Finde ich noch sehr schwammig :&


Die Multiplizitäten sind richtig.


----------



## b1zarRe (16. Sep 2011)

@Nillehammer
Danke schon einmal für die schnelle Antwort. Kannst du das mit den Multiplizitäten noch erläutern?
Also, wie ich das vielleicht besser verstehe... Ich lese und denke dabei immer so: 1 Buch hat ein - n-viele Exemplare von sich. Nur: Man könnte auch argumentieren: Ein Buch hat 0 bis 1, bis 2 oder n-viele Exemplare von sich. Also 1 zu 0..*
???


----------



## maki (16. Sep 2011)

*verschoben*


----------



## b1zarRe (16. Sep 2011)

War das Thema in "Softwareentwicklung" so falsch?! oO


----------



## maki (16. Sep 2011)

Meinte das nicht böse, aber Klausurfragen bei denen die Antworten mit der Meinung des Proffesors übereinstimmten müssen haben meist recht wenig mit realer SW Entwicklung zu tun.

Zu 1:
Facebook wurde Agil mit Scrum entwickelt: How Facebook Does Agile -- Application Development Trends
Agile Vorgehensmodelle sind nicht nur für kleine Projekte gedacht, sie skalieren sehr gut, wichtig ist die Teamgröße,  bei so großen Projekten hat man mehrere Teams die parallel arbeiten.
XP ist kein Projektmanagement Vorgehensmodell, sondern Verhaltens- und Arbeitsweisen von Entwicklern für Entwickler, du meintest wohl Scrum.
"Spiralmodelle" existieren imho nur in Büchern, Phasenmodelle wie das Wasserfallmodelle (das gibt es übrigens in der SW gar nicht) und das V-Modell (XT) habe ihre eigenen Probleme, SW Entwicklung hat seine eigenen Regeln, passen höchst selten zusammen wegen fehlender Vorraussetzungen.

*zurückverschieb*


----------



## nillehammer (16. Sep 2011)

b1zarRe hat gesagt.:
			
		

> Ich lese und denke dabei immer so: 1 Buch hat ein - n-viele Exemplare von sich. Nur: Man könnte auch argumentieren: Ein Buch hat 0 bis 1, bis 2 oder n-viele Exemplare von sich. Also 1 zu 0..*


Beides kann Sinn machen. Entweder die Bibliothek legt nur Bücher an, die sie auch wirklich im Bestand hat. Dann wäre 1:1..* richtig. Oder die Bibiliothek pflegt Bücher, die sie garnicht im Bestand hat (bspw. aufgrund eines Bestellwunsches). Dann wäre die Multiplzität 1:0..* richtig.  Das wäre Abhängig von der Anforderung.


----------



## b1zarRe (16. Sep 2011)

@maki: wuerdest du an meiner stelle (in der klausur) also scrum(agil) vorschlagen?haette eher gedacht, das fuer soetwas grosses eher das spiralmodell genommen.oder ist das eher schwammig?


----------



## schalentier (16. Sep 2011)

Auf welche Frage (genau) denn?

Wenn man sich die Bildchen in der Wikipedia von Agiler Softwareentwicklung und Spiralmodell mal ansieht, sehen beide auch irgendwie aehnlich aus. Wenn man will, koennte man evtl. sogar behaupten, dass Scrum eine Konkretisierung vom Spiralmodell ist. Imho gibts da kaum fest definierbare Grenzen. In der Praxis macht man auch oft irgendwie von allem etwas. Selbst wenn von der "Fuehrungsetage" bestimmt wurde, dass nach dem Wasserfallmodell gearbeitet wird, muss man Aenderungen vom Kunden irgendwie in die Software bringen - und bricht ja dann irgendwie das theoretische Gebilde.

Ein wichtiges Element von agil (<-- nichtssagendes Buzzword) und Scrum im Speziellen ist, dass man selbstorganisierende Teams bildet. Das erfordert, dass die Teams "klein" sind (maximal 12 Leute). Man koennte auch sagen, dass jedes Team ein eignes Projekt bearbeitet, auch wenn alle Teams zusammen am selben Produkt entwickeln. Damit wuerde die Aussage wieder stimmen, dass agile Modelle eher fuer kleinere Projekte (==Teams, in einem Verbund von vielen Teams) geeignet sind. 

Aber fuer deine Klausur duerfte die Realitaet recht egal sein, die Antwort haengt vom Prof ab 

Daneben gibts doch auch diesen DIN Kram, oder? Ich glaub V-Modell XT ist nach irgendeiner DIN genormt. Grosse Firmen, mit noch groesseren Kunden, muessen dann evtl. aus rechtlichen Gruenden ein solches DIN genormtes Verfahren einsetzen. Das ist dann aber unabhaengig von der eigentlichen Softwareentwicklung. 

Am besten stellst die Frage mal im Wortlaut (einer alten Klausur?).


----------



## maki (16. Sep 2011)

Um die Verwirrung komplett zu machen, gibt es eine iterative Ausprägung des V-Modells, dass ist dann wirklich Scrum, aber mit anderen Begriffen 

Das hat man recht spät noch aufgenommen weil man merkte, dass das Phasenmodell in der SW Entwicklung leider nur Theorie bleibt, ausser natürlich der Kunde weiss von Anfang an zu 100% was er möchte und ändert die ANforderung nach der Analysephase nie wieder ab.

@schalentier
Nun ja, in jedem großen Projekt muss man mehrere Teams bilden die dann jeweils bestimmte aufgaben übernehmen, teilen und herrschen, "Produkt" ist imho ein Begriff der vielleicht eher ins Marketing gehört, weil sich das verkaufen lässt.
Natürlich hast du recht und man kann die Grenze beliebig ziehen, aber wenn man mal davon ausgeht dass Facebook ein Projekt ist, dann haben mehrere Teams an unterschiedlichen (technischen) Teilen davon gearbeitet.

Persönlich halte ich nicht allzuviel von den "überformalen" Vorgehensmodellen, vor allem den Phasenmodellen und ganz besonders dem V-Modell XT.
Sind imho ein Mittel um den Eindruck zu erwecken dass SW Entwicklung eine Ingenieurdisziplin ist und man alles vorausschauend planen kann.
Die Realität ist aber oft so, dass man als SW Entwickler bereits beginnt zu arbeiten obwohl man noch viel zu wenige Informationen hat, ein Ingenieur würde niemals anfangen eine Brücke zu entwerfen ohne dass er die Anforderungen zu 98% (wenn nicht sogar 100%) kennt.

Wie oft hat man dass schone erlebt, zuerst wird er Termin mit dem Kunden vereinbart, dann das Budget, und zum Schluss kommen die Anforderungen tröpfenweise an (bis kurz vor Projektende) welche sich dann auch noch mit älteren Anforderungen widersprechen.


----------



## b1zarRe (17. Sep 2011)

Also die Frage einer alten Klausur war in etwa so: (Vorgegeben war eine Beschreibung einer Firma die an einem Projekt entwickelt[mehr dazu weiß ich leider nicht]) Man sollte halt begründet sagen, welches Prozessmodell man für dieses Projekt vorschlägt.

Ich fasse mal kurz die *Prozessmodelle* zusammen, die wir in der Vorlesung durchgegangen sind damit ich den Überblick nicht verliere... ist dies alles so korrekt?

- Build & Fix Model -> Man entwickelt und bearbeitet das Programm solange bis der Kunde zufrieden ist
(keine Dokumentation oder andere Formalia, sondern "kurz, dreckig und knackig" bis es halt läuft; eher nicht zu emphelen)

- Wasserfall: -> kleine-mittlere Projekte. Mit Dokumentation und Phase wird erst erreicht wenn eine andere Phase beendet wurde. Eine Rückkoppelung ist aber dennoch möglich. Dies gibt es noch in der Prototype Variante, wo man die Spezifikation durch ein Prototyp ersetzt.
- Iteratives Modell: Ähnelt glaube ich dem Wasserfall Modell, nur dass das Programm Stück für Stück und nicht als Ganzes released wird.
- Spiralmodell: (für sehr große Projekte): Viel Dokumentation, Testing in wiederholenden Zyklen. Sehr aufwändig und daher nur für sehr große Projekte zu empfehlen.

- XP. Kleine - mittlere Projekte, PairProgramming, Gewisse "Werte" wie : Austausch von Wissen, Funktionalität steht über Dokumentation, keine Überstunden, schnelle/kleine Releases, User Stories vom Kunden, (...)
- SCRUM (eigentlich nur gestreift behandelt). Ähnlich wie XP-> Agiles Vorgehensmodell für kleine bis mittlere Projekte

Zu dem *Aktivitätsdiagramm* aus dem ersten Post: Das ist nun für mich totaler Müll, weil zu dem angesprochenen noch hinzukommt, dass bei "Klausur verfehlt" auch die Note veröffentlich werden müsste... irgendwie muss der Student/Schüler das ja erfahren.

Zu meinem *Klassendiagramm*: Hätte ich da nicht bei Student zu Ausleihe einen gerichtete Assoziation machen müssen? (Also einen Pfeil bei Ausleihe) ??? Oder muss man das nicht unbedingt, wenn man da einen Text stehen hat?


----------



## b1zarRe (23. Sep 2011)

hab heut die klausur geschriebn.frage mich ob das so richtig is... eine aufgabe war es ein system zu modellieren wo jeder benutzer ne rolle hat und jahrestage der firma ins system hinzufügen kann bzw lesen kann: 
http://www7.pic-upload.de/23.09.11/8rrmluhihypb.jpg 
(hatte noch mehr methoden u attribute; fallen mir gerade aber nichtmehr ein; habe auch bewusst auf vererbung, aggegation etc verzichtet)


----------



## nillehammer (26. Sep 2011)

Hallo,
meine Anmerkungen:
-Die Fachklassen stimmen, die Assoziationen und Kardinalitäten auch
-Die Assoziationen sind nicht gerichtet, d.h. man kann nicht erkennen, welche Klasse eine Referenz auf die assoziierte Klasse hat ("Kennt" ein Benutzerobjekt seine Rolle? "Kennt" ein Rollenobjekt alle zugeordneten Benutzer?). Die Beschriftung mit "hat" plus einer evtl. angegebenen Leserichtung hat mit der Gerichtetheit der Assoziation nichts zu tun. Da das auch nicht aus den Feldern/Methoden ersichtlich ist, fehlt diese Information und ich würde hier Punkte abziehen.
-Ids sind DB-Notwendigkeiten. Sie haben in einem Fachklassendiagramm nichts zu suchen. Falls es ein "Technik"-Klassendiagramm sein soll, dan würde ich die ids überall erwarten. In dem konkreten Fall der Rolle wäre ein name-Feld wohl besser gewesen.
-Die Methoden von Benutzer können so ihren Zweck nicht erfüllen. Um hatRolle zu testen, müsste man die zu testende Rolle bspw. als Parameter übergeben können. Die Methode ist von Dir aber parameterlos definiert worden. Gleiches gilt für die anderen beiden Methoden


----------

