Λογισμικό που μπορεί να ελεγχθεί
Για να μπορέσει το λογισμικό να ελεγχθεί αποτελεσματικά πρέπει να 
πληροί τις παρακάτω προϋποθέσεις:
-  Λειτουργικότητα
 -  Παρατηρησιμότητα
 -  Ελεγξιμότητα
 -  Αποσυνθεσιμότητα
 -  Απλότητα
 -  Ευστάθεια
 -  Τεκμηρίωση
 
Αναλυτικά:
-  Λειτουργικότητα
	
	-  Λίγα λάθη
	
 -  Τα λάθη να μην εμποδίζουν τον έλεγχο
	
 -  Η ανάπτυξη υλοποιεί ολοκληρωμένες λειτουργίες (που μπορούν να ελεγχθούν)
	
 
 
 -  Παρατηρησιμότητα
	
	-  Κάθε είσοδος δημιουργεί διακριτά αποτελέσματα
	
 -  Η κατάσταση του συστήματος και των μεταβλητών του είναι ορατή
	
 -  Η προηγούμενη κατάσταση του συστήματος και των μεταβλητών του μπορεί να είναι ορατή (π.χ. από καταγραφές)
	
 -  Εύκολη ανίχνευση λανθασμένων αποτελεσμάτων
	
 -  Αυτόματη ανίχνευση εσωτερικών σφαλμάτων
	
 -  Αυτόματη αναφορά εσωτερικών σφαλμάτων
	
 -  Πρόσβαση στον πηγαίο κώδικα
	
 
 -  Ελεγξιμότητα
	
	-  Κάθε πιθανή έξοδος μπορεί να δημιουργηθεί με κατάλληλες εισόδους
	
 -  Όλος ο κώδικας μπορεί να εκτελεστεί με κατάλληλες εισόδους
	
 -  Ο ελεγκτής μπορεί να μεταβάλει άμεσα την κατάσταση του λογισμικού και του υλικού
	
 -  Η μορφή της εισόδου και της εξόδου είναι τακτική και ευνόητη
	
 -  Οι έλεγχοι είναι εύκολο να προδιαγραφούν, να αυτοματοποιηθούν
	και να αναπαραχθούν.
	
 
 -  Αποσυνθεσιμότητα
	
	-  Το λογισμικό αποτελείται από ανεξάρτητα αρθρώματα
	
 -  Κάθε άρθρωμα μπορεί να ελεγχθεί αυτόνομα
	
 
 -  Απλότητα
	
	-  Λειτουργική απλότητα: δεν υπάρχουν περιττές λειτουργίες
	
 -  Δομική απλότητα: τα σφάλματα μπορούν να απομονωθούν σε
	συγκεκριμένα αρθρώματα
	
 -  Απλότητα κώδικα: ο κώδικας μπορεί εύκολα να ελεγχθεί.
	
 
 -  Ευστάθεια
	
	-  Το λογισμικό δεν αλλάζει συχνά
	
 -  Οι αλλαγές στο λογισμικό ελέγχονται
	
 -  Οι αλλαγές δεν αναιρούν προηγούμενους ελέγχους
	
 -  Προβλήματα στο λογισμικό δεν το αχρηστεύουν
	
 
 -  Τεκμηρίωση
	
	-  Κατανοητό σχέδιο λογισμικού 
	
 -  Κατανόηση της δομής του λογισμικού και των σχέσεων των τμημάτων του
	
 -  Τεκμηρίωση των αλλαγών
	
 -  Εύκολη πρόσβαση στην τεκμηρίωση
	
 -  Καλή οργάνωση της τεκμηρίωσης