Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού:Γενική Επισκόπηση - επισηµάνσεις Τµήµα Διοίκησης Επιχειρήσεων Τει Δυτικής Ελλάδας Μεσολόγγι Δρ. Α. Στεφανή Διάλεξη 9
Τι είναι ποιότητα;
Ποιότητα λογισµικού Ο όρος «Ποιότητα» (Quality) φαίνεται καταρχήν αυτονόητος. Η ερµηνεία του στην Επιστήµη της Πληροφορικής είναι πιο δύσκολη από ότι φαίνεται. Στο τοµέα της Τεχνολογίας Λογισµικού, υπάρχουν πολλές όψεις για το τι είναι Ποιότητα και πως αυτή επιτυγχάνεται. Η επιστηµονική (αλλά και πρακτική) χρήση του όρου οριοθετείται από πρότυπα (standards), δηλαδή από κοινά αποδεκτούς ορισµούς και οδηγίες χρήσης.
Ορισµός Η ποιότητα λογισµικού αναφέρεται στα χαρακτηριστικά των εφαρµογών λογισµικού που στόχο έχουν να ικανοποιήσουν τις ανάγκες του χρήστη ως αυτόνοµο µέσο ή ως τµήµασυστήµατος λογισµικού. Το σύστηµα λογισµικού περιλαµβάνει ένα σύνολο εφαρµογών που συνεργάζονται µεταξύ τους, εκτελούν παράλληλες ή συµπληρωµατικές διεργασίες στοχεύουν στην υποστήριξη της αλληλεπίδρασης µε το χρήστη. Συνεπώς η έννοια της ποιότητας συνδέεται άµεσα µε την ικανοποίηση των αναγκών και των απαιτήσεων του χρήστη.
Εξωτερική ποιότητα Την ποιότητα των λειτουργιών και των χαρακτηριστικών του λογισµικού, τα οποία και διαµορφώνουν την αλληλεπίδραση µε το χρήστη. Ως χρήστης ορίζεται ο εξωτερικός χρήστης του συστήµατος ο οποίος χρησιµοποιεί το σύστηµα κάτω απόκαθορισµένες συνθήκες στην τελική του µορφή. Ο χρήστης αντιλαµβάνεται τηνποιότητα του συστήµατος εξωτερικά δηλαδή την εξωτερική ποιότητα.
Εσωτερική Ποιότητα Την ποιότητα όπως γίνεται αντιληπτή από το διαχειριστή ή το µηχανικό ανάπτυξης του συστήµατος ο οποίος ασχολείται µε το σχεδιασµό και την ανάπτυξη του. Ο διαχειριστής αντιλαµβάνεται την έννοια της ποιότητας εκ των έσω αξιολογώντας την εσωτερική ποιότητα του συστήµατος
Προϊόντα λογισµικού Εκπαιδευτικό λογισµικό Παιχνίδια Εφαρµογές εικονικής πραγµατικότητας Εφαρµογές επαυξηµένης παραγµατικότητας Λογισµικό κινητών συσκευών Βιοµηχανικό Λογισµικό Λογισµικό διαχείρισης και ανάκτησης γνώσης (µηχανές αναζήτησης)...
Διαστάσεις της Ποιότητας Μέγεθος κώδικά Πολυπλοκότητα κώδικά. Ποιότητα φωτογραφιών ψηφιακής φωτογραφικής µηχανής.
Διαστάσεις της Ποιότητας Ποσοτικές και ποιοτικές διαστάσεις. Ποσοτικές: χρησιµοποιούµε επίσηµη µονάδα µέτρησης µε µαθηµατικα οριµένο τρόπο. Μέτρηση γραµµών κώδικά. Ανάλυση οθόνης Χρόνος απόκρισης ΑΤΜ Ποιοτικές: αξιολογούµε την ικανοποίηση του πελάτη Ικανοποίηση από την αγορά µας σε ηλεκτρονικό κατάστηµα. Ευχρηστία λογισµικού κινητής συσκευής. Χρησιµοποιούµε κλίµακες αξιολόγησης.
Βασικές αρχές ποιότητας στον κύκλο ζωής του λογισµικού.
PDSA cycle (2)
Διαχείριση Ποιότητας Λογισµικού
16 Πρότυπα Ποιότητας Η επιστηµονική (αλλά και πρακτική) χρήση του όρου Ποιότητα οριοθετείται από πρότυπα (standards), δηλαδή από κοινά αποδεκτούς ορισµούς και οδηγίες χρήσης. Το καταλληλότερο πρότυπο για το λογισµικό είναι το ISO 25000 το οποίο αποτελεί εξέλιξη του προτύπου ISO 9126.
Πρότυπο ποιότητας ποιοτικά χαρακτηριστικά ποιοτικά υπο-χαρακτηριστικά µετρικές ποιοτικά στοιχεία µέτρησης συναρτήσεις µέτρησης ποιοτικές µετρήσεις.
Δοµή
Ιεραρχική δοµή
Τα πρότυπα που χρησιµοποιούνται τώρα. ISO/IEC 9126: Information Technology- Software Product Evaluation- Quality Characteristics and Guidelines for their Use. ISO/IEC 9126-1: 2001 Software Engineering Product Quality Part 1: Quality Model. ISO/IEC 9126-2: 2001 Software engineering - Product quality - Part 2: External metrics. ISO/IEC 9126-3: 2001 Software engineering - Product quality - Part 3: Internal metrics.
Τα πρότυπα που χρησιµοποιούνται τώρα. ISO/IEC 25000. Software Engineering - Software Product Quality Requirements and evaluation (SQuaRE). ISO/IEC 25010 Software engineering - Software product Quality Requirements and Evaluation (SQuaRE) Software and quality in use models. ISO/IEC 25012 Software engineering: Software product Quality Requirements and Evaluation (SQuaRE) Data Quality Model.
Ποιοτικά Χαρακτηριστικά των προτύπων
Λειτουργικότητα Η Λειτουργικότητα (Functionality) ορίζεται ως η δυνατότητα του λογισµικού να ικανοποιεί λειτουργικές απαιτήσεις και στόχους. Οι λειτουργικές απαιτήσεις για τα δεδοµένα και το λογισµικό σχετίζονται µε το σύνολο των λειτουργικών απαιτήσεων (ή δυνατοτήτων) του χρήστη που το λογισµικό µπορεί να εξυπηρετήσει.
Ευχρηστία Η Ευχρηστία (Usability) ορίζεται ως η δυνατότητα του λογισµικού να είναι κατανοητό, διαχειρίσιµο και χρησιµοποιήσιµο για να ελκύει την προσοχή του χρήστη κάτω από καθορισµένες συνθήκες. Η Ευχρηστία πραγµατεύεται το ερώτηµα «Πώς µπορεί ο χρήστης να χρησιµοποιήσει το λογισµικό;».
Αποδοτικότητα Η Αποδοτικότητα (Efficiency) είναι η δυνατότητα επεξεργασίας των δεδοµένων του λογισµικού (πρόσβαση, απόκτηση, ενηµέρωση).
Αξιοπιστία Ως Αξιοπιστία (Reliability) ορίζεται η δυνατότητα του λογισµικού να υποστηρίζει καθορισµένο επίπεδο λειτουργιών σε καθορισµένο τεχνολογικό περιβάλλον. Η αξιοπιστία δίνει έµφαση στο ερώτηµα «Πότε το λογισµικό λειτουργεί σωστά και αποδεκτά στο χρήστη;».
Συντηρησιµότητα Το ποιοτικό χαρακτηριστικό της Συντηρησιµότητας (Maintenability) αναφέρεται στη δυνατότητα τροποποίησης του λογισµικού ώστε να ικανοποιεί τεχνολογικές απαιτήσεις ή λειτουργικές προδιαγραφές.
Μεταφερσιµότητα Το ποιοτικό χαρακτηριστικό της Μεταφερσιµότητας (Portability) αναφέρεται στη δυνατότητα του ΕΥ να είναι προσαρµόσιµο από ένα τεχνολογικό περιβάλλον σε ένα άλλο. Πρόβληµα της ενοποίησης των πληροφοριακών συστηµάτων του ΤΕΙ Μεσολογγίου µε το ΤΕΙ Πάτρας.
29 Η Πρακτικότητα των προτύπων Ένα πρότυπο καθορίζει τις ιδιότητες του ποιοτικού λογισµικού όχι πως θα κατασκευαστεί ένα ποιοτικό λογισµικό! Τι σηµαίνει π.χ. η οδηγία «το λογισµικό πρέπει να έχει καλή απόκριση χρόνου;» Πως γίνεται αυτό;
30 Η Πρακτικότητα των προτύπων Τα πρότυπα είναι ανεξάρτητα της τεχνολογίας! Μέσω εµπειρίας, και για όλες τις γλώσσες προγραµµατισµού µπορούµε να καθορίσουµε κάποιους εµπειρικούς κανόνες! Έχετε να προτείνετε κάποιους?
ΣΥΣΤΗΜΑ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ (QUALITY SYSTEM) Στόχοι Διασφάλιση ποιότητας διαδικασιών παραγωγής (process quality assurance) Συνεχής βελτίωση διαδικασιών παραγωγής προϊόντος και λειτουργίας επιχείρησης, σύµφωνα µε τις προδιαγραφές ποιότητας. Διασφάλιση ποιότητας πόρων (resource quality assurance) Συνεχής βελτίωση χρησιµοποιούµενων πόρων (εξοπλισµός, λογισµικό, εργαλεία, χώροι εργασίας, προσωπικό κλπ.) στην παραγωγή προϊόντος. Διασφάλιση ποιότητας προϊόντος (product quality assurance) Συνεχής βελτίωση ποιότητας παραγόµενου προϊόντος.
33 Χαρακτηριστικά Λογισµικού n Εσωτερικά n Εξωτερικά
34 Μετρικές Τι είναι? Τα χαρακτηριστικά δεν µετριούνται! You can t control what you can't measure DeMarco, T. (1982) Μετρικές: Ανάθεση αριθµού ή συµβόλου σε µία οντότητα που χαρακτηρίζει µία συγκεκριµένη ιδιότητά της (attribute).
35 Κατηγοριοποίηση Μετρικών- Στόχος Μετρικές Διαδικασιών Πόρων Προϊόντων CMM ISO Μεγέθους Δοµής Δεδοµένων Halstead McCabe Tsai
36 Παραδείγµατα Μετρικών Μετρικές Διαδικασίας: # λαθών ανά ώρα προγραµµατισµού # αλλαγών στις προδιαγραφές # διαθέσιµων και χρησιµοποιηµένων ωρών προγραµµατιστή την εβδοµάδα # patch releases µετά την πρώτη παράδοση
37 Παραδείγµατα Μετρικών Μετρικές Πόρων: Ανθρώπινο δυναµικό Εξοπλισµός Αναλώσιµα
38 Συσχέτιση Εξ. & Εσ. Μετρικών Απόλυτη συσχέτιση: Αδύνατη! (π.χ. µεγάλος LOC -> εύχρηστο λογισµικό?) Εµπειρικά έχει αποδειχθεί: 1. Τήρηση ορίων Εσ. Μετρικών -> µάλλον ποιοτικό λογισµικό 2. Μη-τήρηση ορίων Εσ. Μετρικών -> µάλλον κακής ποιότητας λογισµικό
39 Lines Of Code LOC Lines of Code ή SLOC (Source Lines of Code) Χρησιµοποιείται για την εκτίµηση του φόρτου και της παραγωγικότητας 2 είδη Physical SLOC: # των γραµµών µαζί µε τα σχόλια και τις κενές γραµµές. Logical SLOC: # των εντολών (στη C των «;»)
40 Μετρικές Ηalstead Ποσοτικές Μετρικές για τον πηγαίο κώδικα Επιστήµη Λογισµικού: Κώδικας = Τελεστές, Έντελα Τελεστές: συµβολοσειρές που καθορίζουν δράση πάνω στα έντελα Έντελα: σ υ µ β ο λ ο σ ε ι ρ έ ς π ο υ αντιπροσωπεύουν αποδέκτες της δράσης των τελεστών
41 Τελεστές ονόµατα εντολών, ονόµατα συναρτήσεων, σύµβολα πράξεων, ακόµα και σύµβολα στίξης π.χ. Printf(), ++, ;, {} Πως τα µετράµε: Παρενθέσεις, άγκιστρα ανά ζεύγη: {}, () Go to µαζί µε την ετικέτα: Go to 10 10: Εντολή διακλάδωσης: ΙF()-Then, IF()-Then-Else (µαζί µε τις παρενθέσεις τους!) Βρόγχοι: while()-do, do-while(), For(; ;), repeat-until() Άλλα: ;, printf(), return, scanf(), +, *, -, /, ==, κτλ.
42 Έντελα ονόματα μεταβλητών και σταθερές π.χ. i, j, 10, %d\n
43 Μετρικές Ηalstead Bασικές Οντότητες n1 ο αριθµός των διακριτών τελεστών που εµφανίζονται στο πρόγραµµα. n2 ο αριθµός των διακριτών εντέλων που εµφανίζονται στο πρόγραµµα. N1 ο αριθµός των συνολικών εµφανίσεων τελεστών στο πρόγραµµα. N2 ο αριθµός των συνολικών εµφανίσεων εντέλων στο πρόγραµµα
44 Διάγραµµα ροής Ροή ελέγχου (και όχι δεδοµένων) Απεικονίζει την πολυπλοκότητα του κώδικα Προσδιορίζει το πλήθος των βασικών µονοπατιών Κυκλωµατική Πολυπλοκότητα = Πλήθος ΒΜ = Άνω όριο περιπτώσεων ελέγχου
45 Δοκιµή Βασικών Μονοπατιών n Διαδικασία σχεδίασης περιπτώσεων ελέγχου: Υπολογισµός της κυκλωµατικής πολυπλοκότητας (V) του γραφήµατος ροής (G) αντιστοιχεί στον αριθµό των βασικών µονοπατιών που υπάρχουν: n n n V(G) = αριθµός περιοχών του G V(G) = E N + 2 (όπου E: ακµές και N: κόµβοι) V(G) = P + 1 (όπου Ρ το πλήθος των απλών συνθηκών ελέγχου του κώδικα) Εύρεση βασικών µονοπατιών n n Κάθε βασικό µονοπάτι περιλαµβάνει τουλάχιστον µία ακµή που δεν υπάρχει σε άλλο βασικό µονοπάτι. Όλα τα µη βασικά µονοπάτια προκύπτουν συνδυάζοντας τα βασικά. Δεν βρίσκει λάθη αλλά το άνω όριο των περιπτώσεων ελέγχου
Γράφος Κυκλωµατικής Πολυπλοκότητας 46 Βήµατα 1. Οµαδοποιούµε τις εντολές (αγνοούνται οι δηλώσεις, κάθε λογική έκφραση θεωρείται ξεχωριστός κόµβος, ακολουθιακές εντολές =1 κόµβος) 2. Κατασκευάζουµε το γράφο χρησιµοποιώντας τα σύµβολα:
Το µοντέλο κύκλου ζωής λογισµικού
20/06/16 48 Ένα Γενικό Μοντέλο Κύκλου Ζωής Ανάπτυξη σε κύκλους σύµφωνα µε τα χαρακτηριστικά και τις δυνατότητες του κατασκευαστή. Γενικευµένη µορφή των προηγούµενων µοντέλων κύκλου ζωής.
20/06/16 49 Προδιαγραφή Απαιτήσεων Το πρώτο βήµα στην ανάπτυξη λογισµικού Διάκριση απαιτήσεων Από το σύστηµα Από το λογισµικό Απαίτηση από το σύστηµα: Η περιγραφή µιας εργασίας που θα πρέπει να εκτελείται από κάποια συνιστώσα ενός συστήµατος (άνθρωποι, µηχανές, λογισµικό) ή ενός χαρακτηριστικού το οποίο θα πρέπει να έχει ένα σύστηµα. Σύνθετη εργασία! Πως τις διακρίνουµε: Προσπαθούµε να απαντήσουµε στην ερώτηση: «Ποια από τις συνιστώσες του συστήµατος πρέπει να ικανοποιήσει την απαίτηση αυτή;»
20/06/16 50 Επιθυµητά Χαρακτηριστικά των Απαιτήσεων Ορθότητα Οι απαιτήσεις έχουν καταγραφεί χωρίς λάθη Συνέπεια Δεν υπάρχουν αλληλοσυγκρουόµενες απαιτήσεις Πληρότητα Περιγράφουν όλες τις πιθανές καταστάσεις, αλλαγές καταστάσεων, είσοδοι, προϊόντα, περιορισµοί Ρεαλισµός Μπορούν να υλοποιηθούν Αναγκαιότητα Περιγράφουν κάτι που πραγµατικά χρειάζεται ο πελάτης Επαληθευσιµότητα Είναι δυνατός ο έλεγχος ότι οι απαιτήσεις πληρούνται εξ ολοκλήρου; Ιχνηλασιµότητα Είναι εύκολο να βρεθεί το σύνολο των απαιτήσεων που σχετίζεται µε µια συγκεκριµένη άποψη του συστήµατος;
51 Ποιότητες που ενδιαφέρουν Συντηρητής Καλή τεκµηρίωση Κατανοητός κώδικας Καλή σχεδίαση Επαναχρησιµοποίηση Λειτουργικότητα Ευκολία χρήσης Ευκολία εκµάθησης Χρήστης Αξιοπιστία Ορθότητα Αποδοτικότητα Χαµηλό κόστος Μεταφέρσιµο Αυξάνει την παραγωγικότητα Πελάτης
Έλεγχος ορθότητας µονάδων λογισµικού αλγοριθµικά σφάλµατα υπολογιστικά λάθη και λάθη ακρίβειας σφάλµατα υπερφόρτωσης σφάλµατα ορίων ή χωρητικότητας σφάλµατα χρονισµού ή σφάλµατα συντονισµού σφάλµατα απόδοσης σφάλµατα ανάκαµψης σφάλµατα υλικού και λογισµικού συστήµατος σφάλµατα τεκµηρίωσης
Έλεγχος κλειστού κουτιού Με τον έλεγχο κλειστού κουτιού δεν έχουµε γνώση της εσωτερικής δοµής και λογικής του αντικειµένου ελέγχου. Θα πρέπει όµως µε κάποιο τρόπο να επιλέξουµε εκείνες τις δοκιµασίες ελέγχου οι οποίες έχουν τη µεγαλύτερη πιθανότητα ανακάλυψης κάποιου σφάλµατος. Θα εξετάσουµε δύο τεχνικές οι οποίες, αν και δεν εγγυώνται την ανακάλυψη όλων των σφαλµάτων, αυξάνουν την πιθανότητα εντοπισµού τους.
Διαµερισµός ισοδυναµίας Μία τεχνική η οποία χρησιµοποιείται πολύ συχνά για τον έλεγχο κλειστού κουτιού είναι ο διαµερισµός ισοδυναµίας (equivalence partitioning). Σύµφωνα µε αυτή την τεχνική θα πρέπει να χωρίσουµε το χώρο των δυνατών εισόδων σε κλάσεις ισοδυναµίας (equivalence classes), έτσι ώστε η επιλογή µίας δοκιµασίας ελέγχου από κάθε διαφορετική κλάση να θεωρείται ως αντιπροσωπευτική για όλη την κλάση. Με αυτό τον τρόπο περιορίζουµε τον αριθµό των δοκιµασιών ελέγχου, έχοντας ταυτόχρονα αυξήσει την πιθανότητα να ανακαλύψουµε κάποιο σφάλµα.
Ανάλυση συνοριακών τιµών Μία δεύτερη τεχνική είναι η ανάλυση των συνοριακών τιµών (boundary value analysis). Η εµπειρία στον έλεγχο του λογισµικού έχει δείξει ότι η πιθανότητα ανακάλυψης σφαλµάτων αυξάνεται, όταν οι δοκιµασίες ελέγχου σχετίζονται µε τις συνοριακές συνθήκες (boundary conditions). Αν επανέλθουµε στο παράδειγµα της συνάρτησης calculatesalary, οι συνοριακές τιµές οι οποίες θα πρέπει να συµπεριληφθούν στις δοκιµασίες ελέγχου είναι οι τιµές 0, 1, 12, 13.
Έλεγχος ανοικτού κουτιού Με τον έλεγχο ανοιχτού κουτιού είµαστε ενήµεροι για την εσωτερική δοµή και λογική του αντικειµένου ελέγχου. Η επιδίωξη του ελέγχου ανοιχτού κουτιού είναι να επιλέξουµε δοκιµασίες ελέγχου οι οποίες εκτελούν όλες τις εντολές ή όλες τις πιθανές διαδροµές της ροής ελέγχου µέσα στη µονάδα προγράµµατος ή στις µονάδες προγράµµατος.
Έλεγχος ανοικτού κουτιού Για να επιλέξουµε δοκιµασίες ελέγχου βασιζόµαστε στην κάλυψη του κώδικα που παρέχει ο έλεγχος. Υπάρχουν τρεις διαφορετικές κατηγορίες καλύψεων, έτσι ώστε να αξιολογήσουµε την κάλυψη του κώδικα για τις δοκιµασίες ελέγχου που επιλέγουµε. Κάλυψη εντολών (statement coverage): Κάθε εντολή της µονάδας εκτελείται τουλάχιστον µία φορά. Κάλυψη διακλαδώσεων (branch coverage): Για κάθε σηµείο απόφασης στη µονάδα επιλέγεται κάθε διακλάδωση τουλάχιστον µία φορά. Κάλυψη διαδροµών (path coverage): Κάθε διακριτή διαδροµή του προγράµµατος εκτελείται τουλάχιστον µια φορά.
Ιδιότητες αυτόµατων ελέγχων Αυτόµατοι. Όλοι οι έλεγχοι θα πρέπει να είναι πλήρως αυτοµατοποιηµένοι. Διεξοδικοί. Όλοι οι έλεγχοι θα πρέπει να ελέγχουν ό,τι µπορεί να χαλάσει. Επαναλήψιµοι. Κάθε δοκιµασία ελέγχου θα πρέπει να εκτελείται συνέχεια και να παράγει τα ίδια αποτελέσµατα. Ανεξάρτητοι. Όλες οι δοκιµασίες ελέγχου θα πρέπει να εκτελούνται ανεξάρτητα. Επαγγελµατικοί. Όλες οι δοκιµασίες ελέγχου έχουν µόνιµο χαρακτήρα.
Software Integration Testing Πρόκειται για το επίπεδο ελέγχου λογισµικού στο οποίο οι ατοµικές µονάδες του συστήµατος συνδυάζονται και ελέγχονται ως οµάδα. Σκοπός του Integration ή Incremental Testing να ελέγξει και να παρουσιάσει τα σφάλµατα των αλληλεπιδράσεων και των διεπαφών µεταξύ των ενοτήτων κώδικα(modules)/ συστατικών του συστήµατος και να βεβαιώσει ότι η αρχιτεκτονική του συστήµατος έχει σχεδιαστεί σωστά κατά την φάση σχεδίασης. Το Integration Testing εκτός του ότι επιτρέπει την διεξαγωγή ελέγχου των µονάδων(unit tests) του συστήµατος µπορεί παράλληλα να εξετάζει και την συνολική ενσωµάτωση του συστήµατος στα όρια των ενοτήτων κώδικα.
System Integration Testing To System Integration Testing(SIT) είναι µια υψηλού επιπέδου ελεγκτική διαδικασία λογισµικού µέσω της οποίας οι µηχανικοί ελέγχου λογισµικού µπορούν να εξακριβώσουν αν όλα τα συσχετιζόµενα συστήµατα διατηρούν την ακεραιότητα των δεδοµένων τους και µπορούν να λειτουργήσουν σε συντονισµό µε άλλα συστήµατα µέσα στο ίδιο περιβάλλον. Η διεργασία αυτή ελέγχου διαβεβαιώνει ότι όλα τα επιµέρους συστατικά µέρη του συστήµατος έχουν ενσωµατωθεί καταλλήλως στο συνολικό σύστηµα και µπορούν να παρέχουν τα αναµενόµενα αποτελέσµατα.