В ситуации, которая сложилась на данный момент в индустрии разработки ПО, есть все предпосылки для ее развития. Теоретики программирования еще в 1968 г. открыто признали кризис программного обеспечения который, по мнению многих ученых, продолжается и по сей день. Главный симптом этого кризиса — неспособность разработчиков обеспечить основное свойство программного обеспечения: его корректность. В книге [29] по этому поводу сказано следующее: «если система не делает того, что она должна делать, то все остальное — ее быстродействие, хороший пользовательский интерфейс — не имеет особого значения». На практике же корректности программ долгое время уделяли слишком мало внимания. В результате некорректность ПО не только стала привычным делом для пользователей, но и, можно сказать, вошла в поговорку: достаточно вспомнить такие примеры сетевого фольклора, как эссе «Если бы программисты строили дома» или спор «Почему глючат программы?» За примерами программных ошибок, имевших серьезные последствия, не надо далеко ходить: вспомните провал единой государственной автоматизированной информационной системы (ЕГАИС) в 2006 г., который привел к многомиллионным убыткам алкогольных компаний, или недавний скандал в пятом терминале лондонского аэропорта Хитроу, вызванный техническими сбоями в суперсовременной и высокотехнологичной автоматизированной системе сортировки багажа. Многие теоретики и практики программирования отмечают, что кризис методов разработки ПО проявляется, в основном, при создании систем со сложным поведением. Так, например, профессор Н. Вирт (создатель языков программирования Pascal, Modula-2 и Oberon) и его коллега Ю. Гуткнехт во время визита в Россию в 2005 г. утверждали, что не видят проблем в программировании, оговорившись при этом, что сказанное не относится к созданию драйверов, которые, как правило, обладают сложным поведением. Другой широкий класс программно-аппаратных систем со сложным поведением — логическое управление. Трудности, возникающие при традиционном подходе к решению задач из этой области, описаны в работе В последние годы проблема обеспечения корректности является одной из наиболее актуальных в программной инженерии Об этом говорит большое число исследований и разработок в области тестирования, доказательной верификации программ, проверки моделей. Признанием важности исследований в этом направлении является присуждение премии А. Тьюринга за 2007 г. создателям метода Model Checking — Э. Кларку, А. Эмерсону и Д. Сифакису. Неблагополучное положение в области обеспечения корректности ПО привело к созданию сообщества исследователей и практиков, озабоченных будущим программной инженерии — ISEN (Interdisciplinary Software Engineering Network). Особое внимание это сообщество уделяет междисциплинарным исследованиям и подходам, особенно тем, которые появились в дисциплинах, не связанных с информационными технологиями, задолго до появления компьютеров. Исследования в этом направлении привели к выводу, что при разработке ПО может быть полезен опыт создания систем автоматического управления и теоретические основы кибернетики. В результате родилось целое направление в разработке ПО, названное программной кибернетикой К этому направлению можно отнести и автоматное программирование. Таким образом, как может убедиться читатель, автоматное программирование, обсуждаемое в этой книге, является ответом на многие наиболее острые и актуальные проблемы индустрии разработки ПО. В рамках этой парадигмы программирования впервые в явном виде формулируется проблема спецификации и реализации сложного поведения, предлагается использовать традиционные методы программирования совместно с идеями теории автоматов и теории автоматического управления. Корректность автоматных программ закладывается еще на этапе проектирования благодаря наглядной графической нотации для описания сложного поведения. Кроме того, соответствие автоматной программы ее спецификации может быть проверено формально: использование метода Model Checking в этом случае требует от разработчика значительно меньших усилий, чем для программ, написанных без явного выделения состояний, так как модель программы с конечным числом состояний строится уже на этапе проектирования. Здесь имеет место та же ситуация, что и, например, при контроле схем: если схема не спроектирована с самого начала как контролепригодная, то ее и не удается проверить В последние годы все больше программистов-практиков по всему миру приходят к выводу, что в тех задачах, которыми они занимаются, целесообразно использовать конечные автоматы. Например, в 2007 г. были опубликованы статьи ведущего разработчика компании IBM Э. Принга о реализации всплывающих подсказок с применением автоматов Парадигма же автоматного программирования призывает использовать автоматные модели при наличии сущностей со сложным поведением всегда, а не только при решении некоторых специфичных задач. Авторы предполагают, что им удалось объяснить, чем отличается парадигма автоматного программирования от программирования с использованием автоматов, которое известно начиная с 60-х гг. прошлого века
Автоматное программирование все шире используется на практике, особенно при создании программного обеспечения для ответственных систем и обеспечивает значительное сокращение затрат на их сопровождение. Его применение при разработке систем управления судовыми техническими средствами во ФГУП «НПО «Аврора» описано в работе В последнее время автоматное программирование начало применяться в нетрадиционных областях, таких как, например, программирование смарт-карт Идеи автоматного программирования, изложенные в книге, могут в том или ином виде использоваться не только для текстовых и визуальных языков программирования, как описано выше, но и для программируемых логических контроллеров а также различных средств автоматизации и имитационного моделирования Авторы предполагают, что области применения автоматного программирования будут еще расширяться, так как «более 99 % всех микропроцессоров, проданных в 1998 г., использовались во встраиваемых системах, а в 2000 г. число микроконтроллеров в высококачественном автомобиле достигало 60» Не следует недооценивать роль рассмотренной парадигмы в образовании. В частности, на ее основе можно проводить первоначальное обучение проектированию программ не только в университетах но и в средних школах При этом отметим, что поскольку концепции автоматного программирования существенно отличаются от традиционных, начинать обучение программированию в этом стиле следует как можно раньше Авторы выражают надежду, что технология использования автоматов при разработке программных систем со сложным поведением будет развиваться: появятся новые модели, нотации, инструментальные средства. Например, при участии авторов ведутся работы по созданию текстовых языков автоматного программирования [декларативных методов описания автоматов на императивных языках программирования методов динамической верификации автоматных программ инструментальных средств на основе концепции предметно-ориентированных языков программирования Также проводятся работы по применению автоматов при создании ПО для мобильных роботов и автоматизации документооборота Авторы также надеются, что парадигма автоматного программирования, изложенная в этой книге, послужит «каркасом» для дальнейших исследований в области использования автоматов в программировании. В заключение отметим, что создание автоматных программ предполагает их проектирование, названное во введении к книге «автоматным проектированием программ». Так как при проектировании этого класса программ основное внимание уделяется управлению, то можно говорить о парадигме управления, названной в книге «автоматное управление». Эта парадигма, как отмечалось выше, неоднократно апробировалась на практике, в том числе и при проектировании программного обеспечения сложных систем
Отметим также, что использование автоматов при проектировании систем управления до последнего времени в основном рассматривалось в рамках применения гибридных автоматов Дополнительный интерес к использованию автоматов в управлении возник у специалистов после пленарного доклада Р. Брокетта на конгрессе IFAC в котором обсуждались вопросы упрощения проектирования сложных систем управления. Авторы предполагают, что интерес к автоматному программированию будет возрастать и в дальнейшем, чему поможет не только эта первая в мире книга по рассматриваемой тематике, но и выход в свет тематического сборника по автоматному программированию содержащего 28 статей по различным аспектам этого подхода к программированию.