When applying strictly Test Driven Development method, we only write code that is required by a business use case. we do not have any unnecessary code.
When appying with test driven development, developers proceed by baby steps. This allows to focus on a simple problem, and produces simple code.
Refactoring is the phase where code is reorganised. It eliminates duplication, and make appears design that simplifies code. Code is simplified as features are added[Ward Cunningham]
Extracting code to functions allows the business requirement being exposed clearly. It also conduct to respect the Single Responsability Principle. Respecting the SRP makes the code more robust and more easy to maintain.
As all business requirements are exposed as unit tests, and as the tests all succeed, there is no bug in code.
As we write only code that is required to make a test succeed, all code is covered by unit tests. TDD drives us to have a 100% code coverage ; it's difficult to have such a coverage with other methods.
Data coverage is more a problem. We can not write code to process unexpected or unknown data, as we are not able to write test cases for this unexpected data ; but we can write code that fails if there is an unexpected data structure.