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

Γράφει ο Σπύρος Νικολάου, Διευθυντής Πωλήσεων και Επιχειρηματικής Ανάπτυξης, Code4Thought.

Σήμερα, το λογισμικό είναι μέρος της καθημερινότητάς μας και δεν υπάρχει αμφιβολία ότι η χρήση του είναι ένα σημαντικό μέρος της ζωής μας. Το λογισμικό μπορεί να βρεθεί σε διάφορους τομείς, όπως ηλεκτρονικές συναλλαγές, χρηματιστήριο, στον τομέα της υγείας, για την παρακολούθηση και την ανάπτυξη κυβερνητικών υποδομών, για την κατασκευή και τον έλεγχο σε πραγματικό χρόνο κρίσιμων συστημάτων που δεν πρέπει να αποτύχουν, κ.α. Ξέρουμε όμως πραγματικά από τι αποτελείται; Ή ότι είναι αξιόπιστο και ασφαλές;

Όπως γίνεται σε άλλες βιομηχανίες ή κλάδους (π.χ. κατασκευαστικός, αυτοκινητοβιομηχανία) το λογισμικό (ή ακριβέστερα τα προϊόντα ή συστήματα λογισμικού) θα πρέπει να αναπτύσσεται κάτω από αυστηρά χρονοδιαγράμματα και κόστος, σε μια προσπάθεια να ικανοποιήσει τις απαιτήσεις των ενδιαφερόμενων και των τελικών χρηστών. Παρά τις όποιες συνθήκες ανάπτυξης, αγοράς η λειτουργίας του, θα πρέπει να πληροί λειτουργικά και μη λειτουργικά χαρακτηριστικά, όπως η δυνατότητα συντήρησης, αξιοπιστίας, ασφάλειας, διαθεσιμότητας, «μεταφερσιμότητας» και άλλων χαρακτηριστικών και ιδιοτήτων, όπως καθορίζονται από διεθνή πρότυπα και πρακτικές (π.χ. ISO25010).

Οι προκλήσεις της ποιότητας λογισμικού

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

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

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

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

Σε κάθε περίπτωση όμως οι ερωτήσεις που θα πρέπει να απασχολούν τις επιχειρήσεις, κυβερνήσεις και δημόσιους οργανισμούς για κάθε έργο τεχνολογικού εκσυγχρονισμού ή μετασχηματισμού θα πρέπει να περιλαμβάνουν: 

  • Κάνουμε τα πράγματα με το σωστό τρόπο; 
  • Επιλέγουμε την σωστή τεχνολογία/σύστημα και προμηθευτή; 
  • Έχουμε τον έλεγχο της ποιότητας ανάπτυξης λογισμικού των προμηθευτών μας;
  • Πρέπει να ξαναχτίσουμε ή να αναβαθμίσουμε τα υπάρχοντα συστήματα όπου φυσικά αυτό είναι δυνατό; 
  • Πώς μπορούμε να αναλάβουμε τον σωστό έλεγχο του συστήματος μετά την παράδοση του έργου; 

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

Οι καταστροφικές συνέπειες ενός κακού κώδικα

Προκειμένου να κατανοήσουμε καλύτερα τη σημασία της καλής ποιότητας λογισμικού αρκεί να λάβουμε υπ’ όψη του ότι όταν ακούμε ή διαβάζουμε ότι το σύστημα δεν λειτουργεί προσωρινά ή ότι η ασφάλεια παραβιάστηκε, είναι περιστατικά τα οποία (είτε τα περισσότερα είτε στο σύνολό τους) που οφείλονται στην κακή ποιότητα του κώδικά του (λογισμικού). Οι μεγαλύτερες αποτυχίες λογισμικού στην πρόσφατη ιστορία, συμπεριλαμβανομένων επιθέσεων ransomware, διακοπών πληροφορικής και διαρροών δεδομένων έχουν προκαλέσει καταστροφικές συνέπειες σε τράπεζες, αεροπορικές εταιρείες, συστήματα εθνικής υγείας και ασφάλειας, social media κ.τ.λ. Η ζημιά δεν περιορίζεται μόνο στο οικονομικό κομμάτι (μπορεί να φθάσει και τα εκατομμύρια ευρώ) αλλά αφορά και το brand, την εταιρεία. Για παράδειγμα, το καταστροφικό λογισμικό της Boeing όχι μόνο σκότωσε 346 ανθρώπους, αλλά κατέστρεψε και το αεροσκάφος 737 max. Βλάβη λογισμικού ήταν και η αιτία της συντριβής του αεροσκάφους Airbus A400M κ.τ.λ.

Γι’ αυτό, η ποιότητα των συστημάτων λογισμικού θα πρέπει να αποτελεί μείζονα ανησυχία για εκείνους που τα αναπτύσσουν, συντηρούν, βελτιώνουν, αποκτούν ή τα χρησιμοποιούν. Η τεχνική ποιότητα των προϊόντων λογισμικού σχετίζεται με την ευκολία και την ταχύτητα με την οποία το λογισμικό επιτρέπει την τροποποίηση του, ώστε να συμβαδίζει με τις μεταβαλλόμενες ανάγκες των χρηστών του ή άλλων ενδιαφερομένων αλλά και με την ασφάλεια. 

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

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

Πολλοί από εμάς έχουμε αισθανθεί τις επιπτώσεις της κακής ποιότητας σε λογισμικό, σε τραπεζικές συναλλαγές, αγορές εισιτηρίων κ.λπ., όπου εκδηλώνονται οι καθυστερήσεις του συστήματος, οι χρόνοι απόκρισης είναι πολύ μεγάλοι και αυτό σημαίνει απώλεια χρόνου και χρημάτων. Ωστόσο, ο αντίκτυπος είναι συνήθως πολύ πιο σοβαρός εάν η αποτυχία ενός συστήματος προκαλεί οικονομική, περιβαλλοντική, κοινωνική ή ακόμα και ανθρώπινη απώλεια.