Ошибки в программном обеспечении — это печальная реальность сложных систем. Даже при тщательном тестировании некоторые ошибки неизбежно просачиваются сквозь трещины в производство. Возникает вопрос: сколько ошибок таится в нашем программном обеспечении, все еще не обнаруженных? Давайте попробуем оценить.
Количество зарегистрированных и исправленных ошибок дает нам нижнюю границу оценки. Проекты с открытым исходным кодом, которые используют публичные системы отслеживания ошибок, дают нам реальные данные для работы. Например, за время своего существования ядро 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 предоставляет соответствующее исследование случая. Этот сложный правительственный проект по разработке программного обеспечения имел печально известный сложный запуск в 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 и далее дефекты таятся повсюду. Хотя эта реальность и удручает, она подчеркивает присущую программному обеспечению сложность. Скромный баг напоминает нам, что все системы несовершенны в технологиях, бизнесе и жизни. Успех приходит не от совершенства, а от того, как мы реагируем.