Wednesday, July 25, 2007

FindBugs: Βρείτε Λάθη στον Java Κωδικά σας

Πριν από λίγες μέρες, αφού διάβασα αυτό το άρθρο, εγκατέστησα στο Netbeans και δοκίμασα το πρόγραμμα FindBugs. Μπορώ να πω ότι έμεινα εντυπωσιασμένος!

Το FindBugs είναι ένα πρόγραμμα που εξετάζει τα μεταγλωττισμένα αρχεία java (δηλαδή τα αρχεία με κατάληξη .class) ή τα JAR/WAR/EAR πακέτα του προγράμματός σας και συγκρίνει τα bytecodes με διάφορα bug patterns. Αν βρει κάποιο bug θα το επισημάνει με απόλυτη ακρίβεια στον κώδικά σας.

Αρχικά ήμουν επιφυλακτικός με το FindBugs αφού παρόμοια προγράμματα συνήθως εμφανίζουν ανύπαρκτα προβλήματα και στο τέλος ο προγραμματιστής τα αγνοεί τελείως. Αντιθέτως το FindBugs είναι πολύ εύστοχο στις επισημάνσεις του και (σχεδόν) όποιο λάθος βρει στον κώδικα είναι πραγματικό.
Άλλο ένα χαρακτηριστικό του FindBugs που με εντυπωσίασε είναι ότι εκτός από το αν βρίσκει τα λάθη, βρίσκει και τεχνικές κακού προγραμματισμού και τις επισημαίνει. Έτσι ο προγραμματιστής μπορεί να βελτιώσει αισθητά την απόδοση του προγράμματός του.

Το FindBugs εκτός του ότι μπορεί να εκτελεστεί ως plugin σε κάποια IDE (π.χ. Netbeans, Eclipse) εκτελείται εξίσου εύκολα και ως αυτόνομο πρόγραμμα. Αρκεί να ακολουθήσετε τα εξής απλά βήματα (για Windows XP):

1. Κατεβάστε το FindBugs κάπου στον υπολογιστή σας (π.χ. στο C:/Program Files) και αποσυμπιέστε το.

2. Επιλέξτε Start --> Run , πληκτρολογήστε cmd και πατήστε ΟΚ.

3. Πλοηγηθείτε στο φάκελο [φακελός του findbugs]/findbugs-1.2.1/bin. Για παράδειγμα αν το αποσυμπιέσατε στον C:/Program Files πρέπει να πλοηγηθείτε στον φάκελο C:/Program Files/findbugs-1.2.1/bin.

4. Εκτελέστε την εντολή findbugs.bat.
Εικόνα 1: Παράδειγμα εκτέλεσης του FindBugs από την γραμμή εντολών των Windows


Μόλις πατήσετε Enter θα εμφανιστεί το παράθυρο του FindBugs.

Εικόνα 2: Το παράθυρο του FindBugs μόλις ανοίγει το πρόγραμμα


6. Επιλέξτε File --> New Project. Ανοίγει ένα νέο παράθυρο όπου επιλέγουμε τα αρχεία που θέλουμε να ελέγξει το FindBugs.
  • Το πεδίο "Class archives and directories to analyze" είναι υποχρεωτικό να συμπληρωθεί αφού περιέχει τις μεταγλωττισμένες κλάσεις ή τα JAR/WAR/EAR πακέτα που θα ελεγχθούν για λάθη. Πατώντας το κουμπί Add καθορίζουμε ποίες κλάσεις ή πακέτα θα αναλυθούν.
  • Το πεδίο "Auxiliary class location" δεν είναι υποχρεωτικό να συμπληρωθεί αλλά αν συμπληρωθεί τα αποτελέσματα της ανάλυσης του κώδικα είναι πιο σωστά. Σε αυτό το πεδίο καθορίζουμε ποίες μεταγλωττισμένες κλάσεις ή πακέτα χρησιμοποιούνται από τον κώδικα (π.χ. σαν βιβλιοθήκες) που θέλουμε να αναλύσει το FindBugs αλλά δεν θέλουμε αυτές οι κλάσεις ή πακέτα να αναλυθούν.
  • Το πεδίο "Source Directories" περιέχει τα αρχεία πηγαίου κώδικα του προγράμματος.
Εικόνα 3: Επιλογή των αρχείων για έλεγχο

Αφού επιλέξουμε όλα τα αρχεία για ανάλυση πατάμε Finish και αυτόματα αρχίζει η ανάλυση των αρχείων.

7. Μόλις τελειώσει η ανάλυση εμφανίζεται η λίστα με όλα τα προβλήματα που βρήκε το FindBugs. Τα προβλήματα ομαδοποιούνται ανά κατηγορία. Κάνοντας διπλό κλικ σε ένα πρόβλημα το FindBugs επισημαίνει τη γραμμή του κώδικα όπου υπάρχει το πρόβλημα ενώ παρέχει και μια σύντομη περιγραφή του προβλήματος.

Εικόνα 4: Αναφορά σφαλμάτων που βρήκε το FindBugs στον Java κώδικα

Αφού διορθωθούν τα λάθη στον κώδικα (όσα κρίνει ο προγραμματιστής ότι πρέπει να διορθωθούν) ο κώδικας πρέπει να μεταγλωττιστεί ξανά πριν ελεγχθεί εκ νέου με το FindBugs. Είναι κάπως συνηθισμένο να διορθώνει κάποιος τα λάθη και να ξανά εκτελεί το FindBugs χωρίς να μεταγλωττίσει τον κώδικα. Έτσι εμφανίζονται πάλι τα ίδια λάθη χωρίς να καταλαβαίνει γιατί...

Η αξία της χρήσης του FindBugs φαίνεται κυρίως στα μεγάλα projects όπου δουλεύουν μαζί πολλοί προγραμματιστές και είναι δύσκολο κάποιος senior developer να ελέγξει γραμμή προς γραμμή τον κώδικα. Από την προσωπική μου εμπειρία έχω διαπιστώσει το πόσα πολλά bugs μπορούν να βρεθούν σε κώδικα όπου έχουν κατασκευάσει πολλοί προγραμματιστές (πολλοί εξ' αυτών juniors :-) ).

Σε επόμενα posts θα αναφερθώ πιο πολύ στο FindBugs. Μέχρι τότε δεν χάνετε τίποτα να δοκιμάσετε τις ικανότητες του.


Friday, July 20, 2007

Ελληνικά Java Tutorials

Τελικά το ελληνικό Internet δεν είναι φτωχό από Java Tutorials. Με μία απλή αναζήτηση στο google βρήκα αρκετά μαθήματα για Java, κυρίως από πανεπιστήμια. Λοιπόν, έχουμε και λέμε:
  1. Java Tutorial. Από το Πανεπιστήμιο Μακεδονίας. Εκτενές μάθημα για τη Java που ξεφεύγει από το επίπεδο του αρχάριου. Είναι διαθέσιμο και σε doc μεγέθους 153 σελίδων.
  2. Εισαγωγή στη Java. Από το Πανεπιστήμιο Ιωαννίνων. Διαφάνειας από το αντίστοιχο μάθημα του τμήματος φυσικής του πανεπιστημίου. Κυρίως για αρχάριους.
  3. Προγραμματισμός Java. Από το Πανεπιστήμιο Θεσσαλίας. Διαφάνειες για το μάθημα του προγραμματισμού με Java. Κάπως περιληπτικές αλλά με πολλά παραδείγματα κώδικα. Περιέχει και πιο προχωρημένα θέματα.
  4. Προγραμματισμός με Java. Από το Πανεπιστήμιο Αθηνών. Διαφάνειες από το αντίστοιχο μάθημα. Καλύπτουν αρκετά θέματα.
  5. Οντοκεντρικός Προγραμματισμός (Java). Από το Πανεπιστήμιο Πατρών. Διαφάνειες για το αντίστοιχο μάθημα. Καλύπτουν πολλά θέματα αλλά είναι πολύ περιληπτικές. Για τα εργαστήρια του ίδιου μαθήματος υπάρχουν εδώ διαφάνειες για τα APIs SWING και ΑWT για προγραμματισμός γραφικών εφαρμογών Java.
  6. Προγραμματισμός σε Java. Περιληπτικά άρθρα για διάφορα θέματα της Java για αντίστοιχο μάθημα της ΑΣΣΟΕ. Ορισμένα από τα links δεν έχουν καθόλου περιεχόμενο.
  7. Java CGI Howto. Aπό το Hellenic Linux User Group. Eξηγεί πώς να χρησιμοποιήσετε τη Java στο να γράφετε προγράμματα CGI. Αρκετά παλίο (1998).
  8. Java Tutorials. Από το Κέντρο ΠΛΗΝΕΤ Ν. Φλώρινας. Διάφορα tutorial για την Java αλλά και για πολλές άλλες γλώσσες προγραμματισμού. Για αρχάριους αλλά πολύ καλή προσπάθεια.
  9. Java AWT. Από το Πανεπιστήμιο Ιωαννίνων. Διαφάνειες για το API δημιουργίας γραφικών εφαρμογών σε Java για το μάθημα Human - Computer Interaction.
  10. Μάθετε τη Γλώσσα Προγραμματισμού Java. Και αυτό από το Πανεπιστήμιο Μακεδονίας, για το μάθημα Computer Networks & Telematics. Για αρχάριους σε Applets.
  11. Εισαγωγή στη Java. Από τον Κωνσταντίνο Μαργαρίτη, μέλος της κοινότητας λογισμικού ανοιχτού κώδικα (ellak). Πολύ καλές σημειώσεις για εισαγωγή στη Java (και λίγο παραπέρα), το προτείνω σε όποιον είναι αρχάριος και δεν ξέρει από που να αρχίσει. Είναι σε αρχείο PDF 71 σελίδων.
  12. JHUG Tutorials. Κείμενα/βοηθήμτα πάνω σε συγκεκριμένα θέματα στη Java, κυρίως για αρχάριους. Τα περισσότερα είναι παλία (2002). Από την Java Hellenic User Group (JHUG).
  13. Papo's Log. Blog του ιδρυτικού μέλους της JHUG, Πάρι Αποστολόπουλου. Είναι Blog γενικού περιεχομένου όπου όμως μπορείτε να βρείτε χρήσιμα java tutorials πάνω σε συγκεκριμένα θέματα (π.χ. έγκατάστηση Apach Ant σε Windows).
  14. Java video tutorials.Ολοκληρωμένη σειρά videos για τη γλώσσα προγραμματισμού Java. Η σειρά αυτή ξεκινά από τα πολύ βασικά της εν λόγω γλώσσας και σκοπό έχει να σας φτάσει σε ένα πολύ καλό επίπεδο γνώσεων αυτής μιας και στη σειρά αυτή αναλύονται και πιο προχωρημένα ζητήματα όπως σχεδίαση γραφικών, δομές δεδομένων και διάφορα άλλα.
  15. Εισαγωγή στη γλώσσα Java. Σημειώσεις για το μάθημα Αντικειμενοστραφής Σχεδιασμός και Προγραμματισμός, Πανεπιστήμιο Πειραιώς, Τμήμα Τεχνολογικής Εκπαίδευσης.
  16. Αντικειµενοστρεφής Προγραµµατισµός. Διαλέξεις και κώδικας από το αντίστοιχο μάθημα του τμήματος Επιστήμης των Υπολογιστών του Πανεπιστημίου της Κρήτης.
Αυτά είναι λοιπόν. Αν ξέρει κανείς και άλλα που δεν έχω συμπεριλάβει στη λίστα ας μου τα στείλει.