Написание тестов и защита кода с помощью ИИ

Разработка с помощью ИИ: курс для разработчиков

Francesca Donadoni

AI Curriculum Manager, DataCamp

Разработка через тестирование в промптах

☺ Обычный промпт

Напишите функцию на Python для разбора адресов электронной почты.

🤓 Разработка через тестирование

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

  • Принимает корректный адрес, например «[email protected]».
  • Отклоняет некорректный ввод, например «user@@domain».
  • Вызывает ValueError при пустом вводе.
Разработка с помощью ИИ: курс для разработчиков

Разработка через тестирование в промптах

  • Запрос пользователя: Сгенерируйте юнит-тесты на Python для функции, которая обрабатывает данные формы, введённые пользователем, и вставляет их в базу данных SQL.

  • Ответ модели:

Вот готовый к запуску набор тестов pytest, охватывающий валидацию, нормализацию, защиту от SQL-инъекций и поведение транзакций для функции, которая обрабатывает данные формы и вставляет запись в базу данных SQL.

[...]
# ---------- Test DB fixtures ----------

@pytest.fixture()
def conn():
    """In-memory SQLite DB with a users table."""
    c = sqlite3.connect(":memory:") [...]
Разработка с помощью ИИ: курс для разработчиков

Разработка через тестирование в промптах

  • Запрос пользователя: Сгенерируйте юнит-тесты на Python с использованием pytest для следующей функции. Включите случаи с пустым вводом, ключевыми словами SQL и специальными символами. Предполагайте использование mock-подключения к базе данных. <INSERT FUNCTION>

  • Ответ модели:

Вот самодостаточный тестовый модуль pytest, использующий моки (без реальной БД) и охватывающий пустой ввод, ключевые слова SQL и специальные символы. Также проверяется поведение commit/close и то, что исключения подавляются.

[...]
@pytest.fixture
def mock_sqlite_connect(monkeypatch):
    """
    Patch sqlite3.connect to return a MagicMock connection + cursor.
[...]
Разработка с помощью ИИ: курс для разработчиков

Промпты для обеспечения безопасности

☺ Обычный промпт

$$

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

🤓 Разработка через тестирование

$$

Проверьте этот код на распространённые проблемы веб-безопасности, включая SQL-инъекции, XSS и недостатки валидации входных данных.

Разработка с помощью ИИ: курс для разработчиков

OWASP Top 10

owasp_top_10.png

Разработка с помощью ИИ: курс для разработчиков

OWASP Top 10

  • Запрос пользователя: Проверьте следующую функцию на наличие уязвимостей из OWASP Top 10.
def login(username, password):
   query = f"SELECT * FROM users WHERE username = '{username}' \
           AND password = '{password}'"
   result = db.execute(query)
   return result.fetchone()
  • Ответ модели:

Вот целенаправленный аудит функции login по OWASP Top 10, а также более безопасный вариант переработки.

  1. A03: Инъекция. Прямая интерполяция строк в SQL делает код тривиально уязвимым к SQL-инъекциям. Примеры полезных нагрузок:
    • username = "admin' --" → обходит проверку пароля. [...]
Разработка с помощью ИИ: курс для разработчиков

Давайте потренируемся!

Разработка с помощью ИИ: курс для разработчиков

Preparing Video For Download...