Praktikum Software-Technik: Extreme Programming
|
|
- Hansl Roth
- vor 8 Jahren
- Abrufe
Transkript
1 Praktikum Software-Technik: Extreme Programming Institut für Informatik Prof. Dr. Jens Grabowski M.Sc. Benjamin Zeiss Inhalt 1. Die trügerische Sicherheit des grünen Balkens 2. Quelltextabdeckung beim Testen 3. XP & Akzeptanztest 4. Refactoring 5. Refactoring & XP 6. Refactoring-Katalog 7. Stinkender Quelltext 8. Werkzeugunterstützung 9. Refactoring & Testen 10. Zusammenfassung
2 Die 12 XP-Techniken 1. Die trügerische Sicherheit des grünen Balkens (1/2) Der JUnit-Balken ist grün ist jetzt alles im grünen Bereich? Nicht zwingend: 1. Keine Garantie, dass Test an sich korrekt ist: Bei Test und Implementierung kann der gleiche Denkfehler gemacht werden. Fehler steckt sowohl in Implementierung als auch Test. Bei testgetriebener Entwicklung (bei der Testentwickler und Implementierer ja identisch sind) nicht völlig unwahrscheinlich. 2. Falls testgetriebene Entwicklung halbfertig abgebrochen wird, wird nur ein Teil der Funktionalität getestet und auch nur dieser Teil der Funktionalität überhaupt implementiert. Fehler besteht nicht aus fehlerhaftem, sondern aus fehlendem Quelltext.
3 Die trügerische Sicherheit des grünen Balkens (2/2) Nicht zwingend (Fortsetzung): 3. Es wurden zu wenig Unit-Tests geschrieben, so dass nur ein Teil der Funktionalität überhaupt getestet wird. Der von Tests durchlaufene Teil des Quelltexts ist zwar korrekt, aber Fehler steckt in dem Teil des Quelltexts, der gar nicht von Tests durchlaufen wird. Gegen 1. und 2. helfen nur Paarprogrammierung und Akzeptanztests. Gegen 3. helfen außerdem mehr Tests: wie viel Tests sind genug? Tests sollten dafür sorgen, dass möglichst der gesamte Quelltext durchlaufen wird. 2. Quelltextabdeckung beim Testen Wie viel Testen ist genug? Testfälle sollen möglichst gesamten Quelltext abdecken. 100% Abdeckung in der Praxis nur selten bzw. nur mit unverhältnismäßig hohem Aufwand machbar: Auch bei Testgetriebener Entwicklung sollte defensiv programmiert werden, d.h. man sollte Situationen abfangen, die eigentlich nicht auftreten sollten. Solche Situationen sind durch Tests schwer zu provozieren, z.b.: Out of Memory, um zu Testen, ob Implementierung korrekt mit fehlgeschlagenem new umgeht. No space left on device, um zu Testen, ob Implementierung beim Speichern mit vollem Dateisystem umgehen kann. Welche Quelltextabdeckung ist in der Praxis erstrebenswert?
4 Metriken zur Quelltextabdeckung Viele mögliche Metriken, um Quelltextabdeckung zu messen. Die 3 gebräuchlichsten: Methodenüberdeckung Anweisungsüberdeckung Zweigüberdeckung method1(a,b) Hierfür wird Ablaufgraph eines FALSE a>b Programmes betrachtet: block1 public void method1(int a, b) { if (a > b) { block2; else { block1; if (a >= b) { block3; FALSE a>=b TRUE block2 TRUE block3 Methodenüberdeckung Jede Methode wird mind. einmal aufgerufen. Recht grobe Metrik: 100% Methodenüberdeckung deckt selten den gesamten Quelltext ab. Beispiel: Testfall für 100% Methodenüberdeckung: method1: a=2, b=1 100% Methodenüberdeckung ist ein Muss beim Testen! Zusätzlich sollten aber noch weitere Metriken herangezogen werden... method1(a,b) FALSE block1 a>b a>=b FALSE TRUE block2 TRUE block3
5 Anweisungsüberdeckung Jede Quelltextzeile wird mind. einmal ausgeführt. Deutlich besser als Methodenüberdeckung. 100% Anweisungsüberdeckung impliziert 100% Methodenüberdeckung. Beispiel: method1(a,b) FALSE Testfälle für 100% Anweisungsüberdeckung: method1: a=2, b=1 method2: a=2, b=2 Trotz 100% Anweisungsüberdeckung wird nicht getestet, welche Auswirkung es hat, wenn FALSE-Zweig von a>=b durchlaufen wird. block1 FALSE a>b a>=b TRUE block2 TRUE block3 Zweigüberdeckung Bei jeder Verzweigung werden alle möglichen Zweige mind. einmal durchlaufen. Sinnvollste der 3 Metriken. Berücksichtigt auch leere Zweige. 100% Verzweigungsüberdeckung impliziert 100% Anweisungsüberdeckung. Beispiel: Testfälle für 100% Zweigüberdeckung: method1: a=2, b=1 method2: a=1, b=2 method1(a,b) FALSE Ca. 85% Zweigüberdeckung beim Testen! block1 a>b a>=b FALSE TRUE block2 TRUE block3
6 Bestimmung der Überdeckung Quelltextinstrumentierung: 1. Zähler werden an Verzweigungen eingefügt und der derart instrumentierte Quelltext übersetzt. Mögliche Alternativen zur Instrumentierung von Java-Quelltext: Bytecode wird instrumentiert. Java Virtual Machine Profiling Schnittstelle wird abgefragt. 2. Instrumentiertes Programm wird ausgeführt (z.b. durch Start der Unit-Tests). 3. Nach dem Testlauf werden Zähler ausgelesen und die Werte für die gewünschte Metrik berechnet. Üblicherweise wird von Werkzeugen die Abdeckung des Quelltextes inkl. der JUnit-Testfälle bestimmt, da es sich hierbei ja ebenfalls um Java-Code handelt. test-packages sollten bei der Auswertung der Überdeckung nicht betrachtet werden. Code Coverage Werkzeug Werkzeug zur Java-Quelltextinstrumentierung und zur Berechnung von Überdeckungs-Metriken. Tools: Clover (kommerziell), EclEMMA (EPL), CodeCover (EPL) Bild: Clover Praktikum: EclEMMA Weitere Quelltext- Metriken Lines of Code (LOC) ohne Kommentar- & Leerzeilen Methodenüberdeckung: 100% anstreben! Methoden- & Bedingungsüberdeckung Mittelwert der 3 Überdeckungs- Metriken: 85% anstreben!
7 3. XP & Akzeptanztest Unit-Tests bieten keine Garantie, dass Produkt fehlerfrei & vollständig ist. Außerdem testen Unit-Tests nur einzelne Klassen und nicht das Zusammenspiel aller Klassen. XP sieht daher zusätzlich funktionale Akzeptanztests (=Systemtests) vor. Gesamtsystem (aktuelles Release) wird über Benutzerschnittstelle getestet. Anhand der Akzeptanztests kann Kunde sehen, dass seine Funktionalität realisiert ist. Akzeptanztest (1/2) Testgegenstand: System (SUT=System under Test) Test über die Schnittstellen zum Benutzer bzw. zu externen Systemen. Nicht immer zu 100% automatisierbar. Z.B. automatisierter Test der Druckerausgabe schwierig. Relativ gut jedoch z.b. GUI-Tests (Capture/Replay) Jedoch wartungsintensiv, wenn sich UI während der Entwicklung ändert. Quelltextabdeckung ist beim Systemtest i.d.r. geringer als beim Unit-Test, da sich bestimmte Ablaufpfade noch schwerer als beim Unit-Test erzwingen lassen. Akzeptanztest kümmern sich um Standard -Szenarien des Kunden. Überdeckung ergibt sich aus Szenarien des Kunden. Unit-Tests kümmern sich außerdem um Sonderfälle. Hohe Überdeckung beim Unit-Test wichtig.
8 Akzeptanztest (2/2) Basierend auf User-Stories (d.h. Funktionalität): Beschreiben Anforderungen an das Gesamt-System. Zum Ende eines Release-Zyklus müssen alle bis dahin implementierten User-Stories die zugehörigen Akzeptanztests bestehen. Kunde ist i.d.r. nicht in der Lage, selber Akzeptanztests zu schreiben. Entwickler schreiben zusammen mit Kunden Akzeptanztests. Test First vs. Code First: Falls Akzeptanztests vor der Implementierung geschrieben werden, gibt Kunde Benutzeroberfläche genau vor. (Capture/Replay funktioniert nicht.) Falls Akzeptanztests nach Implementierung geschrieben werden, geben Entwickler Benutzeroberfläche vor. Werkzeuge für Akzeptanztests Testen von textbasierten Oberflächen: Z.B. DejaGNU Testen von graphischen Oberflächen: Z.B. Abbot/Costello (open source), IBM Rational Functional Tester (kommerziell), SWTBot (open source) Abstraktere Beschreibung von lediglich Benutzereingaben und erwarteten Ausgaben, die unabhängig von der konkreten Oberfläche ist: Framework for Integrated Test (FIT) Spezielle Java-Klassen, dienen als Adapter zwischen den abstrakten Ein- /Ausgabedaten und der konkreten Oberfläche. Anwender liefert lediglich die Daten, Entwickler kümmern sich darum, wie die Daten in bzw. aus dem System kommen.
9 4. Refactoring (1/3) Def.: Systematische Umstrukturierung von Quelltext, ohne das Verhalten nach außen zu verändern. Ziel: Besser lesbar, verständlicher, Besseres Design, Besser änderbar. Manche Refactorings sind trivial und werden intuitiv verwendet, ohne sich bewusst zu sein, dass es sich dabei um Refactoring handelt. Aufräumen von Code V-17 Extract Method Refactoring (2/3) Beispiel (Refactoring: Extract Method) void printowing() { printbanner(); //print details System.out.println ("name: " + thename); System.out.println ("amount:" + theamount); Extract Method: Extrahieren & in eigene Methode packen void printowing() { printbanner(); printdetails(); void printdetails() { System.out.println ("name: " + thename); System.out.println ("amount:" + theamount); Vorteile: printowing wird übersichtlicher. Neue Methode kann auch an anderer Stelle aufgerufen werden. Macht bei sinnvollen Methodennamen Kommentar unnötig. V-18
10 Refactoring (3/3) Unterschied zu intuitivem Aufräumen von Code : Refactorings beinhalten Systematik anhand von checklisten-artigen festen Schritten zur Quelltexttransformation (Mechanik). Wahrscheinlichkeit, Fehler zu machen (=Verhalten zu ändern) minimieren. Zusätzlich zu systematischen Schritten: Tests geben Sicherheit, dass Verhalten nicht geändert wurde. Falls von Refactoring betroffene Klasse(n) nicht von Tests abgedeckt sind: vorher entsprechende Tests schreiben. Während des Refactorings soll nicht noch zusätzlich neue Funktionalität hinzugefügt werden. Entweder: Refactoring Oder: Neue Funktionalität hinzufügen V Refactoring und XP (1/2) Warum ist Refactoring für XP wichtig? XP sieht einfaches Design vor: Einfache Lösung kann jedoch für neue Funktionalität zu einfach geworden sei. Refactoring hilft dann weiter! Erinnerung: Einfaches Design beinhaltet auch: Keine falschen/unbewiesenen Annahmen über Zukunft, auch nicht bzgl. Performance: Refactoring auch auf Kosten der Performance! Make it run, make it right, make it fast! : Performance-Tuning erst am Ende! Flaschenhälse liegen oft sowieso an Stellen, wo man es nicht vermutet und diese können sich mit der Zeit auch noch ändern. V-20
11 Refactoring und XP (2/2) Zwei Hüte, die sich abwechseln: Refactoring Was will ich umstrukturieren? Gibt es einen Test? Test schreiben! Refactoring durchführen Testen Evtl. Fehler beheben Funktionalität hinzufügen Was will ich hinzufügen? Test schreiben Funktionalität hinzufügen Testen Evtl. Fehler beheben Der Versuch, beides gleichzeitig zu tun, geht schief! Der Versuch, zwei verschiedene Refactorings gleichzeitig durchzuführen ebenfalls! Immer separat in die Versionsverwaltung comitten! V-21 Literatur Buch: M. Fowler: Refactoring, Addison-Wesley, 2000 DAS Standardwerk zum Thema Refactoring. Für s Praktikum sollte die Web-Seite (s.u.) reichen. R. Roock/M. Lippert: Refactorings in großen SW-Projekten, dpunkt, 2004 Ergänzende Literatur. Web: Enthält Refactorings wie im Buch, jedoch ohne Checkliste für die einzelnen Teilschritte. Wiki Wiki zu Refactoring V-22
12 6. Refactoring-Katalog Lexikonartige Sammlung von Refactorings Auswendiglernen sinnlos, aber man sollte einmal alle gesehen haben, damit man weiß, dass man bzgl. eines bestimmten Refactorings nachschlagen sollte. In dieser Vorlesung & Praktikum: nur Vorstellung einiger, wesentlicher Refactorings Im folgenden: Refactoring-Name (fett), SituationAbhilfe Code Vorher/Nachher (alte, vom Refactoring betroffene Codezeilen rot, neue grün) Systematische Schritte Vor jedem Refactoring: Sicherstellen, dass Test existiert! V-23 Rename Method Der Name einer Methode erklärt nicht deren Funktionalität. Methodenname passend umbenennen. String gettelephonenumber() { return (theofficeareacode+"/"+theofficenumber); System.out.print(getTelephoneNumber()); String getofficetelephonenumber() { return (theofficeareacode+"/"+theofficenumber); System.out.print(getOfficeTelephoneNumber()); V-24
13 Rename Method: Schritte 1. Vererbungshierarchie beachten: Ggf. gleiche Schritte für Ober- und Unterklassen durchführen. 2. Neue Methode mit neuem Namen deklarieren und Rumpf der alten Methode dorthin kopieren. 3. Compilieren 4. Den Rumpf der alten Methode derart ändern, dass dort nur noch die Methode mit dem neuen Namen aufgerufen wird. 5. Compilieren und Testen 6. Alle Aufrufe der alten Methode durch Aufruf der neuen Methode ersetzen. Nach jeder Ersetzung: Compilieren und Testen! 7. Alte Methode komplett löschen. 8. Compilieren und Testen! So merkt man, falls man in Schritt 6 einen Aufruf übersehen hat. Beachte: kopieren, nicht verschieben! Um sicherzustellen, dass man in Schritt 2 nicht bereits einen Fehler gemacht hat. Wenn bereits das schief läuft, hat man z.b. den alten Rumpf falsch in die neue Methode kopiert. So merkt man sofort, wenn man einen Fehler gemacht hat. V-25 Einschub: Warum so kompliziert? Reicht nicht auch: 1. Methode umbenennen. 2. Compilieren. 3. Jeden vom Compiler als Fehler gemeldeten Aufruf einer nicht-definierten Methode durch Aufruf der neuen Methode ersetzen. 4. Solange Compiler meckert: GOTO 2 Leider: nein! Bei Vererbung nimmt der Compiler die Methode aus der Oberklasse und ist glücklich. Metaklassen-Verwendung (Java: Reflection) und bedingte Compilierung (C/C++: #ifdef) können dazu führen, dass nicht alle Aufrufe vom Compiler erfasst werden. Die Checkliste auf der vorherigen Seite entschärft diese Gefahr. Auch bei der dortigen Checkliste besteht natürlich die Problematik, dass die Compilerläufe Metaklassen und bedingte Übersetzung nicht erfassen, ein Mensch genauso kurzsichtig wie ein Compiler arbeitet. V-26
14 Extract Method Code-Fragment, das zusammenhängt. Durch Methode mit aussagekräftigem Namen ersetzen. void printowing() { double outstanding=getoutstanding(); printbanner(); //print details System.out.println ("name: " + thename); System.out.println ("amount:" + outstanding); void printowing() { printbanner(); printdetails(getoutstanding()); void printdetails (double outstanding) { System.out.println ("name: " + thename); System.out.println ("amount:" + outstanding); V-27 Extract Method: Schritte 1. Neue Methode anlegen und sinnvoll benennen. 2. Extrahierten Code in neue Methode kopieren. 3. Im kopierten Code nach Variablen suchen, die in der Ursprungsmethode lokal sind. Variablen, die nur noch in neuer Methode benutzt werden: Lokale Variable nur noch in neuer Methode Variablen, die in neuer Methode verändert und deren Wert in Ursprungsmethode später wieder benutzt wird: Rückgabeparameter der neuen Methode (return ) Mehr als eine solche Variable: Extract Method geht so nicht! Variablen, die in neuer Methode nur gelesen werden: Als Parameter der neuen Methode übergeben 4. Compilieren 5. In Ursprungsmethode: extrahierten Code durch Aufruf der neuen Methode ersetzen, Deklaration nicht mehr benötigter lokaler Variablen löschen. 6. Compilieren und Testen! V-28
15 Inline Method Code einer Methode ist genauso aussagekräftig wie Methoden-Name. Methoden-Code an Aufrufstelle ( inline ) direkt einsetzen. int getrating() { if (morethanfivelatedeliveries()) return 2; else return 1; boolean morethanfivelatedeliveries() { return thenumberoflatedeliveries > 5; int getrating() { if (thenumberoflatedeliveries > 5) return 2; else return 1; V-29 Inline Method: Schritte 1. Sicherstellen, dass Methode nicht in einer Vererbungshierarchie für Polymorphie benötigt wird (Indikator hierfür: Methode wird in Unterklasse re-definiert). 2. Alle Methodenaufrufe suchen und durch Methodenrumpf ersetzen. 3. Compilieren und Testen! 4. Methodefinition löschen Anmerkungen: Gegenteil von Extract Method Kein Widerspruch: alles was Code lesbarer macht, ist erlaubt! Funktioniert z.b. nicht für rekursive Methoden V-30
16 Replace Temp with Query Temporäre Variable wird nur einmal mit Zwischenergebnis belegt. Zwischenergebnis-Berechnung in Methode packen und diese aufrufen. double baseprice = thequantity * theitemprice; if (thequantity > 1000) return baseprice * 0.95; else return baseprice ; if (thequantity > 1000) return baseprice() * 0.95; else return baseprice() ; double baseprice() { return thequantity * theitemprice; Mehrfache Berechnung erscheint ineffizient, aber: Code wird modularer (und: temporäre Variable gespart) V-31 (Self) Encapsulate Field Direkter Zugriff auf public Attribut von außen (Encapsulate Field) Zugriff auf private Attribut innerhalb derselben Klasse / in Unterklasse soll sich z.b. Wert des private Attributes durch Berechnung ergeben (Self Encapsulate Field) Zugriffsmethoden (get/set) anlegen und Zugriffe durch Methodenaufruf ersetzen. class Person { public String thename; aperson.thename=""; class Person { private String thename; public String getname() { return thename; public void setname(string name) { thename=name; aperson.setname(""); V-32
17 Move Field Ein Attribut wird vorwiegend von einer anderen Klasse genutzt oder passt thematisch besser in andere Klasse. Attribut dorthin verlagern. class AccountType {... class AccountType { private double therate; void setrate(double rate) { therate=rate; double getrate() { return therate;... class Account { private AccountType thetype; private double therate; double ratefordays(int days) { return therate*days/365; class Account { private AccountType thetype; double ratefordays(int days) { return thetype.getrate()*days/365; V-33 Move Method Eine Methode benutzt mehr Methoden/Attribute einer anderen Klasse als aus der eigenen Klasse bzw. wird vorwiegend von anderer Klasse genutzt. Methode dorthin verlagern. class Person { int id; class Project { boolean participates(project p) { Person[] participants; for(int i=0;i<p.participants.length;i++) { if (p.participants[i].id == id) return(true);... if (aperson.participates return(false); (aproject)) class Project { Person[] participants; boolean hasparticipant(person x) { for(int i=0;i<participants.length;i++) { if (participants[i].id == x.id) return(true); return(false); class Person { int id;... if (aproject.hasparticipant (aperson)) V-34
18 Replace Conditional with Polymorphism Fallunterscheidung für unterschiedliches Verhalten in Abhängigkeit von einem Typ. Jeden Zweig der Fallunterscheidung in eine eigene Unterklasse verlagern und diese von gemeinsamer Klasse mit abstrakter Methode erben lassen. class Bird { double getspeed() { switch (thetype) { case AFRICAN: return getbasespeed() / thenumberofcoconuts; case EUROPEAN: return getbasespeed(); class Bird { abstract double getspeed(); class AfricanBird extends Bird { double getspeed() { return getbasespeed() / thenumberofcoconuts; class EuropeanBird extends Bird { double getspeed() { return getbasespeed(); V Stinkender Quelltext Wann Refactoring durchführen? Zeitpunkte: Bevor neue Funktionalität hinzugefügt werden soll: Weil dabei ein Blick auf den Quelltext ergibt, dass er schlecht zu ändern/erweitern ist. Bei der Fehlersuche: Weil man den Quelltext nicht (mehr) versteht. Immer, wenn man eine Funktionalität fertig implementiert hat: Refactoring nicht soweit hinauszögern, bis es weh tut. Das dann nötige große Refactoring ist aufwendiger, als die vielen kleinen, die man vorher problemlos hätte vornehmen können. Indikator, ob Refactoring überhaupt notwendig ist: Stinkender Quelltext ( Code Smells ) V-36
19 Gestank 1: Doppelter Code Doppelter Code ist schlechter zu ändern! Gleicher Quelltext ist mehrfach vorhanden: Extract Method Gleicher Quelltext ist mehrfach in parallelen Unterklassen vorhanden: Pull Up Method (nicht vorgestellt) V-37 Gestank 2: Lange Methode Lange Methoden sind schwierig zu verstehen! Generelle Abhilfe: Extract Method Falls viele temporäre Variablen: Replace Temp with Query V-38
20 Gestank 3: Verteilte Änderungen Eine Änderung betrifft viele Klassen. Zu ändernde Stellen in eine Klasse zusammenziehen: Move Method Move Field V-39 Gestank 4: Neid Eine Methode beschäftigt sich hauptsächlich mit einer anderen Klasse. Methode in andere Klasse schieben: Move Method Evtl. zuvor zu verschiebende Methode verkleinern: Extract Method V-40
21 Gestank 5: Switch-Anweisungen switch wird benutzt, um Typ-abhängig unterschiedliches Verhalten auszuführen. Switch isolieren: Extract Method Isolierte Methode in Oberklasse schieben: Move Method Polymorphie statt switch benutzen: Replace Conditional with Polymorphism V-41 Gestank 6: Kommentare Kommentare sind nicht prinzipiell schlecht, werden jedoch manchmal als Deo benutzt, um anderen Gestank zu überdecken. Statt Kommentar, der erklärt, was die nächsten Zeilen machen: Extract Method Falls extrahierte Methode dennoch einen Kommentar benötigt: Rename Method Falls kein anderer Gestank: Kommentar belassen! V-42
22 Mehr Gestank Für vorgestellte Code Smells kommen häufig noch weitere Refactorings in Frage. Weitere Code Smells bekannt. Beinhalten aber jeweils Refactorings als Abhilfe, die hier nicht vorgestellt wurden. Selber mal im Refactoring -Buch schmökern! V Werkzeugunterstützung Eclipse kann einige Refactorings automatisch durchführen: Codeblock/Bezeichner, der Refactoring unterzogen werden soll, markieren. Im Refactor -Menü das gewünschte Refactoring auswählen. Evtl. Dialog ausfüllen. Eclipse kümmert sich selber darum, dass Punkte der Checkliste abgearbeitet werden. Um Tests muss man sich jedoch selber kümmern. Bei automatisierten Refactorings sind Fehler allerdings unwahrscheinlicher als bei manuellen. Eclipse verwendet teilweise allgemeinere Namen für die Refactorings: Rename kann z.b. auf Methodennamen (=Rename Method) und Variablen (=Rename Variable) angewandt werden V-44
23 Werkzeugunterstützung, um Code-Smells zu erkennen Eclipse Metrics-Plugin berechnet statische Quelltextmetriken. Können bestimmt werden, ohne den Code auszuführen, z.b.: Lines of Code pro Methode, Schachtelungstiefe, Zyklomatische Komplexität nach McCabe. Außerdem existieren Werkzeuge, um nach dupliziertem Quelltext zu suchen. Werden wir in diesem Praktikum nicht einsetzen. Extract Method in Eclipse erkennt duplizierten Quelltext leider nicht. V-45 Zyklomatische Komplexität Von McCabe entworfene Metrik, die geeignet ist, um Spaghetti-Code aufzudecken. Umgangssprachliche Formulierung: Sequentielle Aneinanderreihung von Anweisungen hat die Komplexität 1 Jede Verzweigung oder Schleife erhöht Komplexität um 1 method1(a,b) FALSE block1 Def.: Zykl. Komplexität V für Ablaufgraphen G: V(G)=e-n+p Kante a>=b TRUE e=zahl der Kanten block3 n=zahl der Knoten FALSE p=zahl der Verbindungen nach außen (I.d.R. Single Entry Point, Exit Points entsprechend block4 Anzahl der return-anweisungen) Exitblock4 Point Beispiel: e=7, n=6, p=2. V(G)=3 V-46 a>b Entry- Point Knoten TRUE block2 Kante
24 9. Refactoring & Testen Unit-Tests sichern nicht nur Refactorings ab, Refactorings können es auch erforderlich machen, dass Unit-Tests angepasst werden müssen. Z.B.: Rename Method: Test müssen einbezogen werden. Extract Method: Methode wird erzeugt, für die kein Test existiert. Move Method: Tests für Ursprungsklasse schlagen fehl, Code in Zielklasse bleibt ungetestet. 2 Lösungsmöglichkeiten: Code-First: Erst Refactoring, dann Tests anpassen. Test-First: Erst Tests anpassen, dann Refactoring. Testgetriebenes Refactoring ist vorzuziehen, da Konsequenzen von Refactorings früher deutlich werden. V Zusammenfassung Quelltextabdeckung beim Testen wichtig: 100% Quelltextabdeckung garantiert aber immer noch nicht, dass Quelltext an sich vollständig ist und z.b. alle Sonderfälle abfängt! Refactoring: Systematische Umstrukturierung von Quelltext, ohne das Verhalten nach außen zu verändern. Nur ein Teil der bekannten Refactorings vorgestellt. Refactorings auch für Testfälle benutzen! Ebenso wie für Refactorings gibt es Kataloge mit guten Teil- Designs für Klassenarchitekturen (Entwurfsmuster) Gleicher Nutzen wie bei Refactoring-Katalog: Rad nicht ein zweites Mal erfinden. Gemeinsame Sprache (einheitliche Namen für Muster bzw. Refactoring). Z.B.: E. Gamma et. al. (GOF= Gang of Four ): Entwurfsmuster, Addison-Wesley, 1995 Refactorings können benutzt werden, um auf Entwurfsmuster hin zu arbeiten. V-48
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
MehrBinäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
MehrJava: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
MehrWhitebox-Tests: Allgemeines
-Tests: Allgemeines Andere Bezeichnungen Logic driven, Strukturelles Der Tester entwickelt Testfälle aus einer Betrachtung der Ablauflogik des Programms unter Berücksichtigung der Spezifikation Intuitiv
MehrKlassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java
Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte
MehrPrinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
MehrSoftwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch
Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen Alexander Schunk Henry Trobisch Inhalt 1. Vergleich der Unit-Tests... 2 2. Vergleich der Codeabdeckungs-Tests... 2 3. Vergleich
MehrLineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
MehrSEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
MehrFolge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12
Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrObjektorientierte Programmierung. Kapitel 12: Interfaces
12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/
MehrJava Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
MehrSoftware Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
MehrSoftware Engineering Interaktionsdiagramme
Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)
MehrProfessionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
MehrProgrammieren in Java
Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
MehrQt-Projekte mit Visual Studio 2005
Qt-Projekte mit Visual Studio 2005 Benötigte Programme: Visual Studio 2005 Vollversion, Microsoft Qt 4 Open Source s. Qt 4-Installationsanleitung Tabelle 1: Benötigte Programme für die Qt-Programmierung
MehrÜbung: Verwendung von Java-Threads
Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
MehrDatensicherung. Beschreibung der Datensicherung
Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten
MehrProjektmanagement. Vorlesung von Thomas Patzelt 9. Vorlesung
Projektmanagement Vorlesung von Thomas Patzelt 9. Vorlesung 1 Pläne Kein Plan überlebt die erste Feindberührung - Feldmarschall Helmuth von Moltke Prognosen sind schwierig, besonders wenn sie die Zukunft
MehrProbeklausur Softwareengineering SS 15
Probeklausur Softwareengineering SS 15 Hinweis: Die Bearbeitungsdauer entspricht dem Punktewert. Aufgabe 1 (10 min) Beschreiben Sie das Vorgehensmodell Test-Driven-Development (TDD) a) Erläutern Sie das
MehrKomponententest. Testen von Software Systemen. Übung 02 SS 2009 Version: 1.0 09.06.2009
Testen von Software Systemen Übung 02 SS 2009 Version: 1.0 09.06.2009 Komponententest Kunde: Dr. Reinhold Plösch Dr. Johannes Sametinger Kundenreferenz: 259.019 Team 19 Mitarbeiter: Christian Märzinger
MehrStellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster
Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.
Mehr1 Vom Problem zum Programm
Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren
MehrOnline Newsletter III
Online Newsletter III Hallo zusammen! Aus aktuellem Anlass wurde ein neuer Newsletter fällig. Die wichtigste Neuerung betrifft unseren Webshop mit dem Namen ehbshop! Am Montag 17.10.11 wurde die Testphase
MehrDas Leitbild vom Verein WIR
Das Leitbild vom Verein WIR Dieses Zeichen ist ein Gütesiegel. Texte mit diesem Gütesiegel sind leicht verständlich. Leicht Lesen gibt es in drei Stufen. B1: leicht verständlich A2: noch leichter verständlich
Mehr1 Konto für HBCI/FinTS mit Chipkarte einrichten
1 Konto für HBCI/FinTS mit Chipkarte einrichten Um das Verfahren HBCI/FinTS mit Chipkarte einzusetzen, benötigen Sie einen Chipkartenleser und eine Chipkarte. Die Chipkarte erhalten Sie von Ihrem Kreditinstitut.
MehrDas große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten
Das große x -4 Alles über das Wer kann beantragen? Generell kann jeder beantragen! Eltern (Mütter UND Väter), die schon während ihrer Elternzeit wieder in Teilzeit arbeiten möchten. Eltern, die während
MehrClient-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
MehrDiese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.
Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,
MehrÜbungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen
Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe
MehrAbamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER
Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos in Verbindung mit der Webshopanbindung wurde speziell auf die Shop-Software shop to date von DATA BECKER abgestimmt. Mit
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
Mehr1. Software installieren 2. Software starten. Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software
1. Software installieren 2. Software starten Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software 3. Auswahl 1. Neues Fotobuch erstellen oder 2. ein erstelltes, gespeichertes Fotobuch laden und bearbeiten.
MehrSource Code Konverter... 2. Online: (VB.net <-> C#)... 3. Kommerzielle Produkte (VB, C#, C++, Java)... 3. Code Nachbearbeitung in der Praxis...
Autor: Thomas Reinwart 2008-05-05 office@reinwart.com Inhalt Source Code Konverter... 2 Online: (VB.net C#)... 3 Kommerzielle Produkte (VB, C#, C++, Java)... 3 Code Nachbearbeitung in der Praxis...
MehrJava Entwicklung für Embedded Devices Best & Worst Practices!
Java Entwicklung für Embedded Devices! George Mesesan Microdoc GmbH Natürlich können wir dieses neue log4j Bundle auch auf dem Device verwenden. Ist doch alles Java. Java Micro Edition (ME) Java Standard
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)
MehrFotostammtisch-Schaumburg
Der Anfang zur Benutzung der Web Seite! Alles ums Anmelden und Registrieren 1. Startseite 2. Registrieren 2.1 Registrieren als Mitglied unser Stammtischseite Wie im Bild markiert jetzt auf das Rote Register
MehrUrlaubsregel in David
Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5
MehrDiplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008
Konzeption und Implementierung einer automatisierten Testumgebung, 10. Dezember 2008 1 Gliederung Einleitung Softwaretests Beispiel Konzeption Zusammenfassung 2 Einleitung Komplexität von Softwaresystemen
MehrFolge 18 - Vererbung
Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,
Mehr5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:
MehrWir arbeiten mit Zufallszahlen
Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten
Mehr(im Rahmen der Exchange-Server-Umstellung am 15.-17.04.2005)
Outlook-Umstellung (im Rahmen der Exchange-Server-Umstellung am 15.-17.04.2005) Die Umstellung des Microsoft Mailserver-Systems ntmail (Exchange) erfordert vielfach auch eine Umkonfiguration des Programms
MehrDas System sollte den Benutzer immer auf dem Laufenden halten, indem es angemessenes Feedback in einer angemessenen Zeit liefert.
Usability Heuristiken Karima Tefifha Proseminar: "Software Engineering Kernkonzepte: Usability" 28.06.2012 Prof. Dr. Kurt Schneider Leibniz Universität Hannover Die ProSeminar-Ausarbeitung beschäftigt
MehrObjektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
MehrBilder zum Upload verkleinern
Seite 1 von 9 Bilder zum Upload verkleinern Teil 1: Maße der Bilder verändern Um Bilder in ihren Abmessungen zu verkleinern benutze ich die Freeware Irfan View. Die Software biete zwar noch einiges mehr
Mehrecaros2 - Accountmanager
ecaros2 - Accountmanager procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Aufruf des ecaros2-accountmanager...3 2 Bedienung Accountmanager...4 procar informatik AG 2 Stand: FS 09/2012 1 Aufruf
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)
MehrMit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.
Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen
Mehr40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.
40-Tage-Wunder- Kurs Umarme, was Du nicht ändern kannst. Das sagt Wikipedia: Als Wunder (griechisch thauma) gilt umgangssprachlich ein Ereignis, dessen Zustandekommen man sich nicht erklären kann, so dass
MehrKlausur zur Einführung in die objektorientierte Programmierung mit Java
Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-
MehrWordPress. Dokumentation
WordPress Dokumentation Backend-Login In das Backend gelangt man, indem man hinter seiner Website-URL einfach ein /wp-admin dranhängt www.domain.tld/wp-admin Dabei gelangt man auf die Administrationsoberfläche,
MehrReporting Services und SharePoint 2010 Teil 1
Reporting Services und SharePoint 2010 Teil 1 Abstract Bei der Verwendung der Reporting Services in Zusammenhang mit SharePoint 2010 stellt sich immer wieder die Frage bei der Installation: Wo und Wie?
MehrKleines Handbuch zur Fotogalerie der Pixel AG
1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link
MehrSie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger
Den Speicherplatz wechseln oder eine Sicherungskopie erstellen. Es lässt sich nicht verhindern. Manche Sachen liegen am falschen Platz, können gelöscht werden oder man will vor der Bearbeitung eine Sicherungskopie
MehrGrundlagen der Theoretischen Informatik, SoSe 2008
1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)
Mehr5. Tutorium zu Programmieren
5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting
MehrWas meinen die Leute eigentlich mit: Grexit?
Was meinen die Leute eigentlich mit: Grexit? Grexit sind eigentlich 2 Wörter. 1. Griechenland 2. Exit Exit ist ein englisches Wort. Es bedeutet: Ausgang. Aber was haben diese 2 Sachen mit-einander zu tun?
MehrAlbert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen
Open Source professionell einsetzen 1 Mein Background Ich bin überzeugt von Open Source. Ich verwende fast nur Open Source privat und beruflich. Ich arbeite seit mehr als 10 Jahren mit Linux und Open Source.
MehrOutlook Vorlagen/Templates
Joachim Meyn Outlook Vorlagen/Templates Erstellen Sie Vorlagen bzw. Templates in Outlook Joachim Meyn 27.03.2013 Inhaltsverzeichnis Outlook Vorlagen (.oft Dateien)... 2 Vorbereitung... 2 Anlegen einer
Mehr.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage
.htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess
MehrDas Persönliche Budget in verständlicher Sprache
Das Persönliche Budget in verständlicher Sprache Das Persönliche Budget mehr Selbstbestimmung, mehr Selbstständigkeit, mehr Selbstbewusstsein! Dieser Text soll den behinderten Menschen in Westfalen-Lippe,
MehrTesten mit JUnit. Motivation
Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen
Mehr15 Optimales Kodieren
15 Optimales Kodieren Es soll ein optimaler Kodierer C(T ) entworfen werden, welcher eine Information (z.b. Text T ) mit möglichst geringer Bitanzahl eindeutig überträgt. Die Anforderungen an den optimalen
Mehr.NET Code schützen. Projekt.NET. Version 1.0
.NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll
Mehr! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006
!"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst
MehrArchiv - Berechtigungen
Archiv - Berechtigungen - 1 Inhaltsverzeichnis 1. Grunddefinitionen...3 1.1. Mögliche Definitionen...3 1.1.1. Programme...3 1.1.2. Prinzipale...3 1.1.3 Archivzugriff...3 1.2. Leserichtung...3 1.2.1. Ordnerbezogen...3
MehrLeichte-Sprache-Bilder
Leichte-Sprache-Bilder Reinhild Kassing Information - So geht es 1. Bilder gucken 2. anmelden für Probe-Bilder 3. Bilder bestellen 4. Rechnung bezahlen 5. Bilder runterladen 6. neue Bilder vorschlagen
MehrSuche schlecht beschriftete Bilder mit Eigenen Abfragen
Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere
MehrAZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"
AZK 1- Freistil Nur bei Bedarf werden dafür gekennzeichnete Lohnbestandteile (Stundenzahl und Stundensatz) zwischen dem aktuellen Bruttolohnjournal und dem AZK ausgetauscht. Das Ansparen und das Auszahlen
MehrAgile Software Development
Dipl. Wirtsch. Ing. Alexander Werth Methoden der Softwareentwicklung 6-1 Agile Manifest Individuen und Interaktion statt Prozessen und Tools. Funktionierende Software statt umfangreicher Dokumentation.
MehrJavadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck
Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle
MehrL10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016
L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele
Mehr5. Abstrakte Klassen
5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,
MehrProjektmanagement in der Spieleentwicklung
Projektmanagement in der Spieleentwicklung Inhalt 1. Warum brauche ich ein Projekt-Management? 2. Die Charaktere des Projektmanagement - Mastermind - Producer - Projektleiter 3. Schnittstellen definieren
MehrEigenen Farbverlauf erstellen
Diese Serie ist an totale Neulinge gerichtet. Neu bei PhotoLine, evtl. sogar komplett neu, was Bildbearbeitung betrifft. So versuche ich, hier alles einfach zu halten. Ich habe sogar PhotoLine ein zweites
MehrTest-Driven Design: Ein einfaches Beispiel
Test-Driven Design: Ein einfaches Beispiel Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 2 Ziele Veranschaulichung der Technik des Test-Driven Design am Beispiel eines Programms
Mehrlohmeyer White Paper Use Cases II UX+Prozessanalyse
White Paper Use Cases II Use Cases begleiten uns in der IT seit mehr als 15 Jahren. Nichtsdestotrotz ist es nicht so einfach, Use Cases einfach und verständlich zu schreiben. Dieses White Paper spricht
MehrAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
C A R L V O N O S S I E T Z K Y Agile Vorgehensmodelle in der Softwareentwicklung: Scrum Johannes Diemke Vortrag im Rahmen der Projektgruppe Oldenburger Robot Soccer Team im Wintersemester 2009/2010 Was
MehrHandbuch B4000+ Preset Manager
Handbuch B4000+ Preset Manager B4000+ authentic organ modeller Version 0.6 FERROFISH advanced audio applications Einleitung Mit der Software B4000+ Preset Manager können Sie Ihre in der B4000+ erstellten
MehrObjektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
MehrDer Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
MehrErstellen einer GoTalk-Auflage
Erstellen einer GoTalk-Auflage 1. Bei dem Startbild Vorlage öffnen wählen 2. In dem folgenden Fenster Geräte Schablonen doppelt anklicken. - und schon öffnet sich der gesamte Katalog der verfügbaren Talker-Auflagen...eigentlich
MehrKurzanleitung zu. von Daniel Jettka 18.11.2008
Kurzanleitung zu Tigris.org Open Source Software Engineering Tools von Daniel Jettka 18.11.2008 Inhaltsverzeichnis 1.Einführung...1 2.Das Projektarchivs...3 2.1.Anlegen des Projektarchivs...3 2.2.Organisation
MehrDie Excel Schnittstelle - Pro Pack
Die Excel Schnittstelle - Pro Pack Die Excel Pro Pack ist eine Erweiterung der normalen Excel Schnittstelle, die in der Vollversion von POSWare Bestandteil der normalen Lizenz und somit für alle Lizenznehmer
MehrDie Post hat eine Umfrage gemacht
Die Post hat eine Umfrage gemacht Bei der Umfrage ging es um das Thema: Inklusion Die Post hat Menschen mit Behinderung und Menschen ohne Behinderung gefragt: Wie zufrieden sie in dieser Gesellschaft sind.
MehrSAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: 727026 :: WINTERSEMESTER 08 09
SAMMEL DEINE IDENTITÄTEN::: :: IDEE :: Ich selbst habe viele verschiedene Benutzernamen und Passwörter und wenn ich mir diese nicht alle aufschreiben würde, würde ich alle durcheinander bringen oder welche
MehrWie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.
Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann. Einleitung Es kommt vor, dass im Handel Disketten angeboten werden, die Styles und Registrationen
Mehr1 topologisches Sortieren
Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung
MehrLayoutmodelle. Steffen Schwientek Große Klostergasse 5 61169 Friedberg Email:schwientek@web.de Web :schlaukopp.org
Layoutmodelle HTML wurde von ihren Erfindern nicht als Layoutsprache entworfen, sondern zur Informationsübermittlung entworfen Es gab verschiedene Modelle, welche das Web populär machten und. Bei Erstellung
MehrInstallationsanleitung Maschinenkonfiguration und PP s. Release: VISI 21 Autor: Anja Gerlach Datum: 18. Dezember 2012 Update: 18.
Installationsanleitung Maschinenkonfiguration und PP s Release: VISI 21 Autor: Anja Gerlach Datum: 18. Dezember 2012 Update: 18.Februar 2015 Inhaltsverzeichnis 1 Einbinden der Postprozessoren... 3 1.1
MehrFachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6
Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in
MehrKlassendefinitionen verstehen
Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen
MehrSCHNELLEINSTIEG ZUM TOOL NODEBUILDER
Fakultät Informatik, Institut für Angewandte Informatik, Professur Technische Informationssysteme SCHNELLEINSTIEG ZUM TOOL NODEBUILDER Betreuer: Dipl.-Ing. A. Cemal Özlük Dipl.-Inf. Uwe Ryssel ALLGEMEINE
MehrSysteme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss
Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige
Mehr