Testivetoisella kehityksellä (engl. test-driven development, TDD) tarkoitetaan nimensä mukaisesti sitä, että ohjelmistoa kehitetään testien vetämänä. Perinteisissä malleissa testaus on jätetty projektin loppupäähän, toteutuksen jälkeen. Ongelmaksi tässä muodostuu se, että mikäli virheitä löytyy suuri määrä, ei välttämättä ole enää juurikaan aikaa korjata niitä.
Ohjelmistoa pitäisi kehittää siten, että virheiden määrä on jatkuvasti minimissä. Valitettavan usein käytetty periaate on "tehdään tämä ensin valmiiksi, korjataan sitten virheet". Tämä johtaa kuitenkin useisiin merkittäviin ongelmiin:
- Projektin loppupuolelle muodostuu epämiellyttävää testaa-korjaa -vaihe
- Projektin aikana kumuloituvat virheet hidastavat ohjelmiston kehittämistä
- Ohjelmistossa olevat virheet voivat johtaa siihen, että joissakin toiminnoissa virheitä pyritään kiertämään, ja kun lopulta varsinainen virhe korjataan, sen kiertämiseksi tehty purkkakorjaus menee rikki
Äärimmilleen viedyssä testivetoisessa kehityksessä on ideana se, että yhtään riviä tuotantokoodia ei saa kirjoittaa, ellei ole olemassa testiä, joka ei mene läpi.
Etukäteen kirjoitettuja testejä voidaan joissain tapauksissa käyttää korvaamaan varsinainen vaatimusmäärittely - testit kertovat yksiselitteisesti sen, mitä ohjelmiston pitää missäkin tilanteessa tehdä.
Yleensä testeinä käytetään yksikkötestejä.