Санкт-Петербургский государственный университет
Опубликован: 04.12.2007 | Доступ: свободный | Студентов: 2431 / 255 | Оценка: 4.30 / 3.65 | Длительность: 16:28:00
ISBN: 978-5-94774-823-9
Лекция 10:

Cемейства программных продуктов. DSM-подход

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Аннотация: В этой лекции рассказывается о подходе к разработке ПО с помощью создания в компании семейства программных продуктов (software product line). Перечисляются и комментируются различные виды повторно используемых активов программной разработки. Приводятся этапы создания семейства продуктов. Дается определение DSM-подхода (Domain-Specific Modeling), рассматривается его применение в контексте product line. Подробно обсуждаются функциональные возможности и структура DSM-пакетов. Рассказывается об основных на данный момент средствах разработки DSM-пакетов: Eclipse/GMF, Microsoft DSL Tools, Microsoft Visio 2003
Ключевые слова: компонент, ПО, open source, архитектурные требования, семейство программных продуктов, повторно используемые активы, software product, Line, conference, активы, reusable, requirements engineering, предметная область, расходы, минимум, прибыль, затраты, предметной области, архитектура, средства разработки, скрипт, интерфейс командной строки, компилятор, visual, ресурс, XML, кодогенерация, round-trip engineering, интеграция, работ, поддержка, Графический редактор, Eclipse/GMF, Microsoft DSL Tools , Microsoft Visio 2003, пользовательский интерфейс, предметно-ориентированное моделирование, DSM, генератор, DSM-решение, problem domain, domain, language, DSL, предметно-ориентированый язык, программные средства, DSM-пакет, DSM-платформа, инструментальная технология, EMF, средства визуального моделирования, CASE-пакеты, UML, software, репозиторий, control, center, Java, net, ядро, среда разработки, graphical, modeling, IBM, editing, уровни представления данных, модуль, уровень модели, визуализация, модель бизнес-объектов, абонент, коммутатор, системы реального времени, бизнес-объекты, базы данных, память, метамодель, XMI, заглушки, интерфейс, domain model, tools, Visual Studio 2005, SDK, диаграммы классов, итерация, цикла, отладка, stencil, нотация, функциональный пакет, граф

Определение семейства программных продуктов

Повторное использование программных компонент - это возможность строить очередную систему из уже готовых программных блоков, купленных или разработанных в самой компании. Такой подход, будучи осуществлен, способен радикально снизить затратность производства ПО.

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

На настоящий момент не сложился обширный рынок программных компонент, которые бы активно использовались разработчиками прикладного ПО. Компоненты с закрытым исходным кодом часто имеют различные сторонние эффекты, так что разработчики опасаются широко использовать их. Кроме того, часто компоненты не делают в точности того, что нужно, поэтому создать собственную реализацию чаще оказывается целесообразнее, чем пользоваться готовой. Компоненты с открытым исходным кодом, созданные с помощью Open Source подхода, часто оказываются плохого качества, обычно не имеют почти никакой документации и требуют для эффективного использования больших затрат - часто сравнимых с разработкой собственных подобных компонент.

Повторное использование даже в рамках одной компании не является простым делом. Часто в разных проектах одной компании по нескольку раз реализуется одна и та же функциональность, и на это есть причины:

  • Организационные - трудно создать культуру использования чужих результатов, даже если этот чужой - всего лишь соседний проект;
  • технические - имеются различия в платформах реализации и архитектурных требованиях;
  • бизнес - различаются требования к фунцинальности компонент; часто они, будучи похожими в принципе, имеет множество небольших, но существенных отличий;
  • права и лицензии - часто один и тот же код нельзя повторно использовать в проектах, разрабатываемых для разных заказчиков.

В общем, стало понятно, что если повторное использование не организовывать специально, то само собой оно не происходит.

По большому счету, к трудностям повторного использования относятся и проблемы стандартизации процесса разработки ПО - т. е. повторное использование техник управления процессом разработки в рамках всей индустрии в целом. Имеются претенденты - стандарт CMM, метод RUP и др. - но ни один из этих методов не стал применяться во всей индустрии. Стало понятно, что повторное использование нужно организовывать в более узком, ограниченном контексте. Например, в рамках одной компании.

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

Семейство программных продуктов (software product line) - это набор продуктов, которые адресуются одному сегменту рынка или выполняют единую миссию и при этом создаются на базе общих, повторно используемых активов, с помощью хорошо налаженного процесса повторного использования.

В настоящее время этот подход активно развивается. Ему посвящена крупная ежегодная международная конференция International Software Product Line Conference, которая проходит с 1997 года и сопровождается серией симпозиумов. Многие крупные компании (Motorola, Hewlett Packard, Nokia и др.) успешно внедряют этот подход в свою практику. Создается и публикуется большое количество методов, промышленных экспериментов, отчетов и обзоров. Этой темой занимаются два крупных международных консорциума - институт программной инженерии в США (Software Engineering Institute http://www.sei.cmu.edu/pl) и европейский комитет ITEA (InformationTechnology for European Advancement, http://www.itea-office.org).

Повторно используемые активы

Итак, в подходе к разработке ПО методом организации семейства продуктов ключевым оказывается следующее. В компании должны "накопиться" активы разработки (программные компоненты, процедуры процесса, квалификация персонала и т. д.), которые могут использоваться много раз при создании разных систем. Такие активы разработки называются повторно используемыми активами (reusable assets).

Они бывают следующих видов.

  • Требования. Существенная часть требований к продуктам семейства является общей, что значительно упрощает разработку и сопровождение требований (requirement engineering) для отдельных систем.
  • Архитектура. В рамках семейства продуктов разрабатывается архитектура типовой системы. Архитектура конкретной системы создается на ее основе и тем самым существенно экономятся ресурсы на проектирование.
  • Компоненты. Общая для всех представителей семейства функциональность реализуется в виде повторно используемых программных компонент, из-за чего разработка систем значительно упрощается.
  • Различные модели - анализа, проектирования, производительности и т. д. - также могут повторно использоваться при создании продуктов семейства.
  • Средства разработки. В рамках семейства продуктов формируется общая для разных продуктов технологическая среда - средства разработки ( IDEs - Integrated Development Environments), СУБД, средства поддержки планирования, тестирования, конфигурационного управления и т. д. Кроме того, могут создаваться специальные программные средства, "заточенные" под специфику данного семейства (например, кодогенераторы по визуальным моделям).
  • Процессы. Здесь речь идет о повторном использовании приемов работы с заказчиком, методов управления проектом, способов работы с планами и о других процедурах процесса разработки.
  • Квалификация сотрудников. Поскольку системы, разрабатываемые в рамках семейства, похожи, а также существует общая инфраструктура разработки - технологии и программные средства, процедуры процесса, знания в предметной области, на которую ориентировано семейство и т. д., - то в такой ситуации легко "передвигать" работников из одного проекта в другой (например, при необходимости "усилить" какой-то проект), либо после окончания одного проекта подключать разработчиков к новому проекту или вводить в уже существующий.

Процесс разработки

Компания должна начать создание семейства продуктов. Что это значит? Помимо, собственно, разработки целевых продуктов, необходимо потратить значительные средства (инвестиции, время и пр.) в создание повторно используемых активов, формализовать и запустить процедуры их использования. При этом возврат инвестиций происходит не сразу, а при выпуске некоторого количества продуктов. Часто бывает, что, стремясь поскорее вернуть инвестиции, компании не идут на большие расходы, но при этом оказывается, что в долгосрочной перспективе выгод от семейства оказывается меньше, чем могло бы быть. Можно получить больше выгод от семейства, но вложив больше средств и выпустив большее количество продуктов. Однако это рискованно - рынок изменчив, и составить точный прогноз непросто.

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

Разработка ПО на основе организации семейства продуктов делится на два главных этапа (см. рис. 10.1):

  • создание инфраструктуры семейства;
  • разработка продуктов семейства.
Разработка ПО на основе организации семейства продуктов

Рис. 10.1. Разработка ПО на основе организации семейства продуктов

Создание инфраструктуры семейства, с одной стороны, происходит итеративно. Например, создается несколько продуктов, на их примере становится ясно, какие повторно используемые активы целесообразно выделить, потом они реализуются, внедряются в уже существующие и новые продукты, улучшаются и модифицируются и т. д. С другой стороны, основные затраты на создание семейства происходят все-таки в начале. Поэтому в разработке инфраструктуры семейства принято выделять следующие этапы (см. рис. 10.2):

  • анализ;
  • проектирование;
  • реализация.

Анализ. Цель этого этапа заключается в том, чтобы определить, что за продукты будут разрабатываться в рамках семейства. Здесь очерчиваются границы предметной области, в самом общем виде (на уровне требований) определяются планируемые к выпуску продукты, оцениваются бизнес-перспективы всего рынка, попадающего в данную предметную область. Также рассчитываются инвестиционные затраты на разработку семейства продуктов. Кроме того, определяется, что может быть общего у продуктов данной предметной области (другими словами, определяются прототипы повторно используемых активов ), а также то, что нужно будет разрабатывать отдельно для каждого из них.

Этапы в разработке инфраструктуры семейства

Рис. 10.2. Этапы в разработке инфраструктуры семейства

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

Реализация. Этот этап является воплощением созданной выше архитектуры семейства: (i) реализуются все спроектированные ранее повторно используемые активы; (ii) налаживается и внедряется процесс использования этих активов в разработке конкретных систем.

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Анна Митюрёва
Анна Митюрёва

http://www.intuit.ru/studies/courses/1041/218/info

С мобильного приложения доступ есть, а через сайт не отображается. Печально =(

Светлана Ведяева
Светлана Ведяева
Россия, Саратов
Артем Барышев
Артем Барышев
Россия, Иваново