Одной из самых известных и популярных моделей управления безопасностью в любой системе является Модель швейцарского сыра.
Рано или поздно каждый инженер совершает ошибку. Это неизбежно. Что делают хорошие инженеры, так это учатся на ошибках и создают процессы, которые предотвращают возникновение ошибок и превращение их в инциденты.
Цель швейцарской модели сыра состоит в том, чтобы исключить возможность того, что одна ошибка разрушит всю систему и вызовет инцидент или ущерб. Системой в данном случае может быть что угодно — самолет, город или серверная служба.
Швейцарская модель сыра предполагает, что система состоит из нескольких уровней защиты, представленных кусочками сыра. Каждый ломтик представляет собой барьер для потенциальных ошибок или опасностей, а дырки в сыре представляют потенциальную возможность отказа этой защиты.
Эта модель признает, что каждый уровень защиты имеет свои уязвимости, представленные дырами. Но если вы используете достаточное количество уровней защиты, вероятность того, что ошибка проскользнет и вызовет инцидент, снижается.
Конечно, ни одна система или модель не совершенны. Есть вероятность, что ошибка пробьет все дыры, пройдет все уровни защиты и произойдет инцидент. Но в то же время любая другая ошибка, которая могла вывести систему из строя, в какой-то момент была обнаружена и остановлена.
Мир становится все более и более зависимым от того, чтобы программное обеспечение работало гладко и без проблем. Как инженеры-программисты, мы можем многому научиться у других отраслей, которые успешно улучшили свою безопасность и качество с помощью таких моделей, как «Модель швейцарского сыра».
Примером отрасли, значительно повысившей свою безопасность, является авиация. Путешествие на самолете в настоящее время является одним из самых безопасных способов передвижения. В Великобритании в период с 2011 по 2020 год авиаперелеты стали причиной 0,01 смерти на миллиард пассажиро-километров. Для сравнения, путешествие на автомобиле привело к 1,1 смерти на миллиард пассажиро-километров, а простое пешеходное движение привело к 21,5 смертельным случаям на миллиард пассажиро-километров.
Авиация — чрезвычайно безопасная отрасль благодаря множеству уровней защиты, разработанных для обнаружения практически любой ошибки до того, как она превратится в катастрофу. Подумайте обо всей цепочке проверок, которая привела к успешному полету: внедрение дублирующих систем, процесс аккредитации самолета, обучение пилота и все контрольные списки, выполненные до, во время и после полета. Каждый шаг был разработан, чтобы предотвратить превращение ошибок в катастрофы. И этих шагов достаточно, чтобы сделать авиаперелеты невероятно безопасными.
Многие группы разработчиков программного обеспечения уже внедряют, намеренно или нет, какую-то модель швейцарского сыра в свои повседневные рабочие процессы. Подумайте обо всех шагах, которые должен пройти ваш запрос на извлечение, прежде чем его можно будет развернуть в рабочей среде. Если предложенное изменение не соответствует требованиям для перехода к следующему этапу, поздравляем, процесс работает.
Вот базовый набор шагов, которые должен выполнить каждый программный проект, чтобы предотвратить возникновение проблемы из-за большинства ошибок.
Выберите правильный инструмент для работы
Если у вас есть возможность выбрать инструмент, повышающий безопасность, используйте его. Хорошими примерами здесь являются Typescript и Rust. При правильном использовании оба языка не смогут скомпилироваться, если в проекте есть ошибка или небезопасный код.
Используйте инструменты для проверки кода
Добавление инструментов для проверки качества кода, таких как линтеры, может предотвратить возникновение проблем из-за ошибок. Они могут помечать любые потенциальные проблемы и применять общепринятые стандарты кодирования.
Рецензии
Две пары глаз лучше, чем одна. Используйте своих коллег, чтобы проверить, имеют ли смысл предлагаемые изменения, и переходите к следующему этапу, только если кто-то еще принял предложенные изменения.
Добавьте автоматические тесты
Каждого инженера-программиста в какой-то момент своей карьеры учат важности автоматизированных тестов. Убедитесь, что ваш код хорошо протестирован с помощью модульных или сквозных тестов.
При необходимости вы можете добавить дополнительные шаги (например, аудиты безопасности или проверки производительности) в этот конвейер. В чем вы хотите убедиться, так это в том, что сбой на любом из этапов не позволит перейти к следующему этапу. Процесс необходимо остановить до тех пор, пока проблема не будет решена, а затем снова запустить для исправления.
Швейцарская модель сыра подчеркивает важность наличия нескольких уровней защиты, чтобы предотвратить возникновение проблемы из-за ошибок. В нем также подчеркивается важность выявления и устранения уязвимостей на каждом уровне защиты, чтобы предотвратить проскальзывание ошибок. Это постоянный процесс обучения, результатом которого являются более качественные и безопасные продукты и услуги.