Что такое MSR?

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

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

Наибольшее распространение и применение к середине 90-х годов прошлого века получили методы оценки надёжности основанные на так называемых моделях роста надёжности. Эти модели основаны на предположении, что со временем по мере обнаружения ошибок надёжность программной системы растёт, и оперируют в основном временными характеристиками надёжности: время наработки до первого отказа, время между двумя последовательными отказами и т.п. Эти модели за годы использования не плохо себя зарекомендовали, но вместе с тем им свойственны фундаментальные недостатки, и прежде всего то, что они опираются на ряд сомнительных и просто нереальных предположений.

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

MSR (Mining Software Repositories) — это сравнительно молодое и активно развивающееся направление интеллектуального анализа данных (data mining) направленное на извлечение и анализ информации хранящейся в программных репозиториях. Прежде всего к таким репозиториям относятся системы контроля версий (SubVersion, Git) и bug-трэккеры (BugZilla, Mantis). Бывают и другие виды репозиториев например mail-листы и прочая экзотика, которые также могут использоваться в качестве источников информации. Система контроля версий хранит огромное количество информации об эволюции проекта. С её помощью можно узнать кем, когда и какие изменения были сделаны. Применение различных эвристик также позволяет устанавливать, хотя и не всегда точно, зачем эти изменения были сделаны. Сбор и анализ такой информации может многое дать разработчикам…

Уже сегодня MSR способно на многое:

  • Анализ ранее сделанных ошибок, позволяет выявить ещё не обнаруженные похожие ошибки.
  • Анализ ранее сделанных ошибок позволяет выявить проблемные участки кода, изменение которых потенциально опасно. Предупреждение программиста о потенциальной опасности изменений посредством средств среды разработки может помочь ему не сделать ошибок.
  • Анализ ранее сделанных ошибок позволяет оценить количество ошибок и их распределение во вновь добавленном коде. Такое знание позволяет эффективнее распределять ресурсы тестирования, оптимально выбирать дату релиза.
  • Анализ изменений на предмет их связи позволяет выявить зависимые участки кода, которые должны изменяться совместно. Если совместного изменения не происходит, это может быть признаком того, что программист забыл поправить некоторые участки кода.
  • Много чего ещё…

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