Читаем Журнал «Компьютерра» № 10 от 14 марта 2006 года полностью

Так как же сохранить качественный программный проект в условиях постоянно меняющихся требований заказчика? Статья, предлагаемая вашему вниманию, посвящена одному из потенциальных решений, которое способно существенно повлиять на сложившуюся практику разработки.

Об авторе

Лидер группы разработки в компании Nicotech International. В область профессиональных и академических интересов входят организация управления проектами, архитектура программного обеспечения, теория формальных языков, технологии порождающего программирования.


В качестве вступления следует отметить, что современные методы разработки программного обеспечения позволяют достаточно четко отделить бизнес-требования к системе от программной архитектуры, а уж тем более — от исходного кода реализации... но лишь на ранних стадиях разработки. При этом серьезное изменение проекта на поздних стадиях может стать тем самым «дятлом, залетевшим в форточку и разрушившим цивилизацию».

Для того чтобы этого не произошло, опытные разработчики и архитекторы рекомендуют:

пользуйтесь шаблонами проектирования (при этом снижаются риски, связанные с неудачным выбором архитектуры);

периодически проводите ревизии проекта (забавно, что при этом зачастую происходит документирование поведения системы «пост-фактум»);

делайте архитектуру многослойной с минимальной зависимостью между слоями;

прототипируйте, выпуская сборки как можно чаще (золотое правило экстремального программирования);

определяйте возможные направления будущих изменений проекта (это уже из области технологий «третьего глаза»).

Этот список можно продолжать бесконечно, однако и так понятно, что подобные рекомендации позволяют лишь снизить риски, обусловленные расхождением проекта и исходного кода. Корень же всех зол кроется в том, что высокоуровневые аспекты проекта выражаются и документируются в терминах естественного языка (каким является, например, русский или английский), тогда как код реализации пишется на каком-нибудь формальном языке (C++, Java, C#). И между двумя этими типами языков лежит целая пропасть.

Языки предметной области

Решение проблемы напрашивается само собой: может, сразу излагать бизнес-требования на формальном языке? Или хотя бы не бизнес-требования (это мы сильно замахнулись), а высокоуровневые абстракции предметной области, из которых и состоит проект системы?

Да вот только где бы найти подходящий язык! Очевидно, что универсальные языки программирования для этой цели непригодны: в описании функций системы никогда не встречаются термины наподобие «класс» или «виртуальный метод». Диаграммы UML тоже хороши только в качестве красивых иллюстраций к техническому проекту системы[Справедливости ради нужно отметить, что диаграммы классов и взаимодействия могут быть полезны и на этапе реализации, но они опять-таки не содержат «правильных» абстракций]. Еще несколько лет назад казалось, что с этой ролью справится XML, однако сейчас понятно, что подобные проблемы ему не по зубам (более подробно по этому поводу см. врезку «XML и XSLT»).

Вывод: подобные языки нужно создавать. Причем нужно создавать свой, особенный набор языков для каждого типа проектируемых систем, поскольку абстракции, на которых основана какая-нибудь бухгалтерская программа, сильно отличаются от абстракций системы по сбору данных для аналитической отчетности. Для таких языков даже существует устоявшийся термин — DSL (Domain-Specific Language, специализированный язык предметной области), — которым мы и будем пользоваться в дальнейшем.

Идея языков предметной области стара как мир. Макросы, языки командных оболочек (shell-скрипты Unix, например), проблемно-ориентированные языки приложений (такие как встроенный язык известной в России системы «1С»), языки пользовательских интерфейсов (например, XUL, широко известный в сообществе Mozilla), даже «великий и могучий» SQL для работы с базами данных, — все вышеперечисленные языки относятся к категории DSL, поскольку каждый из них проектировался для своей предметной области. Вместе с тем, за редкими исключениями, DSL не используются в качестве средства разработки программных приложений. А ведь как было бы здорово: разработать DSL и записать на нем код проекта…

Перейти на страницу:

Все книги серии Компьютерра

Похожие книги

«Если», 2002 № 06
«Если», 2002 № 06

ФАНТАСТИКАЕжемесячный журналСодержание:Джеймс Блиш. БИ-И-ИП! рассказВл. Гаков. МИССИОНЕР (статья)Джин Вулф. ПОДМЕНЫШ, рассказШон Макмаллен. БАШНЯ КРЫЛЬЕВ, рассказМэри Терзиллоу. ДЕСЯТАЯ ЖИЗНЬ НЕФЕРТИТИ, рассказВидеодром*Рейтинг--- Дмитрий Байкалов. ЭЛОИ ПРОТИВ МОРЛОКОВ (статья)*Премьера--- Тимофей Озеров. УДАР ПО КАРМАНУ (статья)*Рецензии*Экранизация--- Вл. Гаков. ЧУЖАК В СВОЕЙ СТРАНЕ (статья)Алексей Калугин. РАССВЕТ ПОТЕРЯННЫХ ДУШ, рассказРаджнар Ваджра. ДЖЕЙК, Я И ЗИППО, рассказСвятослав Логинов. ДОЛИНА ЛОРИЭН, рассказ,Алексей Зарубин. КРАСОТА ОПЛАЧЕННОГО ДОЛГА, повестьКэрол Карр. И ВАМ ЕЩЕ КАЖЕТСЯ, ЧТО У ВАС НЕПРИЯТНОСТИ? рассказДмитрий Володихин. КАРАУЛ УСТАЛ (статья)Сергей Питиримов. МОРЕ ВОЛНУЕТСЯ РАЗ… (статья)РецензииОлег Дивов. БЕЛЫЙ КВАДРАТ НА ЧЕРНОМ ФОНЕ (статья), стр. 280-291Владислав Гончаров. ДО АПОКАЛИПСИСА ЕЩЕ ПОЖИВЕМ! (статья)Виталий Пищенко: «ПРИЯТНО НАЙТИ ПРОРОКА В СВОЕМ ОТЕЧЕСТВЕ»КурсорPersonaliaОбложка Игоря Тарачкова к повести Алексея Зарубина «Красота оплаченного долга».Иллюстрации: А. Балдин, В. Овчинников, А. Филиппов, Т. Филиппова, С. Голосов, С. Шехов, И. Тарачков.

Алексей Зарубин , Виталий Пищенко , Кэрол Карр , Раджнар Ваджра , Сергей Питиримов

Фантастика / Журналы, газеты / Фэнтези / Современная проза / Эссе
«Если», 2002 № 02
«Если», 2002 № 02

ФАНТАСТИКАЕжемесячный журналСодержание:Ллойд Биггл. КТО В ЗАМКЕ КОРОЛЬ? повестьПитер Гамильтон, Грэм Джойс. БЕЛОЕ ВЕЩЕСТВО, рассказВидеодром*Адепты жанра--- Евгений Харитонов. КОСМИЧЕСКАЯ ОДИССЕЯ ПАВЛА КЛУШАНЦЕВА (статья)*Экранизация--- Вл. Гаков. ХРАНИТЕЛИ ОТПРАВЛЯЮТСЯ В ДОРОГУ (статья)*Рецензии*Хит сезона--- Дмитрий Байкалов. НЕГР ИЗ КАЛИФОРНИИ ПРИ ДВОРЕ КОРОЛЯ ЛЕО (статья)Пол Ди Филиппо. ПОЖИЗНЕННОЕ ЗАКЛЮЧЕНИЕ, рассказЧарлз Стросс. АНТИТЕЛА, рассказДэвид Лэнгфорд. COMP.BASILISK.FAQ (отрывок из статьи в журнале «Нейчур»)Джо Холдеман. СЛЕПАЯ ЛЮБОВЬ, рассказКристофер Маккитрик. ПОТЕРЯВШИЕСЯ СОБАКИ, рассказАльберт Каудри. «КРУКС», повестьВладимир Березин. КТО ИДЁТ ЗА «КЛИНСКИМ»? (статья)Крупный план*Александр Громов. ГУД БАЙ, АМЕРИКА! (статья)РецензииКрупный план*Глеб Елисеев. ТРИ ДАРА ЛЕСТЕРА ДЕЛЬ РЕЯ (статья)Альтернативная реальностьМаксим Форост. РАДУГА ПЕРВОГО ЗАВЕТА, рассказЭдуард Геворкян. МЕДАЛЬ ЗА ВЗЯТИЕ КАНОССЫ (статья)Евгений Харитонов. ЖУРНАЛЬНАЯ ЛИХОРАДКА (статья)КурсорПерсоналииОбложка И. Тарачкова к повести Альберта Каудри «Крукс».Иллюстрации: А. Балдин, А. Юрьева, С. Шехов, В. Овчинников, А. Филиппов, И. Тарачков

Альберт Каудри , Джо Холдеман , Дэвид Лэнгфорд , Кристофер Маккитрик , Максим Форост

Фантастика / Фэнтези / Журналы, газеты / Научная Фантастика