В чём разница между кодом и функцией?

«В чём разница между кодом и функцией?» — вопрос из категории Other, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте тестирования и разработки ПО, важно чётко различать эти базовые понятия для составления чётких баг-репортов, тест-кейсов и общения с разработчиками.

Код (исходный код) — это общий, всеобъемлющий термин. Это любой текст, написанный на языке программирования (Java, Python, JavaScript и т.д.), который составляет программу или её часть. Код включает в себя объявления переменных, циклы, условия, вызовы функций, классы и сами функции.

  • Аналогия: Вся пьеса, включая ремарки, описания декораций и реплики всех персонажей.
  • Пример для QA: «Я проанализировал код модуля авторизации, чтобы понять логику валидации пароля». Или: «Баг воспроизводится в продакшн-сборке, но не в моей локальной среде — нужно сравнить код и конфигурации».

Функция (или метод) — это конкретная, именованная часть кода, предназначенная для выполнения одной определённой задачи. Она принимает входные данные (аргументы), выполняет над ними операции и возвращает результат.

  • Аналогия: Конкретный монолог или диалог персонажа в пьесе, который выполняет сюжетную функцию.
  • Пример для QA:
    # Это ФУНКЦИЯ с именем 'calculate_discount'.
    # Она является частью общего КОДА приложения.
    def calculate_discount(total_price, promo_code):
        """Функция рассчитывает итоговую сумму с учётом скидки по промокоду."""
        discount_rules = {"SAVE10": 0.10, "SAVE20": 0.20}
        discount = discount_rules.get(promo_code, 0)
        final_price = total_price * (1 - discount)
        return final_price  # Возвращает результат

Ключевые отличия с точки зрения тестирования:

Аспект Код Функция
Уровень детализации Общий, целый модуль/класс/файл. Конкретная, изолированная единица.
Объект тестирования Интеграционное, системное тестирование. Юнит-тестирование (Unit Testing) — основной объект.
Пример баг-репорта «В коде главной страницы есть утечка памяти». «Функция validateEmail возвращает true для email без символа @».
Coverage (покрытие) Покрытие всего кода модуля. Покрытие всех ветвлений (if/else) внутри одной функции.

Итог: Функция — это структурированный строительный блок. Код — это вся «стройплощадка», включающая эти блоки и логику их соединения. QA-инженер тестирует корректность отдельных функций (юнит-тесты) и корректность взаимодействия всего кода в целом (интеграционные и UI-тесты).