Ох, и вопросик! Сам помню на собеседовании примерно такого же плана вопросы задавал
Помню разок, я описал некий функционал и спросил как бы человек его проверил, какие бы он ставил вопросы и т.д. по сути этим я проверил его на умение провести тест-аналитику.
Если по теме, то тут очень всё зыбко. Это как в теме про BDD, когда нет знаний, то все начинают высказывать мнения. В смысле реальные расчеты и графики мало кто приводит, только делятся общими впечатлениями: либо круто, либо отстой. Ещё иногда приводят сомнительные или древние статьи и исследования, и причём не оригиналы, а жвачку, типа кто-то где-то когда-то что-то там проверил на кроликах… а научный подход - это сложно, скучно и не продать.
Возвращаясь к теме: Можно рассмотреть более общую проблематику, а можно сократить до конкретной формулировки, которую привел @S_Romankov в первом сообщении.
Если смотреть в более общем случае, т.е. в примерно такой формулировке “как вы понимаете, что делается именно, то что нужно и не делается ничего ненужного?”, то начинают возникать другие вопросы “вы уверены, что в требованиях написано, то что хотел заказчик?” или “вы уверены, что заказчик хотел именно то, что сказал, а не что-то другое о чем он не упомянул или не знал и если бы ему подсказали нужный вариант, то он бы выбрал его?” или “вы уверены, что то что мы сделаем будет нужно и востребовано нашими клиентами?” (например, вспоминаем историю с кнопкой пуск в Win8). Вторая часть - это там где спрашивается, что не делается то, что не нужно. Тут вообще непонятно, что и как считать. Кто-то может решить, что и пить кофе на работе не нужно, а то расслабились, понимаешь.
Или вот, программист “захардкодил” переменную, которая по странному стечению обстоятельств очень была похожа на номер его банковской карты (для отладки конечно же ) и этот код попал в промышленную среду где благополучно начинал делать всякое, но не постоянно, а иногда и очень-очень аккуратно. Ну или менее трешовые случаи (без злого умысла), когда система делает ненужные/лишние записи не в ту базу, не в ту таблицу, не в те поля или наоборот что-то нужное удаляет сверх необходимого, или делает поиск не по тем ключам/полям и т.д. и т.п. Конечно же часть этих проблем можно и нужно минимизировать и компании в целом с этим успешно справляются. В частности вводят код-ревью, парное программирование, демо, юнит-тесты, интеграционные, e2e и другие виды тестов как ручные, так и автоматические, нагрузочные, безопасности, А/Б тестирование, UI-тестирование, приёмочное, альфа/бета тестирование и т.д. А также системы мониторинга, профилирования, разделения ответственности с дублированием и т.д.
Кстати, пока писал всё это, то вспомнил один отличный доклад: Руслан Черемин — Тестирование конфигурации для Java-разработчиков: практический опыт
В нем описана тоже нетривиальная вещь, но мало кто вообще этой проблемой занимается. Потому что все придерживаются главного правила инженеров: работает - не трогай!
А проблемы решаются по мере поступления в порядке приоритета.
Если же смотреть менее широко, как это было озвучено в оригинальном вопросе:
Тут все равно будет вопрос: а тесты точно были рабочими и проверяли, то что нужно когда либо вообще? Допустим пришел ты такой на проект с 15 тысячами тестов и легаси проектом в 25 лет и миллионом строк кода и тебе говорят: “У нас тут тесты все зеленые, но какой-то там начальник просил до обеда и желательно вчера сделать отчет в экселе (куда уж без него) про нашу автоматизацию. Ты можешь проверить, что они проверяют, то что нам нужно?
И заодно расставить лейблов над каждым какие что проверяют и до кучи их же выгрузить в нашу <имя_нашей_тестменеджмент_системы>.”
По факту же автотесты это тоже программный продукт. Поэтому все практики по разработке применимы и желательны к ним не в меньшей, а зачастую в большей степени, т.к. код хотя бы проверяется тестами, а вот на тесты уже мало кто пишет другие тесты. Поэтому рецепты простые: ревью кода, детальное логирование, приемка, тесты опять-таки, мутационные воздействия, слоеная архитектура тестов с частичной перепроверкой на разных слоях: юнит → интеграционные → API* → UI* → E2E. Плюс хороший мониторинг, голова на плечах и ручной контроль. Автоматика - хорошо, но и голову включать нужно.