AI w generowaniu testów: Gdzie pomaga, a gdzie kłamie
AI pisze testy szybko. Pisze jednak testy, które wyglądają na prawdziwe, ale weryfikują niewłaściwe rzeczy.
Wklejasz funkcję do AI. Po trzydziestu sekundach masz dwanaście przechodzących testów. Twój wskaźnik pokrycia kodu rośnie. Czujesz się produktywny.
Potem na produkcji pojawia się błąd. Patrzysz na te dwanaście testów i zdajesz sobie sprawę, że żaden z nich by go nie wykrył.
AI przetestowało to, co Twój kod robi, a nie to, co Twój kod powinien robić.
AI jest użyteczne, ale musisz wiedzieć, jak z niego korzystać.
Gdzie AI wygrywa:
- Generowanie kodu boilerplate, takiego jak bloki setup i teardown.
- Pisanie powtarzalnych helperów fabrycznych (factory helpers) i obiektów danych.
- Tworzenie wielu wariacji jednego dobrego wzorca testowego.
- Obsługa oczywistych przypadków brzegowych, takich jak null, puste ciągi znaków czy zero.
Gdzie AI zawodzi:
- Testy oparte na implementacji: AI pisze testy, które podążają za strukturą kodu zamiast za logiką biznesową. Jeśli przeprowadzisz refaktoryzację kodu, testy się wyłożą, nawet jeśli wynik pozostanie poprawny.
- Powierzchowne przypadki brzegowe: AI znajduje oczywiste błędy, ale pomija te specyficzne dla domeny. Nie zna specyfiki Twojej strefy czasowej, ograniczeń bazy danych ani Twoich konkretnych reguł biznesowych.
- Kruche mocki: AI mockuje wewnętrzne usługi, które powinny pozostać rzeczywiste. Sprawia to, że testy są trudne w utrzymaniu i łatwo je zepsuć podczas refaktoryzacji.
Jak używać AI, aby nie tworzyć „teatru testów”:
- Najpierw zdefiniuj kontrakt. Napisz jedno zdanie prostym językiem o tym, co test musi udowodnić. Przykład: „Wygasły kod musi zwrócić pierwotną kwotę”.
- Przekaż to zdanie do AI. Pozwól AI napisać kod, ale to Ty musisz odpowiadać za intencję.
- Mockuj tylko na granicach systemu. Używaj rzeczywistych instancji dla wewnętrznych modułów. Mockuj tylko zewnętrzne API lub bazy danych.
- Napisz jeden przypadek brzegowy specyficzny dla domeny ręcznie. AI radzi sobie z „oczywistymi” przypadkami. Ty musisz zająć się tymi „o 3 nad ranem”, które faktycznie powodują incydenty na produkcji.
Nie pozwól, aby AI decydowało o tym, co weryfikuje test. Używaj go do pisania kodu, ale to Ty dostarczasz logikę.
Źródło: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
