Thursday, April 01, 2010

Fuzzing και άλλες ιδέες για distributed testing!!!!

Με ενδιαφέρον διάβασα για τα αποτελέσματα που έχει η χρήση τεχνικών Fuzzing μέσα σε κάποια μεγάλα project της  Microsoft- με αποτέλεσμα να βρουν επίσημα πάνω απο 1000 (1800) πραγματικά defects και προβλήματα.

 Ως Fuzzing ορίζουν σήμερα το black box testing - και συγκεκριμένα τη φύτεμα random  τιμών σε προγραμματα ή μέρη κώδικα και την παρατήρηση των παράξενων αποτελεσμάτων που μπορεί αυτό να έχει. 

Όπως ξέρουμε το να crash-άρει ο κώδικας σου είναι ένα γεγονός, το πως crash-αρει και τι σου λέει ή τι τρύπες αφήνει ανοιχτές είναι κάτι άλλο!

Οι τύπο στην M$ το πήγαν ένα βήμα παραπάνω και έφιαξαν bots- σαν τους ιούς που το ίδιο τους το λειτουργικό ταλαιπωρείται εδώ και χρόνια - το οποίο άφησαν να ξεχυθεί μέσα στα  χιλιάδες να υποθέσω εταιρικά PC - και όταν δεν τα χρησιμοποιούν οι υπαλληλοι, ξεκινούν να κάνουν fuzzy testing σε μικρά μικρά κομμάτια κώδικα! Καλή ιδέα ομολογώ. Test-άρα κυρίως κώδικα του office (1800 bugs) ενώ η ομάδα των  Windows δεν δέχθηκε να κάνει αυτό το test.

Με το που το διάβασα στο παραπάνω άρθρο που ήρθε η ιδέα αν θα ήταν εύκολο να κάνουμε κάτι παρόμοιο σε  distributed quality tool - το οποίο σαν SETI πχ θα ξεκινούσε να τρέξει findbugs , PMD, jUnit tests (ή οποιοδήποτε άλλο) για ένα project. Σε project με μεγάλο αριθμό source η διαδικασία μπορεί να πάρει ώρες ή μέρες ακόμα και σε πολύ δυνατους server.
Αν όμως είχαμε μοιράσει το source του project (σε όλα τα εταιρικά pc) ή τουλάχιστον μερος του project για να μπορεί να κάνει compile κτλ κτλ, ανάλογα το πόσο modula είναι, και να είχαμε bots τα οποία θα ξεκινούσαν να μοιράζουν δουλειά, πχ 10 pc τρέχουν τα unit test - 1000 tests /10 = 100 test το καθένα. Τα άλλα 10 PC PMD κτλ κτλ.

Προφανέστατα το παραπάνω τα έχουν ήδη σκεφτεί κάποιοι και με ένα γρήγορο search είδα ότι ψιλο-υπάρχουν εργαλεία όχι πολλά open source though . Δες εδώ. Αν κάποιοι χρησιμοποιούν τώρα που μιλάμε κάποια λύση ή συνδυασμό παρακαλώ αφήστε comment. Πάντως είναι καλή ιδέα για ένα doable open source project-άκι το οποίο απλά θα ελέγχει ήδη established εργαλεία και μοιράζει δουλειά!


Όσο για το fuzzing βρήκα μια λίστα εδώ. Java: JFuzz, JbroFuzz.

Ωραία πράγματα!

No comments:

Post a Comment