assert'ы следует использовать в следующем случае:
Есть некий (громоздкий) кусок кода, у которого есть ожидаемое поведение, но ввиду каких-то обстоятельств (недостаточно документации, запутанность, недостаток опыта, недостаточное тестирование и т.п.) Вы можете быть в нем уверены только на 99.99%. Это зло, но иногда так бывает, особенно в начале разработки. Есть критическая операция, перед которой используется этот код и для которой надо быть уверенным на 100,01% что код сработал так, как ожидается, а если он сработал не так — то лучше остановить приложение, т.к. неправильное срабатывание может означать, например, что где-то повреждена память. Есть способ проверить, что код сработал так, как надо. Вот в той ситуации, когда уровень доверия к коду ниже требуемого для критической операции — перед критической операцией ставится ассерт на результат срабатывания кода. Если вам приходится ставить слишком много ассертов — то это значит, что Вы пишете заведомо плохой код.