-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« OpenPec - Posta Elettronica Certificata | Home | Settima Esegesi »

come ti fo il test della sub
24.02.04

vorrei mettervi a parte di una piccola tecnica che ho avuto modo di sperimentare e mi è parsa valida.

ieri stavo lavorando ad un mio programma. una cosa piuttosto complessa, varie centinaia di righe, che richiede diverse parametri per girare correttamente e compie un bel numero di operazioni -- ergo, ci mette un po' a girare.

mi è capitato di aver bisogno di verificare il funzionamento di una sub che avevo aggiunto, e quindi di dover fare dei test solo di quella, passandogli vari parametri.

potevo fare diverse cose per raggiungere il mio scopo, ma tutte presentavano qualche svantaggio: far girare l'intero programma solo per verificare la sub, con l'aggravante di preparare dei dati di input che coprissero tutti i casi da testare, avrebbe richiesto troppo tempo. copiare e incollare la sub in un file a parte e far girare quello, per poi ricopiare la versione funzionante nel programma principale. oppure lanciare il programma con il debugger (perl -d), dare vari comandi (ad esempio x mysub(1, 2, 3)) e osservare i risultati... insomma, tutte cose che mi avrebbero distratto troppo da ciò che avevo bisogno di fare (va bene, sarò sincero: cose che avrebbero urtato la mia prima virtù cardinale, la pigrizia :-).

allora mi è venuta in mente questa, che a mio avviso è la più immediata delle soluzioni: ho messo la mia sub in un blocco BEGIN, e nello stesso blocco varie linee con cui verificare tutti i casi che mi interessavano, seguiti da un bel exit(0);.

per chiarire come funziona la cosa in concreto, ecco l'esempio: diciamo che la mia sub è mysub, e voglio verificare cosa fa se chiamata con 1, 2 o 3 parametri. nel programma originale avevo:

# varie righe di programma...

sub mysub {
    # corpo della sub...
}

# resto del programma...

per fare i test, ho temporaneamente trasformato il codice in questo (in blu le righe aggiunte):

# varie righe di programma...

BEGIN {
sub mysub {
    # corpo della sub...
}
print mysub(1);
print mysub(1, 2);
print mysub(1, 2, 3);
exit(0);
}

# resto del programma...

ovviamente il tutto funziona fintanto che la sub da testare è facilmente "isolabile", nel senso che non dipende da altre parti del programma principale, che risulterebbero indefinite. altrimenti mettere il blocco BEGIN accanto a tutto ciò che serve potrebbe essere più tedioso del necessario. eventuali moduli utilizzati dal programma, però, vengono letti in ogni caso (use viene implicitamente eseguito in un blocco BEGIN).

va da sé, inoltre, che il programma dovrebbe avere un flusso relativamente lineare (ossia, non compiere operazioni potenzialmente "pericolose" all'interno di blocchi BEGIN a sua volta).

detto ciò, spero che questa minimale tecnica di debug possa risultarvi utile e magari aiutarvi a risparmiare un po' di prezioso tempo :-)

Inviato da dada il 24.02.04 13:06
Ti è piaciuto questo articolo? Iscriviti al feed!










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google