Сколько ошибок мы не обнаружили?

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

Количество известных ошибок

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

Общее количество сообщенных ошибок 100 000+
Общее количество исправленных ошибок 90 000+

Другие крупные проекты с открытым исходным кодом сообщают о схожем количестве известных ошибок:

Mozilla Firefox 750 000+
Chromium 950 000+

Что касается проприетарного программного обеспечения, нам приходится полагаться на редкие раскрытия информации от компаний. По сообщениям Microsoft, исправлено:

Ошибки в Windows 7 36 000
Ошибки в Windows 8 44 000
Ошибки в Windows 10 50 000+

Оценка общего количества ошибок

Не все ошибки сообщаются. Чтобы оценить общее количество, нам нужно учесть:

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

Исследования показали, что только 25-30% ошибок обнаруживаются во время разработки. Дополнительное пользовательское тестирование обнаруживает еще 40-50%. Остальные 20-30% не обнаруживаются до релиза.

После релиза пользователи сталкиваются с ошибками, которые остались необнаруженными. Но не все из них сообщаются. По данным Mozilla, только 0,15% пользователей Firefox отправляют отчеты об ошибках. Истинное количество обнаруженных ошибок намного выше.

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

Учитывая все это, общее количество ошибок, вероятно, превышает количество выявленных ошибок как минимум в 3 раза. Возможно, в 5-10 раз для сложного программного обеспечения.

Исследование случая: healthcare.gov

Healthcare.gov предоставляет соответствующее исследование случая. Этот сложный правительственный проект по разработке программного обеспечения имел печально известный сложный запуск в 2013 году. В первый месяц только 6% посетителей смогли успешно зарегистрироваться. Что пошло не так?

Вскрытие выявило проблемы:

  • Недостаточное сквозное тестирование
  • Поздние изменения в дизайне и расползание области действия
  • Сложность интеграции многих систем

Все основные условия для ошибок. В первые месяцы было исправлено более 500 ошибок. За первый год работы, вероятно, тысячи ошибок были устранены путем постоянного исправления.

Healthcare.gov иллюстрирует, как даже самые тщательные усилия пропускают ошибки при запуске. А сложность их умножает. Он служит микрокосмом проблем, с которыми сталкиваются все программные проекты.

Оценка общих показателей

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

Ядро Linux 300 000 – 1 000 000
Mozilla Firefox 2 250 000 – 7 500 000
Windows 10 150 000 – 500 000

Эти широкие диапазоны объясняют неопределенности в базовых предположениях. Но они иллюстрируют масштаб необнаруженных ошибок.

Выводы

Что эти результаты означают для разработки программного обеспечения?

  • Стремление к коду без ошибок бесполезно. Ошибки всегда будут.
  • Тестирование и усилия по обеспечению качества должны быть нацелены на самые критические потоки.
  • Мониторинг и быстрое исправление являются обязательными после запуска.
  • Установление ожиданий с пользователями и руководством является ключевым моментом.

Хотя мы не можем устранить ошибки, мы можем смягчить их влияние с помощью осмотрительных методов. А принятие несовершенства может привести к улучшению систем.

Заключение

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