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 sprawdzają niewłaściwe rzeczy. Możesz zauważyć wzrost pokrycia kodu, ale Twój kod nadal będzie zawierał błędy.
AI świetnie radzi sobie z pewnymi zadaniami. Używaj go do:
- Ekstrapolacji na podstawie dobrego przykładu. Jeśli napiszesz jeden idealny test, AI może napisać dziesięć kolejnych w dokładnie Twoim stylu.
- Obsługi powtarzalnego pisania. Używaj go do bloków setup, teardown oraz helperów fabrycznych.
- Tworzenia wstępnej struktury. Pozwala szybciej przejść do edytora niż praca z pustym plikiem.
Niebezpieczeństwo zaczyna się, gdy pozwolisz AI decydować o „kontrakcie”.
Jeśli podasz AI funkcję i poprosisz o testy, AI przeczyta kod i przetestuje to, co ten kod aktualnie robi. Nie przetestuje tego, co kod powinien robić. Tworzy to zamkniętą pętlę. AI stawia założenie, pisze kod, a następnie pisze testy, które są zgodne z tym samym założeniem.
Gdy błędy trafiają na produkcję, dzieje się to dlatego, że zestaw testów stał po stronie błędu.
Uważaj na te trzy pułapki:
Testy uzależnione od implementacji AI często testuje ścieżki logiki zamiast reguł biznesowych. Jeśli zmienisz mały szczegół wewnętrzny, testy się wyłożą, nawet jeśli wynik pozostaje poprawny. To sprawia, że refaktoryzacja staje się koszmarem.
Powierzchowne przypadki brzegowe AI dobrze radzi sobie z testowaniem wartości null, pustych ciągów znaków i zer. To oczywiste rzeczy. AI nie potrafi jednak znaleźć „brzegów domeny”. Nie zna Twoich specyficznych błędów związanych ze strefami czasowymi, dziwnych zachowań bazy danych czy unikalnych reguł biznesowych.
Kruche mocki AI uwielbia mockować wszystko. Prowadzi to do dwóch problemów:
- Mock jest błędny. Naśladuje fałszywą wersję API, która nie odpowiada rzeczywistości.
- Mock zamraża implementację. Testuje, jak Twój kod wywołuje inne funkcje, zamiast testować końcowy wynik.
Jak poprawnie używać AI:
Trzymaj „intencję” poza zasięgiem AI.
- Najpierw napisz kontrakt. Dla każdego testu napisz jedno zdanie w prostym języku. Przykład: „Wygasłe kody muszą zwracać pierwotną kwotę”.
- Przekaż te zdania do AI. Pozwól jej napisać asercje, ale to Ty dostarczasz znaczenie.
- Mockuj na granicach. Mockuj tylko zewnętrzne API lub bazy danych. Używaj rzeczywistych wersji własnych, wewnętrznych modułów.
- Napisz jeden przypadek brzegowy domeny ręcznie. Za każdym razem, gdy skończysz funkcję, zapisz jedną rzecz, która budzi Twój niepokój. Użyj tego jako promptu dla AI.
AI to narzędzie zwiększające produktywność, a nie zastępstwo dla myślenia. Używaj go do pisania treści testu, ale nigdy nie pozwól mu decydować o tym, jaki jest cel testu.
Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
Optional learning community: https://t.me/GyaanSetuAi
