Pisanie testów i zabezpieczanie kodu z AI

Kodowanie wspomagane przez AI dla programistów

Francesca Donadoni

AI Curriculum Manager, DataCamp

Prompting sterowany testami

☺ Zwykłe zapytanie

Napisz funkcję w Pythonie do parsowania adresów e-mail.

🤓 Zapytanie sterowane testami

Napisz funkcję w Pythonie do parsowania adresów e-mail. Powinna przejść następujące testy:

  • Akceptuje poprawny adres, np. „[email protected]".
  • Odrzuca niepoprawne dane wejściowe, np. „user@@domain".
  • Zgłasza ValueError dla pustego wejścia.
Kodowanie wspomagane przez AI dla programistów

Prompting sterowany testami

  • Zapytanie użytkownika: Wygeneruj testy jednostkowe w Pythonie dla funkcji, która przetwarza dane z formularza i wstawia je do bazy SQL.

  • Odpowiedź modelu:

Oto gotowy do uruchomienia zestaw testów pytest obejmujący walidację, normalizację, bezpieczeństwo przed SQL injection oraz zachowanie transakcji dla funkcji przetwarzającej dane formularza i wstawiającej rekord do bazy SQL.

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

@pytest.fixture()
def conn():
    """In-memory SQLite DB with a users table."""
    c = sqlite3.connect(":memory:") [...]
Kodowanie wspomagane przez AI dla programistów

Prompting sterowany testami

  • Zapytanie użytkownika: Wygeneruj testy jednostkowe w Pythonie z użyciem pytest dla poniższej funkcji. Uwzględnij przypadki: puste wejście, słowa kluczowe SQL i znaki specjalne. Przyjmij mockowane połączenie z bazą danych. <INSERT FUNCTION>

  • Odpowiedź modelu:

Oto samodzielny moduł testowy pytest używający mocków (bez prawdziwej bazy), obejmujący puste wejście, słowa kluczowe SQL i znaki specjalne. Weryfikuje też zachowanie commit/close oraz obsługę wyjątków.

[...]
@pytest.fixture
def mock_sqlite_connect(monkeypatch):
    """
    Patch sqlite3.connect to return a MagicMock connection + cursor.
[...]
Kodowanie wspomagane przez AI dla programistów

Prompting dla bezpieczeństwa

☺ Zwykłe zapytanie

$$

Przeskanuj poniższą funkcję Pythona pod kątem potencjalnych podatności i zaproponuj bezpieczniejsze alternatywy, jeśli takie istnieją.

🤓 Zapytanie sterowane testami

$$

Sprawdź ten kod pod kątem typowych problemów bezpieczeństwa, w tym SQL injection, XSS i błędów walidacji danych wejściowych.

Kodowanie wspomagane przez AI dla programistów

OWASP Top 10

owasp_top_10.png

Kodowanie wspomagane przez AI dla programistów

OWASP Top 10

  • Zapytanie użytkownika: Przeprowadź audyt poniższej funkcji pod kątem podatności 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()
  • Odpowiedź modelu:

Oto ukierunkowany audyt OWASP Top 10 funkcji logowania wraz z bezpieczniejszą wersją.

  1. A03: Wstrzyknięcie. Bezpośrednia interpolacja ciągów do SQL czyni tę funkcję trywialnie podatną na SQL injection. Przykładowe payloady:
    • username = "admin' --" → pomija weryfikację hasła. [...]
Kodowanie wspomagane przez AI dla programistów

Czas na ćwiczenia!

Kodowanie wspomagane przez AI dla programistów

Preparing Video For Download...