Naprawa sterowana testami — czerwony test najpierw i blokada pliku
Naprawa sterowana testami wymaga od agenta odtworzenia usterki czerwonym testem, zachowania zaakceptowanej reprodukcji i poprawienia kodu bez osłabiania testu. Ochrona testu ogranicza false green, lecz nie dowodzi kompletności reprodukcji; zachowanie i scope nadal musi zatwierdzić człowiek lub niezależne review.
Pytanie w scorecardzie: W jaki sposób podchodzisz do naprawiania błędów przez agentów AI (test-first fixing)? Maksymalna odpowiedź (3 pkt): Rygorystyczny protokół test-first: zacommitowany czerwony test, hook blokujący edycję testów w fazie naprawy, zweryfikowany zielony przebieg.
Dlaczego to ważne w 2026
Dział zatytułowany „Dlaczego to ważne w 2026”Gdy programiści podają agentowi ślad stosu (stack trace) ze słowami „napraw ten błąd”, model bardzo często halucynuje sukces. Bez odtwarzalnego testu agent modyfikuje logikę aplikacji w sposób, który maskuje objawy lub psuje sąsiednie przepływy, jednocześnie deklarując rozwiązanie problemu. Co gorsza, proszony o napisanie testu równolegle z poprawką, agent nagminnie dostosowuje asercje testowe do swojej wadliwej implementacji.
Protokół test-first tworzy empiryczną barierę: agent musi dowieść istnienia defektu, pisząc czerwony test jednostkowy lub integracyjny. Po zacommitowaniu nieprzechodzącego testu agent otrzymuje zakaz modyfikacji plików testowych na etapie tworzenia poprawki. Jedynym akceptowalnym rezultatem są zmiany w kodzie produkcyjnym, które sprawią, że test przejdzie na zielono.
Jak wygląda maksymalny wynik
Dział zatytułowany „Jak wygląda maksymalny wynik”Przepływ z maksymalną oceną w Q15 obejmuje cztery rygorystyczne etapy:
- Odtworzenie błędu: Agent pisze wyizolowany test odtwarzający błąd i uruchamia go, wykazując niezerowy kod wyjścia.
- Zacommitowany czerwony stan: Nieprzechodzący test zostaje zacommitowany do gita jako dowód przed wprowadzeniem jakichkolwiek zmian w kodzie aplikacji.
- Zablokowane pliki testowe: Hooki lub uprawnienia blokują agentowi możliwość edycji plików testowych w fazie naprawiania kodu.
- Zweryfikowany zielony stan: Zestaw testów wykonuje się pomyślnie z zerem modyfikacji w zacommitowanym teście reprodukującym.
Wdrożenie krok po kroku
Dział zatytułowany „Wdrożenie krok po kroku”-
Zleć agentowi napisanie testu reprodukującego problem.
Dostarcz raport o błędzie lub log błędu i zabroń modyfikacji kodu źródłowego:
Zgłoszenie błędu: Gdy użytkownik zmienia adres email, token sesji zostajeniespodziewanie unieważniony.Napisz test w tests/auth/email_change.test.ts odtwarzający ten błąd.Uruchom test i potwierdź, że nie przechodzi. Nie modyfikuj żadnych plików w src/.W trybie Agent poinstruuj:
Odtwórz błąd #402 dodając nieprzechodzący test w tests/unit/payment.test.ts.Uruchom `npm test tests/unit/payment.test.ts` i potwierdź kod wyjścia 1.Nie dotykaj jeszcze katalogu src/.Dodaj test integracyjny odtwarzający race condition opisany w INCIDENT_REPORT.Potwierdź, że test nie przechodzi pod poleceniem `pytest tests/test_concurrency.py`.Nie modyfikuj kodu aplikacji. -
Zacommituj czerwony test.
Zapisz test odtwarzający usterkę jako samodzielny commit:
Okno terminala git add tests/auth/email_change.test.tsgit commit -m "test: odtworzenie niespodziewanego uniewaznienia sesji przy zmianie emaila" -
Wymuś blokadę plików testowych w trakcie naprawy.
Zablokuj agentowi możliwość modyfikacji testów w celu wymuszenia zielonego wyniku. Użyj hooka pre-tool lub skryptu blokującego:
# Przykład .claude/hooks/protect-tests.sh lub hook pre-commit w git#!/bin/bash# Blokuje edycje plikow testowych podczas naprawiania bledowchanged_files=$(git diff --name-only)if [[ "$FIX_MODE" == "true" ]] && echo "$changed_files" | grep -q "^tests/"; thenecho "Blad: Modyfikowanie plikow testowych w trakcie naprawy bledu jest zabronione." >&2exit 2fi -
Zleć agentowi naprawę błędu w kodzie.
Poinstruuj agenta, aby sprawił, by czerwony test przeszedł na zielono:
Test odtwarzający błąd jest zacommitowany w tests/auth/email_change.test.ts.Napraw problem w src/auth/, aby test przeszedł na zielono.Nie edytuj tests/auth/email_change.test.ts. Uruchom zestaw testów, aby dowieść poprawności. -
Zweryfikuj czysty zielony przebieg.
Potwierdź, że test przeszedł, żadne inne testy nie uległy regresji, a diff dotyka wyłącznie plików aplikacji.
Częste pułapki
Dział zatytułowany „Częste pułapki”- Pisanie testu i poprawki jednocześnie: Pozwalanie agentowi na napisanie testu i kodu w jednym kroku. Model zazwyczaj napisze test potwierdzający jego własny, wadliwy kod.
- Osłabianie asercji (assertion dilution): Gdy agent natrafia na trudny przypadek brzegowy, łagodzi asercję (np. zamienia
toBe(expected)natoBeTruthy()) zamiast naprawić logikę biznesową. - Ignorowanie testów sąsiednich: Naprawienie nowego testu przy jednoczesnym popsuciu 3 istniejących. Zawsze wymagaj uruchomienia pełnego zestawu regresyjnego przed zakończeniem zadania.
Jak sprawdzić, czy już tam jesteś
Dział zatytułowany „Jak sprawdzić, czy już tam jesteś”- Pull requesty naprawiające błędy zawierają co najmniej dwa commity: pierwszy dodający czerwony test i kolejne wprowadzające naprawę.
- W diffach gita dla zadań naprawczych nigdy nie występują osłabione asercje w istniejących plikach testowych.
- Hooki automatycznie blokują edycję katalogu
tests/**, gdy aktywny jest tryb naprawy. - Liczba powracających błędów produkcyjnych spada, ponieważ testy reprodukujące na stałe wzbogacają zestaw regresyjny.