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.
Ωραία πράγματα!