La tua strategia e la tua ossatura dipendono, non banalmente, dal tipo di test che stai cercando di generare, dal tipo di copertura che stai cercando e dalla lingua / ambiente in cui lavori.
È abbastanza semplice scrivere un generatore di test che, per linguaggi come C o Java, legge le firme di classe e genera automaticamente test per casi angolari standard (passando in 0, 2 valori casuali, MAX_INT, MIN_INT, a un argomento intero, null per nullable, ecc ...). È quindi possibile eseguire i test generati, registrare i risultati per ciascun test e filtrarli manualmente per rimuovere quelli non pertinenti, approvare i risultati accettabili per i test che passano (in modo che possano passare automaticamente da quel momento) e contrassegnarli come non validi che non riescono .
Puoi aumentare questo con il tagging / commenting / refactoring delle classi per aiutare il tuo generatore con suggerimenti extra. Potresti avere un tag che elenca tutte le possibili eccezioni che una chiamata al metodo può sollevare o che fornisce un intervallo ridotto di numeri interi validi per un argomento intero. Guarda questi come una scorciatoia per dover scrivere i test da soli.
Quindi, ecco alcuni componenti che vorrai vedere:
- Un componente per analizzare automaticamente il codice sorgente / le firme delle funzioni / annotazioni manuali, producendo casi di test standard o profili / firme per i casi di test che attendono il completamento dell'input.
- Una lingua perpetuamente crescente / mutevole di tag / annotazioni / commenti che possono raggiungere qualsiasi livello di granularità (metodo / classe / firma / while loops / etc ...) che rappresentano suggerimenti per il builder di test automatizzato. Idealmente dovresti essere in grado di giocare con questa lingua senza dover ricodificare il tuo framework o qualsiasi chunk in esso
- Test runner automatizzato, con la capacità di identificare nuovi / vecchi test e registrare / test contro risposte "accettabili" per ciascun test. Idealmente questo runner costruirà un database di esecuzioni di test, risultati accettati / rifiutati e risultati accettabili per ogni test.
- Automatico "object faker" che, dato un nome di classe e una mappa di nomi- e gt; valori, può generare un oggetto che imita la classe, restituendo dati personalizzabili per chiamate di funzioni, accessor, dati pubblici, ecc ...
Esistono molti framework di test che includono già parti di questa funzionalità per vari linguaggi e piattaforme. Mentre è abbastanza facile iniziare a fare questo lavoro tu stesso e far crescere questo tipo di struttura organicamente in-house, è anche un progetto a lungo termine senza fine che probabilmente duplicherà il lavoro esistente. Ti consigliamo di dedicare un po 'di tempo a guardare prima a ciò che è disponibile e poi a decidere se valga la pena di tuffarsi.