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

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

Μια προσομοίωση της φάσης αυτής είναι απαραίτητο να τρέξει πριν τον τελικό έλεγχο από τον πελάτη (User Acceptance Tests) της εφαρμογής, ανάγοντας έτσι τον τελικό «εργοστασιακό» έλεγχο προϊόντος (Factory Acceptance Tests) από μια διαδικασία ελέγχου σε μια “prova generale” της παράδοσης στον πελάτη. Ο έλεγχος, όμως, του τελικού παραδοτέου στο λογισμικό δεν αρκεί, ώστε να παραδώσουμε ποιότητα. Ο τελικός έλεγχος έχει στόχο να βρει, πιθανώς, πολλά, άλλα όχι σοβαρά λάθη. Σε μια “prova generale” δεν υπάρχει περιθώριο σημαντικών αστοχιών.

Γι΄ αυτό οι διαδικασίες ελέγχου προϊόντος ξεκινούν νωρίς στον κύκλο ζωής ανάπτυξης λογισμικού. Ποια είναι τα προϊόντα, όμως, και πώς μπορούν να ελεχθούν όταν ακόμα δεν έχει υλοποιηθεί το τελικό παραδοτέο; Η απάντηση στο ερώτημα αυτό σχετίζεται με τη μεθοδολογία ανάπτυξης λογισμικού που έχει επιλεχθεί σε κάθε έργο. Οι πρώτες μεθοδολογίες ανάπτυξης λογισμικού προσομοίαζαν αυτές των γραμμών παραγωγής υλικών: σειριακή δομή χωρίς δυνατότητα ενδιάμεσων σημείων ελέγχου και διόρθωσης, με αποτέλεσμα πιθανό σφάλμα να προχωρά στην παραγωγή και με μόνη διαθέσιμη επιλογή την απόρριψη τεμαχίου, παρτίδας ή και ολόκληρης της παραγωγής. Στις μεθοδολογίες αυτές, τύπου waterfall, το τελικό προϊόν είναι διαθέσιμο στο τέλος του έργου σε πλήρη μορφή. Όλες οι ενδιάμεσες βασικές διεργασίες, όμως, έχουν τα δικά τους προϊόντα, απαραίτητα για τη συνέχεια της παραγωγής.

Στα ενδιάμεσα προϊόντα εφαρμόζονται διαδικασίες ελέγχου με στόχο την εξασφάλιση ποιότητας, ώστε να ξεκινήσουν οι επόμενες διεργασίες σωστά και εύρυθμα. Έτσι, τα προϊόντα ανάλυσης και σχεδιασμού, περνούν από στατικό έλεγχο (static testing), ενώ στον πηγαίο κώδικα εφαρμόζονται τεχνικές επιθεώρησης (code review), αλλά και ελέγχου λειτουργίας επιμέρους οντοτήτων (white box testing), σε επίπεδο unit και module. Η βιομηχανία λογισμικού κατάφερε να περιορίσει την αδυναμία εντοπισμού και διόρθωσης σφαλμάτων, πριν την δημιουργία του τελικού προϊόντος σε σειριακές διαδικασίες. Ο έλεγχος ενδιάμεσων προϊόντων, όμως, απαιτεί εξειδικευμένους μηχανικούς (subject matter experts), καθιστώντας, έτσι, τον έλεγχο δύσκολο και κοστοβόρο, ειδικά από την πλευρά του πελάτη.

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

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