Пристегните ремни

Apr 07, 2011 07:20



Постоянно падает ЖЖ. Это, разумеется, не новость - уже привычно и неинтересно. Но вот как, что, зачем и почему - это еще вызывает какой-то интерес.
Выдвигается масса предположений.
Основных версий, насколько я понимаю, три.
--- Первая - косорукие СУПисты принялись ставить новый движок, но вследствие вышеуказанной косорукости сделали это косоруко.
--- Вторая - злые хакеры преследуют кого-то на просторах сети. Действуют ли они самостоятельно, движимые только собственной злостностью или работают под патронажем Кровавой Гэбни™, Вашингтонского Обкома™ или лично Ктулху™ - этот вопрос еще находится в процессе обсуждения. Окончательных выводов я пока еще не видел.
Также не решен окончательно вопрос кого именно они ловят. Я видел версии, что Навального. Видел версию, что стараются этим свалить СУП. Также есть самовыдвиженец - юзер Лопатников. Ему очень хочется думать, что именно он и есть тот неуловимый Джо за которым гоняются злые хакеры.
--- Третья - ботов развелось столько, что их количество перешло в качество. Не то чтобы они, объединившись, образовали искусcтвенный интеллект - нет, таких предположений, слава богу, не видел. Версия более приземленная - ботов и спамеров стало столько, что они, даже без злого умысла, просто процессом своей жизнедеятельности уже могут уронить сервер.
Но есть и хорошие новости - перефразируя Винни-Пуха можно сказать, что слава богу, инопланетяне тут, похоже, не при чем.

Так вот, у меня есть своя версия всей этой лабуды.
Но должен сразу предупредить, что это не более чем ИМХО. У меня нет какой-либо убедительной аргументации в пользу этой версии. Основана она только на соображениях общего характера и на том факте (или слухах?), что была какая-то возня с обновлением ядра ЖЖ.


So:
Когда-то в далеких шестидесятых Дейкстра сказал такую фразу: "Программы это самые сложные объекты когда-либо созданные человечеством" (цитирую по памяти - лень искать ссылку).
На всякий случай, чтобы не было недоразумений - он это говорил о тех (60 гг.) программах!

Насколько я понимаю, тогда эту его фразу никто всерьез не воспринял. В том смысле, что восприняли просто как некое патетическое восклицание. Того же типа, что "Человек - венец творения". Ну, ладно - венец - и что? Какие из этого практические выводы?

Но очень скоро и практические выводы потребовались. В 80 гг. военное ведомство США родило программно-аппаратного монстра - СОИ. А как его, этого монстра, протестировать? Конечно отдельные компоненты тестировались. И даже большие подсистемы - на модельных данных. Но весь комплекс в целом на реальных данных никогда не запускался (по понятной причине). И встал естественный вопрос - а где гарантия, что вся эта хрень когда надо сработает?

То есть в переводе с военного языка на академический - встал вопрос о доказуемости правильности программ. И, насколько я знаю, этот вопрос как тогда встал так до сих пор и стоит.

С тех пор много сделано в этом направлении - структурное, объектное программирование, средства встроенные в языки и пр. Но окончательного решения нет. Нет в том смысле, что невозможно теоретически доказать правильность работы программы при всех возможных значениях переменных. (конечно речь идет не о программе "Hello world!" а о сложных системах.) Для того, чтобы убедится в правильности работы необходимо эту программу запустить. Но, что хуже всего, правильность работы на тестовых данных еще не гарантия того, что программа будет корректна при любых произвольных данных. Не говоря уже о поведении ее в экстремальных режимах, при сбоях или отказах отдельных компонентов.

В общем-то ничего необычного в такой ситуации нет. Еще в позапрошлом веке один бородатый философ говорил, что критерий истины - только практика. По этому принципу люди и живут. Автомобильная фирма, разработав новую модель авто, конечно все дотошно проверяет - на чертежах, на компьютерных моделях. Но окончательная проверка все-таки в реале - берут автомобиль, и даже не один, и разбивают ап стену. Если манекен "выжил", только тогда запуск в серию.

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

Наверное все, даже люди далекие от техники, знают о куче заплат, наложенных на уже выпущенную систему. Например на Windows XP™. Но ведь каждая такая заплата (читай - найденная ошибка) оплачена разбитым "манекеном" - юзером. Конечно не его кровью, но его потерянными файлами, потерянным временем и настроением.
(Кстати именно поэтому я очень консервативен при переходе на новые системы - пусть сначала другие, те кому милее новизна, расшибаются. А я пересяду тогда, когда все это устаканится.)

Но ситуация с ОС еще более-менее терпима - разбивается один, а заплату ставят всем. По всему миру работают (читай - проходят тестирование) миллионы копий ОС. Поэтому сравнительно быстро все баги вылавливаются. А вот с сетевыми программами все смешнее - если уж налетают на стену, то разбивается не кто-то один а сразу все стадо. Вот как-то так.

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

И - Voilà! - добро пожаловать в новую реальность!
Итак, господа испытатели, пристегните ремни. Начинаем очередной crash-test!

Previous post Next post
Up