Во-первых, есть два аспекта «кода работает так, как задумано»: он работает так, как указано (проверка, построение права продукта) и работает так, как полезно (проверка, построение правильного продукта).
Вы упомянули доказательства, которые относятся к проверке.Кроме того, в сфере проверки также существуют определенные виды тестирования, например, юнит-тестирование.Тогда есть менее формальные методы проверки, такие как статический анализ кода.Вы также можете рассчитывать в обзорах (если они против спецификации).И многое другое.
Также для валидации существует множество подходов, например, создание прототипов приемочных испытаний.В конце концов, это всегда идет в направлении «покажи клиенту, что он идет в правильном направлении».Вы даже можете поместить в эту категорию пошаговую разработку из мира гибкой разработки.
Мне очень нравится эта статья на эту тему: http://www.easterbrook.ca/steve/2010/11/the-difference-between-verification-and-validation/