В КУРСЕ?

Разбираемся в теме

ИИ написал рабочий Python-код: какой тест отличит правильный ответ от удачного примера

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

Контракт начинается с точного слова

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

Хороший пример различает возможные ошибки

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

Объяснение ИИ не заменяет выполнение проверки

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

После правки сохраняйте найденный случай

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

Попробуйте на практике

Составьте набор проверок функции подсчёта строго положительных целых чисел на бумаге или в знакомой среде Python.

  1. Запишите контракт: вход — список целых чисел, выход — количество элементов строго больше нуля. Укажите, что ноль не считается.
  2. Подготовьте четыре случая: пустой список; только ноль; минус три и минус один; минус один, ноль, два и пять.
  3. Вычислите ожидаемые результаты вручную до просмотра реализации: ноль, ноль, ноль и два соответственно.
  4. Представьте ошибочную версию, которая считает все числа не меньше нуля. Отметьте, какие проверки её обнаружат, и объясните почему.

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

Частые вопросы

Нужно ли тестировать все возможные списки?

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

Если все тесты прошли, можно ли не читать код?

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

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

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов