Come si programma efficacemente quando ci vuole molto tempo per testare semplicemente il codice?

16

Il mio flusso di lavoro è sempre stato quello di scrivere un passo logico e quindi eseguire il programma e ispezionare l'output. Questo processo mi è stato di grande aiuto per gli incarichi universitari. Tuttavia, come faccio più sviluppo, ci sono spesso momenti in cui la compilazione e l'esecuzione del codice richiede da 1 a 2 minuti. Gli esempi includono il caricamento di un programma su un microcontrollore, che richiede l'interazione con un server esterno e l'impossibilità di implementare l'automazione a causa dell'autenticazione, dell'architettura software o della complessità.

Questi tipi di compiti sono molto inadatti al modo in cui di solito programma e ho difficoltà a codificare in modo efficace. Di solito faccio molti errori di sintassi ed errori logici, molti dei quali sono facilmente rilevabili testando. Tuttavia, con un tempo di attesa così lungo, questo metodo richiede troppo tempo.

    
posta Anne Nonimus 08.06.2011 - 20:15
fonte

8 risposte

25

Innanzitutto, qualsiasi tipo di debug interattivo è eccezionale. Lo vuoi nel tuo set di strumenti, perché se non ancora, allora un giorno ne trarrai beneficio. (I dettagli variano a seconda della lingua, della piattaforma e dell'IDE).

requiring interaction with an external server, and unable to implement automation due to authentication, software architecture, or complexity.

Analizzerei alcuni framework per l'utilizzo di oggetti fittizi . Questi ti consentono di circondare il componente sottoposto a test con un falso ecosistema di altri componenti, in modo che i tuoi test siano più mirati e puoi evitare di testare tutto quanto l'intera unità.

Inoltre, gli stessi oggetti di simulazione possono essere programmati con asserzioni, in modo da poter verificare che il componente testato abbia effettivamente effettuato una determinata chiamata.

    
risposta data 08.06.2011 - 20:20
fonte
12

Lavorerei sodo per ridurre il tempo di test. Avevo lavorato in un paio di aziende sviluppando il codice incorporato e il test era doloroso, richiedendo viaggi nella stanza del server e FTP manuali e riavvii e comandi multipli all'hardware di test. Poi sono entrato a far parte di un gruppo molto buono, dove ho potuto semplicemente digitare "make test" alla mia scrivania e ottenere risultati in meno di un minuto. In quel minuto:

  • Il mio codice è stato incorporato in una nuova immagine del kernel per l'hardware incorporato.
  • Il server DHCP è stato aggiornato per puntare al nuovo kernel.
  • La test board è stata riavviata.
  • La test board ha recuperato il kernel dalla mia workstation tramite un mount NFS.
  • La test board è stata riavviata sul nuovo kernel.
  • Sono stati eseguiti i test delle unità.
  • L'output del test dell'unità è stato restituito alla mia workstation.

Ci è voluto del tempo per far funzionare tutto questo, ma lo sforzo per automatizzare tutti questi passaggi è stato recuperato di un centuplo quando lo staff di sviluppo è cresciuto.

    
risposta data 09.06.2011 - 07:23
fonte
8

I test automatici non sono sostitutivi per revisione e comprensione.

Può darsi che tu stia usando il test come stampella. Se lo fai, impedirai il tuo apprendimento. Non sto sostenendo che tu non collaudi. Invece ti consiglierei che prima di eseguire il test rivedi ciò che hai scritto. Comprendi cosa hai scritto, assicurati che abbia senso e assicurati che la sintassi sia corretta.

    
risposta data 08.06.2011 - 21:21
fonte
5

Hai già dato la risposta: I usually make a lot of syntax errors and logic errors

Quindi, lavorando sodo per migliorarlo, dovresti essere in grado di ridurre i tempi di test. Gli errori di sintassi dovrebbero essere i primi che dovresti ridurre. Non hai mai fatto un test di programmazione con una carta e una matita nel tuo studio?

Ho avuto la stessa cosa quando sono passato da PHP a Java. Ho dovuto imparare a eseguire il debug invece di stampare solo alcune variabili e premere F5 nel browser ...

    
risposta data 08.06.2011 - 20:23
fonte
4

Hai bisogno di una buona piattaforma di test funzionale o di unità che possa eseguire automaticamente i test per te, preferibilmente in background. Ciò richiederà l'utilizzo di Mock come indicato sopra e in base alla lingua in cui si utilizza una sorta di iniezione di dipendenza.

Rendendo i tuoi oggetti il più indipendenti possibile e poi usando i metodi di iniezione per aggiungere vincoli esterni, non è difficile creare una piattaforma di prova per il tuo codice.

    
risposta data 08.06.2011 - 21:02
fonte
2

Il vero divertimento arriva quando semplicemente non puoi testare il tuo codice se non usando la rabbia. Questo accade molto con i sistemi di trading, poiché i simulatori di scambio disponibili sono spesso poveri, inesistenti o addirittura non conformi a ciò che dicono i fornitori del software di scambio. Questo è parte del ricco arazzo della vita, temo. Il mio approccio è garantire che almeno la mia parte della transazione sia ben scritta e ben documentata, quindi può essere facilmente modificata rapidamente.

    
risposta data 08.06.2011 - 21:27
fonte
2

Test unitario; Applicazioni simulate / simulatori.

Ci vorrà del tempo, concesso, e potresti aver bisogno di raccogliere e massaggiare i dati di esempio per creare modelli appropriati, ma alla fine pagherà: ti risparmierai tutto il tempo e avrai problemi a incontrarti quando proverai a prova contro i sistemi esterni.

Se usati correttamente, questi strumenti garantiranno che prima di andare vicino a sistemi esterni, sei sicuro al 99,9% che se il tuo codice fallisce, è qualcosa nel sistema esterno / cambiamento di ambiente che lo ha causato, non un bug nel tuo proprio codice.

Ho lavorato professionalmente per un po 'di tempo come facevi a scuola, e in molti casi è stato molto efficace. Alla fine ho lavorato con alcune persone che mi hanno costretto ad abbandonare quella metodologia e usare invece test unitari e simulazioni.

Ora, non avvio alcun progetto senza prima pensare all'implementazione delle fasi di test: test di unità, simulazioni, simulatori, dati di esempio, ecc.

    
risposta data 23.07.2011 - 06:52
fonte
1

I usually make a lot of syntax errors and logic errors

Forse usare Linter può aiutarti un po 'qui.

Ero in una situazione simile con il mio precedente datore di lavoro. La nostra base di codice era davvero enorme e per apportare eventuali modifiche dovevo codificare, compilare quindi sostituire .class file in un server di sviluppo, quindi riavviare il dev-sever con lo script di riavvio. E con mio grande sgomento, ci vorrà circa mezz'ora per riavviare il server.

Più tardi ho scoperto che era possibile anche eseguire il debug remoto del dev-server.

Quindi ecco cosa ho fatto per ottimizzare il mio processo

  • Primo ciclo iniziale di debug remoto, questo mi ha permesso di vedere il flusso del codice esatto e i valori esatti / stati delle variabili.

  • Pianificando come e quali cambiamenti farò.

  • Apportare modifiche e quindi confrontare le differenze

  • Errori nella memorizzazione nella cache usando linter o compilando.

  • Eliminazione della correzione rapida sostituendo i file .class e riavviando.

A volte includo anche un sacco di istruzioni del registro per controllare nuovamente il flusso del codice e controllare i valori / stati. Questo mi ha aiutato molto.

Anche l'utilizzo di un IDE con una buona complicazione automatica può aiutare notevolmente a ridurre gli errori di battitura.

Spero che questo aiuti.

    
risposta data 30.09.2017 - 08:54
fonte

Leggi altre domande sui tag