Здравствуйте, не могу найти ссылку на скачивание курса «Визуальное моделирование: теория и практика»
Номер платежа 6400454020565 |
Cемейства программных продуктов. DSM-подход
Определение семейства программных продуктов
Повторное использование программных компонент - это возможность строить очередную систему из уже готовых программных блоков, купленных или разработанных в самой компании. Такой подход, будучи осуществлен, способен радикально снизить затратность производства ПО.
Однако, многочисленные попытки организовать повторное использование программных компонент и других активов разработки ПО привели мировое сообщество к осознанию следующей истины. Столь заманчивое повторное использование в программной индустрии не является таким очевидным и простым делом, как в других, уже устоявшихся промышленных областях и сферах производства услуг.
На настоящий момент не сложился обширный рынок программных компонент, которые бы активно использовались разработчиками прикладного ПО. Компоненты с закрытым исходным кодом часто имеют различные сторонние эффекты, так что разработчики опасаются широко использовать их. Кроме того, часто компоненты не делают в точности того, что нужно, поэтому создать собственную реализацию чаще оказывается целесообразнее, чем пользоваться готовой. Компоненты с открытым исходным кодом, созданные с помощью Open Source подхода, часто оказываются плохого качества, обычно не имеют почти никакой документации и требуют для эффективного использования больших затрат - часто сравнимых с разработкой собственных подобных компонент.
Повторное использование даже в рамках одной компании не является простым делом. Часто в разных проектах одной компании по нескольку раз реализуется одна и та же функциональность, и на это есть причины:
- Организационные - трудно создать культуру использования чужих результатов, даже если этот чужой - всего лишь соседний проект;
- технические - имеются различия в платформах реализации и архитектурных требованиях;
- бизнес - различаются требования к фунцинальности компонент; часто они, будучи похожими в принципе, имеет множество небольших, но существенных отличий;
- права и лицензии - часто один и тот же код нельзя повторно использовать в проектах, разрабатываемых для разных заказчиков.
В общем, стало понятно, что если повторное использование не организовывать специально, то само собой оно не происходит.
По большому счету, к трудностям повторного использования относятся и проблемы стандартизации процесса разработки ПО - т. е. повторное использование техник управления процессом разработки в рамках всей индустрии в целом. Имеются претенденты - стандарт CMM, метод RUP и др. - но ни один из этих методов не стал применяться во всей индустрии. Стало понятно, что повторное использование нужно организовывать в более узком, ограниченном контексте. Например, в рамках одной компании.
Таким образом, возник подход к разработке ПО методом организации семейства программных продуктов, подразумевающий совместную разработку нескольких сходных продуктов в рамках одной компании. Именно семейство продуктов компании оказывается тем контекстом, где есть общность интересов и можно организовать единое понимание целей и задач разработки, где можно создать повторно используемые активы и наладить процесс их использования.
Семейство программных продуктов (software product line) - это набор продуктов, которые адресуются одному сегменту рынка или выполняют единую миссию и при этом создаются на базе общих, повторно используемых активов, с помощью хорошо налаженного процесса повторного использования.
Повторно используемые активы
Итак, в подходе к разработке ПО методом организации семейства продуктов ключевым оказывается следующее. В компании должны "накопиться" активы разработки (программные компоненты, процедуры процесса, квалификация персонала и т. д.), которые могут использоваться много раз при создании разных систем. Такие активы разработки называются повторно используемыми активами (reusable assets).
Они бывают следующих видов.
- Требования. Существенная часть требований к продуктам семейства является общей, что значительно упрощает разработку и сопровождение требований (requirement engineering) для отдельных систем.
- Архитектура. В рамках семейства продуктов разрабатывается архитектура типовой системы. Архитектура конкретной системы создается на ее основе и тем самым существенно экономятся ресурсы на проектирование.
- Компоненты. Общая для всех представителей семейства функциональность реализуется в виде повторно используемых программных компонент, из-за чего разработка систем значительно упрощается.
- Различные модели - анализа, проектирования, производительности и т. д. - также могут повторно использоваться при создании продуктов семейства.
- Средства разработки. В рамках семейства продуктов формируется общая для разных продуктов технологическая среда - средства разработки ( IDEs - Integrated Development Environments), СУБД, средства поддержки планирования, тестирования, конфигурационного управления и т. д. Кроме того, могут создаваться специальные программные средства, "заточенные" под специфику данного семейства (например, кодогенераторы по визуальным моделям).
- Процессы. Здесь речь идет о повторном использовании приемов работы с заказчиком, методов управления проектом, способов работы с планами и о других процедурах процесса разработки.
- Квалификация сотрудников. Поскольку системы, разрабатываемые в рамках семейства, похожи, а также существует общая инфраструктура разработки - технологии и программные средства, процедуры процесса, знания в предметной области, на которую ориентировано семейство и т. д., - то в такой ситуации легко "передвигать" работников из одного проекта в другой (например, при необходимости "усилить" какой-то проект), либо после окончания одного проекта подключать разработчиков к новому проекту или вводить в уже существующий.
Процесс разработки
Компания должна начать создание семейства продуктов. Что это значит? Помимо, собственно, разработки целевых продуктов, необходимо потратить значительные средства (инвестиции, время и пр.) в создание повторно используемых активов, формализовать и запустить процедуры их использования. При этом возврат инвестиций происходит не сразу, а при выпуске некоторого количества продуктов. Часто бывает, что, стремясь поскорее вернуть инвестиции, компании не идут на большие расходы, но при этом оказывается, что в долгосрочной перспективе выгод от семейства оказывается меньше, чем могло бы быть. Можно получить больше выгод от семейства, но вложив больше средств и выпустив большее количество продуктов. Однако это рискованно - рынок изменчив, и составить точный прогноз непросто.
Соотнесение величины инвестиций на организацию семейства и сроков их возврата зависит от конкретной ситуации, в особенности от степени предсказуемости рынка. Если, например, компания уверена, что как минимум пять лет данный рынок будет существовать и развиваться, то она может затратить полгода на разработку инфраструктуры семейства с тем, чтобы эти инвестиции окупились, например, еще через один год, а последующие три с половиной года вложенные средства приносили бы прибыль. Если же компания уверена в рынке только на два года, то затраты на семейство продуктов и время возврата инвестиций будут иными.
Разработка ПО на основе организации семейства продуктов делится на два главных этапа (см. рис. 10.1):
- создание инфраструктуры семейства;
- разработка продуктов семейства.
Создание инфраструктуры семейства, с одной стороны, происходит итеративно. Например, создается несколько продуктов, на их примере становится ясно, какие повторно используемые активы целесообразно выделить, потом они реализуются, внедряются в уже существующие и новые продукты, улучшаются и модифицируются и т. д. С другой стороны, основные затраты на создание семейства происходят все-таки в начале. Поэтому в разработке инфраструктуры семейства принято выделять следующие этапы (см. рис. 10.2):
- анализ;
- проектирование;
- реализация.
Анализ. Цель этого этапа заключается в том, чтобы определить, что за продукты будут разрабатываться в рамках семейства. Здесь очерчиваются границы предметной области, в самом общем виде (на уровне требований) определяются планируемые к выпуску продукты, оцениваются бизнес-перспективы всего рынка, попадающего в данную предметную область. Также рассчитываются инвестиционные затраты на разработку семейства продуктов. Кроме того, определяется, что может быть общего у продуктов данной предметной области (другими словами, определяются прототипы повторно используемых активов ), а также то, что нужно будет разрабатывать отдельно для каждого из них.
Проектирование. Основной задачей этого этапа является определить, как в рамках семейства будут разрабатываться продукты. Создается архитектура семейства продуктов, в ее рамках определяются и тщательно специфицируются повторно используемые активы. Определяется также процедура создания продуктов семейства на основе повторно используемых активов, включая планы по настройке, доработке и созданию соответствующих средств автоматизации.
Реализация. Этот этап является воплощением созданной выше архитектуры семейства: (i) реализуются все спроектированные ранее повторно используемые активы; (ii) налаживается и внедряется процесс использования этих активов в разработке конкретных систем.