"Testing in Production, the safe way" Cindy Sridharana, jest jedną z pierwszych i najpełniejszych prób skategoryzowania praktyk wdrożeniowych i weryfikacyjnych w testowaniu produkcyjnym. Choć podejście to może być traktowane jako niezgodne z klasyfikacją ISTQB, to możemy uznać, że popularny model certyfikacji praktycznie nie dostrzega problemu testowania powdrożeniowego, koncentrując się przede wszystkim na poziomach i typach testów przedwdrożeniowych. To umniejszenie wagi testowania, już po opuszczeniu zespołu testersko – deweloperskiego, jest pominięciem ważnej części współczesnej kontroli jakości.
Testowanie w pre-produkcji (Pre-production tests)
W podanej kategoryzacji i w testowaniu przed produkcyjnym, znajdziemy zarówno znane nam praktyki, jak i te dedykowane zazwyczaj programistom oraz specjalistom od bezpieczeństwa:
- Testowanie jednostkowe (Unit tests)
- Testowanie funkcjonalne (Functional tests)
- Testowanie komponentowe (Component tests)
- Testowanie przeciążające (Stress tests)
- Testowanie losowe (Fuzz tests)
- Analiza statyczna (Static analysis)
- Testowanie oparte na właściwościach (Property based tests)
- Testowanie pokrycia (Coverage tests)
- Testowanie porównawcze (Benchmark tests)
- Testowanie regresji (Regression tests)
- Testowanie kontraktowe (Contract tests)
- Testowanie w Lint (Lint tests)
- Testowanie akceptacyjne (Acceptance tests)
- Testowanie mutacyjne (Mutation tests)
- Testowanie dymne (Smoke tests)
- Testowanie UI/UX (UI/UX tests)
- Testowanie użyteczności (Usability tests)
- Testowanie penetracyjne (Penetration tests)
- Modelowanie zagrożeń (Threat modelling)
Testowanie na produkcji (Testing in production)
Zaproponowane przez Sridharan trzy fazy testowania produkcyjne, pokazują złożoność tematu oraz rozdzielność pojawiających się metod testowania. Zupełnie inaczej patrzymy na testy wdrożeniowe związane z przygotowaniem wersji, zupełnie inaczej wyglądają one w wydaniu produktu, a wszystkie one różnią się od końcowego weryfikowania, kiedy oprogramowanie ma już swoich użytkowników (po wydaniu)
Wdrożenie (Deploy)
- Testowanie integracyjne (Integration tests)
- Porównanie do wcześniejszej wersji (Tap compare)
- Testowanie obciążenia (Load tests)
- Shadowing
- Testowanie konfiguracji (Config tests)
- Testowanie w pikach (Soak tests)
Wydanie (Release)
- Testy kanarka (Canarying)
- Monitoring
- Kształtowanie ruchu (Traffic shaping)
- Oznaczanie funkcji (Feature flagging)
- Śledzenie wyjątków (Exception tracking)
Po wydaniu (Post-release)
- Debugowaniu ruchu (Teeing)
- Profilowanie (Profiling)
- Logi/ zdarzenia (Logs/events)
- Testowanie chaotyczne (Chaos testing)
- Monitoring
- Testowanie A/B (A/B tests)
- Śledzenie (Tracing)
- Dynamiczna eksploracja (Dynamic exploration)
- Monitorowanie rzeczywistego użytkownika (Real user monitoring)
- Audyt (Auditing)
- Weryfikacja na wezwanie (On-call experience).
Podsumowanie
Testowanie na produkcji w przeszłości wiązało się z pewnym piętnem i negatywnymi konotacjami, związanymi z nieprofesjonalnym programowaniem, z pewną lekkomyślnością lub brakiem dbałości o użytkownika końcowego. To prawda w odniesieniu do słabych lub przypadkowych "testów na produkcji", które zasługują na tę reputację. Testowanie na produkcji w żadnym przypadku nie zastępuje testów przedprodukcyjnych, nie jest też łatwe. W rzeczywistości możliwość skutecznego i bezpiecznego testowania na produkcji wymaga automatyzacji, dokładnego zrozumienia praktyk, a także dobrego zaprojektowania systemów od podstaw, by dobrze nadawały się do tej formy testowania.
By móc opracować bezpieczny proces skutecznego testowania na produkcji, istotne staje się, by nie traktować go jako szerokiego, ogólnego terminu odnoszącego się do zbioru narzędzi i technik.