Come tracciare gli errori logici negli algoritmi [chiuso]

1

Sono principiante in algoritmi. L'anno scorso ho partecipato a Google Code Jam. Uno dei principali problemi che ho dovuto affrontare durante la competizione è stato che il mio codice funzionava correttamente sui miei casi di test, ma quando ho presentato un numero elevato di casi di test, non sono riuscito a superarli causando qualche errore logico.

Quindi, la mia domanda è fondamentalmente come posso tracciare errori logici nel mio codice in una situazione del genere in cui non riesce ad abbinare alcuni casi di test?

    
posta Thomas Owens 10.01.2014 - 18:03
fonte

4 risposte

6

Non esiste un modo semplice per aggirarlo. Devi esaminare gli input del test case uno per uno per situazioni a cui non hai pensato, elaborare manualmente la risposta corretta e vedere se il tuo algoritmo è d'accordo.

Ad esempio, una cosa che mi ha morso su una recente domanda Google Code Jam che ho provato per pratica non stava allocando un tipo numerico abbastanza grande per contenere il risultato. Stavo usando unint di 32 bit e avevo bisogno di almeno 64 bit. Osservando la differenza tra gli input test lunghi e brevi, ho notato quanto fossero più grandi i valori di input, come se cercassero di vedere intenzionalmente se esagerare.

Questo è parte del concorso. Vogliono vedere quanto bene anticipi i casi limite. Altrimenti, ti diranno quale caso di test ha fallito in modo specifico.

Un'altra cosa che può aiutarti è scrivere i tuoi casi di test, in modo che tu possa vedere da te quale errore ha fallito prima di inviarlo. Prova numeri davvero grandi, piccolissimi, combinazioni diverse di positivo e negativo, ecc. Prova a superare i limiti del problema per assicurarti di coprire tutti gli angoli. Il trucco consiste nel rendere i propri casi di test abbastanza semplici da calcolarli manualmente, ma anche abbastanza complessi da essere un test completo. Questo viene solo con la pratica.

    
risposta data 10.01.2014 - 18:38
fonte
2

Sebbene non sia una panacea, potrebbero esserci alcuni strumenti di ispezione del codice per la tua lingua che possono aiutare a trovare comportamenti errati.

Ad esempio, Pex è uno strumento di test white-box per le applicazioni .NET che cerca percorsi di codice e crea una serie unit test utilizzando i dati che esercitano ogni percorso di codice. Puoi provarlo sul Web all'indirizzo Pex For Fun . E ho appena scoperto Code Digger , una versione leggera di Pex costruita come estensione di Visual Studio .

Quando l'ho eseguito contro il mio codice, ho avuto un certo successo scoprendo casi limite che non ero riuscito a spiegare. Ho trovato che l'esercizio mi ha reso un autore di test di unità migliore.

    
risposta data 10.01.2014 - 21:05
fonte
1

I problemi logici possono essere risolti solo logicamente, i casi di test possono passare in quanto sono set di dati specifici progettati e scritti da te

Il modo migliore per assicurarsi che il tuo codice non fallisca in senso logico è prendere carta e matita e annotare ogni passaggio logico (con i dati impostati in mente) mentre passi attraverso i loop e le condizioni logiche

per Ad esempio, se ti imbatti in un loop, pensa che se l'input è uno 0 come reagirà, se l'input è un 100 come reagirà il loop, la scrittura ti aiuterà a ottenere chiarezza e ridurrai il tempo che avresti speso nel correggere i bug.

E poiché la maggior parte dei programmatori testimonierà che questo sistema viene incorporato in te come codice e sempre di più, quindi non devi scrivere cose, penserai automaticamente alle conseguenze logiche del tuo codice quando scrivi il codice.

    
risposta data 10.01.2014 - 20:32
fonte
0

È sempre una buona idea, prima di iniziare il codice, scrivere prima una descrizione chiara dei dati, valutando l'ambito completo di ciò che può essere contenuto nei dati. Una volta che hai capito, è molto più semplice far funzionare il tuo codice per la prima volta e farlo funzionare sui dati che verranno presentati in futuro.

Puoi anche scrivere un programma per ispezionare e convalidare i dati in arrivo. Questo è un buon passo per assicurarti che i dati siano ciò che pensi sia.

    
risposta data 11.01.2014 - 16:11
fonte

Leggi altre domande sui tag