2011-02-04 1 views
8

Prima di eseguire una modifica, mi piacerebbe essere sicuro che tutto sia stato testato, automaticamente o manualmente con un rapporto sulla copertura del codice, ma c'è molto codice legacy che non fa t hanno test automatizzati e non saranno influenzati dalle mie modifiche.Collegamento della copertura del codice al controllo della versione

Esiste uno strumento in grado di incrociare un riferimento a diff da uno strumento di controllo versione con un report di copertura del codice e assicurarsi che tutto ciò che è stato modificato sia stato eseguito?

Mi rendo conto che con la copertura del codice, questo può dare un falso senso di sicurezza, e con qualcosa di simile, ancora di più, ma penso che varrebbe la pena provare. Io uso git e PHP: ho usato l'interfaccia di coverer del codice di XCache per sfogliare ciò che ho eseguito ed è utile, ma sarebbe bello se qualcosa potesse essere eseguito automaticamente a git commit o push time.

+0

Votazione per la migrazione a programmers.stackexchange.com – Mchl

risposta

3

Per git diff, c'è uno strumento denominato diff-cover, che può controllare la copertura. Prende report di copertura Cobertura XML e si confronta con l'output di git diff. Quindi segnala le informazioni di copertura per le linee nel diff.

Dato il corretto file di copertura di XML, è possibile utilizzare questo comando per verificare la copertura delle modifiche rispetto al ramo master:

$ diff-cover coverage.xml 

E 'anche abbastanza semplice da integrare con un server CI, a patto in quanto può fornirti il ​​commit da confrontare, ad esempio $GIT_PREVIOUS_COMMIT in Jenkins.

+0

come si ottiene il formato Cobertura XML quando si eseguono i test delle unità PHP? quando si usa questo strumento con '--coverage-clover = coverage.xml' si verifica l'errore con' AttributeError: 'NoneType' l'oggetto non ha attributo 'replace'' –

3

È possibile configurare un server di build continuous integration (ce ne sono molti excellent, free build servers). Una delle fasi di creazione sarebbe la copertura del codice in esecuzione. È possibile configurarlo per ignorare il codice legacy e calcolare la copertura solo per il codice non legacy. Quindi lo imposti per fallire la build se la copertura è < xx%. O anche fallire se la copertura% diminuisce rispetto alla build precedente.

+1

Buona idea; fare lavori pesanti come la copertura del codice ad ogni check-in o push rende il controllo della versione molto più doloroso da usare, quindi la gente lo odierà. Invece, non lasciare che le persone entrino nella linea principale; testare le filiali delle persone in un server di integrazione continua (mi piace gitbuilder) e quindi unire questi rami nella linea principale solo dopo che l'integrazione continua li ha approvati. – apenwarr

+1

Rileggendo la mia domanda, ho sottolineato che era sbagliato. Il punto non è che funziona al tempo di commit e mi impedisce di commettere. Il punto è che posso essere sicuro di aver eseguito tutto il codice che ho modificato prima di eseguirlo. Essere in grado di essere eseguito automaticamente al momento del commit/push era solo un bonus minore, non il vero requisito. – rjmunro

+0

@rjmunro: So che la mia risposta non è esattamente ciò che stai chiedendo, ma penso che sia il più vicino possibile. –