Δυναμική ανάλυση

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Η δυναμική ανάλυση προγράμματος είναι ανάλυση λογισμικού που γίνεται με την εκτέλεση των προγραμμάτων που προκύπτουν από αυτό το σύστημα λογισμικού σε έναν πραγματικό ή εικονικό επεξεργαστή. Για να είναι αποδοτική, πρέπει το πρόγραμμα προς ανάλυση να εκτελεστεί με αρκετές εισόδους ελέγχου για να εμφανιστεί ενδιαφέρουσα συμπεριφορά. Η χρήση τεχνικών δοκιμής λογισμικού όπως η κάλυψη κώδικα είναι σημαντικές ώστε να παρατηρείται όσο το δυνατόν μεγαλύτερο τμήμα των συμπεριφορών του προγράμματος. Επίσης, πρέπει να υπάρχει κάποια προσοχή ώστε να ελαχιστοποιείται η επίδραση που έχουν οι τεχνικές "ενορχήστρωσης" (instrumentation) στην εκτέλεση του τελικού προγράμματος (συμπεριλαμβανομένων των χρονικών του ιδιοτήτων).

Παραδείγματα εργαλείων[Επεξεργασία | επεξεργασία κώδικα]

  • Το Valgrind εκτελεί προγράμματα σε έναν εικονικό επεξεργαστή και μπορεί να εντοπίσει σφάλματα μνήμης (π.χ. λάθος χρήση της malloc και της free) και race conditions σε πολυνηματικά προγράμματα.
  • Το Avalanche είναι ένα εργαλείο ανοιχτού λογισμικού που δημιουργεί δεδομένα εισόδου που δείχνουν πώς αποτυγχάνει το πρόγραμμα προς ανάλυση.
  • Το Daikon είναι μια υλοποίηση του δυναμικού εντοπισμού αναλλοίωτων. Το Daikon εκτελεί ένα πρόγραμμα, παρατηρεί τις τιμές που αυτό υπολογίζει, και στη συνέχεια αναφέρει ιδιότητες που ίσχυαν στις εκτελέσεις που παρατηρήθηκαν, οι οποίες είναι πιθανό να ισχύουν γενικά για όλες τις εκτελέσεις.
  • Η Dmalloc, μια βιβλιοθήκη για τον έλεγχο της δέσμευσης μνήμης και των διαρροών μνήμης. Το λογισμικό προς ανάλυση πρέπει να μεταγλωττιστεί πάλι και όλα τα αρχεία του να περιλαμβάνουν το ειδικό αρχείο επικεφαλίδας της C, dmalloc.h.
  • Η DynInst είναι μια βιβλιοθήκη που επεμβαίνει στον κώδικα στο χρόνο εκτέλεσης και είναι χρήσιμη στην ανάπτυξη ελέγχων δυναμικής ανάλυσης προγράμματος και στην εφαρμογή τους σε μεταγλωττισμένα προγράμματα. Η Dyninst γενικά δε χρειάζεται τον πηγαίο κώδικα ή την επανάληψη της μεταγλώττισης, αλλά τα προγράμματα που περιλαμβάνουν σύμβολα αποσφαλμάτωσης (non-stripped executables) είναι ευκολότερο να αναλυθούν.
  • IBM Rational Purify: κυρίως εντοπίζει την αλλοίωση και τις διαρροές μνήμης.
  • BoundsChecker: παρόμοια χαρακτηριστικά με το Purify της IBM.
  • Το VB Watch εισάγει κώδικα δυναμικής ανάλυσης σε προγράμματα Visual Basic για να παρατηρεί την απόδοσή τους, τη στοίβα κλήσεων, τα ίχνη από την εκτέλεση (execution trace), τα αντικείμενα που έχουν δημιουργηθεί, τις μεταβλητές και την κάλυψη κώδικα.
  • Το Insure++ είναι ένα εργαλείο ανάλυσης μνήμης στο χονο εκτέλεσης και εντοπισμου λαθών. Στο τμήμα του με το όνομα "In use" εμφανίζονται με γραφικό τρόπο οι δεσμέυσεις μνήμης στο χρόνο, η συνολική χρήση του σωρού, οι δεσμέυσεις ενοτήτων, πιθανές εκκρεμείς διαρροές μνήμης, κλπ.
  • Το jTracert[νεκρός σύνδεσμος] είναι ένας agent σε Java που ενορχηστρώνει εφαρμογές που τρέχουν στην εικονική μηχανής της Java (JVM) και δημιουργεί ακολουθιακά διαγράμματα(sequence diagrams).
  • Το Intel Thread Checker Αρχειοθετήθηκε 2009-03-31 στο Wayback Machine. είναι ένα εργαλείο ανάλυσης λαθών σε νήματα στο χρόνο εκτέλεσης που μπορεί να εντοπίσει πιθανά data races και αδιέξοδα (deadlocks) σε πολυνηματικές εφαρμογές για Windows ή Linux.
  • Το Intel Parallel Inspector εκτελεί ανάλυση νημάτων και σφαλμάτων μνήμης στο χρόνο εκτέλεσης σε περιβάλλον Windows.
  • Η σουίτα εργαλείων HP Security Suite περιλαμβάνει εργαλεία σε διάφορα στάδια ανάπτυξης. Τα QAInspect και WebInspect γενικά θεωρούνται εργαλεία δυναμικής ανάλυσης, ενώ το DevInspect θεωρείται εργαλείο στατικής ανάλυσης.
  • Η Cenzic προσφέρει λύσεις για δυναμικό, black box, έλεγχο εφαρμογών Ιστού
  • Το OKTECH Profiler είναι ένα ελαφρύ εργαλείο που παρακολουθεί την απόδοση ενός προγράμματος σε Java με χρήση τεχνικών δειγματοληψίας και ενορχήστρωσης - μπορεί να παρακολουθεί τοπικά ή από απόσταση την απόδοση του προγράμματος και περιλαμβάνει ξεχωριστή στατιστική ανάλυση.

Τα περισσότερα εργαλεία ανάλυσης της απόδοσης χρησιμοποιούν τεχνικές δυναμικής ανάλυσης προγράμματος.

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]