A practical approach to TDD in Agile

Test-Driven Development (TDD) is one of the shift-left testing models in Agile. But what exactly is TDD and its benefits & challenges?