Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

ITK

Глава 9 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: ITK
Авторы: Luis Ibanez, Brad King
Перевод: А.Панин

Рефакторинг

Проект ITK был начат в 2000 году и постоянно развивался до 2010 года. В 2011 году благодаря финансовым вливаниям из федеральных инвестиций команда разработчиков получила по истине уникальную возможность занятия рефакторингом кода. Финансирование было осуществлено Национальной библиотекой медицины в рамках этапа реализации инициативы по оздоровлению экономики Америки и реинвестированию (American Recovery and Reinvestment Act (ARRA)). Эта работа не была второстепенной. Представьте, что вы работали над частью программного обеспечения в течение более чем десяти лет и вам предоставили возможность улучшения ее кода; что бы вы изменили?

Такая возможность реализации расширенного рефакторинга появляется очень редко. В течение предыдущих десяти лет мы ежедневно проводили небольшие локальные рефакторинги, очищая определенные уголки тулкита после того, как оказывались в них. Этот продолжительный процесс очистки и улучшения кода использовался благодаря преимуществам взаимодействия участников сообществ проектов с открытым исходным кодом, а безопасность процесса обеспечивалась инфраструктурой тестирования на основе CDash, которая обычно проверяет около 84% кода тукита. Следует отметить, что в отличие от нашего показателя, среднее покрытие кода системами промышленного тестирования оценивается только в 50%.

Среди множества вещей, измененных в процессе рефакторинга, наиболее относящимися к вопросам архитектуры являются:
  • Начало процесса разделения кода на модули
  • Стандартизация целочисленных типов
  • Исправления в области применения операторов typedef для возможности работы с изображениями, объем которых превышает 4 GB на всех платформах
  • Пересмотр процесса разработки программного обеспечения:
    • Миграция с CVS на Git
    • Начало выполнения обзоров кода с использованием Gerrit
    • Начало выполнения тестов по запросу с использованием CDash@home
    • Улучшение метода загрузки данных для модульного тестирования
  • Окончание поддержки устаревших компиляторов
  • Улучшение поддержки ввода/вывода для различных форматов файлов изображений, среди которых:
    • DICOM
    • JPEG2000
    • TIFF (BigTIFF)
    • HDF5
  • Реализация фреймворка для поддержки расчетов средствами видеоадаптера
  • Реализация функций для поддержки обработки видео
    • Добавление кода поддержки технологии OpenCV
    • Добавление кода поддержки технологии VXL

Поддержка развития проекта, основанная на инкрементальных модификациях - производящихся в ходе выполнения таких задач, как добавление возможностей фильтра изображения, улучшение производительности заданного алгоритма, работа на основе сообщения об ошибке и улучшение документации определенных фильтров изображений - хорошо функционирует при локальном улучшении определенных классов C++. Однако, расширенный рефакторинг необходим для инфраструктурных модификаций, которые затрагивают большое количество классов по всем направлениям, таких, как те, что были перечислены ранее. Например, набор изменений, необходимых для поддержки файлов объемом более 4 GB был, вероятно, одним из самых больших патчей, которые когда-либо применялись по отношению к ITK. Этот процесс потребовал модификации сотен классов и не мог быть выполнен инкрементально без серьезных неудобств. Процесс разделения кода на модули является еще одним примером задачи, которая не могла быть выполнена инкрементально. На самом деле этот процесс повлиял на всю организацию тулкита, на то, как работает инфраструктура тестирования, как производится управление тестовыми данными, как тулкит упаковывается и распространяется, а также на то, как новые фрагменты исходного кода должны быть сформированы для включения в состав тулкита в будущем.

Воспроизводимость

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

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

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

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

Для заполнения бреши, заключающейся в недостатке воспроизводимых публикаций, сообщество ITK создало вебсайт Insight Journal. Доступ к размещаемым на нем публикациям открыт для всех, причем от авторов публикаций требуется предоставление исходного кода, данных, параметров и тестов для возможности проверки воспроизводимости. Статьи публикуются в сети менее чем через 24 часа после отправки. После этого они становятся доступны для обзора любым участником сообщества. Читатели получают полный доступ ко всем материалам, прилагающимся к статье, а именно: исходному коду, данным, параметрам и сценариям для тестирования. Insight Journal стал продуктивной средой для обмена новыми фрагментами кода, которые начинают свой путь по направлению к кодовой базе проекта. Insight Journal недавно получил 500-ю статью и продолжает использоваться как официальный источник нового кода для добавления в состав ITK.


Вернуться к началу статьи.