Właściwe wersjonowanie i integracja testów automatycznych są kluczowe dla zapewnienia zgodności weryfikacji z aktualnym stanem projektu.
Historia zagadnienia
Testy automatyczne początkowo często były prowadzone oddzielnie od głównego projektu, co prowadziło do niezgodności i problemów z utrzymywaniem. Rozwój kilku gałęzi, częste wydania oprogramowania i testów — spowodowały potrzebę wspólnego systemu kontroli wersji.
Problem
Bez wersjonowania i skoordynowanej integracji powstają:
Rozwiązanie
Nowoczesne podejście:
# Ogólne podejście: git checkout -b feature/new_login # Funkcjonalność i testy są opracowywane i testowane razem # Po przeglądzie są scalane razem do głównej gałęzi
Kluczowe cechy:
Czy testy mogą być przechowywane w oddzielnym repozytorium (od kodu projektu)?
Tak, ale wówczas trudniej jest utrzymać aktualność testów, wymaga to manualnej synchronizacji, istnieje ryzyko "zapomnienia" o aktualizacji czegoś przy wydaniu lub naprawie błędów.
Czy testy powinny od razu pokrywać całą nową funkcjonalność przy tworzeniu PR?
Idealnie — tak, w praktyce często pokrywają MVP/główne scenariusze w pierwszym PR, a złożone przypadki — jako oddzielne zadania. Najważniejsze, aby krytyczna funkcjonalność była od razu pokryta.
Czy można cofnąć tylko zmiany testowe bez cofania kodu?
Jeśli testy i kod są razem w jednej gałęzi — tak, można cofać rewizje. Ale lepiej unikać "cofania" testów bez kodu: pogarsza to jakość weryfikacji.
Projekt z oddzielnym repozytorium testów automatycznych. Po wydaniu programiści "zapomnieli" zaktualizować testy — testy padały, przechodziły nieaktualne kontrole, błędy były wykrywane na produkcji.
Zalety:
Wady:
Testy i kod projektu są prowadzone w jednej gałęzi git: przy każdym nowym pull request koniecznie aktualizowane są testy automatyczne dla dodanego kodu. Wszystkie zmiany przechodzą przegląd kodu i automatyczne kontrole.
Zalety:
Wady: