Dlaczego kod z AI wymaga formalnych specyfikacji? Zamykamy lukę w intencjach
Obietnice i pułapki AI w programowaniu
AI zmienia oblicze tworzenia oprogramowania. Modele językowe piszą poprawny kod w mgnieniu oka. Narzędzia jak GitHub Copilot czy Claude ułatwiają pracę milionom deweloperów. Ale pod tą błyskawiczną wydajnością kryje się haczyk: kod działa, lecz czy spełnia twoje oczekiwania?
Problem nie jest nowy. Zespoły zawsze walczyły z rozbieżnością między tym, co chcą interesariusze, a tym, co kodują inżynierowie. AI potęguje to na masową skalę. Człowiek popełnia błędy, ale poprawia je wiedzą i iteracjami. AI generuje masowo – i błędy mnożą się równie szybko.
Rozbieżność intencji w czasach AI
Kluczowy konflikt: język naturalny jest nieprecyzyjny. Poproś AI o "sprawdzenie maili użytkowników". Co to znaczy?
- Tylko format zgodny z RFC 5322?
- DNS lookup, by potwierdzić istnienie domeny?
- Link weryfikacyjny z potwierdzeniem?
- Wszystko naraz, z obsługą błędów?
AI zgaduje. Czasem trafnie, często nie. Bez ludzkiej recenzji błędy kumulują się w setkach funkcji.
Luka między luźną intencją a ścisłym kodem istniała zawsze. Ale teraz rośnie w tempie maszyny.
Formalizacja intencji: Podejście spektrum
Nie dziel intencji na formalne czy nie. Używaj spektrum dopasowanego do potrzeb projektu.
Lekka: Testy jako wyjaśnienie
W wielu appkach wystarczy jasność. Proste testy wychwytują duże błędy:
# AI wygenerowało walidator maili
# Testy precyzują, czego chcesz
def validate_email(email):
pass # kod AI
# Twoje testy
assert validate_email("user@example.com") == True
assert validate_email("user@localhost") == False # Wymaga realnej domeny
assert validate_email("invalid.email") == False
Pisz testy najpierw i podawaj AI. To poprawia zrozumienie – u maszyny i ludzi. Lekkie, szybkie, skuteczne.
Średnia: Postkony dla gwarancji
Krok wyżej: ścisłe postkony – co kod gwarantuje po wykonaniu:
# Postkon dla przelewu
def transfer_funds(from_account, to_account, amount):
"""
Gwarantuje:
- from_account.balance -= amount dokładnie
- to_account.balance += amount dokładnie
- suma bilansów bez zmian
- transakcja atomowa (wszystko lub nic)
"""
AI uczone na takich przykładach łapie bugi, których testy nie widzą. Myśli o invariantach i kantach.
Ciężka: Synteza z dowodem
Na końcu: DSL i formalna weryfikacja. Kod nie testowany – dowodzony. Dla krypto, finansów, lotnictwa czy medycyny, gdzie błędy kosztują fortunę lub życie.
Bottleneck walidacji
Prawda boli: nie ma wyroczni dla poprawności specyfikacji poza tobą.
Sprawdzisz, czy kod pasuje do specyfikacji. Ale kto sprawdza specyfikację? Idealna realizacja złych wymagań to klapa.
Tu wchodzi współpraca człowiek-AI. Klucz to walidacja specyfikacji:
- Pętle feedbacku do dopracowywania
- Proxy jak testy i przykłady, by znaleźć luki
- Metryki jakości specyfikacji bez kodu
- Proste interakcje bez doktoratu z logiki
Wpływ na twój stack
Dla produkcji to nie teoria. Dotyczy architektury:
Generowanie kodu
Wybieraj AI, które pyta o szczegóły lub generuje testy najpierw. Narzędzia bez walidacji rodzą wiarygodne bugi.
CI/CD
Dodaj scrutiny dla kodu AI. Postkony i property-based testing łapią to, co unit testy pominą. Dla kluczowych serwisów – walidacja formalna przed merge.
W zespole
Deweloperzy z AI muszą pisać lepsze specyfikacje. To stara umiejętność, tylko uśpiona. Recenzje kodu sprawdzają też intencje.
Granice badań
Temat gorący: AI, metody formalne, HCI. Wyniki obiecujące:
- Test-driven poprawia poprawność pod kierunkiem użytkownika
- AI-generowane postkony łapią realne bugi
- Pipeline'y syntezy dają dowodzone kody z luźnych opisów
Wyzwania: skalowanie, zmiany kompozycyjne, intuicyjne interakcje, bogate logiki dla rzeczywistości.
Co dalej
Przyszłość AI w dev nie to więcej kodu szybciej. To poprawny kod tam, gdzie liczy się najbardziej.
Formalizacja intencji to most. Nie zamiana prose na matmę. Systematyczna walidacja, czy nasze luźne pomysły – w tekście, testach, przykładach – zostały zrozumiane przez ludzi i maszyny.
Dla devów, startupów i infra na platformach jak NameOcean: walidacja deploymentów, gwarancje DNS, weryfikacja workflow SSL. Nie testy – dowody.
Kod, który przeżyje produkcję, nie jest najsprytniejszy. Jest zamiarem.