Допустим, до разработки кода сначала формируется документ с требованиями (спецификация), а на основе требований пишется код. Часто бывает, что сначала требования и код практически соответствуют друг другу (и то не полностью), а со временем, например, по прошествии 10 лет, код постепенно эволюционирует в какую-то сторону, а требования (спецификация) уже практически не отражают текущее состояние программы.

Возник вопрос как связать код и требования так, чтобы глядя на код было видно какие требования они реализуют. И изменяя код, например, исправляя какие-нибудь баги, было ясно в какие пункты требований необходимо внести изменения и дополнения.