Я предпочитаю вместо тестов делать Assert'ы повсюду, плюс делать эмулятор нагрузки (действий пользователей, работы приборов) - это помогает и протестировать работу каждой фичи по отдельности, и рабочий цикл (рутинные дейтвия), и предельные нагрузки (имитация сотен и тысяч пользователей или приборов).
Ну, проблема такого подхода (как я её вижу), в том, что ты узнаешь о том, что внёс ошибку/сломал что-то только на этапе выполнения как пользователь.
Это не тот подход, который позволяет сократить расходы :)
Ведь стоимость исправления ошибки растёт со временем, прошедшим с момента её внесения