# Test von nebenläufigen Anwendungen



## Jenny (27. Jun 2008)

Hallo, 

ich möchte nebenläufige Anwendungen testen bzw. am Besten testgetrieben entwickeln. Hab mir jetzt einige Frameworks angesehen und finde z.B. MultithreadedTC und GroboUtils interessant. Weiß aber nicht so richtig wie man da Tests schreibt die zum Beispiel den Code auf Deadlocks oder Race Conditions prüfen. 

Kann mal jemand einen guten Link oder Beispiel Code einstellen? Oder gibt es noch andere Frameworks um solche Anwendungen zu testen? Bin für jeden Tipp dankbar!

Achso mal ein kleines Beispiel für einen Code mit Deadlock den ich gerne Testen möchte.


```
public class Deadlock {

    private static ClassA classA = new ClassA();

    private static ClassB classB = new ClassB();

    public static void methodOne() {
        synchronized (classA) {
            try {
                Thread.sleep(50);
            } catch (final InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            synchronized (classB) {
                System.out.println("Do something methodOne");
            }
        }
    }

    public static void methodTwo() {
        synchronized (classB) {
            try {
                Thread.sleep(50);
            } catch (final InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            synchronized (classA) {
                System.out.println("Do something methodTwo");
            }
        }
    }

    public static void main(final String[] args) {

        final Thread thread1 = new Thread() {
            @Override
            public void run() {
                methodOne();
            }
        };

        final Thread thread2 = new Thread() {
            @Override
            public void run() {
                methodTwo();
            }
        };

        thread1.start();
        thread2.start();
    }
}
```


----------



## Kim Stebel (27. Jun 2008)

hast du dir mal
http://code.google.com/p/multithreadedtc/wiki/Overview
angeguckt?
Damit sollte es eigentlich klar sein. Probier es zumindest mal und poste deine Versuche...


----------



## Jenny (28. Jun 2008)

Ja das habe ich mir bereits angesehen. Trotzdem ist mir nicht klar wie ich damit testen kann, ob mein Code Deadlocks usw. enthält! Was gibt es da dann für eine Ausgabe: "Deadlock in line sowieso gefunden"?? kannst du mir da vielleicht ein geeigneteres Code Beispiel geben, als auf dieser Seite? Also wo man sehen kann wie das genau gemacht wird...


----------



## Kim Stebel (28. Jun 2008)

Ganz so einfach geht es leider nicht. Ob ein Deadlock auftritt, hängt ja davon ab, in welcher Reihenfolge die Anweisungen der verschiedenen Threads tatsächlich ausgeführt werden. Mit multithreadedtc kannst du nichts weiter machen als diese Reihenfolge festlegen. Das prüfen auf deadlocks bleibt immernoch dir überlassen. Das einfachste wird da wohl sein, ein paar Sekunden in einem anderen Thread zu warten, ob die zu testenden Threads fertig werden oder nicht.
Wozu willst du das überhaupt machen? Es gibt doch weniger umständliche Wege, Deadlocks zu vermeiden....
Für race conditions scheint mir das schon besser geeignet zu sein.


----------



## Jenny (29. Jun 2008)

Na das ist Thema einer Arbeit. Das Problem ist halt, dass man nicht wirklich viel dazu findet wie man nebenläufige Anwendungen testgetrieben entwickelt! Race Conditions zu testen, mit dem Problem habe ich mich noch nicht beschäftigt. 

Wie man die ganzen Probleme von vornherein vermeiden kann, weiß ich ja. Aber es ist trotz aller Vorsichtsmaßnahmen möglich, dass sich ein Deadlock in deinen Code verirrt hat. Dies soll ich mittels Tests überprüfen


----------

