Domanda

Quello che le buone pratiche e le strategie sono lì per l'esecuzione di test di regressione in ambienti embedded o in altre situazioni in cui la possibilità di automatizzare i test è molto limitata.

Nella mia esperienza un sacco di test deve essere eseguito manualmente cioè un tester deve spingere una sequenza di tasti e verificare che la macchina si comporta correttamente. Come sviluppatore è davvero difficile per accertarvi che le modifiche non si rompono qualcosa d'altro.

Senza una corretta regressione mette alla prova la situazione diventa ancora peggiore durante i grandi refactoring e così via.

Qualcuno riconosce il problema? Hai trovato una buona soluzione o di un processo per affrontare questo tipo di problema?

È stato utile?

Soluzione

Personalmente, io sono un grande fan di avere il mio codice embedded compilare sia l'hardware di destinazione e il mio computer. Ad esempio, quando l'obiettivo di una 8086, ho inserito sia un punto di ingresso che mappa per ripristinare il 8086 hardware e un punto di ingresso DOS. L'hardware è stato progettato in modo che tutti IO è stato mappato la memoria. Ho poi condizionalmente compilato in un simulatore di hardware e condizionatamente cambiato le posizioni di memoria hardware alla memoria hardware simulata.

Se dovessi lavorare su una piattaforma non-x86, probabilmente sarei scrivere un emulatore invece.

Un altro approccio è quello di creare un impianto di prova in cui tutti gli ingressi e le uscite per l'hardware sono controllati tramite software. Usiamo questo molto nei test di fabbrica.

Una volta che abbiamo costruito un simulatore nell'hardware IO. In questo modo il resto del sistema potrebbe essere testato con l'invio di alcuni comandi tramite CAN per mettere l'hardware in modalità simulata. Analogamente, software ben fattorizzato-potrebbe avere un "modo simulato" dove IO viene simulato in risposta a comandi software.

Altri suggerimenti

Per la prova incorporato, vorrei suggerire che si progetta il modo per uscire da questo molto presto nel processo di sviluppo. Sandboxing il codice incorporato per funzionare su una piattaforma PC aiuta molto, e poi fare beffardo dopo :)

Questo farà sì integrety per la maggior parte di esso, ma si sarebbe ancora bisogno di fare sistema e test di accettazione manualmente in seguito.

  

Qualcuno riconosce il problema?

La maggior parte sicuramente.

  

Hai trovato una buona soluzione o   processo per affrontare questo tipo di   problema?

Una combinazione di tecniche:

  • I test automatici;
  • test
  • bruta forza, cioè quelli che non sono intelligenti come test automatizzati, ma che ripetutamente testare una funzione per un lungo periodo (ore o giorni), e possono essere lasciate a funzionare senza intervento umano;
  • Test manuali (spesso difficile da evitare);
  • Test su un emulatore software su un PC (o come ultima risorsa, un emulatore hardware).

Per quanto riguarda la compilazione su un compilatore PC:. Che avrebbe sicuramente senso per i moduli di alto livello, e per i moduli di basso livello con un test adeguato cablaggio

Quando si tratta di, per esempio, parti del codice, che hanno a che fare con i segnali in tempo reale provenienti da più fonti, l'emulazione è un buon punto di partenza, ma non credo sia sufficiente. Spesso non c'è sostituto per testare il codice sul hardware reale, come realistico un ambiente il più possibile.

A differenza di molti soccorritori finora, io lavoro con ambienti embedded che non assomigliano a sistemi desktop a tutti, e quindi non in grado di emulare il sistema embedded sul desktop.

Al fine di scrivere buoni sistemi di prova, è necessario il sistema di test per avere feedforward e feedback. JTAG è la via feed-forward più comune per controllare il dispositivo. È possibile impostare lo stato completo del dispositivo (forse anche l'intero consiglio se siete fortunati) e quindi impostare il codice di prova per l'esecuzione. A questo punto si ottiene il tuo feedback. JTAG può anche servire come un dispositivo di feedback. Tuttavia, un analizzatore logico un'API software è il migliore in questa situazione. È possibile cercare determinati livelli sui pin, contare gli impulsi e anche analizzare i flussi di dati in streaming da periferiche.

Fornire prova imbracature / sandbox / prototipi per i singoli sottosistemi, e per l'intero progetto, che emulano l'ambiente di destinazione.

Questo non elimina la necessità di test in ambiente reale, ma riduce notevolmente il loro numero come la simulazione prenderà maggior parte dei problemi quindi per il momento che tutti passano e si esegue il test umano-driven costosi si sono ragionevolmente sicuro che lo passare quella prima volta.

A parte i suggerimenti finora di assicurare la vostra applicazione può costruire ed almeno parzialmente test su normale PC (che è anche utile per utilizzando strumenti come Valgrind) Vorrei pensare alla tua progettazione del software.

Un progetto ho lavorato aveva un componente per la guida l'hardware, una per trattare con compiti di gestione ed un altro della gestione della rete. La gestione della rete è stata gestita da SNMP quindi è stato facile scrivere script che correvano a distanza di guidare l'hardware per fare qualcosa.

Per eseguire i test hardware a basso livello che ho scritto un semplice lettore di sceneggiature che analizzato gli script di test e iniettato comandi nella IPC della mia conducente. Mentre l'uscita si basava il video è stato difficile per automatizzare la verifica una manipolazione oltre ad occhio, ma certamente salvato Mi RSI. E 'stato anche molto utile nella generazione di script che lo stress testato o simulate condizioni di guasto noti per garantire insetti non hanno fatto ri-verificarsi.

Se io dove fare tutto da capo avrei probabilmente implementare un condiviso libreria utilizzata dal test harness e il codice vero e proprio per inviare il nucleo messaggi. Vorrei quindi concludere la lib in Python (o qualcosa del genere simile) quindi il mio test potrebbe essere un po 'più "script".

Sono d'accordo con tutti quelli che dicono di hardware automatizzato è un must - stiamo usando questo approccio per testare il software embedded con alcune delle nostre unità. Abbiamo costruito le grandi stazioni di prova a due rack pieno di simulatori di hardware e utilizzare NI TestStand con un mix di LabVIEW, C # codice, DLL vendor, ecc per gestire tutto questo. Dobbiamo testare un sacco di hardware - è per questo che abbiamo tutte queste stronzate. Se stai solo testando il software, allora è possibile scalare di nuovo a all'essenziale. Test di un interfaccia seriale? Basta costruire un dispositivo per simulare il traffico seriale ed esercitare tutti i messaggi (e un paio di messaggi non validi) per garantire che il software risponda correttamente. Test DIO? Questo è facile: ci sono un sacco di periferiche USB o dispositivi embedded per simulare DIO. Se timing è importante dovrete utilizzare un altro dispositivo incorporato per ottenere le tolleranze strette che stai cercando, altrimenti un PC farà bene.

La parte importante è sapere sempre cosa si sta testando e non a testare qualcosa di diverso da quello. Se si tratta di un software, assicurarsi che il test è indipendente dall'hardware al più grande grado possibile. Se si sta testando la generazione di forme d'onda o qualcosa con un D / A, separare i compiti - testare il D / A di hardware con una build speciale del software sul dispositivo embedded che non fa nulla di fantasia, tranne sputare fuori una sequenza prestabilita di livelli di tensione. Poi si può vedere se i riferimenti sono spenti, se i filtri sono impostati sulla frequenza sbagliata, ecc Poi si dovrebbe essere in grado di testare il software indipendente dall'hardware - di utilizzare una scheda di sviluppo per testare il software e verificare il comportamento al processore pin è corretto.

Una soluzione in uso dove lavoro è automatizzato nightly build e procedura di prova.

  1. Scopri codice di testa del tronco dal controllo di origine.
  2. Crea progetto e caricare sul bersaglio.
  3. script di test automatizzati controllati Eseguire PC.

Gli script di test sono facili da eseguire se si utilizza una sorta di protocollo di comunicazione. Questo è un bene per i test unitari interni. Ciò che rende la situazione più interessante (e completo) è quello di fare un cablaggio che si collega alla scheda per simulare IO esterni.

Emulare è un bene per lo sviluppo e la sperimentazione di base iniziale, ma reale tempo di funzionamento fisico è l'unico metodo affidabile per la convalida del sistema. funzionamento fisico può scovare problemi non di codice (causata da codifica metodi), quali cali di tensione, il rumore, glitch, problemi antirimbalzo, condizioni di gara, ecc.

test di sistema prolungato è importante pure. La creazione di un test automatizzati di abusare di un sistema di continuo per giorni / settimane di fila è un buon modo per forzare le questioni che non possono sorgere fino a diversi mesi più tardi nel campo. Raccontare un cliente a poco a ciclo ogni volta che le cose cominciano comportano in modo strano non è un lusso che tutte le industrie possono divertire.

Nella mia esperienza, i test hardware automatizzato è stato fondamentale. - Investire nella doppia compilation in entrambi i PC e di destinazione è una caratteristica "nice to have", ma data la scelta, avevo molto meglio investire in test hardware automatizzato. Sarà una soluzione più economica, alla fine, dal momento che i bracci di produzione vorranno / bisogno della capacità in ogni modo per l'analisi dei guasti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top