YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Italian subtitles

← 01-18 Come Si Creano i Guasti

Get Embed Code
4 Languages

Showing Revision 3 created 01/14/2013 by fabio.

  1. Un programma lo possiamo vedere come una successione di stati di programma.
  2. Ogni stato di un programma e' composto da variabili con dei valori.
  3. Mentre un programma e' in esecuzione, elabora questi stati e li trasforma in nuovi stati.
  4. Per esempio, leggendo le variabili o modificandole. Di norma e' cosi' che opera.
  5. Ora comunque, fin dall'inizio, abbiamo un normale input e alla fine un guasto,
  6. ci dev'essere da qualche parte un difetto nel nostro programma che causa in effetti il problema.
  7. Lasciami quindi supporre che questa istruzione che eseguiamo qui abbia percio' un difetto.
  8. Cio' che succede ora e' che, quando viene eseguita, introduce
  9. un errore nello stato di programma che chiameremo "infezione".
  10. Questa infezione si sta ora propagando probabilmente in altri stati
  11. ed eventualmente diventa visibile all'utente come guasto.
  12. Cio' che abbiamo qui e' effettivamente un'intera catena di cause-effetti.
  13. Vedi, questi guasti, che sono un'infezione, e' provocata da infezioni precedenti
  14. e se siamo in uno stato in cui l'infezione non ha un'ulteriore origine, cioe' lo stato e' l'input stesso
  15. e l'output e' infettato, allora sappiamo che l'istruzione eseguita in questo preciso momento
  16. ha causato la transizione dallo stato attuale allo stato di infezione,
  17. questa e' l'istruzione che causa l'infezione, cioe' l'istruzione che contiene il difetto.
  18. Mentre stiamo facendo debugging, dobbiamo individuare questa catena di causa-effetto,
  19. e non dobbiamo solo individuarla ma dobbiamo anche spezzare la catena causa-effetto.
  20. Se riusciamo a spezzare questa catena che va da difetto a guasto, avremo concluso il debugging.
  21. Tutto cio' sembra quindi molto semplice, comunque, nella vita reale, e' molto piu' complicato di cosi'.
  22. Tanto per cominciare, non tutti i difetti causano automaticamente dei guasti.
  23. Puo' benissimo essere che un difetto causi un'infezione che, in seguito, semplicemente non
  24. si propaghi cosi' direttamente in un'infezione reale.
  25. Quindi l'infezione non verra' propagata e non sara' mai visibile all'utente.
  26. Potrebbe non causare nemmeno un guasto o che l'istruzione difettosa non venga mai eseguita
  27. o solo in certe situazioni molto particolari potra' causare un infezione e in seguito un guasto.
  28. Questo e' il problema con il testing. Potresti eseguire un programma molte e molte volte,
  29. mai avere un guasto e avere comunque dentro un difetto, pero', se un programma si guasta,
  30. cioe' se vediamo in effetti un guasto, allora potremo sempre tracciare a ritroso il difetto che l'ha provocato.
  31. Quindi se c'e' un guasto, possiamo sempre sistemarlo seguendo a ritroso la catena cusa-effetto.
  32. Ma poi il problema sara': gli stati sono moltissimi.
  33. Allora qua abbiamo 1,2,3,4, ... 12 variabili. Bella li'.
  34. In realta' ne abbiamo 10.000 di queste variabili e non solo ne abbiamo 10.000,
  35. ma abbiamo anche 10.000 passaggi tra difetti e guasti.
  36. Quindi tracciare a ritroso la catena causa-effetto puo' essere molto
  37. molto piu' complicato di quel che si vede in questa semplice immagine.
  38. Piu' lunga e' la catena causa-effetto, piu' tempo metteremo a percorrerla,
  39. piu' stati avremo da percorrere, piu' dura sara' farne il debugging.
  40. E anche, piu' grandi saranno gli stati e piu' dovremo stare a cercare l'infezione.
  41. Di nuovo, cio' rendera' sempre e sempre piu' dura farne il debugging.
  42. E' come cercare l'ago in un pagliaio, solo che l'ago
  43. a volte e' molto piu' grande di qualsiasi ago che potreste mai trovare sulla Terra.