- PVSM.RU - https://www.pvsm.ru -
В своей прошлой статье [1] я обещал затронуть тему применения парадигмы языково-ориентированного программирования (ЯОП) при разработке программного обеспечения (ПО), но ушёл в сторону, сосредоточившись на моделировании. Теперь хочу исправить ситуацию.
Важно сразу уточнить, что совсем без разработчиков в информационных технологиях (ИТ) обойтись не получится. Но в некоторых сферах разработки ПО, на мой взгляд, могут произойти серьёзные перемены. Давайте для определённости рассмотрим корпоративную разработку и попробуем проследить и экстраполировать путь её развития с учётом стремления уменьшить затраты.
И ещё. Предлагается не NoCode [2] или LowCode [3], а скорее, оченьдаже-Code. В общем, это – другое!
Начиналась наша история примерно в начале 90х с одиноких энтузиастов, которые используя какой-нибудь dBase [4], FoxPro [5], Paradox [6] и прочие подобные инструменты, автоматизировали конкретно свои или «соседние» рабочие места. Ох! Какое это было замечательное время – сидишь себе один и «клепаешь на коленке» ПО, которое работало!
Всё было хорошо, пока руководство, обратив внимание на «компьютерного гения», не просило его разработать более-менее комплексную систему автоматизации хотя бы одного отдела. Вот тут и выяснялось, что новая сложность не совместима с одиночной разработкой, т.к. было необходимо учесть слишком много деталей и подготовить сложную программно-аппаратную инфраструктуру. Пришлось договариваться с компаниями – системными интеграторами. Эти компании, кроме поставки и настройки инфраструктуры, также занимались разработкой ПО для автоматизации деятельности предприятий.
Для того, чтобы избежать провала таких проектов (статистика и сейчас весьма тревожна [7], а тогда было ещё хуже), компании-разработчики были вынуждены строго придерживаться современных на тот момент методологий разработки: RUP [8], MSF [9] и других. Используя эти методологии, корпоративная разработка всё чаще стала достигать успеха. Эти методологии стали называть Enterprise-методологиями. Именно благодаря им с середины 90х до конца 10х годов был осуществлён настоящий прорыв в автоматизации крупных предприятий, имеющих не только сложную предметную область, но и разветвлённую сеть филиалов.
Давайте рассмотрим жизненный цикл разработки по Enterprise-методологиям и выясним, в чём причина успеха и источник проблем.
На рисунке представлена упрощённая схема жизненного цикла разработки ПО при использовании обобщённой Enterprise-методологии. На схеме многочисленные этапы разработки собраны в три основных:
сбор требований/замечаний,
детализация требований,
разработка и тестирование.
Для выполнения каждого этапа привлекались различные роли. На схеме представлены далеко не все роли, обычно участвующие в проекте, а только основные. Также, для упрощения анализа я обобщил в роли «заказчик» не только самого заказчика из договора, но и всех его представителей.
Главной особенностью представленного подхода к разработке являлось то, что после каждого этапа создавался определённый документ или продукт (назовём это «артефактом»). Пока этот артефакт не был готов, полноценное выполнение следующего этапа затруднено и рискованно. Это очень важно подчеркнуть, поскольку именно такой подход, с одной стороны, обеспечивал выполнение проекта, но с другой, требовал очень много ресурсов и времени.
По сути, каждый артефакт являлся моделью предметной области, а при каждом переходе на следующий этап эта модель подвергалась искажениям. И хоть и существовали различные способы компенсации этих искажений (тестирование: бизнес-тестирование, верификация; методики управления: требованиями, рисками, изменениями, ожиданиями и пр.), всё равно заказчик как правило на выходе жизненного цикла получал, мягко говоря, не совсем то, что хотел. Именно по этой причине рекомендовалось проект разделять на этапы, привлекать заказчика к обсуждениям и т.д. и т.п. А также сокращать длительность жизненного цикла. Однако из моего опыта работы в подобных проектах я не знаю случая, когда итерация жизненного цикла была менее трёх месяцев. Чаще всего – дольше.
В результате очень часто затраты на разработку превышали запланированные. А отсюда и печальная статистика.
Со временем автоматизация разработки росла и стали появляться идеи пересмотреть концепцию разработки с целью радикального сокращения итерации жизненного цикла и в целом затрат. Среди таких идей очень популярной стала идеология Agile [10], хотя переход на неё для компаний-разработчиков был не простым – очень уж сильно она отличалась от старых методологий. Всё переворачивалось «с ног на голову», ведь убиралась база – часть артефактов! Невероятная ересь с точки зрения системного аналитика, всю дорогу реализующего проекты в привычном стиле.
Тем не менее, всё чаще стали слышны истории успеха Agile-проектов. Они выполнялись быстрее, дешевле, проще было управлять требованиями, рисками, изменениями и ожиданиями, а заказчик был почти всегда доволен.
Команды разработки стали юркими мобильными крейсерами по сравнению с командами-ледоколами, работающими по Enterprise-методологиям. При этом, если ранее заказчик оставался на берегу, то теперь его взяли на борт, выделили уютную каюту, но на мостик пускают редко.
Если вернуться к ассоциации артефактов с моделью предметной области, то при выполнении проекта по Agile-style методологии перестало быть необходимым переводить первоначальное описание модели предметной области на язык разработки (в виде функциональной спецификации и заданий), поскольку разработчики вместе с заказчиком участвуют в процессе описания модели, изучают предметную область и стараются говорить на её языке. Их основной задачей является максимально точно перевести это описание в продукт, хотя искажения всё равно остаются.
А теперь давайте представим, что мы описываем предметную область на языке, который может быть сразу интерпретирован, или по которому может выполняться компиляция/генерация/развёртывание ПО без дополнительного участия человека. В этом случае мы уберём этап кодирования, точнее, перенесём его в начало, совместив со сбором требований. В итоге, сократится время жизненного цикла и сократятся общие затраты на разработку. Также ещё проще станет управлять требованиями, изменениями и ожиданиями.
Теперь наш проект – изящная яхта, у руля которой стоят заказчик, разработчик и интеллектуальная система навигации. И больше на борту никто не нужен.
Но для этого нужно, чтобы у нас был язык предметной области, а команда могла его оперативно изменять по мере изучения и уточнения этой предметной области. Чтобы такой подход был действительно эффективным, нужны очень простые и эффективные инструменты работы с языками.
Или можно создать язык на базе хорошо себя зарекомендовавшего подхода к разработке корпоративных приложений, например, Domain-Driven Design (DDD). То есть, у нас может быть язык описания корпоративных предметных областей. В этом случае каждый раз разрабатывать новый язык не придётся, и тратить время на его доработку тоже. Ключевые слова этого языка будут терминами DDD, а переменные, названия методов и модулей – понятиями предметной области.
Тут можно вспомнить прошлую статью [1] и язык описания систем обыкновенных дифференциальных уравнений, как универсальный для предметной области динамических систем. А можно пойти дальше и разрабатывать язык для описания конкретной подобласти, например, систем управления летательными аппаратами. И здесь может быть так же – может быть создан язык для описания предметных областей корпоративных приложений (например, на базе DDD). А можно пойти дальше – создать язык описания предметной области конкретного предприятия. Что лучше пока не могу сказать. Кажется, что первый вариант проще, с него можно начать.
Одной из проблем может стать изменение структуры предметной области на одной из итераций жизненного цикла, которая приводит к неоднозначности конвертирования накопленных в результате эксплуатации данных или к их потере (Помните? – У нас непрерывное развёртывание!). Ранее, на этапе разработки для этой цели вручную создавались специальные сценарии преобразования и переноса данных. Но в нашем случае для этого можно заготовить обобщённые алгоритмы преобразования данных. А в случае риска искажения или потери данных анализатор нашего языка должен выдавать соответствующее сообщение об ошибке ещё на этапе изменения описания предметной области.
Теперь давайте представим, что наш язык описания предметных областей оказался достаточно удачным, подтянулся AI, а также появились инструменты графического описания предметных областей, достаточно простые и наглядные для того, чтобы заказчик мог сам их использовать без разработчика, но, возможно, с помощью AI.
Остаётся понять, как при данной конфигурации разработки управлять требованиями, рисками, ожиданиями и изменениями. Вероятно, требованиями и рисками придётся управлять через язык и AI, с ожиданиями сам заказчик разберётся за счёт резкого сокращения времени итерации. А вот изменениями придётся управлять, скорее всего, через механизмы типа SaaS [11], IaaS [12] и пр. Так ли это невероятно?
На протяжении всей эволюции ИТ мы всё больше вовлекали заказчика в процесс разработки, и теперь он выпущен в одиночное плавание в бушующий океан информационных технологий, привязанный к своей лодочке…
А может быть совершилось превращение и теперь заказчик стал разработчиком? Как вам такой сюжет?
Итак, мы сократили всю команду разработки из жизненного цикла создания корпоративных приложений. На мой взгляд подобный сценарий вполне возможен и не столь отдалён.
Попробую в следующей статье предложить вариант языка описания корпоративных предметных областей на базе подхода DDD. С использованием платформы SIMODO [13], конечно.
Что скажите? :-)
Автор: FetisovMichael
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/424012
Ссылки в тексте:
[1] прошлой статье: https://habr.com/ru/articles/919396/
[2] NoCode: https://en.wikipedia.org/wiki/No-code_development_platform
[3] LowCode: https://ru.wikipedia.org/wiki/Low-code
[4] dBase: https://ru.wikipedia.org/wiki/DBase
[5] FoxPro: https://ru.wikipedia.org/wiki/FoxPro
[6] Paradox: https://ru.wikipedia.org/wiki/Paradox
[7] сейчас весьма тревожна: https://myfin.by/article/biznes/zhestokaya-statistika-69-it-proektov-provalivayutsya-ili-ne-dostigayut-celi-i-vot-pochemu
[8] RUP: https://ru.wikipedia.org/wiki/Rational_Unified_Process
[9] MSF: https://ru.wikipedia.org/wiki/Microsoft_Solutions_Framework
[10] Agile: https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%B1%D0%BA%D0%B0%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8
[11] SaaS: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D0%BA_%D1%83%D1%81%D0%BB%D1%83%D0%B3%D0%B0
[12] IaaS: https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D1%80%D0%B0%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%B0%D0%BA_%D1%83%D1%81%D0%BB%D1%83%D0%B3%D0%B0
[13] SIMODO: https://gitverse.ru/simodo/loom
[14] Источник: https://habr.com/ru/articles/923374/?utm_campaign=923374&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.