"Небо над Берлином" (Der Himmel über Berlin, 1987), режиссёр Вим Вендерс
"Небо над Берлином" (Der Himmel über Berlin, 1987), режиссёр Вим Вендерс

Вдохновлено Михаилом Ивановым, коллегой и товарищем, который напомнил про "Мир искусства"

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

Прямое. Но не потому, что я умею "понимать людей" или "находить подход к разработчикам". Дело в другом предмете из учебного плана.

На третьем курсе нам читали философию науки: Декарт, Поппер, Лакатос, Кун, принцип фальсифицируемости, бритва Оккама. Три семестра о том, как человечество училось отличать знание от заблуждения. Тогда это казалось красивой, но бесполезной абстракцией. Ну зачем практикующему психологу знать, как Карл Поппер спорил с венскими позитивистами, а Имре Лакатос уточнял его идеи?

Прошло пятнадцать лет. Я давно не психолог, я руковожу тестированием. И в какой-то момент вдруг осознал: я каждый день делаю ровно то, о чём рассказывали на тех лекциях. Ищу минимальный воспроизводимый сценарий - это декартовское деление сложного на простое. Формулирую гипотезу так, чтобы её можно было опровергнуть - это Поппер. Выбираю самое простое объяснение из возможных - это Оккам.

Оказалось, философия науки - это не про философию. Это операционная система для мозга, который работает с неопределённостью. И эту статью я вынашивал не один год, чтобы наконец объяснить, почему.

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

Декарт и архитектура сомнения

Рене Декарт вошёл в историю фразой "Cogito ergo sum", но для методологии науки значительно важнее его "Рассуждение о методе", опубликованное в 1637 году. В этой работе Декарт сформулировал четыре правила, которые, по его замыслу, должны были стать фундаментом любого достоверного познания.

Первое правило требует не принимать за истину ничего, что не представляется уму ясно и отчётливо, исключая всякую возможность сомнения. Это не скептицизм ради скептицизма, а методологическая установка: начинать исследование с позиции незнания, даже если кажется, что ответ очевиден.

Для специалиста по тестированию это правило приобретает вполне практический смысл. Разработчик утверждает, что функциональность работает корректно. Менеджер сообщает, что требования однозначны. Документация гарантирует стабильность системы. Декартовский подход предполагает, что каждое из этих утверждений остаётся гипотезой до тех пор, пока не будет подвергнуто проверке. Не потому, что коллеги намеренно вводят в заблуждение, а потому, что человеческое восприятие склонно принимать желаемое за действительное, а знакомое - за проверенное.

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

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

Четвёртое правило требует составлять полные перечисления и обзоры, чтобы быть уверенным в отсутствии упущений. Здесь Декарт предвосхитил то, что в современном тестировании называется покрытием требований и матрицами трассировки. Систематический подход к перечислению проверяемых условий, граничных значений, комбинаций параметров направлен именно на то, чтобы минимизировать вероятность пропуска значимого сценария.

Примечательно, что Декарт разрабатывал свой метод для решения математических задач, но сформулировал его достаточно абстрактно, чтобы он оказался применим к областям, о которых сам Декарт не мог и помыслить.

Поппер и принцип фальсифицируемости

Карл Поппер, работавший в XX веке, сместил фокус философии науки с вопроса "как подтвердить теорию" на вопрос "как опровергнуть теорию". Это смещение акцента кажется незначительным, но оно меняет всё.

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

Отсюда следует ключевой критерий научности теории: она должна быть принципиально фальсифицируемой. Это не означает, что теория должна быть ложной. Это означает, что должен существовать мыслимый эксперимент или наблюдение, результат которого мог бы её опровергнуть. Теория, которая объясняет всё при любом исходе, не объясняет ничего.

Перенесение этого принципа в область тестирования программного обеспечения даёт неожиданно чёткую картину. Мы никогда не можем доказать, что программа работает правильно. Мы можем лишь искать ситуации, в которых она работает неправильно. Каждый пройденный тест не является доказательством корректности. Он является лишь неудавшейся попыткой обнаружить дефект.

Это не пессимизм, это методологическая ясность. Из неё следует практический вывод: ценность теста определяется его способностью обнаружить дефект, если дефект существует. Тест, который проходит всегда при любых обстоятельствах, бесполезен. Он не фальсифицирует ничего. Он не несёт информации. Как и теория, которую невозможно опровергнуть, такой тест не является инструментом познания.

Поппер также ввёл понятие "степени фальсифицируемости". Теория, которая делает более точные и конкретные предсказания, более фальсифицируема, а следовательно, более ценна с научной точки зрения. Утверждение "завтра будет какая-нибудь погода" невозможно опровергнуть. Утверждение "завтра в полдень температура в Москве составит +15 градусов" опровергается легко, и именно поэтому оно содержит больше информации.

В тестировании аналогом является точность тестового оракула. Проверка "система должна работать быстро" почти не фальсифицируема: что значит "быстро"? Проверка "время отклика на запрос не должно превышать 200 миллисекунд при нагрузке 1000 одновременных пользователей" фальсифицируема однозначно. Она либо выполняется, либо нет. И именно поэтому она полезна.

Лакатос и защитный пояс теории

Имре Лакатос, ученик Поппера, развил и уточнил идеи своего учителя. Он обратил внимание на то, что реальная научная практика не следует попперовской схеме буквально. Учёные не отбрасывают теорию при первом же противоречащем факте. Вместо этого они модифицируют вспомогательные гипотезы, уточняют условия применимости, ищут ошибки в эксперименте.

Лакатос предложил концепцию исследовательской программы, состоящей из "жёсткого ядра" и "защитного пояса". Жёсткое ядро содержит фундаментальные принципы, которые считаются неопровержимыми в рамках данной программы. Защитный пояс состоит из вспомогательных гипотез, которые могут модифицироваться при столкновении с аномалиями.

Эта модель удивительно точно описывает то, что происходит при анализе результатов тестирования в реальных проектах. Когда тест падает, первой реакцией редко бывает вывод о дефекте в тестируемой системе. Сначала проверяется защитный пояс: корректны ли тестовые данные? Стабильна ли тестовая среда? Не изменились ли внешние зависимости? Актуальна ли версия тестируемого приложения?

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

Лакатос также различал прогрессивные и вырождающиеся исследовательские программы. Прогрессивная программа предсказывает новые факты, которые затем подтверждаются. Вырождающаяся программа только объясняет уже известные факты, а каждая новая аномалия требует всё более искусственных модификаций защитного пояса.

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

Бритва Оккама и экономия сущностей

Уильям Оккам, францисканский монах XIV века, сформулировал принцип, известный как "бритва Оккама": не следует умножать сущности сверх необходимости. В современной интерпретации: из нескольких объяснений, одинаково хорошо согласующихся с наблюдениями, следует предпочесть наиболее простое.

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

В практике тестирования и отладки бритва Оккама работает как инструмент приоритизации гипотез. Тест, который стабильно проходил, начал падать. Возможные объяснения: изменился код в последнем коммите; изменилась конфигурация тестовой среды; произошёл сбой сетевой инфраструктуры; обновилась версия браузера; ретроградный Меркурий влияет на работу серверов.

Бритва Оккама предписывает начать с проверки наиболее простой и непосредственной гипотезы. Изменился код - это требует одного допущения: разработчик внёс изменение, которое сломало функциональность. Влияние Меркурия требует, как минимум, допущения о существовании астрологических эффектов и механизма их воздействия на программное обеспечение.

Однако бритва Оккама требует осторожного применения. "Простота" не означает "первое, что пришло в голову". Простота измеряется количеством необходимых допущений, а не когнитивной лёгкостью. Иногда правильное объяснение контринтуитивно, но при этом требует меньше допущений, чем интуитивное.

Фрэнсис Бэкон и идолы разума

Фрэнсис Бэкон, английский философ начала XVII века, считается одним из основоположников эмпирического метода в науке. Но для нашего контекста особый интерес представляет не столько его позитивная программа, сколько негативная: учение об "идолах разума", систематических заблуждениях, которые искажают познание.

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

Эта классификация, созданная четыреста лет назад, читается как описание когнитивных искажений, влияющих на работу специалиста по тестированию.

Идолы рода проявляются в склонности видеть паттерны там, где их нет. Три теста упали после обеда в пятницу, и возникает ощущение закономерности. Начинается поиск объяснений: может, нагрузка на серверы возрастает к концу недели? Может, кто-то запускает резервное копирование? Между тем, выборка из трёх случаев статистически бессмысленна, и совпадение вполне может быть случайным.

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

Идолы площади в тестировании проявляются постоянно. Слово "работает" в устах разработчика, тестировщика, менеджера и пользователя означает разные вещи. Требование "система должна быть быстрой" каждый интерпретирует по-своему. Даже технические термины, кажущиеся однозначными, могут пониматься по-разному в разных командах и контекстах. Значительная часть дефектов, которые обнаруживаются на поздних стадиях, являются следствием не технических ошибок, а коммуникационных сбоев: люди использовали одни и те же слова, имея в виду разные вещи.

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

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

Томас Кун и структура научных революций

Томас Кун в своей работе 1962 года предложил модель развития науки, которая радикально отличалась от представлений о линейном накоплении знаний. По Куну, наука развивается не плавно, а через чередование периодов "нормальной науки" и "научных революций".

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

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

Важнейший тезис Куна - о несоизмеримости парадигм. Сторонники разных парадигм буквально видят мир по-разному. Они используют одни и те же слова, но вкладывают в них разный смысл. Рациональный диалог между ними затруднён, потому что нет общей системы координат для сравнения.

История тестирования программного обеспечения может быть описана в куновских терминах как последовательность смен парадигм. Ранняя парадигма рассматривала тестирование как завершающую фазу разработки, направленную на обнаружение дефектов перед релизом. Тестировщик был "привратником", который пропускал или не пропускал продукт к пользователям.

Эта парадигма сменилась представлением о тестировании как непрерывном процессе обеспечения качества, интегрированном во все стадии разработки. Тестировщик стал не привратником, а участником команды, влияющим на качество с момента формулирования требований.

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

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

Осознание этого механизма помогает более конструктивно относиться к методологическим спорам. За вопросом "нужно ли автоматизировать этот тест" может скрываться столкновение парадигм: для одного участника дискуссии автоматизация есть очевидное благо, для другого - дополнительная сложность с неочевидной отдачей. Продуктивный разговор возможен только при эксплицировании этих базовых установок.

Юм и проблема индукции

Дэвид Юм, шотландский философ XVIII века, сформулировал проблему, которая до сих пор не имеет общепринятого решения в философии науки. Эта проблема касается обоснования индуктивного вывода - перехода от частных наблюдений к общим закономерностям.

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

Юм не утверждал, что индукция бесполезна. Он утверждал, что она не имеет рационального обоснования. Мы пользуемся ею в силу привычки, психологической склонности ожидать повторения прошлого опыта. Эта склонность практически полезна, но логически не обоснована.

Для тестирования программного обеспечения проблема индукции приобретает острый практический характер. Система прошла тысячу тестовых прогонов без сбоев. Является ли это основанием для уверенности в тысяча первом прогоне? Строго говоря - нет. Прошлые успехи не гарантируют будущих. Дефект может проявляться только при определённом стечении обстоятельств, которое ни разу не возникло за тысячу прогонов, но возникнет на тысяча первом.

Это не абстрактное философствование. Системы, работавшие годами, отказывают при наступлении неучтённых граничных условий. Программа, безупречно обрабатывавшая данные, сбоит при появлении символа, который никогда не встречался во входных данных. Автоматизированные тесты, стабильно проходившие месяцами, начинают падать при обновлении инфраструктуры.

Проблема индукции не имеет решения, но имеет практические следствия. Первое: результаты тестирования - это информация о прошлом, а не гарантия будущего. Фраза "система протестирована" не означает "система будет работать". Она означает "система работала в тех условиях, в которых тестировалась".

Второе: ценность тестирования определяется не только объёмом проведённых проверок, но и разнообразием условий. Тысяча прогонов одного теста менее информативна, чем сто прогонов в десяти разных конфигурациях. Юмовская проблема указывает на важность вариативности, исследования граничных областей, намеренного создания нетипичных ситуаций.

Третье: смирение в оценках. Утверждение "всё работает" всегда неявно содержит оговорку "насколько нам известно, в тех условиях, которые мы проверили". Эта оговорка не является проявлением неуверенности. Она является признаком эпистемологической грамотности.

За пределами тестирования

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

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

Попперовская фальсифицируемость определяет качество продуктовых гипотез. Предположение "пользователям понравится новый интерфейс" не фальсифицируемо в такой формулировке: что значит "понравится"? Предположение "новый интерфейс увеличит конверсию на этапе регистрации на 15%" фальсифицируемо. Его можно проверить, и результат проверки будет однозначным.

Лакатосовская модель защитного пояса описывает динамику продуктовых решений. Когда метрики не соответствуют ожиданиям, первой реакцией редко бывает пересмотр стратегии. Сначала проверяется защитный пояс: корректно ли собираются данные? Репрезентативна ли выборка? Достаточно ли времени прошло для проявления эффекта? И только когда все эти объяснения исчерпаны, ставится вопрос о ядре: может быть, наша базовая гипотеза о потребностях пользователей неверна.

Бритва Оккама работает при архитектурных решениях. Сложная система с множеством компонентов имеет больше точек отказа, чем простая. Каждый дополнительный сервис - это дополнительный источник потенциальных проблем. Это не аргумент против сложных систем как таковых, но аргумент за осознанный выбор сложности там, где она действительно необходима.

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

Куновские парадигмы определяют, какие вопросы мы вообще способны задать. Команда, работающая в парадигме "мы создаём продукт для клиента", задаёт другие вопросы, чем команда в парадигме "мы строим платформу для экосистемы". Ни одна из парадигм не является объективно правильной, но каждая фокусирует внимание на одних аспектах и затеняет другие.

Юмовская проблема индукции напоминает о пределах предсказуемости. Прошлый успех продукта не гарантирует будущего. Рынок, конкуренты, технологии, пользовательские предпочтения меняются. Стратегия, работавшая вчера, может перестать работать завтра не потому, что была плохой, а потому, что изменились условия.

Философия науки формировалась как рефлексия над практикой получения достоверного знания. Продуктовое развитие есть практика получения достоверного знания о потребностях пользователей, возможностях технологий и жизнеспособности бизнес-моделей. Неудивительно, что инструменты, разработанные для первого, оказываются применимы ко второму.

Возможно, курс философии науки следовало бы включить в программу подготовки не только психологов, но и всех, кто работает с неопределённостью. То есть, по существу, всех.

Где искать дальше

Философские первоисточники - это многостраничные тексты на языке XVII-XX веков с характерной академической тяжеловесностью. Рекомендовать их к прочтению было бы лицемерием: я сам познакомился с большинством идей через лекции и вторичные источники, а не через штудирование оригиналов.

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

Википедия, как ни странно, даёт вполне качественное введение в базовые концепции. Статьи о Декарте, Поппере, Лакатосе, Куне и Юме на русском языке достаточно подробны, содержат ключевые идеи и ссылки на дополнительные материалы. Английская версия, как правило, полнее и точнее. Особенно рекомендую статьи "Falsifiability", "Paradigm shift" и "Problem of induction" - они изложены доступнее, чем биографические статьи об авторах.

YouTube содержит множество лекций по философии науки. На русском языке стоит обратить внимание на курсы ПостНаука и лекции Высшей школы экономики. На английском - Crash Course Philosophy даёт живое и краткое введение, а каналы вроде Philosophy Tube и Wireless Philosophy разбирают отдельные концепции более детально.

Научно-популярные книги часто излагают философские идеи понятнее, чем сами философы. "Мир, управляемый числами" Аарона Лакатоса (не путать с Имре Лакатосом) и "Чёрный лебедь" Нассима Талеба активно используют попперовские идеи. "Думай медленно, решай быстро" Даниэля Канемана перекликается с бэконовскими идолами разума, хотя и не ссылается на них напрямую.

Курсы на Coursera и других платформах предлагают структурированное введение в философию науки. Преимущество формата - видеолекции разбиты на короткие фрагменты, и можно выбирать только интересующие темы.

Для совсем краткого знакомства существуют серии "Very Short Introduction" от Oxford University Press и их аналоги. Книги объёмом в 100-150 страниц дают сжатый, но корректный обзор темы.

Наконец, если всё же захочется заглянуть в первоисточники, рекомендую начать с "Рассуждения о методе" Декарта - это одна из немногих философских работ, которая читается относительно легко и занимает всего несколько десятков страниц. "Структура научных революций" Куна тоже написана достаточно доступным языком. Остальное лучше осваивать через комментаторов.

Комментарии (2)


  1. smetconsulting
    17.01.2026 07:35

    Ваш ответ на вопрос начальства: «Всё работает?»


    1. MDyuzhev Автор
      17.01.2026 07:35

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

      Я не ожидал, что будут просмотры, правда.

      Наверное имеет смысл отдельно рассказать про опыт проведения психитатрической экспертизы и как это научило проводить собеседования.