В основе данного учебного пособия лежит курс лекций прочитанный автором на математико-механическом факультете СПбГУ. В пособии рассматриваются методы формальных спецификаций, основанные на тройках Хора, и методы дедуктивной верификации императивных программ, а также построенный на основе данных методов язык программирования со встроенными формальными спецификациями Spec#. Подробно рассматриваются основные возможности языка Spec# и системы программирования Spec#, предназначенной для работы с ним. Учебное пособие предназначено студентам, магистрантам и аспирантам, обучающимся по направлению подготовки 010500 - Математическое обеспечение и администрирование информационных систем и специализирующимся в области теоретической и практической информатики.