Alcune persone ritengono
che le ottimizzazioni premature per un sistema sono la radice di ogni
male. Al contrario, l'efficienza deve essere tenuta a mente durante
gli sforzi di progettazione ed implementazione. Comunque non
significa che il progettista deve preoccuparsi delle micro
efficienze, ma deve considerare l'efficienza di primo ordine. La
migliore strategia per produrre efficienza è la pulizia e una
progettazione semplice. Solo questo tipo di progettazione può
rimanere relativamente stabile durante il ciclo di vita del progetto,
e serve da base alla calibrazione delle performance. Evitare il
gigantismo che si nota nei progetti di grandi dimensioni è
essenziale. Troppo spesso le persone aggiungono delle funzioni “solo
in caso che”, e finiscono per duplicare o quadruplicare le
dimensioni del programma, ed il tempo di esecuzione ne soffre. La
cosa peggiore è che sistemi troppo elaborati, sono difficili da
analizzare, e diventa difficile distinguere le componenti evitabili
da quelle inevitabili. Quindi l'analisi di base e l'ottimizzazione
viene scoraggiata. L'ottimizzazione deve essere il risultato delle
analisi e delle misure delle performance, non una modifica a caso del
codice. Specialmente per sistemi di grandi dimensioni le intuizioni
del programmatore o del progettista non fanno da guida per
l'efficienza del sistema. E' importante evitare costruzioni
inefficienti di per sé, e attenzione nell'ottimizzare un livello
accettabile di performance. Similarmente, è importante minimizzare
l'uso di costrutti e programmi non portabili, in quanto condannano il
programma ad essere eseguito su vecchi (meno potenti e/o più
costosi) computer.
In questo blog si parla di programmazione con il linguaggio C++, i post cercheranno di essere molto esplicativi sull'argomento trattato.
lunedì 13 gennaio 2014
sabato 4 gennaio 2014
Manutenzione del software
La parola “manutenzione” è fuorviante in quanto
suggerisce un'analogia con l'hardware; ma il software non ha bisogno
di essere lubrificato, né vi sono parti in movimento che si usurano,
o vi sono crepe nelle quali l'acqua possa accumularsi, e fare
ruggine. Il software può essere copiato esattamente, ed inviato a
lunga distanza con un costo quasi nullo.
Le attività che sono note come manutenzione del
software sono in realtà
ri-progettazioni e re-implementazioni che avvengono durante il normale
ciclo di sviluppo. Quando la flessibilità, l'estensione e la
portabilità sono enfatizzate durante la progettazione, le sorgenti
tradizionali dei problemi di manutenzione sono coinvolti
direttamente.
Come i test, la
manutenzione non deve essere ritardata o separata dallo sviluppo
principale del sistema. In particola, è importante avere una certa
continuità nel gruppo di persone coinvolte nel progetto. Non è
facile trasferire la manutenzione ad un gruppo di persone nuove che
non hanno avuto collegamenti con i progettisti e gli sviluppatori
originali. Quando sono necessari cambiamenti di grandi dimensioni, ci
deve essere enfasi nel trasferire le conoscenze e la comprensione
della struttura del sistema attuale alle nuove persone coinvolte. Se
la “squadra manutenzione” si domanda quale sia l'architettura del
sistema e vien lasciata da sola a domandarsi come debbano essere
fatte le modifiche e la loro implementazione, la struttura si
deteriora rapidamente sotto il peso delle nuove patch
locali. La documentazione tipicamente deve includere i dettagli
necessari per aiutare le nuove persone a comprendere le idee ed i
principi chiave.
Iscriviti a:
Post (Atom)