Πρότυπα και ιαδικασίες προγραµµατισµού Υλοποίηση και Έλεγχος Λογισµικού Αντώνης Καραγεώργος Τµήµα Μηχανικών Η/Υ και ικτύων Πανεπιστήµιο Θεσσαλίας karageorgos@inf.uth.gr Το περισσότερο λογισµικό αναπτύσσεται από οµάδες Τα πρότυπα εξασφαλίζουν οργάνωση της ανάπτυξης του λογισµικού Συµπλήρωση άλλων οµάδων Έλεγχος Κατανόηση του από τρίτους Τι έχει γραφεί Γιατίέχειγραφεί Πώς συνδυάζεται µε τον υπόλοιπο Πρότυπα (συνέχεια) Παράδειγµα προτύπωνγιασχόλια: /* Statement of function: * Component name: * Programmer: * Version: * Procedure Invocation: * Input Parameters: * Output Parameters: */ Απευθείας αντιστοιχία µεταξύ του σχεδίου και του του προγράµµατος ιαχείριση σχηµατισµών για προσδιορισµό (ιχνηλάτηση) αυτής της αντιστοιχίας Κατευθυντήριες γραµµές προγραµµατισµού οµές ελέγχου Αλγόριθµοι οµές δεδοµένων οµές ελέγχου ιατηρούν τη δοµή ελέγχου που προτείνεται από τη σχεδίαση εν πρέπει να µεταπηδούν σε διάφορα σηµεία του Τµηµατικότητα Γενικότητα σαν προτέρηµα (ώς ένα σηµείο) Οι εξαρτήσεις µεταξύ των συστατικών πρέπει να είναι ορατές Αλγόριθµοι Επιλέξτε µε προσοχή! Οι αλγόριθµοι επηρεάζουν το χρόνο εκτέλεσης Η ταχύτητα ενός αλγόριθµου µπορεί να συνοδεύεται από µειονεκτήµατα όπως Μεγάλο κόστος και χρόνος συγγραφής υσκολία στην κατανόηση
οµές δεδοµένων Το πρόγραµµα πρέπει να διατηρείται απλό. Π.χ. χρησιµοποιούµε πίνακακαιloop για να οµαδοποιήσουµε κάποιες πράξεις: if (a[i] < 5) a[i]++ Οι δοµές δεδοµένων µπορεί να καθορίσουν και τη δοµή του προγράµµατος, ακόµη και τη γλώσσα προγραµµατισµού Π.χ. µια αναδροµική δοµή δεδοµένων όπως είναι ένα δυναµικό δέντρο οδηγεί σε αναδροµικές διαδικασίες Γενικές κατευθύνσεις Αποµόνωση εισόδου και εξόδου Είσοδος και έξοδος σε ξεχωριστές µονάδες για καλύτερο έλεγχο Συµπερίληψη ψευδο Χρήσιµο ηµετατροπή του σχεδίου σε να γίνεται κατά στάδια Μπορει να χρησιµοποιηθεί για µεταφορά του σχεδίου στην επιλεγµένη γλώσσα προγραµµατισµού Ναι στην αναθεώρηση και το ξαναγράψιµο, όχι στις προχειρότητες Επαναχρησιµοποίηση Παραγωγού Καταναλωτή Τεκµηρίωση Η τεκµηρίωση περιγράφει τον τρόπο λειτουργίας του λογισµικού Εσωτερική τεκµηρίωση: Περιγραφικό κείµενο που γράφεται κατευθείαν µέσα στον (σχόλια) Εξωτερική τεκµηρίωση: Κείµενο εκτός Έλεγχος Λογισµικού Ανεξάρτητος έλέγχος των δοµικών µονάδων και ολοκλήρωση αυτών για έλεγχο των διασυνδέσεων Ελαττώµατα και αστοχίες λογισµικού Θέµατα ελέγχου Έλεγχος µονάδων Έλεγχος ολοκλήρωσης Έλεγχος αντικειµενοστραφών συστηµάτων Σχεδιασµός ελέγχων Εργαλεία αυτόµατου ελέγχου Τέλος ελέγχου Ελαττώµατα και αστοχίες λογισµικού Αστοχία (ή δυσλειτουργία) λογισµικού Το λογισµικόδενκάνειαυτόπουορίζουνοι απαιτήσεις Λόγοι για αστοχία του λογισµικού Οι προδιαγραφές δεν προσδιορίζουν επακριβώς τις ανάγκες του πελάτη: λανθασµένες ή ελλιπής εν είναι δυνατόν να υλοποιηθούν οι προδιαγραφές Ελαττώµατα στη σχεδίαση του συστήµατος και του προγράµµατος καθώς και στην υλοποίηση του Έλεγχος λογισµικού Γίνεται για να επιβεβαιωθεί η ύπαρξη κάποιας αστοχίας ή να ανακαλυφθούν νέες αστοχίες Ο έλεγχος είναι επιτυχής όταν ανακαλύπτεται ένα ελάττωµα ή όταν συµβαίνει µια αστοχία σαν αποτέλεσµα των διαδικασιών ελέγχου
Προσδιορισµός και διόρθωση Ελαττωµάτων Προσδιορισµός Ελαττωµάτων είναι η διαδικασία όπου προσδιορίζονται τα ελαττώµατα που προκάλεσαν την αστοχία ιόρθωση ή αφαίρεση ελαττωµάτων είναι η διαδικασία στην οποία γίνονται αλλαγές στο σύστηµα ώστεναδιορθωθούνταελαττώµατα Είδη Ελαττωµάτων Είναι σηµαντικό να γνωρίζουµε τί είδους σφάλµατα ψάχνουµε Οτιδήποτε µπορεί να έχει πρόβληµα: Αλγόριθµοι, σύνταξη, ακρίβεια, τεκµηρίωση, υπερφόρτωση δοµών δεδοµένων, δυνατότητα και όρια του συστήµατος Χρονισµός και συντονισµός διεργασιών, απόδοση συστήµατος Υλικό και λογισµικό συστήµατος, πρότυπα και διαδικασίες ανάπτυξης Είδη Ελαττωµάτων (συνέχεια) Είδη Ελαττωµάτων (συνέχεια) Αλγοριθµικό ελάττωµα: συµβαίνει όταν ο αλγόριθµος ενός συστατικού δεν παράγει το σωστό αποτέλεσµα γιακάποιαδεδοµένα εισόδου Εντοπίζεται είτε µε απλή ανάγνωση του (deck checking) είτε δοκιµάζοντας διάφορα δεδοµένα εισόδου που αναµένονται να χρησιµοποιηθούν. Τυπικά αλγοριθµικά σφάλµατα είναι: ιακλάδωση του προγράµµατος σε λάθος χρόνο Έλεγχος λανθασµένης συνθήκης Μη αρχικοποίηση µεταβλητών Παράλειψη ελέγχου συνθηκών Σύγκριση µεταβλητών διαφορετικού τύπου Ελαττώµατα υπολογισµού και ακριβείας: όταν ο τύπος κάποιου υπολογισµού είναι λανθασµένος ή δεν υπολογίζει το αποτέλεσµα µε την απαιτούµενη ακρίβεια Ελαττώµατα τεκµηρίωσης: όταν η τεκµηρίωση δεν περιγράφει τις πραγµατικές λειτουργίες του λογισµικού Ελαττώµατα υπερφόρτωσης: όταν αποθηκεύονται στις δοµές δεδοµένων π.χ. δυναµικές λίστες, περισσότερα δεδοµένα απ όσα αυτές µπορούν να αποθηκεύσουν Ελαττώµατα χωρητικότητας ή ορίων: όταν η απόδοση του συστήµατος γίνεται µή αποδεκτή σε για συγκεκριµένα επίπεδα χρήσης Είδη Ελαττωµάτων (συνέχεια) Ελαττώµατα χρονισµού και συντονισµού: όταν οι διάφορες διεργασίες του λογισµικού δεν συγχρονίζονται σωστά Ελαττώµατα απόδοσης: όταν το σύστηµα δεν έχει την απόδοση που προβλέπεται από τις προδιαγραφές Ελαττώµατα ανάκτησης: το σύστηµα δεν ανακτά την κανονική του λειτουργία µετά όταν συµβαίνουν αστοχίες Ελαττώµατα υλικού και λογισµικού: όταν το υλικό και το λογισµικό συστήµατος δε λειτουργούν σύµφωνα µε τις προδιαγραφές Ορθογώνια κατηγοριοποίηση σφαλµάτων Προσέγγιση σύµφωνα µε την οποία πληροφορίες για παλαιότερα σφάλµατα χρησιµοποιούνται για έλεγχο µελλοντικών σφαλµάτων. Τα σφάλµατα κατατάσσονται σε κατηγορίες Η κατηγοριοποίηση των σφαλµάτων είναι ορθογώνια όταν κάθε σφάλµα ανήκεισεµια µόνο κατηγορία Οι κατηγορίες πρέπει να είναι καλά ορισµένες ώστε κάθε σφάλµα ναταξινοµείται στην ίδια κατηγορία ανεξάρτητα από το ποιός κάνει την ταξινόµηση
Παράδειγµα ορθογώνιας κατηγοριοποίηση σφαλµάτων Ορθογώνια κατηγοριοποίηση σφαλµάτων της Ibm: Λειτουργίας ιασυνδέσεων Ελέγχου Απόδοσης τιµής Χρονισµού/serialization, ηµιουργία πακέτων και εκτελέσιµου Τεκµηρίωση Αλγόριθµοι Fault type Function Interface Checking Assignment Timing/serialization Build/package/merge Documentation Algorithm Table 8.1. IBM orthogonal defect classification. Meaning Fault that affects capability, end-user interfaces, product interfaces, interface with hardware architecture, or global data structure Fault in interacting with other components or drivers via calls, macros, control blocks or parameter lists Fault in program logic that fails to validate data and values properly before they are used Fault in data structure or code block initialization. Fault that involves timing of shared and real-time resources Fault that occurs because of problems in repositories, management changes, or version control Fault that affects publications and maintenance notes Fault involving efficiency or correctness of algorithm or data structure but not design Κατηγοριοποίηση σφαλµάτων της Hewlett-Packard ORIGIN: WHERE? Σφάλµατα της HP TYPE: WHAT? Specification/ MODE: WHY? Requirements or specifications Functionality Design Code HW interface SW interface User interface Functional description Environment/ support (Inter-)Process communications Data definition Module design Logic description Error checking Standards Documentation Logic Computation Data handling Module interface/ implementation Standards Missing Unclear Wrong Changed Better way Other Test HW Test SW Integration SW Development tools Computation 18% Other code 11% Logic 32% Data handling 6% Documentatio n 19% Requirements 5% Hardw are 4% Process/interp rocess 5% Θέµατα ελέγχου Οργάνωση ελέγχου Οργάνωση ελέγχου Τάσεις σχετικές µε τον έλεγχο Ποιός κάνει τον έλεγχο? Απόψεις σχετικά µε τα αντικείµενα ελέγχου Component code Component code Component code Unit Unit... Unit Tested component Design System specifications functional Integration Tested component Integrated modules Function Functioning system Other software Performance Πολλά στάδια ελέγχου Verified, validated software Customer specification Acceptance User environment Accepted system Installation SYSTEM IN USE!
Τύποι ελέγχου Έλεγχος µονάδων: εξασφαλίζει ότι τα διάφορα συστατικά λειτουργούν κανονικά. Έλεγχος ολοκλήρωσης: Εξασφαλίζει οτι τα διάφορα µέρη του συστήµατος συνεργάζονται όπως προβλέπεται από τις προδιαγραφές Έλεγχος λειτουργίας: αξιολογεί το σύστηµα για να διαπιστωθεί αν οι εκτελούνται οι συνολικές λειτουργίες που προβλέπονται από τις προδιαγραφές Έλεγχος απόδοσης: συγκρίνει την απόδοση του συστήµατος µε βάση τις υπόλοιπες προδιαγραφές Έλεγχος αποδοχής: έλεγχος του συστήµατος µε βάση την περιγραφή των απαιτήσεων από τον πελάτη Έλεγχος εγκατάστασης: έλεγχος του συστήµατος µετά την εγκατάσταση Τάσεις σχετικές µε τον έλεγχο λογισµικού Οι νέοι προγραµµατιστές δεν είναι συνηθισµένοι στον έλεγχο σα διαδικασία ανακάλυψης λαθών Είναι δύσκολο να γίνουν αποδεκτές ευθύνες για τα σφάλµατα Συχνά υπάρχουν διενέξεις µεταξύ των ελεγκτών και των µηχανικών ανάπτυξης Οι ελεγκτές προσπαθούν να βρούν λάθη και οι ελεγκτές να δείξουν οτι δεν κάνουν Ποιός κάνει τον έλεγχο? Ο έλεγχος µονάδων και ολοκλήρωσης συνήθως διεξάγονται από οµάδες ανάπτυξης Οι υπόλοιποι έλεγχοι καλούνται έλεγχοι συστήµατος και συνήθως γίνονται από ειδικές οµάδες ελέγχου Απόψεις σχετικά µε τα αντικείµενα ελέγχου Έλεγχος µαύρου κουτιού: παρέχουµε είσοδοσεένα κουτί τα περιεχόµενα του οποίου δεν είναι γνωστά και παρατήρηση της εξόδου που παράγεται Είναι δύσκολο να επιλέξουµε αντιπροσωπευτικές περιπτώσεις ελέγχου γιατί δε γνωρίζουµε αρκετά για την επεξεργασία που γίνεται Έλεγχος άσπρου κουτιού: γνωρίζουµε τιγίνεται µέσα στο κουτί και µπορούµε να επιλέξουµε περιπτώσεις ελέγχου για όλες τις διαδροµές Είναι δύσκολο να ελέγξουµε όλες τις περιπτώσεις Μπορούµε ναέχουµε συνδυασµούς των παραπάνω Εξέταση του Εξέταση : Εξέταση του πηγαίου και της τεκµηρίωσης για ασάφειες, παραλείψεις και λάθη ύο είδη ανασκόπησης: Ανασκόπηση (Code Walkthrough) Επιθεώρηση (code inspection) Εξέταση (συνέχεια) Ανασκόπηση : ο πηγαίος ς και η σχετική τεκµηρίωση παρουσιάζονται στην οµάδα εξέτασης, ακολουθεί συζήτηση και γίνονται σχόλια πάνω στην ορθότητα του Επιθεώρηση : µια οµάδα εξέτασης ελέγχει τον και την τεκµηρίωση σε σχέση µε ένα κατάλογο σηµείων προς εξέταση
Βαθµός επιτυχίας της εξέτασης Οι προγραµµατιστές µπορεί να µην αισθάνονται άνετα µε την εξέταση του κώδικά τους από άλλους Όµως, η εξέταση έχει αποδειχθεί ιδιαίτερα επιτυχηµένη στον προσδιορισµό σφαλµάτων Η εξέταση θεωρείται απαραίτητη και µέσα στις καλύτερες πρακτικές ελέγχου από τους περισσότερους οργανισµούς που αναπτύσσουν λογισµικό Απόδειξη της ορθότητας του Ορθότητα: Ένα πρόγραµµα είναι ορθό αν υλοποιεί τις λειτουργίες και διαχειρίζεται τα δεδοµένα όπως περιγράφεται στα προϊόντα σχεδίασης Απόδειξη της ορθότητας του προγράµµατος: οι γραµµές του πηγαίου θεωρούνται σαν δηλώσεις σε µια λογική γλώσσα Έλεγχος και απόδειξη προγράµµατος Έλεγχος είναι µια σειρά πειραµάτων που παρέχουν πληροφορίες σχετικά µε τη λειτουργία του προγράµµατος και το περιβάλλον στο οποίο αυτό εκτελείται Η απόδειξη δείχνει πως θα συµπεριφερθεί ένα πρόγραµµα σε ένα υποθετικό περιβάλλον που περιγράφεται από τη σχεδίαση και τις απαιτήσεις