Problema
Si vuole calcolare il prodotto di due vettori utilizzando un elemento di software scritto da altri.
Si vuole utilizzare il codice sorgente di un programma come se fosse una scatola nera (black-box) ovvero vogliamo fornire un dato di input ed ottenere “senza problemi” l’output.
L’utilizzatore del codice sorgente si trova diversi punti da risolvere:
L’elemento di software in questione non e’ usabile
L’inserimento nel codice sorgente di qualche commento ha consentito di rendere l’elemento di software maggiormente comprensibile.
La documentazione interna risulta dunque essere la prima interfaccia tra l’ utente e l’elemento di software che si intende adoperare.
Il “buon senso” ci suggerisce che:
” una buona documentazione interna è indice di un elemento di software scritto bene”
Volendo stabilire una convenzione su cosa debba essere presente nella documentazione interna essa deve riportare:
L’elemento di software è il risultato di un complesso percorso di progettazione i cui principali punti sono:
Il processo descritto nei punti precedenti è un processo osmotico, ovvero da una fase si passa ad una altra potendo anche tornare indietro.
Al fine di utilizzare al meglio la “scatola nera” (black – box) è necessario fornire un buon “manuale d’uso”
Bisogna in ogni caso fornire una “documentazione esterna” di utilizzo!
Quella riportata nell’esempio è:
f06eaf.f
una routine della libreria matematica NAG del capitolo f06 dedicato alle operazioni di base di algebra lineare.
E’ la versione Nag della routine:
DDOT()
di un’altra libreria per l’algebra lineare numerica Blas (livello I).
Come utile base di lavoro per la documentazione esterna di elementi di software in un corso di base di programmazione stabiliamo alcune convenzioni rispetto alla documentazione esterna. Di seguito si riportano i punti che generalmente dovrebbero essere presenti in un buon manuale d’uso.
1. Scopo. 2-3 linee che descrivono quale tipo di problema l’elemento di software risolve. Ad esempio:
Scopo. La procedura void matvet() calcola il prodotto A*x= y di una matrice di dimensione n x m per un vettore.
2. Specifiche. Il prototipo della funzione che indica quali siano i parametri di Input/Output della funzione. Ad esempio: void matvet (float **A, int n, int m, float *x, float *y)
3. Descrizione. Breve descrizione dell’algoritmo principale su cui si base l’elemento di software. Tale punto quando necessario deve riportare anche le possibili strategie implementative.
4. Riferimenti bibliografici. Le principali fonti da cui si sono tratte specifiche implementative o algoritmi di base.
3. Lista dei parametri. Un elenco dei paramatri di input/output della funzione con relativa specifica del tipo. Ad esempio
In input:
A. Reale. Matrice che si vuole moltiplicare.
n. Intero. Numero di righe della matrice A.
m. Intero. Numero di colonne delle matrice A.
x. Reale. Vettore che si vuole moltiplicare
In output:
y. Reale. Risultato del prodotto A * x.
5. Funzioni ausiliarie. La descrizione e le specifiche di eventuali funzioni ausiliarie richiamate dalla funzione che si stà descrivendo.
6. Complessità di tempo e di spazio. La descrizione del numero asintotico di operazioni che l’algoritmo principale implementato nella funzione espleta. Bisogna inoltre anche riportare la memoria che l’elemento di software alloca.
7. Accuratezza fornita. Il tipo di errore presente sul risultato della procedura e l’accuratezza con cui esso è fornito.
8. Indicatori di errore. Eventuali variabili utilizzate come indicatore di errore. Il valore di eccezione che esse registrano con una indicazione del tipo di errore registrato.
9. Esempio d’uso. Si deve riportare il listato di un “tipico” programma principale che richiami la nostra funzione con i risultati che esso produce una volta che è stato mandato in esecuzione.
1. Prolusione
2. Sistemi Operativi – parte prima
3. Sistemi Operativi – parte seconda
6. Il linguaggio C – parte prima
8. Il linguaggio C – funzioni e puntatori
10. Il linguaggio C – parte terza
11. La documentazione del software
12. Dati strutturati
13. Esercizi sui dati strutturati
14. Approfondimenti di C, Stringhe e file
15. Esercizi su stringhe e file
16. La ricorsione
17. Il linguaggio c++ parte prima
18. Il linguaggio C++ - parte seconda
19. Strutture dati di tipo astratto
Sitografia essenziale
Collezione di software scientifico (in Inglese)