Что означает принцип KISS в разработке?

Ответ

KISS (Keep It Simple, Stupid) — это принцип проектирования, который утверждает, что большинство систем работают лучше всего, если они остаются простыми, а не усложняются. Сложность увеличивает вероятность ошибок и затрудняет понимание, отладку и поддержку.

Применение в коде и автотестах:

  1. Пишите простые функции и методы. Функция должна делать одну вещь и делать её хорошо.
  2. Избегайте преждевременной оптимизации и избыточной абстракции. Не добавляйте слои сложности "на будущее".
  3. Используйте понятные имена переменных и функций. calculateTotalPrice() лучше, чем calc().
  4. Минимизируйте количество шагов и проверок в тестах. Тестируйте ключевую бизнес-логику, а не каждую деталь реализации.

Пример нарушения и следствия принципу в автотесте:

# ПЛОХО: Нарушение KISS. Избыточные проверки, тест хрупкий и многословен.
def test_user_login():
    # Лишние проверки состояния UI
    assert login_page.header.text == 'Please Sign In'
    assert login_page.username_field.is_displayed()
    assert login_page.username_field.is_enabled()
    assert login_page.password_field.is_displayed()
    assert login_page.submit_button.is_enabled()

    # Действие
    login_page.enter_username('standard_user')
    login_page.enter_password('secret_sauce')
    login_page.click_submit()

    # Лишние и неявные проверки
    assert dashboard_page.title == 'Products'
    assert dashboard_page.inventory_container.is_displayed()
    assert dashboard_page.get_url() == 'https://example.com/inventory.html'

    # Проверка, не относящаяся напрямую к логину
    assert dashboard_page.shopping_cart_badge.is_displayed() == False
# ХОРОШО: Следование KISS. Тест сфокусирован, краток и устойчив к мелким изменениям UI.
def test_user_login_success():
    """Успешный логин с валидными данными перенаправляет на главную страницу."""
    login_page.load()
    login_page.login('standard_user', 'secret_sauce')

    # Одна ключевая проверка, подтверждающая успех логина
    assert dashboard_page.is_loaded(), 'После логина не отобразилась главная страница.'

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

Ответ 18+ 🔞

А, слушай, смотри, вот этот ваш KISS, блядь! Это ж не просто буквы, это, сука, гениальная мысль, высеченная на скрижалях для всех нас, распиздяев программистов.

Вот смотри, как это бывает. Сидит чувак, пишет тест. И такой: "О, надо проверить, что кнопка не только отрисовалась, но и enabled, а ещё, блядь, проверить заголовок страницы, и URL, и что корзина пустая, и что фон у инпута правильный, и что курсор мигает..." Ёпта, ты что, всю вселенную хочешь в один тест запихнуть? Это ж пиздец, а не тест!

Прикинь, как это в коде выглядит, этот адок:

# ПЛОХО: Нарушение KISS. Избыточные проверки, тест хрупкий и многословен.
def test_user_login():
    # Лишние проверки состояния UI
    assert login_page.header.text == 'Please Sign In'
    assert login_page.username_field.is_displayed()
    assert login_page.username_field.is_enabled()
    assert login_page.password_field.is_displayed()
    assert login_page.submit_button.is_enabled()

    # Действие
    login_page.enter_username('standard_user')
    login_page.enter_password('secret_sauce')
    login_page.click_submit()

    # Лишние и неявные проверки
    assert dashboard_page.title == 'Products'
    assert dashboard_page.inventory_container.is_displayed()
    assert dashboard_page.get_url() == 'https://example.com/inventory.html'

    # Проверка, не относящаяся напрямую к логину
    assert dashboard_page.shopping_cart_badge.is_displayed() == False

Смотри на это! Это ж не тест, это, блядь, техническое задание на вёрстку! Ты зачем кнопке is_enabled() проверяешь? Ты её сейчас кликать будешь, она и проявится, enabled она или нет! А этот URL, блядь... А если его поменяют? Весь твой тест накроется медным тазом, а функциональность-то логина будет работать! Зачем ты так живёшь?

А теперь, в рот меня чих-пых, смотри, как надо:

# ХОРОШО: Следование KISS. Тест сфокусирован, краток и устойчив к мелким изменениям UI.
def test_user_login_success():
    """Успешный логин с валидными данными перенаправляет на главную страницу."""
    login_page.load()
    login_page.login('standard_user', 'secret_sauce')

    # Одна ключевая проверка, подтверждающая успех логина
    assert dashboard_page.is_loaded(), 'После логина не отобразилась главная страница.'

Вот! Идеально! Вошёл, нажал, ушёл. Проверил ОДНУ, сука, главную вещь: после логина ты оказался там, где надо. Всё! Не надо выебываться.

Выгода-то какая, блядь? Да овердохуища! Такие тесты:

  1. Пишутся за пять минут, а не за полдня с выпиванием йада.
  2. Читаются как сказка. Глянул — и сразу ясно, что он делает. Никакой хуйни.
  3. Не ломаются, если дизайнеру в жопу взбрело поменять цвет кнопки или текст заголовка. Функциональность-то жива!
  4. Когда он упадёт, ты сразу знаешь — да, вот тут конкретно проблема с логином, а не с тем, что "ой, у нас badge корзины теперь по-другому отображается".

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