Devo richiedere il test delle unità dai programmatori? [chiuso]

26

Lavoro in un posto dove acquistiamo molti progetti IT. Attualmente stiamo producendo uno standard per i requisiti dei sistemi per la richiesta di progetti futuri. In tale processo, stiamo discutendo se possiamo o meno richiedere test unitari automatizzati dai nostri fornitori.

Credo fermamente che un corretto test unitario automatizzato sia l'unico modo per documentare la qualità e la stabilità del codice. Tutti gli altri sembrano pensare che il test unitario sia un metodo opzionale che riguarda solo il fornitore. Pertanto, non faremo richieste di test unitari automatizzati, test continui, rapporti di copertura, ispezioni di test unitari o simili. Trovo questa politica estremamente frustrante.

Sono totalmente fuori linea qui?

Per favore forniscimi argomenti per qualsiasi opinione.

    
posta Morten 26.06.2012 - 18:12
fonte

17 risposte

45

I firmly believe, that proper automated unit-testing is the only way to document the quality and stability of the code.

Il fatto è che non dovrai (o molto raramente) ottenere appropriati test di unità automatizzati forzandolo sulle persone. È un buon modo per ottenere test di merda e aumentare il costo dei progetti.

Personalmente, guarderei verso una domanda o SLA che implica qualità; indipendentemente da come è stato realizzato. 10 anni fa i test unitari erano infrequenti nella migliore delle ipotesi. Non vorrai maneggiare i tuoi fornitori in 10 anni quando disponiamo di metodi migliori per garantire la qualità, ma la tua politica obsoleta impone loro di utilizzare la vecchia maniera.

    
risposta data 26.06.2012 - 14:22
fonte
18

Personalmente ritengo che nel tuo caso dovresti pensare in termini di test di accettazione:

  • Hai una scatola nera che ti è stata data e ti aspetti che si comporti in un certo modo.
  • Non pagherai fino a quando non lo farà.
  • Scrivi test unitari che esercitano il comportamento che devi vedere e, se falliscono, devono risolverlo.

Si noti inoltre che si tratta di una questione di fiducia. Se non ti fidi del tuo fornitore, devi procurarti il codice sorgente, ispezionarlo e compilarlo da solo. Qualsiasi cosa di meno significa che almeno ti fidi di loro alcuni .

    
risposta data 26.06.2012 - 14:25
fonte
8

I firmly believe, that proper automated unit-testing is the only way to document the quality and stability of the code.

Mi sorprende quanto sia comune questo pensiero. Automatizzato, sì. Test unitario (da solo), no. C'è molto di più nei test automatici del software che nei soli test unitari. Che ne pensi di integrazione, sistema, funzionalità, controllo qualità? Per alcuni motivi le persone tendono a pensare, "Ok, quindi abbiamo i test unitari appropriati. Fatto con i test, chiamalo venerdì sera!" . Il test delle unità è solo l'inizio.

Comunque, torna sul tema. Sono d'accordo con gli altri dicendo che forzare qualsiasi cosa su qualcuno produrrà probabilmente risultati opposti a quelli desiderati. Non sai mai come funziona il team, forse hanno ottenuto un dipartimento test di un milione di dollari e non hanno mai scritto test di unità singola.

Al mio primo lavoro lavoravo in un posto in cui avevamo 0 test di unità (eravamo in gruppo con juniors in roba più o meno seria). Che ci crediate o no, ha funzionato. Certo, nessuno è stato confidato perché questo bug è stato risolto, o cosa questa correzione si è rotta, ma ha funzionato. Ci sono stati momenti in cui qualche insetto assolutamente casuale sarebbe saltato fuori, ma mazza da baseball e il rischio di bruciare il tuo appartamento alcune ore extra possono fare miracoli. Forse i tuoi fornitori usano simili tecniche ?

    
risposta data 26.06.2012 - 16:18
fonte
6

Dubito strongmente che il tuo management sarà disposto a pagare per il corretto collaudo dell'unità in un contratto. I test di unità corretti costano quanto il codice che testano, ma danno poco valore percepito all'utente finale in modo che non vengano considerati altrettanto validi. Nessuna azienda di sviluppo della qualità sarà disposta a dedicare lo sforzo di sviluppo ai test unitari ad un costo inferiore rispetto ad altre parti, perché non sono dannosi per il lavoro, possono fare più ricerca di 2 contratti che richiedono lo stesso tempo senza requisiti del test di unità.

I test di unità esigenti probabilmente aumenteranno le quotazioni ricevute a un livello irragionevole e probabilmente saranno la prima concessione fatta per ottenere un prezzo inferiore.

    
risposta data 26.06.2012 - 14:35
fonte
5

Il costo di non avere test unitari dipende da quanto estendere / supportare il codice da soli. Anche prendere visione di parti del codice per avere un'idea di qualità sarebbe importante.

Se stai solo comprando i progetti in modo da poterli utilizzare come una libreria di terze parti e non credi che li modificerai, il rischio di un codice di qualità inferiore è inferiore, a condizione che funzioni effettivamente.

Queste sono in definitiva decisioni aziendali, anche se devi assicurarti che anche chi sta prendendo la decisione sia a conoscenza della valutazione tecnica. Se hai bisogno di spiegarlo alla direzione, spiega che è come comprare un'auto usata. Alla fine spetta al compratore decidere se ne vale la pena, ma portarlo a un meccanico è una buona idea quindi sai che non stai prendendo un limone.

    
risposta data 26.06.2012 - 14:15
fonte
2

Stai pagando, puoi richiedere quello che vuoi, comprese le copie / rapporti di tutti i test delle loro unità.

Potresti anche scrivere i test, o almeno le specifiche del test stesso.

Sono d'accordo con la tua opinione in quanto è un'ottima misura della qualità del codice. Se un fornitore rifiutasse questa richiesta, suonerebbe un campanello d'allarme, perché non volere farlo? Hanno bassi standard di qualità e prendono scorciatoie?

    
risposta data 26.06.2012 - 14:14
fonte
1

Hai assolutamente ragione che il tuo progetto ha bisogno di test unitari automatizzati, test continui, rapporti di copertura e ispezioni dei test unitari.

Tuttavia, le Richieste non realizzeranno i risultati desiderati come altri hanno dettagliato.

La tua sfida è spiegare e persuadere le persone - una capacità molto più difficile!

Vorrei iniziare inizialmente con il management, spiegando i pro ei contro dei test e il payoff lungo la strada. Si prega di fare attenzione a non comunicare l'emozione dietro affermazioni del tipo "scrivo i test di unità PROPER" (maiuscole / minuscole). Non vuoi "gridare" le parole (come suggerisce ALL CAPS) per convincere e convincere le persone in modo che possano scegliere la soluzione giusta.

In fin dei conti se non puoi introdurre questi metodi e farli abbracciare dove sei, in più se sei così appassionato di loro come dici (che è buono!), mi rivolgo a una società diversa perché ce ne sono molti che fanno valuta queste cose e ti accoglierebbe a bordo. Assicurati di essere informato su di loro durante le interviste in modo che sappiano dove si trovano le tue passioni e se ti starai bene.

    
risposta data 26.06.2012 - 14:33
fonte
1

Forzare test automatizzati su qualcuno non porterà ai risultati che desideri come @Joachim Sauer e @Telastyn hanno sottolineato nei loro commenti. Per molte persone il test automatico delle unità è un enorme cambiamento nel loro modo di pensare. Perché molte persone scrivono il codice che funziona, ma non è molto controllabile. Potrei scrivere una pagina Web ASP.NET in cui tutta la logica, l'interrogazione del database, le regole aziendali, gli oggetti, ecc. Sono nel codice sottostante. La pagina funzionerà? Sì. È testabile utilizzando test unitari automatizzati? Assolutamente no. Se un fornitore non dispone di test unitari automatizzati, sarà necessario un notevole sforzo per apprendere come scrivere correttamente i test unitari e, come risultato dell'apprendimento, riscrivere o riformattare il codice per renderlo più facilmente verificabile. Le probabilità sono che stanno per passare quel costo su di voi.

Il fatto è che il fornitore ti sta dando un prodotto, sia esso una .dll o un'applicazione Windows, e ti aspetti che funzioni il 99% delle volte. Certo, ci sono cimici qua e là, ma per la maggior parte dovrebbe funzionare. Questa è un'aspettativa ragionevole, soprattutto se il fornitore desidera mantenere la propria attività. Se si tratta di una scatola nera, non importa in che modo riescono a farlo funzionare, potrebbero usare un'onda umana di tester o una stanza piena di scimmie che colpiscono casualmente le chiavi. Finché funziona Ma avrebbero bisogno di fornirti una sorta di altra documentazione su come usarlo.

Tuttavia, se ti davano il codice sorgente in modo da poterlo modificare, allora mi aspetterei dei test unitari. Non lavorerei con un'azienda che non fornisce test unitari. In quale altro modo sapresti che una modifica che fai non complica l'intera faccenda?

    
risposta data 26.06.2012 - 15:28
fonte
1

Il test unitario è un'indicazione di come il fornitore gestisce i rischi durante il ciclo di sviluppo. Coloro che utilizzano i test unitari apprezzano la riduzione del rischio e la qualità di tali test è un'indicazione su quanto è stato gestito il rischio.

Detto questo, i test unitari non definiscono il livello di rischio che il progetto sta tentando di affrontare. Inoltre, non svolge alcun ruolo nella riduzione del rischio introdotto da cattive pratiche di programmazione.

Pertanto, potresti avere un fornitore che ha solide pratiche di test, ma continua a scrivere codice altamente rischioso mentre un altro fornitore che esegue test zero ma scrive codice a basso rischio. Se i due fornitori offrono lo stesso prodotto, è meglio rivolgersi al fornitore a basso rischio.

Ciò può essere misurato solo intervistando, tutoraggio e conoscenza delle personalità e delle abilità delle persone coinvolte con quel fornitore.

    
risposta data 26.06.2012 - 18:10
fonte
0

Ho trovato molto utile questo articolo sull'acquisto di software personalizzato: link

La domanda numero uno da consigliare è se il fornitore scrive test.

    
risposta data 26.06.2012 - 14:27
fonte
0

Accettando con altri che i test unitari demandind porterebbero a test per il gusto di testare; qualcosa che è molto contrario a quello che vuoi.

Nel processo di controllo dei fornitori; chiedi loro quale sia il loro processo di sviluppo poiché test è solo una parte di quel processo.

Hanno un processo di compilazione automatizzato? Seguono qualche paradigma di gestione? Hanno tester adeguatamente addestrati e un team indipendente di garanzia della qualità ? Che ne dici degli standard di documentazione?

Ciò ti aiuterà a giudicare la qualità complessiva del loro processo e, a sua volta, la qualità di ciò che producono.

    
risposta data 26.06.2012 - 16:59
fonte
0

Mi sembra che includere questo requisito avrebbe un piccolo vantaggio pratico, dal momento che sarebbe impossibile far rispettare.

È possibile richiedere il codice per i test effettivi o un report su quali test effettivi sono stati eseguiti e passati. Se si tratta di un progetto proprietario, il venditore probabilmente non vorrebbe fornirlo, dal momento che potrebbe essere altamente indicativo dei dettagli del codice e potrebbe essere necessario fornire dettagli di implementazione di basso livello e dire come fare il loro lavori. Ad un certo punto, ci deve essere un po 'di fiducia.

Se non lo fai, potrebbero farti saltare fuori, ma semplicemente spuntando la casella accanto a "esegue una serie di test unitari" per soddisfare il requisito scrivendo un singolo test che passa se la loro utilità compila ed esegue o un simile sforzo sommesso.

Quindi, mentre i test unitari automatizzati sono una pratica encomiabile, non penso sia pratico insistere su di esso da fornitori esterni.

    
risposta data 26.06.2012 - 18:06
fonte
0

Come molti hanno sottolineato, obbligare i distributori a scrivere test unitari (o meglio una combinazione di test automatici di unità e integrazione) per soddisfare un contratto probabilmente non produrranno risultati di alta qualità. D'altra parte, sono d'accordo sul fatto che il test automatico è di gran lunga il miglior metodo attualmente in uso per garantire la qualità del codice.

Penso che il codice scritto con i test unit sia molto più facile da gestire rispetto al codice che è stato scritto per primo e ha aggiunto i test unitari in un secondo momento. Forza modularità e dipendenze minime. I test Integration sono anche necessari per verificare la correttezza del codice, ma non hanno lo stesso impatto sulla qualità del codice così come è scritto. In sostanza, i test di integrazione automatici potrebbero essere aggiunti dopo il fatto, ma i test unitari hanno il maggior impatto se scritti con il codice originale.

Il mio consiglio per la tua situazione è cercare venditori che preferiscono scrivere codice con test unitari e sceglierli su fornitori che tendono a non scrivere codice con test unitari. Se la direzione lo pagherà, metti i test automatici nel contratto ma SOLO SE IL VENDER È UTILIZZATO PER SCRIVERE IL CODICE CON TEST UNITÀ.

    
risposta data 26.06.2012 - 19:24
fonte
0

Consente di ottenere le priorità direttamente ...

Nel tuo ruolo di cliente la tua preoccupazione principale non è test unitario

Se utilizzi fornitori che producono software per te, non dovresti preoccuparti se utilizzano una metodologia o un'altra. La tua posta in gioco è acquisire una sorta di soluzione che ti aiuterà a raggiungere i tuoi obiettivi. L'unica cosa di cui ti dovresti preoccupare è che la soluzione sia accettabile o meno. Ecco perché abbiamo dei test di accettazione poiché è tua responsabilità assicurarti di ottenere ciò che desideri. È nel momento cruciale dell'accettazione del cliente che il denaro verrà trasferito dalle tasche della tua azienda nella tasca del fornitore.

Potresti richiedere test unitari come requisiti consegnabili ma ci sono molti problemi ereditari con essi, il più grave è che non esiste un modo sicuro per determinare le metriche:

  • What is the acceptable amount of unit tests?

Dovrebbero esserci 10 test? Che ne dici di 100 test? Che ne dici di 1000 test? In realtà, è abbastanza difficile determinare all'inizio quanti test avrete bisogno. Il numero reale è indeterminabile in realtà ... come il problema dell'arresto ... ma non stiamo risolvendo il problema.

Vorresti solo un software con test unitari per poter continuare lo sviluppo. I test unitari non dicono ancora cosa hai rotto, ma sono incredibilmente adatti a dirti quando il codice ha un bug di regressione.

  • What is an acceptable level of code coverage?

"100%, ovviamente!" penseresti. Sfortunatamente quella metrica è fuorviante; anche se avessi il 100% di copertura del codice, sei veramente sicuro che le cose funzionino come previsto? È possibile avere una copertura del 100% ma non fare.

Quello che devi veramente fare è un test esplorativo, cioè trovare qualcuno che sia veramente bravo a rompere le cose e lasciare che facciano i test. Per trovare gli errori che nessuno sviluppatore ha mai pensato.

Anche il 100% a volte è irraggiungibile con i puri test unitari se si dispone di alcuni hack necessari alle prestazioni e si utilizzano schemi di progettazione difficili da testare (cercare "singleton" e "tdd" nel proprio motore di ricerca preferito e troverete alcuni esempi ).

Desideri che il software consegnato sia funzionante e che il documento delle specifiche sia l'unica garanzia che lo farà.

hai bisogno di un livello superiore di test

Il documento delle specifiche deve essere verificato in qualche modo. Ogni punto deve essere completato con i fornitori che hanno obiettivi chiari e criteri di accettazione. Un'organizzazione di QA ben funzionante (o un tester eccezionale se hai un budget limitato e uno scopo limitato) fornirebbe ai casi di test la verifica di questi criteri di accettazione. Hai anche bisogno di qualcuno per verificare quei criteri di accettazione.

Ci sono diversi modi per verificare i tuoi obiettivi, e se qualcuno mi dice che non puoi impostare obiettivi di qualità, prestazioni ed efficienza sani, li colpirò alla testa con libri grandi e pesanti su prove esplorative, prestazionali e di usabilità rispettivamente. Potrebbe essere facile eccedere con gli obiettivi, ma la conoscenza e la comunicazione ti aiuteranno a stabilire obiettivi realistici.

Non sono un avvocato ma la maggior parte dei contratti di progetto (che è fondamentalmente la madre di tutte le specifiche del progetto) che ho letto di solito hanno un criterio di rapporto di difetto che stabilisce su quanti bug sono considerati accettabili I bug sono generalmente determinati attraverso la severità, i bug di show-stop che vengono rilevati dal QA hanno una bassa tolleranza mentre le imperfezioni minori hanno un'elevata tolleranza. Nei progetti reali è difficile esigere che il software debba avere 0 difetti. Le scadenze di solito mettono fine a questa pratica. È in queste situazioni che devi iniziare a negoziare lo scope.

La maggior parte dei software in dotazione che ho visto di solito non vengono forniti con i test unitari. Si potrebbe obiettare che i fornitori dovrebbero essere abbastanza professionali da fornire questo, tuttavia il motivo principale per cui si vogliono fornire i test unitari è assicurarsi che non si ottengano bug di regressione e abilitare il refactoring. Nella vita reale con progetti con scadenze ravvicinate sia il fornitore che il cliente abbasseranno l'ambito e i test unitari di solito uscirebbero dalla finestra e sarebbero rimossi dall'elenco dei risultati richiesti.

È un po 'triste che il software open source di alto profilo venga fornito con i test unitari, ma uno sviluppatore di software professionale non può, giusto?

Quindi quando mi occupo, come cliente, dei test delle unità?

Direi che il tempo solo in cui veramente si preoccupano del test dell'unità è se il software consegnabile è un componente autosufficiente che non viene eseguito come programma stand-alone, per il quale il test più grossolano che puoi fare è un test unitario. Le librerie di classi sarebbero un tipo di prodotto che può essere consegnato insieme ai test unitari.

    
risposta data 26.06.2012 - 21:21
fonte
-1

Come fai a sapere che i venditori non stanno scrivendo test unitari.

Forse la direzione e il venditore hanno avuto una riunione e il venditore ha detto che il codice costa $ X e che i test unitari costano $ Y. La gestione dei penny ha detto che vogliamo solo il codice.

Il venditore ha deciso di scrivere comunque test unitari (a causa della qualità) e di non condividerli con te (a causa del vantaggio competitivo).

Ora è necessario apportare alcune modifiche importanti al software. Dal momento che possiedi il codice, puoi farlo da solo o assumerlo in modo competitivo (non necessariamente al fornitore originale). Ma dal momento che non hai acquistato i test unitari, il venditore originale sarà in grado di fare un lavoro di qualità comparabile ad un prezzo più conveniente per qualsiasi concorrente.

    
risposta data 26.06.2012 - 18:00
fonte
-1

Ci sono molti progetti che hanno molto successo nonostante non usino test unitari. Basta guardare il kernel di Linux, è un progetto gigantesco con una complessità ben oltre ciò che si troverà in qualsiasi progetto normale, e funziona ancora. Quindi, se il risultato è un buon software, non dovresti preoccuparti di come l'hanno raggiunto.

    
risposta data 26.06.2012 - 18:02
fonte
-1

No, non è necessario necessariamente richiedere unità di test complete e automatizzate. È più importante che ti forniscano documenti di strategia di test adeguati. Stiamo andando bene in questo modo.

    
risposta data 26.06.2012 - 20:31
fonte

Leggi altre domande sui tag