Апрель 2009

«... акт правильной разработки сложной системы, характеризуется модульная архитектура не является тривиальной задачей. Напротив, модульность несет высокие затраты: тщательное модульность является познавательной сложной деятельности, поскольку он переводит в разработке разложения всей системы в автономном подкомпоненты, чья взаимозависимость уменьшается до минимума. Кроме того неспособность совершенно modularize архитектуры приводит связанные с тонкой настройки и закаливания мероприятий, направленных на решение неожиданных и непредвиденных взаимозависимостей расходы.»

Модульность в действии: GNU/Linux и модель разработки программного обеспечения Free/Open Source-Развязанный

Модульность открытым исходным кодом программного обеспечения (OSS) базу кода был связан с ростом сообщества разработки программного обеспечения, стимулов для добровольного кодекса вклада и сокращение числа пользователей, которые принимают код без содействия обратно к сообществу. В качестве теоретической конструкции, модульность ссылки OSS в других областях исследований, включая теории организации, экономика промышленности структуры и разработки новых продуктов. Однако измерение модульность OSS дизайн оказалось трудным, особенно для больших и сложных систем.

В этой статье мы опишем некоторые предварительные результаты недавних исследований Карлтонского университета, который исследует меняющиеся модульность крупномасштабных программных систем. Мы описать метод измерения и новые метрики модульности для сравнения кодовых баз разного размера, ввести Инструментарий открытым исходным кодом, который реализует этот метод и метрики и анализ эволюции сервера приложений Apache Tomcat в качестве примера полученные от этого подхода. Хотя эти результаты носят предварительный характер, они открывают двери для дальнейшей дисциплине кросс-исследования, которые количественно связывает проблемы бизнес-менеджеров, предпринимателей, политиков и разработчиков свободного программного обеспечения.

Модульность и проектирования структуры матрицы

В правила проектирования: Сила модульности, Болдуин и Кларк представляют крупное исследование роли модульности в развитии компьютерной индустрии. Они утверждают, что модульность является важной и основной связи между минимум тремя различными системами: i) проектирование; II) организация людей, осуществлять и поддерживать дизайн; и iii) сеть компаний, формирование экономической системы вокруг дизайна. Каждая система ограничивает и включает два других. Другие исследователи с тех пор построены и расширить эту работу, которая в своей первоначальной форме непосредственно не рассматривается OSS.

По словам Болдуин и Кларк модуль представляет собой блок, структурные элементы которого прочно соединены друг с другом и сравнительно слабо связаны с элементами в других единицах. Так же, как есть степени связанности, есть степени модульности. Это мотивирует интерес в области показателей и методов для измерения модульность структуры, составляющие артефакт. В 2006 широко цитируется документ под названием архитектура участия: Делает код архитектура смягчения бесплатно езда в модели развития открыть источник?, Болдуин и Кларк обеспечивают теоретический аргумент, что более модульный открытый исходный код базы будет привлекать больше добровольных взносов и имеют меньше свободного езда не вкладчиков, чем тот, который является менее модульной.

Когда сложность одного из элементов пересекает определенный порог, сложность может быть изолирован путем определения отдельной абстракции, которая имеет простой интерфейс. Эта абстракция скрывает сложность элемента и интерфейс указывает, как элемент взаимодействует с более крупной системы. Модульность уменьшается сложность несколькими способами. В частности он позволяет разработчикам сосредоточиться на отдельных модулях, а не всей интегрированной артефакт. Это радикально меняет процесс проектирования и для работы на отдельных модулей позволяет распараллелить.

Дизайн структуры матрицы (DSM) — это средство анализа для картирования сложных систем. Она обеспечивает компактное представление сложной системы, которая визуализирует взаимозависимости между элементами системы. По словам Болдуин и Кларк «это мощное устройство аналитически, потому что с его помощью мы можем видеть с ясностью как физическая и логическая структура артефакта получает препроводил его процесс проектирования и оттуда к Организации лиц, которые будут нести этот процесс вперед.»

DSM является квадратная матрица с off по диагонали ячеек, указывающий зависимости между элементами системы. Значение в ячейке в строке i и столбец j означает, что элемент в позиции i зависит в некотором роде элемент в позиции j. Например элементы дизайна могут быть классы Java и зависимости будут ссылки между классами. Эти сведения можно извлечь автоматически из базы кода. Кластеризация реорганизует DSM элементы более четко визуализировать и анализировать отношения зависимости.

Подробные сведения о том, как этот анализ проводится сугубо технический, и он опирается на предыдущие исследования в нескольких смежных областях. Алан MacCormack, Джон Руснак и другие коллеги в Гарвардской школе бизнеса недавно опубликовал два важных достижений. В 2006 году в статье под названием изучение структуры сложных программных конструкций: Эмпирическое исследование Open Source и проприетарные код, они использовали DSMs эпирически сравнить структуры двух программных продуктов: ядро Linux и веб-браузер Mozilla. Они предложили алгоритм кластеризации для определения зависимостей. Однако их сравнение критически зависит от выбора версий систем с аналогичного числа исходных файлов, которые являются элементами в DSM. Одна мотивация нашей работы было снять это ограничение и разрешить сравнение кодовых баз разного размера.

Последующая статья в 2008 году исследует эволюцию с течением времени двух программных продуктов: сервер приложений Apache Tomcat открытым исходным кодом и неназванных закрытым исходным кодом коммерческого серверного продукта. Грубая метрика вводится, представляющий изменения соотношения между последовательными версиями в эволюции продукта. Авторы делают вывод, что DSMs и правила проектирования, теория может объяснить, как реальные модульность деятельности позволяют различные темпы эволюции в различных модулях и создать стратегическое преимущество для фирмы.

Измеряя Эволюция дизайна

Наш метод для изучения изменяющихся модульность крупномасштабных программных систем, внедренных в Java основывается на обсуждаемой DSM методы и алгоритмы, но отличается от прошлой работы в нескольких аспектах. Как и в случае с этими подходами мы: i) автоматизировать извлечение зависимостей из программного кода базы; II) использовать конструкции структуры матрицы для визуализации и анализа сведений о зависимостях; и iii) вычислить стоимость метрик как меры модульности. Мы отличаемся от предыдущей работы в: i) что наш блок анализа использует Java-классов, а не исходные файлы C; и ii) использование относительных кластеризованных стоимости.

Наши элементы дизайна являются Java-классы и наши зависимости являются ссылками между классами, будь то по наследству, объявленные поля, или вызовы методов. Поскольку зависимости между классами Java могут быть извлечены из скомпилированного кода программной системы, нам нужно получить только бинарные дистрибутивы выбранных версий. Шаги нашего метода являются следующие:

  1. Выберите версии для анализа и получения их бинарных дистрибутивов.
  2. Для каждой версии извлеките информацию зависит ency из скомпилированного кода.
  3. Создание экземпляров DSM и извлекать метрики стоимости.

Мы реализовали три модульности метрики:

  1. Стоимость распространения: измеряет степень, к которой изменение одного элемента влияет на другие элементы. Это представление о степени сцепления без учета близости между элементами.
  2. Кластерные стоимость: более сложные метрики, которая присваивает различные затраты зависимости на основе расположения элементов внутри кластеров. Он имеет важное ограничение в том, что он может использоваться только для сравнения DSMs аналогичных размеров.
  3. Относительная стоимость кластеризованных: (наш вклад) расширяет кластеризованный стоимость метрики для сравнения DSMs разных размеров, избегая ограничений кластеризованных стоимости.

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

Эволюция модульность Tomcat

Мы использовали наш метод для изучения меняющейся базы кода открытым исходным кодом системы, сервер приложений Apache Tomcat разработан и поддерживается компанией Apache Software Foundation. Tomcat осуществляется в Java и имеет два основных различных функциональных модулей: ядро сервера Tomcat основной и Джаспер, отдельный модуль, который обрабатывает страницы сервера Java. Tomcat Майн и Джаспер связаны только с помощью J2EE API.

За десятилетний период между 1999 и 2008 годах были выпущены четыре основные версии Apache Tomcat:

  • Apache Tomcat 3.x основана на оригинальной реализации 2.2 сервлетов и JSP 1.1 спецификации, подаренных Sun Microsystems
  • Apache Tomcat 4.x реализует Servlet 2.3 и спецификации JSP 1.2 и Каталина, новый контейнер сервлетов на основе различной архитектуры
  • Apache Tomcat 5.x реализует Servlet 2.4 и JSP 2.0 спецификации
  • Реализует 6.x Apache Tomcat Servlet 2.5 и JSP 2.1 спецификации

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

Для каждой версии мы рассмотрели Tomcat основные и Джаспер модули как отдельно, так и в комбинации. Для каждого анализа мы вычислить число классов, количество зависимостей, стоимость распространения, количество вертикальных автобусов, число кластеров, кластеризованных стоимости и относительной стоимости кластеризованных. Число классов почти в три раза между версии 3.0 и 6.0.16. Это является наглядным свидетельством необходимости модульности мер, которые допускают сравнение кодовых баз разного размера.

Первоначально мы ожидали модульность Tomcat для увеличения всей эволюции продукта. Обоснование для этого ожидания было, что как система развивается, ее структура будет постоянно рассматриваться разработчиками. В частности мы ожидали, что архитектурные усовершенствования также приведет к увеличению модульности. Например, когда Tomcat 4.x представила новую реализацию контейнера сервлетов, основанный на новой архитектуре (Catalina), мы ожидали, что новая архитектура будет более модульными, потому что он был построен с нуля для гибкости и производительности.

Однако как видно на рисунках 1 и 2, мы отмечаем, что расходы на распространение Tomcat 3.3.2 и 4.0.6 9,6% и 14,6%, соответственно, и относительные затраты кластеризованных 0,0031 и 0,0035. Обе метрики показывают, что версия 4.0.6 менее Модульная чем версия 3.3.2, напротив того, что мы ожидали найти. Версия 3.3.2 — последний выпуск продукции Tomcat 3.x, который закончил процесс рефакторинга и ввел более модульную конструкцию, позволяя Добавление и удаление модулей, которые контролируют выполнение запросов сервлетом. Версия 4.0.6 является окончательной версии Tomcat 4.x, который представил контейнер сервлетов Каталина. Аналогичная ситуация произошла, когда крупные архитектурные изменения были сделаны к подсистеме Джаспер в других точках во времени.

Рисунок 1: Стоимость распространения Tomcat Главная

Рисунок 2: Относительная стоимость кластеризованных Tomcat Главная

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

Наши данные не является убедительным на почему этот план произошло, но мы предлагаем правдоподобное объяснение. Как только новая функциональность будет первоначально развернута и рабочие, фокус смены. Разработчики вернуться к дизайн и выполнения задач рефакторинга и очистки, которые представляют изменения структуры системы, но не к его поведению. Расширение понимания и опыта, накопленного благодаря оригинальной реализации позволяет разработчикам легко изменить структуру существующего кода в более модульную конструкцию. Результатом является значительное увеличение модульности, что компенсирует для первоначального сокращения в предыдущей версии.

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

Предложение 1: основные архитектурные и реализация изменения вызывают модульность системы программного обеспечения для уменьшения в первую очередь.

Предложение 2: основные изменения следуют периоды рефакторинга и очистки деятельности, которые вызывают модульность системы программного обеспечения для увеличения снова.

Предложение 3: увеличение модульности в результате рефакторинга и очистки деятельности более чем компенсирует снижение в модульности из-за серьезных изменений.

Заключение

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

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

Рекомендуемые ресурсы

Библиотека Java DSM

DSM Домашняя страница

Доля этой статьи:

Цитируете эту статью:

Оцените содержание: 
Нет голосов были поданы еще. Скажи свое слово!

Добавить новый комментарий

Обычный текст

  • Теги HTML не разрешены.
  • Адреса электронной почты и адреса страниц включите в ссылки автоматически.
  • Строки и параграфы переносятся автоматически.