Benutzer-Werkzeuge

Webseiten-Werkzeuge


se:softwaretechnologie

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste Überarbeitung Beide Seiten der Revision
se:softwaretechnologie [2008-02-11 15:12]
stefan
se:softwaretechnologie [2008-02-18 10:55]
stefan
Zeile 13: Zeile 13:
     * zwei Entwurfsmuster und eine sonstige Entwurfsmaßnahme einsetzen     * zwei Entwurfsmuster und eine sonstige Entwurfsmaßnahme einsetzen
   * Zuletzt folgen acht Wissensfragen,​ die nichts mit dem Projekt zu tun haben.   * Zuletzt folgen acht Wissensfragen,​ die nichts mit dem Projekt zu tun haben.
 +
 +===== Einführung =====
 +==== Definitionen ====
 +Software Engineering befasst sich mit Techniken und Methoden
 +  * das Softwareprodukt möglichst fehlerfrei und möglichst nahe an den tatsächlichen Wünschen des Anwenders orientiert zu erstellen,
 +  * ständige Änderungen der Anforderungen zu bewältigen,​
 +  * die zu jeder Zeit von jedem Entwickler zu bewältigende Komplexität klein zu halten,
 +  * eine geregelte und effiziente Zusammenarbeit aller Beteiligten zu ermöglichen und
 +  * dies alles in einem rationellen und planbaren Kosten- und Zeitrahmen zu realisieren.
 +
 +> Software Engineering ist die zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige,​ ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen. (Prof. Helmut Balzert)
 +
 +Software Engineering ist Programmierung unter mindestens einer der folgenden beiden Bedingungen (Parnas):
 +  * Mehr als eine Person ist befasst mit der Erstellung und/oder dem Gebrauch des Programms.
 +  * Mehr als eine Version des Programms wird erstellt werden.
 +
 +Auf Software Engineering kann verzichten, wer alleine ein Programm für der einmaligen alleinigen Gebrauch entwickelt! ​
  
 ===== Objektorientierte Systementwicklung ===== ===== Objektorientierte Systementwicklung =====
Zeile 264: Zeile 281:
  
 ==== Implementierung ==== ==== Implementierung ====
 +  * Konzept für automatisch generierbare technische Systeme (S. 168)
 +    * Jedes Objekt, das nicht ausschließlich Daten verwaltet, ist ein Aktives Objekt.
 +    * Jedes Aktive Objekt ist ein Zustandsautomat.
 +    * Jeder Zustandsautomat arbeitet nach dem "Run to Completion"​-Prinzip.
 +    * Alle Aktiven Objekte kommunizieren durch Message Passing.
 +    * Das Scheduling ist durch Nachrichtenprioritäten gesteuert.
 +    * No-wait-Semantik und Scheduling nach Nachrichtenprioritäten werden durch einen zentralen Nachrichtenpuffer gewährleistet.
 +    * Scheduler, Timerdienst,​ Messagehandler,​ I/​O-Services und wichtige Signalverarbeitungsalgorithmen werden von der Plattform zur Verfügung gestellt.
 +    * Alle Objekte und I/O-Ports werden von einem Erbauer erzeugt und installiert.
  
 +> "Run to Completion"​ (RTC) ist das in der UML 2 definierte Verhalten eines nebenläufigen Zustandsautomaten:​ Ein Zustandsautomat befindet sich vom Start bis zum Ende einer Transition im "Run to Completion Step"; dieser darf durch eine neue Anforderung ​ an dasselbe Objekt nicht unterbrochen werden, da der Zustand des Objekts während einer Transition undefiniert ist. Zum Run to Completion Step gehören auch Methoden nicht aktiver Objekte, die von der Transition aufgerufen werden. ​
  
-==== Tests / Wartung ​====+> SDL ist eine formale Sprache mit dem Ziel der Spezifikation und Beschreibung des Verhaltens von Telekommunikationssystemen (insbesondere in den Funktionsbereichen Anrufbearbeitung, ​Wartung, Fehlerbehandlung,​ Systemkontrolle sowie beim Entwurf von Datenkommunikationsprotokollen). Aufgrund ihrer Eigenschaften ist SDL generell zur Verhaltensspezifikation von Echtzeitsystemen geeignet. Die Sprache ist in grafischer und textueller Notation definiert. SDL enthält eine Reihe von Konzepten wie Typen-, Instanzen-, Kommunikations- und Sichtbarkeitskonzept und dynamische Semantik. Aufgrund ihrer formal korrekten Syntax und Semantik sind SDL-Spezifikationen zur automatischen Konsistenzprüfung geeignet.
  
-===== Prozessmodelle =====+==== Tests ==== 
 +  * Statische Analyse 
 +  * Korrektheitsbeweis 
 +  * Test 
 +    * Objektklassentest (S. 177) 
 +      * Entwicklung eines Testrahmens,​ der die importierten Funktionen (required interface) **simuliert**,​ die exportierten Funktionen (provided interface) **stimuliert** (anregt) und die Arbeitsweise **kontrolliert**.  
 +    * Integration 
 +  * Auswahl der Testdaten 
 +    * Black-box <​––>​ White-box-Test 
 +    * Äquivalenzklassen 
 +      * Klassifikationsbaummethode 
 +      * OO Äquivalenzklassen -> Folgen von Änderungsoperationen 
 +  * Testüberdeckung 
 +    * C1-/​C2-Überdeckung (S. 182) 
 +  * OO-Test (S. 183) 
 +    * Test abstrakter und abgeleiteter Klassen 
 +    * Integrationstest 
 +    * Test zyklischer Kommunikation  
 +    * Test in der Multitasking-Plattform  
 +  * Testwerkzeuge 
 +    * Debugger 
 +    * In das Programm eingebauter "​Debugger"​ 
 +  * Testlogbuch 
 +    * Nachweis über durchgeführte/​durchzuführende Tests 
 +    * ermöglicht Regressionstests
  
-===== Qualitätssicherung ​=====+==== Wartung ​==== 
 +  * Wartungskosten => 1,5 * Herstellungskosten 
 +  * Arten von Wartungsarbeiten 
 +    * Anpassung an neue Anforderungen 
 +    * Anpassung an andere Maschine 
 +    * Innerbetriebliche Belange 
 +    * Fehlerbeseitigung 
 + 
 +===== Entwicklungsprozess ===== 
 + 
 + 
 + 
 +===== Qualität des Entwicklungsprozesses ​=====
  
  
Zeile 279: Zeile 342:
   * Aufwandsschätzung   * Aufwandsschätzung
     * http://​de.wikipedia.org/​wiki/​Cocomo     * http://​de.wikipedia.org/​wiki/​Cocomo
- 
- 
- 
  
 ===== ToDo ===== ===== ToDo =====
 +  * Lernziele des Skripts anschauen
   * Praktikumsunterlagen anschauen   * Praktikumsunterlagen anschauen
   * Infos zu Extreme Programming   * Infos zu Extreme Programming
Zeile 344: Zeile 405:
   * Petri-Netze (?)   * Petri-Netze (?)
   * CORBA, CCM, COM, EJB, CAN(open) (?)   * CORBA, CCM, COM, EJB, CAN(open) (?)
 +  * MDA
 +  * Was ist ein "​aktives Objekt"​ genau?
  
 ===== Übungen ===== ===== Übungen =====
 ==== Seite 12 ==== ==== Seite 12 ====
 +  * Bei der Nürnberger U3 werden unter den Türen vor dem Öffnen Trittbretter ausgefahren,​ um den Spalt zwischen Wagen und Bahnsteig zu überbrücken. Nach zwei Jahren Entwicklungszeit zeigte sich, dass alles vergeblich war, da der Spalt unterschiedliche Breite haben kann. Was ist hier falsch gemacht worden?
 +    * Die Entwickler haben sich nicht intensiv genug mit der Realität auseinandergesetzt. Sie sind offensichtlich nie vor Ort gewesen und haben sich die Gegebenheiten am Bahnsteig angeschaut.
 +  * Versuchen Sie, an einem Fahrkartenautomaten der VAG ein "​Tagesticket Plus Preisstufe 4" zu lösen, und protokollieren Sie Ihren Arbeitsablauf.
 +  * Wieso hat auch der Hersteller einer Software Qualitätsanforderungen?​
 +    * Der Hersteller sorgt nach der Auslieferung der Software auch für deren Support und Weiterentwicklung. Die Kosten hierfür übersteigen die Entwicklungskosten im Allgemeinen deutlich (Wert aus der Literatur: Faktor 1,5). Der Hersteller sollte also sicherstellen,​ dass seine Software wartungsfreundlich und leicht erweiterbar ist. Des Weiteren hat der Hersteller durchaus einen Ruf zu verlieren, wenn er qualitativ minderwertige Software herstellt.
 +  * Sie entwickeln für die "​Ich-AG"​ eines Freundes ein einfaches Buchhaltungsprogramm. Was halten Sie dabei von Software Engineering?​
 +    * Da das Programm evtl. von mehreren Personen genutzt wird und sicherlich auch mehr als einmal, ist Software-Engineering unumgänglich.
 +  * An einem großen Projekt arbeiten 150 Softwareentwickler. Wie ist das möglich?
 +    * Durch Berücksichtigung der Pronzipien des Software-Engineerings:​ Modularisierung,​ Tests, Arbeitsteilung,​ detailliertes Design etc.
 +  * Angenommen, Sie lesen in der Zeitung, dass ein neues Softwareprojekt in drei Jahren abgeschlossen sein und 15 Mio. € kosten soll. Mit welchen Ergebnissen müssen ​
 +Sie rechnen?
 +    * Die Entwicklungsdauer und -kosten werden die geplanten Werte sehr wahrscheinlich übersteigen. Aus den bekannten Durchschnittswerten aus der Literatur könnten die voraussichtlichen Werte ermittelt werden.
 +
 ==== Seite 55 ==== ==== Seite 55 ====
 ==== Seite 63 ==== ==== Seite 63 ====
Zeile 426: Zeile 502:
  
 ==== Seite 174 ==== ==== Seite 174 ====
-==== Seite 189 ====+  * Ihr Klassendiagramm enthält eine Mehrfachvererbung. Für die Implementierung ist Java vorgesehen. Was können Sie tun? 
 +  * Der Codegenerator von Enterprise Architect erzeugt seltsame Präprozessor-Direktiven. Was bedeuten diese? 
 +  * Erzeugen Sie im Enterprise Architect ein einfaches Klassendiagramm mit fünf mal zwei Klassen und zwischen jeweils zwei Klassen  
 +    * eine explizit einseitig navigierbare Assoziation 
 +    * eine einseitig navigierbare,​ einseitig undefinierte Assoziation 
 +    * eine beidseitig undefinierte Assoziation 
 +    * eine explizit beidseitig navigierbare Assoziation 
 +    * ein Interface für eine der Klassen und explizit einseitig navigierbare Assoziationen in einer Richtung auf die Klasse, in der anderen auf das Interface und vergleichen Sie den generierten Code bei verschiedenen Optionseinstellungen. 
 +  * Der Enterprise Architect kann auch ein objektorientiertes Programm einlesen und daraus ein Klassendiagramm erzeugen. Testen Sie, wie gut das funktioniert,​ und  
 +von welchen Einstellungen die Qualität abhängt. 
 +  * Was bedeutet RTC? 
 +  * Was bedeuten PIM und PSM? 
 +  * Unter welchen Umständen kann man auf ein PSM verzichten?​ 
 +  * Wandeln Sie den Zustandsautomaten aus Abb. 5-86 in SDL um. 
 +  * Zeichnen Sie zu Abb. 5-129 unten ein Objektdiagramm (d.h. mit alle Exemplaren der Klassen) mit ausgefüllten Feldern der Pattern-Objekte.
  
 +==== Seite 189 ====
 +  * Vergleichen Sie die Vor- und Nachteile von Statischer Analyse, Black-Box- und White-Box-Test.
 +  * Was hat Abschnitt 5.10.3 mit Abb. 5-140 zu tun?
 +  * Wozu dient ein Regressionstester?​
 +  * Was haben der Elchtest und die letzten französischen Atomwaffentests miteinander zu tun?
 +  * In einem Softwareprodukt wurden am ersten Testtag 250, am zweiten 130, am dritten 65, am vierten 30 und am fünften 15 Fehler gefunden. Wie viele Fehler sind voraussichtlich noch enthalten?
 +  * Eine Rechteckklasse CRect ist gekennzeichnet durch ihre linke, obere, rechte und untere Begrenzung. Sie hat u.a. einen Konstruktor CRect(int links, int oben, int rechts, int unten) und eine Methode point_in_me(int x, int y), die feststellt, ob sich eine Koordinate x/y innerhalb ihrer Grenzen befindet.
 +    * Erstellen Sie eine Äquivalenz- und Grenzwertklassenanalyse für point_in_me.
 +    * Was kann beim Konstruktor schief gehen, und wie lässt sich das erkennen?
 +    * Eine abgeleitete Klasse CResRect hat eine neue Methode resize(int dx, int dy).
 +    * Was muss bei ihr getestet werden, und warum?
 +  * Planen Sie einen Überdeckungstest für den Zustandsautomaten des Kassierers aus Abb. 5-86.
 +    * Zu welchen Klassen müssen für den obigen Test Simulationsklassen entwickelt werden, wenn die echten Klassen noch nicht vorliegen?
 +    * Wie lässt sich dieser Aufwand vermeiden?
 +  * Die Nachrichten "​entriegeln"​ und "​schliessen"​ in Abb. 5-137 kommen vom Triebwagen. Warum ist das ein Testproblem,​ und was kann man dagegen tun?
 +  * Das Subsystem Kassierer nach Abb. 5-62 soll so implementiert werden, dass es bottom-up testbar ist. In welcher Reihenfolge müssen seine Klassen und eventuell erforderlichen Simulationsklassen erstellt werden, damit alles Erstellte möglichst bald testbar ist?
 +  * Die Funktionalität einer Klasse Stack (Stapelspeicher) ist wie folgt definiert:
 +    * void push(int wert) legt die Zahl wert "oben auf den Stapel"​.
 +    * int top() liefert den obersten Wert des Stapels
 +    * void pop() vernichtet den obersten Wert des Stapels
 +    * bool empty() liefert die Information,​ ob der Stapel leer ist
 +    * void clear() löscht den gesamten Inhalt.
 +    * Wie sieht eine Äquivalenzklassenanalyse für diese Klasse aus?
 +  * Die Funktion void sort(int &a, int &b, int &c), die die Werte a, b und c aufsteigend sortieren soll, wurde so implementiert:​ <​code>​
 +void sort(int &a, int &b, int &​c) ​
 +
 + int t; 
 +  if(a > b) 
 +  {  t = a; a = b; b = t; } 
 +  if(b > c) 
 +  {  t = a; a = c; c = t; } 
 +  if(a > b) 
 +  {  t = a; a = b; b = t; } 
 +}</​code>​
 +    * Planen Sie einen C2-Test für diese Funktion!
 +  * Welchem Umstand verdankt Microsoft einen wesentlichen Marktvorteil? ​
se/softwaretechnologie.txt · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)