Термин антихрупкость ввел Нассим Талеб, в своей книге.
Что вообще такое антихрупкость? Допустим, у вас есть хрустальный стакан. Если при перевозке уронить коробку с бокалом, он может разрушиться поэтому бокал - хрупкий.
А, например, титановый шарик достаточно долго будет сопротивляться падению. Такие предметы называют крепкими..
Антихрупкие бокалы бы становились тем крепче, чем больше их проняли при транспортировке. .
В нашей жизни есть примеры антихрупких систем. Например колония бактерий, со временем может научиться бороться с любым антибиотиком. Каждая бактерия в отдельности хрупкая, но когда их много оказываются те, которые сопротивляются антибиотику лучше. И именно они получат продолжение, что в итоге сделает колонию неуязвимой.
Теперь давайте рассмотрим принцип антихрупкости в разрезе програмирования. Новый програмный продукт насколько бы хорошо он не был протестирован всегда имеет ошибки. И такую систему в зависимости от качества написанного кода можно назвать либо хрупкой, если она написана плохо, либо крепкой, если она написана хорошо.
Но как сделать ее антихрупкой?
Для этого в разработке нужно одновременно соблюдать два принципа:
- править существующие проблемы
- каждое следующее следующее исправление должно делать систему устойчивее.
При одновременном соблюдении этих принципов каждый баг-репорт будет делать систему прочнее.
С первым принципом понятно, есть бага - чиним. Но как быть уверенным, что новые изменения ничего не ломают? Для этого существует многоуровневое тестирование
- проверка типов - характерна для языков со строгой типизацией.
- юнит тестирования - для тестирование отдельных функций
- интеграционное - тестирование корректности взаимодействия различных модулей программы
- e2e (end-to-end) d) тестирование - когда тестируется програмный комплекс тестируется целиком
- ручное тестирование, когда продукт тестирует человек, обращая внимание на различные отклонения
Если ваш код покрыт тестами: то при внесении изменений уу разработчика появляется уверенность, что он ничего не поломал своим фиксом.
Я помню сервер с какой-то онлайн игрой, у которого был сумашедший аптайм, и в котором не было багов совсем, поскольку за несколько лет все исправили. Единственная проблема была в том, что количество постоянных игроков медленно но постоянно уменьшалось, поскольку ничего нового этот игровой сервер предложить не мог.
В следующем посте я расскажу о том, может ли разработчик сам стать антихрупким.