Aktualnie pracujemy nad średnim / dużym projektem PHP / MySQL. Przeprowadzamy testy jednostkowe z PHPUnit i QUnit i mamy dwóch pełnoetatowych testerów, którzy ręcznie testują aplikację. Nasze dane testowe (próbne) są obecnie tworzone za pomocą skryptów SQL.
Mamy problem z utrzymywaniem skryptów dla danych testowych. Logika biznesowa jest dość złożona, a jedna „prosta” zmiana danych testowych często powoduje kilka błędów w aplikacji (które nie są prawdziwymi błędami, tylko produktem nieprawidłowych danych). Stało się to dużym obciążeniem dla całego zespołu, ponieważ stale tworzymy i zmieniamy tabele.
Naprawdę nie widzę sensu utrzymywania danych testowych w skryptach, ponieważ wszystko można ręcznie dodać w aplikacji w około 5 minut za pomocą interfejsu użytkownika. Nasz szef nie zgadza się z tym i mówi, że posiadanie projektu, którego nie możemy wdrożyć z danymi testowymi, jest złą praktyką.
Czy powinniśmy zrezygnować z obsługi skryptów z danymi testowymi i pozwolić testerom przetestować aplikację bez danych? Jaka jest najlepsza praktyka?
źródło
Tak, najlepszą praktyką jest posiadanie testów jednostkowych i makiet danych. Kierownik projektu ma rację. Ponieważ wykonanie „prostej” zmiany danych testowych często powoduje błędy, to jest sedno problemu.
Kod wymaga ulepszenia. Nie robienie tego (mówiąc „hej, nie potrzebujemy testów”) nie jest naprawą, to po prostu dodanie długu technicznego . Podziel kod na mniejsze, bardziej testowalne jednostki, ponieważ niemożność zidentyfikowania jednostek bez uszkodzenia jest problemem.
Zacznij robić refaktor. Ulepszenia powinny być małe, aby można było nimi zarządzać. Szukaj anty-wzorów, takich jak klasy / metody Boga, nie przestrzegaj SUCHEJ, pojedynczej odpowiedzialności itp.
Na koniec spójrz na TDD, aby sprawdzić, czy to działa dla zespołu. TDD działa dobrze, zapewniając, że cały twój kod jest możliwy do przetestowania (ponieważ najpierw piszesz testy), a także upewniasz się, że jesteś szczupły , pisząc tylko tyle kodu, aby przejść testy (zminimalizować nad inżynierią).
Ogólnie rzecz biorąc, jeśli seria złożonych procesów logiki biznesowej generuje zestaw danych, uważam to za raport. Podsumuj raport. Uruchom raport i użyj wynikowego obiektu jako danych wejściowych do następnego testu.
źródło
Jest to bardzo powszechny i bardzo trudny problem. Zautomatyzowane testy, które działają przeciwko databse (nawet bazy danych w pamięci, takich jak HSQLDB ) są zwykle powolny, nie deterministyczny, a ponieważ tylko awaria badanie wskazuje, że istnieje problem gdzieś w kodzie lub w Panstwa danych, są one mało pouczające.
Z mojego doświadczenia wynika, że najlepszą strategią jest skupienie się na testach jednostkowych dla logiki biznesowej. Postaraj się pokryć jak najwięcej swojego podstawowego kodu domeny. Jeśli dobrze zrozumiesz tę część, co samo w sobie jest sporym wyzwaniem, osiągniesz najlepszy stosunek kosztów do korzyści dla automatycznych testów. Jeśli chodzi o warstwę trwałości, zwykle poświęcam znacznie mniej wysiłku na testy automatyczne i pozostawiam to dedykowanym testerom ręcznym.
Ale jeśli naprawdę chcesz (lub potrzebujesz) zautomatyzować testy trwałości, polecam lekturę Growing Object-Oriented Software, Guided by Tests . Ta książka zawiera cały rozdział poświęcony testom trwałości.
źródło