JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=6d132947db2c3b8ae84c5ac2bc7c60b1Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Testgetriebene Programmierung
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 29.04.2006, 11:38    Titel: Testgetriebene Programmierung Antworten mit Zitat

Servus allerseits,

ich wollte euch mal mit Testgetriebener Programmierung vertraut machen.
Wie mache sicher wissen bastel ich an einem web Framework für Java und bind darüber auf diese Methode gestoßen.

Kurz beschrieben funktioniert da ganze so (wikipedia):

1. Schreibe einen kleinen Test für den nächsten zu implementierenden Funktionalitätshappen. Dieser Test sollte nicht funktionieren.
2. Erfülle den Test mit möglichst wenig Code, um schnell wieder zum "grünen Balken" (alle Tests laufen) zurückzukehren.
3. Räume den Code auf, dazu gehört die Entfernung von Duplikation, Einführung von notwendigen Abstraktionen und Umsetzen der Codekonventionen. Ziel dieses Aufräumens ist die einfache Form des Codes.

Am Anfang war ich ziemlich skeptisch und hab das ganze für totalen Schwachsinn gehalten. Wie soll ich etwas testen was ich noch nichtmal geschrieben habe? Aber dann habe ich das Buch "Testgetriebene Entwicklung mit JUnit und FIT" gelesen und war nach ca 10 Seiten absoluter Test-Junkie.

Spontan habe ich angefangen das ganze auf mein Projekt anzuwenden und bin ziemlich begeistert von den Methoden. Ich habe das Projekt in kleine Häppchen aufgeteilt. U.a. ein sog. ServiceManager welcher dafür zuständig ist Services zu laden, starten, und Abhängigkeiten unter ihnen zu verwalten.
Anstatt einfach eine Klasse dafür zu Programmieren schreibt man einen Test der vllt so ausschaut:
Code:
class ServiceManagerTest
{
    public void testServiceLoading()
    {
        ServiceManager manager = new ServiceManager(); // erzeuge Manager
        manager.registerService("test", TestService.class); // füge einen Service hinzu
        manager.initializeServices(); // erzeuge Services
        TestService testService = (TestService)manager.getService("test"); // hold dein service
        assertNotNull(testService); // wir nehmen an dass der Service nicht NULL ist. wenn doch schlägt der test fehl.
    }
}

Natürlich existiert die Klasse ServiceManager noch nicht und der Test schlägt fehl. Also erzeuge ich die klasse und Implementiere die Methoden so simpel wie möglich. z.B. so:
Code:

class ServiceManger
{
    ...
    public Service getService(String name)
    {
        return new TestService();
    }
}

Natürlich eigentlich eine total Dumme und falsche Implementierung, aber der Test funktioniert nun.
Also erweitert man den Test z.B. um einen zweiten Service, und erweitert wieder die Implementierung usw usw.

Klingt etwas blöde, aber so erreicht man eine TestSuite mit Tests die fast jeden erdenklichen Fehler der auftreten könnte abdeckt.
Sollte man im späteren verlauf der Entwicklung an die 100 Klassen und ca 1000 Test fällen noch ein Fehler im ServiceManager finden, so weiß man nach dem Beheben des Fehlers (den man natürlich mit einem Test beschreibt) ob die gesamte Funktionalität des projekts noch so läuft wie sie soll. Einfach indem man alle Testfälle nochmal startet und sieht dass alle Tests noch funktionieren.

Nicht nur das ist ein Vorteil. Was mir besonders daran gefällt ist die Motivation die von dem grünen Balken (der anzeigt ob alle Tests erfolgreich sind oder nicht) ausgeht.
Man bekommt alle paar Minuten das Gefühl "Hey das funktioniert ja alles Very Happy" wenn ein weiterer Testfall erfolgreich läuft.
Man muss nicht warten bis das halbe Projekt fertig ist (vor allem bei Spielen/Engines kennt ihr das sicher, man programmiert wochen an dem Grundgerüst und hat grad mal nen schwarzes Fenster als einziges Feedback).

Also ich kann allen nur mal empfehlen sich das genauer anzuschauen. (Hab es auch nur durch einen Freund per ICQ entdeckt und hab ihn spontan für bekloppt erklärt Wink bis ich das Buch gelesen habe).

Links:
Das Buch: http://www.frankwestphal.de/TestgetriebeneEntwicklungmitJUnitundFIT.html

Ein guter Auszug aus dem Buch:
http://www.frankwestphal.de/TestgetriebeneEntwicklung.html

Wikipedia:
http://de.wikipedia.org/wiki/Testgesteuerte_Programmierung

schauts euch mal an. Testgetriebene Programmierung ist schlichtweg cool Wink es motiviert, gibt einem Sicherheit und erhöht die Qualität des Produkts.

gruß
xardias
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.04.2006, 13:21    Titel: Antworten mit Zitat

Du bist verrückt Twisted Evil

*lol* nein...hab mich mal ein bisschen in das Thema eingelesen und finde es ziemlich interessant Smile
Wenn ich mich nicht irre, wird dieses Testsystem sogar bei den Coding4Fun-Videotuts eingesetzt.

Ich bin mir jetzt noch nicht sicher, ob ich es richtig verstanden habe, aber wäre diese Methodik nicht mit einem (evtl. etwas veränderten aber auf jeden Fall) ausgeprägten Logging-System zu vergleichen?
Die Implementierung finde ich auf den ersten Blick etwas komisch und umständlich. Aber wäre es nicht genauso möglich - ohne für jeden einzelnen Test eine neue Testklasse inklusive Testrumpf schreiben zu müssen - das direkt einzubauen?
Also praktisch Pseudocode...:
CPP:
float number=256.0f;

float radicial=CalcRad(number);

//Test der Wurzelfunktion
Test(radicial,16.0f);


float sqare=CalcSquare(number);

//Test der Quadratfunktion
Test(sqare,65536.0f);


So müsste man den Code nicht ständig in den Testklassen auslagern, sondern hat ihn immer noch kompakt und zusammenhängend im Programm. Die Tests werden einfach wo gebraucht eingeschoben(sie ähneln ja der assert()-Funktion[bzw. -Makro?]) und wenns nicht stimmt, wird ein Fehler ausgegeben/in eine Logdatei notiert/whatever. Natürlich fehlt hier jetzt noch ein ausführliches Dokusystem, mit dem man auch erkennt, wo genau die Tests verankert sind.
Aber wäre ein solches System nicht wesentlich einfacher handzuhaben?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jones
Senior JLI'ler


Alter: 33
Anmeldedatum: 03.03.2005
Beiträge: 208
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 29.04.2006, 13:43    Titel: Antworten mit Zitat

Du irrst dich nicht Lord of Programming, diese Technik wird in den Coding4Fun Videos eingesetzt und das ist auch gut so. Ich schreib im moment ein 2D Engine in C# und da ist es, wie xadrias schon gesgat hat, viel motivierender weil man sieht was man geschaffen hat Smile
edit: für .NET Sprachen gibt es das NUnit Framework zum testen


Zuletzt bearbeitet von Jones am 29.04.2006, 13:53, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 29.04.2006, 13:45    Titel: Antworten mit Zitat

@TLoP
Ich finde es wesentlich unübersichtlicher, wenn die Tests kreuz und quer mitten im Programmcode verstreut sind.

Man wird die erstellten Klassen sicher mehr als einmal benutzen. Soll man dann für jede Implementierung den Testcode mit einbinden!? Dadurch wird der Code doch nur unnötig aufgeblasen.

Ich finde die Idee mit den Testfunktionen auf den ersten Blick interessant. Außerdem wird der liebe Compiler die Testfunktionen im fertigen Programm nicht mitkompilieren, sofern sie nie benutzt werden. Smile

edit: Ich hab den Thread mal nach Entwicklung geschoben, sonst wird er noch Opfer des Prunings.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 29.04.2006, 15:01    Titel: Antworten mit Zitat

Ich habe schon häufiger Test-Klassen für einzelne Klassen, die ich programmiert habe, geschrieben. Allerdings habe ich diese immer nachher geschrieben.

In meinem Informatik Studium wurde uns die Test-Getriebene-Entwicklung mit JUnit auch beigebracht. Wir sollen da ständig Test-Klassen für alles mögliche erstellen. Ich habe noch nicht viel Erfahrung mit dieser Art der Programmierung. Mal sehen, wie sich das so entwickelt.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 29.04.2006, 17:31    Titel: Antworten mit Zitat

Naja, tests wird jeder schonmal geschrieben haben. Aber bei der Testgetriebenen Entwicklung steht das im Mittelpunkt.
Das heißt nicht dass man mehr Zeit mit Tests verbringt als mit dem Programmieren, aber man nutzt die Tests praktisch dazu zu definieren was genau das Feature welches man implementiert an Funktionen haben muss und wie es sich in Fehlerfällen verhält.

Wie gesagt ich fand es Anfangs auch nicht so toll. Aber wenn man sich mal darauf eingelassen hat statt studenlang über ein design zu grübeln einfach mit einem simplen Test ganz unten anzufangen und sich langsam nach oben hinnauf zu arbeiten dann funktioniert das sehr gut.
Die erfüllten Tests motivieren einen weil man das Gefühl hat dass man etwas funktionstüchtiges geschafft hat und man macht sich viel mehr Gedanken darum wie genau das Verhalten der Klasse eigentlich definiert sein soll.

Natürlich trenne ich auch Test und Anwendungs Code in 2 verschiedene Source Ordner.
Wer mal schauen will:
http://svn.dev-area.net/screws/core/src/
im main Ordner ist der Anwendungs Code und um im Test Ordner sind die Test Klassen. Bisher auch nur zum ServiceManager.

PS: Es soll sogar Leute geben die wenn sie eine Bibliothek verwenden statt die Dokumentation zu lesen sich die Test Klassen anschauen ^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 01:40    Titel: Antworten mit Zitat

xardias hat Folgendes geschrieben:
Natürlich trenne ich auch Test und Anwendungs Code in 2 verschiedene Source Ordner.

Hmm...heißt das, dass du den Code im Prinzip zweimal hast, einmal fest im Programm und einmal für den Test?
Ich kann mich immer noch nicht so ganz mit der Methode anfreunden, wenn es bedeutet, dass man das so, finde ich, umständlich in eine Klasse verpacken muss, die man in der Releaseversion hinterher gar nicht mehr braucht.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 10:01    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
xardias hat Folgendes geschrieben:
Natürlich trenne ich auch Test und Anwendungs Code in 2 verschiedene Source Ordner.

Hmm...heißt das, dass du den Code im Prinzip zweimal hast, einmal fest im Programm und einmal für den Test?
Ich kann mich immer noch nicht so ganz mit der Methode anfreunden, wenn es bedeutet, dass man das so, finde ich, umständlich in eine Klasse verpacken muss, die man in der Releaseversion hinterher gar nicht mehr braucht.

Naja in Java ist das mit den Klassen auch was einfacher zu handhaben als in C++.
Aber den code habe ich immer noch nur einmal.
Im main ordner ist der Anwendungs Code. Beim Release wird nur der kompiliert und gepackt.
Lasse ich jedoch die Tests laufen werden Anwendungs Code und Test Code zusammen kompiliert (also die Test Klassen praktisch hinzugefügt) und dann die Tests ausgeführt.

Letztenendes läuft das natürlich darauf hinnaus dass man fast doppelt so viel Code schreiben muss als wenn man keine Tests schreiben würde. Aber bei den Vorteilen die man dadurch erlangt nehme ich das gerne in Kauf.

Was mir bei dem Framework was ich programmiere im letzten jahr immer passiert ist, ist dass ich bestimmte Features bei der Planung vergessen hatte. Dann habe ich diese Features irgendwie da rein gehackt und nach dem 10ten Hack war das ganze Framework ein einziger flickentepich und die hälfte war kaputt Wink Das passiert einem mit testgetriebener Programmierung nicht.

Natürlich brauchst du die Test Klassen nicht in der release version. Die sind nur dafür da festzustellen dass das Programm das tut was es soll.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 21:50    Titel: Antworten mit Zitat

Joah, hört sich gut an. Bei uns im Geschäft wird auch Wert darauf gelegt, dass man einzelne Module schreibt, erst als stub/black box/etc, und dann für Implementierung sorgt, die einzeln und gesamt getestet wird, um Fehler herauszufiltern. Klar sieht dein Konzept da anderst aus, nur kann ich mir schwer vorstellen, wie das funktionieren soll, wenn man im Projekt feste Vorgaben hat. Daheim und Privat werd ichs mir nun auch mal anschauen, aber im Betrieb gibts nen Pflichtenheft und ne deadline, ausserdem will der Chef schöne Struktogramme/UML/Flussdiagramme/etc. sehen, da wäre dann die Frage, ob dort solche bottom-up-Konzepte ebenfalls einsetzbar wären...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 01:28    Titel: Antworten mit Zitat

So kann das funktionieren:
http://www.gamesfromwithin.com/articles/0603/000107.html

oder im Arbeitsalltag:
http://www.gamesfromwithin.com/articles/0602/000104.html
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 15:02    Titel: Antworten mit Zitat

proggaholic hat Folgendes geschrieben:
Joah, hört sich gut an. Bei uns im Geschäft wird auch Wert darauf gelegt, dass man einzelne Module schreibt, erst als stub/black box/etc, und dann für Implementierung sorgt, die einzeln und gesamt getestet wird, um Fehler herauszufiltern. Klar sieht dein Konzept da anderst aus, nur kann ich mir schwer vorstellen, wie das funktionieren soll, wenn man im Projekt feste Vorgaben hat. Daheim und Privat werd ichs mir nun auch mal anschauen, aber im Betrieb gibts nen Pflichtenheft und ne deadline, ausserdem will der Chef schöne Struktogramme/UML/Flussdiagramme/etc. sehen, da wäre dann die Frage, ob dort solche bottom-up-Konzepte ebenfalls einsetzbar wären...


In dem Buch das ich gelesen habe gibt es auch Kapitel zu Test Frameworks welche von den Auftraggebern bedient werden könnten. Damit können diese die Anforderungen beschreiben.

Und zu den Deadlines. eclipse ist eines der wenigen open source projekten das seit Jahren jede Deadline einhält, und die machens auch testgetrieben ;D
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 16:17    Titel: Antworten mit Zitat

hmmm, gut, also wenn die Technik das entsprechende Potential hat (wie es ja den Anschein hat), wird es sich auch durchsetzen...hoffentlich auch bei uns ;)

xardias
Gibt es eigentlich auch noch andere empfehlenswerte Bücher in diese Richtung? Ich hab ein bisschen umhergeschaut und ausser dem von dir vorgestellten kein weiteres entdecken können, das sich hauptsächlich damit beschäftigt...oder ist es noch zu neu?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.05.2006, 00:33    Titel: Antworten mit Zitat

Da ich glaube, dass der Ansatz und nicht die Umsetzung hier entscheidend ist, hab ich mir mal eine kleine Utility geschrieben. Mir gefällt das irgendwie nicht so ganz mit dem Auslagern in Klassen etc...

Jedenfalls kann man es jetzt so benutzen(habe ein Beispiel aus einem von PeaceKiller geposteten Link gewählt und nach meiner Umsetzung abgeändert):
CPP:
World world;
const initialHealth = 60;
Player player(initialHealth);

__test("HealthAssignation",player.GetHealth()==60);

world.Add(&player, Transform(AxisY, 0, Vector3(10,0,10)));
HealthPowerup powerup;
world.Add(&powerup, Transform(AxisY, 0, Vector3(-10,0,20)));
world.Update(0.1f);
//CHECK_EQUAL(initialHealth, player.GetHealth());
__test("HealthAssignation",player.GetHealth()==60+25);

Der Vorteil davon ist IMHO, dass ich selbst die Entscheidung habe, ob ich den Code jetzt auslagere oder nicht. Wenn mir das zu unübersichtlich wird, kann ich das immer noch in extra Testfunktionen packen. Aber dafür brauche ich nicht diese - wie ich finde - umständliche Klassenimplementierung Smile
Aber den Ansatz, dass man vom bestehenden Test zum Code hin und nicht umgekehrt arbeitet, finde ich recht interessant und ich werde mal schauen, inwieweit mir das in Zukunft helfen wird. =)
Ist natürlich noch verbesserungswürdig, da ichs nur ziemlich schnell zusammengeschrieben hab, aber ich bekomme jetzt schon auf Anforderung eine Ausgabe, die mir genau anzeigt, welche Tests wo genau im Code ablaufen, wann sie ablaufen, wie genau die Testbedingung aussieht und natürlich ob er erfolgreich war oder fehlgeschlagen ist, ohne dass mehr Informationen nötig wären als die eine Zeile, bei der man Testname&Testbedingung angibt.
Hab auf jeden Fall vor, das während meiner nächsten Projekte sogar zu so einer Art NUnit auszubauen, sodass ich die Informationen hinterher bequem über eine Windows-GUI auswerten kann...mit tollen grünen und roten Balken Razz
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 08.05.2006, 10:20    Titel: Antworten mit Zitat

Ist auf jeden Fall ein guter Ansatz, aber das Ziel der Testgetriebenen Programmeirung ist es ja kontrollierte Testfälle zu entwickeln, daher ist es dort schon wichtig den Test Code auszulagern, indem man einzelne kleine Komponenten gesondert testet.
Dann kann man davon Ausgehen, dass diese Komponenten ein genau definiertes Verhalten haben und diese so nutzen.
Wenn man die Tests erst bei der Verwendung macht verfehlt man damit eigentlich das Ziel der testgetriebenen Programmierung, da man dort ja auch die Tests VOR dem code schreibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.05.2006, 21:12    Titel: Antworten mit Zitat

xardias hat Folgendes geschrieben:
Dann kann man davon Ausgehen, dass diese Komponenten ein genau definiertes Verhalten haben und diese so nutzen.

Hmm...was mir bei dieser Sache immer wieder durch den Kopf gegangen ist: Wenn man sich diese Tests genauso festlegt, dass sie eigentlich (im Normalfall!) wenn man keinen Blödsinn zusammenprogrammiert hat, immer laufen sollten, kann das dann nicht manchmal relativ sinnlos sein?
Ich finde gerade das wichtige, dass man die Tests im Programm lässt(zumindest zusätzlich zu ausgelagerten Wink ), damit genau dieses "definierte Verhalten" nicht automatisch vorgegeben ist. Was bringt mir ein definiertes Verhalten, wenns im Test richtig abläuft, aber im Programm durch irgendeinen anderen Faktor(der nicht im Test ist), fehlschlägt/undefiniertes Verhalten hervorruft? Confused
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum