Test di una funzione molto specifica in un'applicazione grande e complessa

3

Sono nuovo per i test, ma mi rendo conto di quanto sia importante. Il problema principale è che la mia azienda non ha alcun supporto top-down per i test. Questo è che non abbiamo alcun test unitario e solo un po 'di test umani (spero di usare i giusti termini).

Ho cercato di iniziare i test qui e devo farlo in modo sottile perché spesso mi viene chiesto "quando verrà eseguito X" e quindi non posso iniziare la settimana (s) lungo progetto di scrittura di test per tutti del nostro codice legacy. Quale avrebbe bisogno di essere riscritto solo per fornire cuciture per i test (se ho il concetto di "cuciture" giusto). Posso, tuttavia, introdurre un po 'di tempo per testare una funzione. O almeno penso di poter.

Sto scrivendo un codice che sostanzialmente elabora un bel po 'di dati e poi lo esegue utilizzando D3. Vorrei scrivere un test per una delle funzioni più importanti, binData . Prende un argomento opzionale (la data di inizio del binning da) e accede ad alcune proprietà come this.rows e this.timestamps .

Come potrei fare per farlo?

Penso che avrò bisogno di creare un oggetto fittizio per contenere this.data e this.timestamps (e le altre proprietà accessibili). In effetti, immagino diversi oggetti mock diversi che permettano di testare diversi set di dati. Ma a parte questo sono un po 'bloccato. In termini di quadri, ho sentito parlare di Mocha e Jasmine e dei voti, ma non so quale sarebbe il migliore.

Inoltre non so come legarmi alla massiccia (e complessa) gerarchia di classi e moduli e ad incontrare le dipendenze di ogni oggetto. Cioè, la funzione binData si trova in un file chiamato, per esempio, dataBinner.js che richiede tutte le altre funzioni di altri file, ma non include esplicitamente qualcosa su di esso. Invece, esso stesso è incluso in un file "manager" che include tutto ciò che sarà necessario a dataBinner.js e agli altri moduli. Suppongo che dovrò trovare un modo per istanziare tutto il necessario per testare binData .

Non ho paura di fare un po '(o molto) di lettura per capire meglio le cose. Sarebbe molto apprezzato qualsiasi aiuto riguardante questo specifico compito di scrivere un test per binData o la più ampia domanda su come implementare lentamente i test in un luogo non adatto ai test.

Chiarimento

Sono a bordo al 100%, test-saggio. So che è importante e so che la mia azienda non è corretta non avendo test. Ci si aspetterebbe che le e-mail dicessero che "la regressione fissa causata dalla correzione del bug 1413" avrebbe attivato qualcosa. O che le cose che non dovrebbero durare troppo a lungo dovrebbero essere troppo lunghe (perché è un codice legacy degli spaghetti).

Quello che sto chiedendo è dato che come faccio a testare la mia unica funzione che si basa sul codice spaghetti precedente. Cioè, come fa qualcuno a iniettare un po 'di test in un posto senza di esso? Immagino che dovrò scrivere il mio framework di test perché dovrò creare dei mock per il codice legacy degli spaghetti. In modo che io possa istanziare il mio oggetto e chiamare la mia funzione al di fuori dell'ambito dell'applicazione.

    
posta ari gold 11.03.2014 - 21:28
fonte

2 risposte

4

Il tuo problema è più grande di una semplice funzione di simulazione.

Non sembra che la tua azienda abbia una "cultura del test". Ciò renderà difficile apportare modifiche "in grande", perché la tua azienda si aspetta che le cose accadano in un determinato intervallo di tempo, perché è quanto tempo hanno impiegato senza testare

La tua migliore possibilità potrebbe essere:

  1. Riforma vecchi metodi e aggiungi loro test durante la modifica o l'aggiunta di nuove funzionalità e / o

  2. Sposta il più possibile il vecchio code-base, aggiungendo nuove funzionalità solo come parte di una metodologia Test-Driven in un campo verde. Parla con il vecchio codice, ma non cambiarlo.

risposta data 11.03.2014 - 22:28
fonte
3

Temo di dover essere d'accordo con @Robert Harvey in quanto la mancanza di una cultura del testing è il tuo vero problema. Da questo punto di vista, non si tratta di prendere in giro o fare funzionare il test, ma di decidere se cambiare o meno questa cultura nella tua azienda. Siate consapevoli del fatto che i cambiamenti culturali sono difficili - come in un modo quasi frustrante.

Ti suggerisco di leggere molto se vuoi affrontare questa sfida. Non devi essere scioccato quando incontrerai resistenza, ma dovresti avere abbastanza conoscenza sulla tua schiena per contrastare qualsiasi argomento che i tuoi manager potrebbero avere.

Ecco alcune letture particolarmente interessanti al riguardo:

  • Michael Feathers - Lavorare con il codice Legacy: questo è interessante per il semplice fatto della sua definizione di codice legacy . Dichiara (e io parafrasando qui) che

Legacy code is code without tests.

Sulla base di tale definizione, la tua azienda è attualmente impegnata nello sviluppo di codice legacy. Strada da percorrere.

  • I libri di Robert C. Martin su Clean Code. Il primo libro riguarda più dettagli tecnici, interessanti per gli sviluppatori. Tuttavia, il suo secondo libro si occupa di professionalism nel nostro spazio di lavoro, e fa alcuni punti importanti su cosa significhi essere uno sviluppatore professionista e su come legarlo ai test di scrittura e alle scadenze. Questo libro, in particolare, ti darà un sacco di cose da mettere a fuoco e un sacco di vettori di attacco sul comportamento professionale della tua attuale cultura aziendale.
risposta data 12.03.2014 - 07:14
fonte

Leggi altre domande sui tag