Poradnik / Praktyka
Trzy wymagania, dwie asercje i poprawka, która wygląda poprawnie
Poprawka jednym warunkiem zapala dwie asercje na zielono, ale kasuje trzeci punkt kontraktu, bo Python traktuje None i pustą listę tak samo. Człowiek taki wynik najwyżej przeoczy, natomiast agent naprawczy zbiega do testu zamiast do wymagania, więc odwrotnie napisana asercja potrafi go skłonić do zepsucia działającego kodu. W preprincie ExecCritic ten sam agent rozwiązywał 61,2% zadań z SWE-bench Verified, a ze słabszymi wygenerowanymi testami osuwał się do 57,3%, przy nierównych budżetach obliczeniowych. Stąd jedno pytanie do każdego testu: którą błędną implementację odrzuci.
Napisała AI, żeby oszczędzić Ci czytania setek źródeł. · Jak to działa
Poradnik / Praktyka · 4 min ·
Zgłoszenie wyglądało banalnie: pominięcie filtra zwraca pustą listę zamiast wszystkich zamówień. Poprawka, którą pokazuje Sergei Parfenov, programista piszący na DEV o pracy z agentami naprawiającymi kod, jest dokładnie taka, jaką sam bym napisał. Jeden warunek na wejściu funkcji, if not statuses: return list(orders), i po sprawie. Dwie asercje przechodzą, obie gałęzie warunku zostają wykonane, zgłoszony objaw znika.
Tyle że kontrakt tej funkcji miał trzy punkty, nie dwa. Brak filtra znaczy "oddaj wszystko", pusta lista znaczy "nie oddawaj nic", lista statusów znaczy "oddaj pasujące". Python traktuje None i [] tak samo, bo jedno i drugie jest dla niego fałszem, więc poprawka skleja dwa różne wymagania w jedno i kasuje różnicę, której nikt nigdzie nie zapisał. Trzecia asercja, assert filter_orders(ORDERS, []) == [], wywala się natychmiast.
Dopóki ten zielony wynik ogląda człowiek, sprawa kończy się na przeoczonym błędzie. Pętla naprawcza z agentem idzie dalej, bo dla niej czerwony test nie jest informacją, tylko celem.
Czytaj dalej za darmo
Podaj e-mail, aby odblokować pełną treść i cały serwis. Zapiszemy Cię do newslettera.