Nie wspominasz o swoim narzędziu testowym. Wiele z nich ma funkcje „łączenia”, które pozwalają agregować wyniki wielu przebiegów lub pakietów. Jeśli chcesz zagregować wskaźnik pokrycia, zapoznaj się z funkcją łączenia w swoim narzędziu pokrycia.
Czy możemy teraz rozmawiać o słoniu w pokoju?
Nie ma łyżki. I nie ma „procentu całkowitego pokrycia”. Przynajmniej żaden prosty.
Procent pokrycia to łatwo zrozumiały wskaźnik, który pomaga zrozumieć zakres, głębokość i zakres pakietów testowych. Ale jak w przypadku każdego prostego testu porównawczego, bardzo łatwo jest zostać celem skupionym na tej wartości jako rodzaj magicznego talizmanu „pełnego testowania”.
Powiedzmy, że osiągnąłeś chwałę „100% pokrycia testowego”. Tak! Ale co to znaczy? 100% linii kodu jest testowanych, prawda? A co z tą linią?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
„Zakrycie” tej linii oznacza coś - ale nie wiele, ponieważ istnieje wiele warunków, które są True
lub False
z pewnym prawdopodobieństwem, ale jest mało prawdopodobne, że przetestowałeś wszystkie kombinacje tych warunków. Nawet jeśli ta linia jest pokrywana kilkanaście razy, jeśli jeden z warunków jest stosunkowo rzadki, nie zbliżyłeś się do przetestowania wszystkich prawdziwych wyników, które mogą wystąpić w praktyce. Aby to wyjaśnić, bardziej syntetyczny przykład:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
Ile razy musiałbyś pokryć tę linię, aby naprawdę wyczerpująco ją przetestować? Ile razy musiałbyś to obejmować, aby przetestować to w połączeniu ze wszystkimi innymi zmiennymi w programie (z ich własnymi, prawdopodobnie podobnie rzadkimi) prawdopodobieństwami?
Nie twierdzę, że wskaźniki zasięgu są bezużyteczne. Są naprawdę świetne . Koncentrują się na jednym z kluczowych zagadnień: w jakim stopniu mój system oprogramowania jest testowany? Pomagają przejść od „mamy kilka testów” do „dokładnie przetestowaliśmy”.
Ale podczas pracy nad „połączonymi wynikami”, rzeczywistość jest taka, że twój wynik zwykle będzie dotyczył „pokrycia wypowiedzi”, a nie „warunku”, „orzeczenia” lub „ścieżki” . Tak więc niezależnie od liczby, jaką dają Ci sumaryczne wyniki, jest mało prawdopodobne, że daje prawdziwy obraz tego, jak wiele potencjalnych stanów i kombinacji stanów jest testowanych. Podczas pracy nad zwiększeniem procentu pokrycia, rozważ również zmierzenie pokrycia predykatem. Zapewni to bardziej realistyczny - i niemal zawsze bardziej otrzeźwiający - pogląd na rozległość testu.