Esiste una strategia migliore del fare affidamento sul compilatore per rilevare gli errori?

8

Ho programmato in C e C ++ per qualche tempo, anche se direi che sono lontano dall'essere un esperto. Per un po 'di tempo, ho utilizzato varie strategie per sviluppare il mio codice, come test unitari, progettazione basata su test, revisioni del codice e così via.

Quando ho scritto i miei primi programmi in BASIC, ho digitato in lunghi blocchi prima di scoprire che non sarebbero stati in esecuzione e che erano un incubo da eseguire il debug. Così ho imparato a scrivere un po 'e poi testarlo.

In questi giorni, mi trovo spesso a scrivere ripetutamente un po 'di codice, quindi a usare il compilatore per trovare tutti gli errori. Va bene se riprende un errore di battitura, ma quando inizi ad aggiustare i tipi di parametri ecc. Solo per farlo compilare puoi rovinare il design. Sembra anche che il compilatore stia strisciando nel processo di progettazione quando dovrebbe essere usato solo per verificare la sintassi.

Qui c'è il rischio di affidarsi troppo al compilatore per migliorare i miei programmi. Ci sono strategie migliori di questa?

Ricordo vagamente qualche tempo fa un articolo su un'azienda che sviluppava un tipo di compilatore C in cui un file di intestazione extra specificava anche i prototipi. L'idea era che le incoerenze nella definizione dell'API sarebbero state più facili da catturare se dovessi definirla due volte in modi diversi.

    
posta koan 29.12.2010 - 21:08
fonte

5 risposte

13

Non regolare le cose per renderlo compilabile. Regola le cose in modo che siano corrette . Se è stato "progettato" in modo che i tipi di parametro non corrispondessero, allora il progettista non ha idea di cosa stiano facendo.

Se non vuoi fare affidamento sul compilatore, migliora la tua conoscenza della lingua. Studia la struttura delle definizioni e delle dichiarazioni e controlla ciò che scrivi per gli errori prima della compilazione. E usa le revisioni del codice.

L'idea di prototipi in più sembra pessima. Se la progettazione viene errata una volta, cosa deve impedire che il secondo progetto venga progettato in modo errato? E usando diversi formati / paradigmi / ecc per la stessa cosa, è probabile che confonderai le persone. Farei in modo che tutti comprendano il formato principale in modo che tu possa concentrarti sulla realizzazione del progetto per la prima volta, piuttosto che raddoppiare il lavoro di progettazione per individuare gli errori. Come ogni altra cosa, i disegni dovrebbero essere refactored, ma non credo che farlo due volte abbia molto senso.

    
risposta data 29.12.2010 - 21:15
fonte
4

Onestamente, credo che il tuo obiettivo dovrebbe SEMPRE essere quello di scrivere un programma che compili la prima volta. Mi rendo conto che questo è difficile e probabilmente non succederà spesso, ma dovrebbe comunque essere il tuo obiettivo. Pensa al software come a un componente hardware. Fatti credere che è incredibilmente costoso ricompilare il tuo codice (come la ri-produzione di una lavagna). Un compilatore non è un debugger e non dovrebbe essere trattato come tale.

    
risposta data 29.12.2010 - 21:22
fonte
3

Il compilatore non riesce a trovare tutti gli errori quindi non ha senso fingere che possa farlo. Tutto ciò che riesce a trovare sono errori di sintassi e errori di battitura. È abbastanza buono per questo che ho lasciato fare quella parte del lavoro (anche se in questi giorni l'ambiente cattura il 99% di quelli stessi prima che tu abbia mai fatto la compilazione) ma so perfettamente che non sono tutti gli errori.

L'unica volta in cui mi baso su questo tipo di informazioni per dirmi cosa scrivere è quando ottengo cose del genere che mi dicono che non è possibile convertire automaticamente un doppio in un float - se dove stai inviando i dati si aspetta che i float (e dato che quello che sto facendo attualmente è giocare con la libreria XNA che fa esattamente questo) e la sorgente restituisce il doppio (come nel caso della libreria matematica C #), allora devi semplicemente convertire.

    
risposta data 29.12.2010 - 23:06
fonte
1

Il compilatore è uno strumento. Come con tutti gli strumenti, possono essere abusati.

Quando inizi per la prima volta con una lingua, non c'è niente di sbagliato nell'usare il compilatore alla cieca per testare il tuo programma. È intrinsecamente il modo in cui l'apprendimento funziona, indovina e controlla. Tuttavia, ciò non significa che dovresti continuare a codificare in quel modo.

È nel tuo miglior interesse capire abbastanza bene la lingua in modo che tu possa compilare il tuo programma nella tua testa. Quindi trascorrerai meno tempo in attesa che il compilatore finisca.

Dico che probabilmente è meglio che il programma si trovi sempre entro poche righe / blocchi di codice da compilare.

    
risposta data 29.12.2010 - 21:27
fonte
0

La maggior parte degli IDE moderni catturano un sacco di problemi del compilatore e credo di essermi abbastanza fidato anche di questo.

Forse tornare ai file di testo e ai compilatori da riga di comando?

    
risposta data 25.01.2011 - 15:54
fonte

Leggi altre domande sui tag