Odpowiedzi:
Pokrycie kodu jest miarą tego, ile wierszy / bloków / łuków kodu jest wykonywanych podczas uruchomionych testów automatycznych.
Pokrycie kodu jest gromadzone za pomocą specjalistycznego narzędzia do instrumentowania plików binarnych w celu dodania wywołań śledzenia i uruchomienia pełnego zestawu automatycznych testów na oprzyrządowanym produkcie. Dobre narzędzie da ci nie tylko procent wykonanego kodu, ale także pozwoli ci na wwiercenie się w dane i zobaczenie dokładnie, które wiersze kodu zostały wykonane podczas danego testu.
Nasz zespół korzysta z Magellan - wewnętrznego zestawu narzędzi do pokrywania kodu. Jeśli prowadzisz sklep .NET, Visual Studio ma zintegrowane narzędzia do zbierania pokrycia kodu. Możesz także rzucić niestandardowe narzędzia, jak opisano w tym artykule .
Jeśli prowadzisz sklep w C ++, Intel ma narzędzia, które działają w systemach Windows i Linux, chociaż ich nie używałem. Słyszałem również, że istnieje narzędzie gcov dla GCC, ale nic o tym nie wiem i nie mogę podać linku.
Jeśli chodzi o to, jak go wykorzystujemy - pokrycie kodu jest jednym z naszych kryteriów wyjścia dla każdego kamienia milowego. Mamy właściwie trzy wskaźniki pokrycia kodu - zasięg z testów jednostkowych (od zespołu programistów), testy scenariuszy (od zespołu testowego) i zasięg łączony.
BTW, podczas gdy pokrycie kodu jest dobrą miarą tego, ile testów wykonujesz, niekoniecznie jest to dobra miara tego, jak dobrze testujesz swój produkt. Istnieją inne wskaźniki, których należy użyć wraz z pokryciem kodu w celu zapewnienia jakości.
Pokrycie kodu zasadniczo sprawdza, czy część twojego kodu jest objęta testami. Jeśli więc masz 90% pokrycia kodu, oznacza to, że istnieje 10% kodu, który nie jest objęty testami. Wiem, że możesz myśleć, że 90% kodu jest objęte, ale musisz spojrzeć z innej strony. Co powstrzymuje Cię przed uzyskaniem 100% pokrycia kodu?
Dobrym przykładem będzie:
if(customer.IsOldCustomer())
{
}
else
{
}
Teraz w powyższym kodzie są dwie ścieżki / gałęzie. Jeśli zawsze trafiasz do gałęzi „TAK”, nie zakrywasz innej części i będzie to widoczne w wynikach pokrycia kodu. Jest to dobre, ponieważ teraz wiesz, że to, co nie jest objęte, i możesz napisać test obejmujący inną część. Jeśli nie było zasięgu kodu, to po prostu siedzisz na bombie czasowej, aby eksplodować.
NCover to dobre narzędzie do pomiaru pokrycia kodu.
Pamiętaj tylko, że posiadanie „100% pokrycia kodu” nie oznacza, że wszystko jest testowane całkowicie - podczas gdy oznacza to, że każda linia kodu jest testowana, nie oznacza to, że są one testowane w każdej (wspólnej) sytuacji.
Używałbym pokrycia kodu, aby wyróżnić fragmenty kodu, dla których prawdopodobnie powinienem pisać testy. Na przykład, jeśli jakiekolwiek narzędzie do pokrywania kodu pokazuje, że myImportantFunction () nie jest wykonywane podczas uruchamiania moich bieżących testów jednostkowych, prawdopodobnie powinny zostać poprawione.
Zasadniczo 100% pokrycia kodu nie oznacza, że Twój kod jest idealny. Użyj go jako przewodnika do napisania bardziej kompleksowych testów (jednostkowych).
x
i zwróciła x/x
i przeprowadziłeś test za pomocą my_func (2), miałbyś 100% pokrycia (ponieważ kod funkcji został uruchomiony), ale przeoczyłeś ogromny problem, gdy 0 jest parametrem. Tzn. Nie przetestowałeś wszystkich niezbędnych scenariuszy nawet przy 100% zasięgu.
Uzupełnienie kilku punktów do wielu poprzednich odpowiedzi:
Pokrycie kodu oznacza, jak dobrze twój zestaw testowy pokrywa twój kod źródłowy. tzn. w jakim zakresie kod źródłowy jest objęty zestawem przypadków testowych.
Jak wspomniano w powyższych odpowiedziach, istnieją różne kryteria zasięgu, takie jak ścieżki, warunki, funkcje, instrukcje itp. Jednak dodatkowe kryteria, które należy uwzględnić, to
Uwaga: Analiza kodu statycznego wykryje, czy istnieje kod nieosiągalny lub kod wiszący, tj. Kod nieobjęty żadnym innym wywołaniem funkcji. A także inne pokrycie statyczne. Nawet jeśli statyczna analiza kodu zgłasza, że objęty jest kodem 100%, nie daje raportów o zestawie testowym, jeśli testowane jest całe możliwe pokrycie kodu.
Zakres kodu został dobrze wyjaśniony w poprzednich odpowiedziach. To raczej odpowiedź na drugą część pytania.
Użyliśmy trzech narzędzi do określenia zasięgu kodu.
Używamy tych narzędzi do
Pokrycie kodu jest po prostu miarą testowanego kodu. Istnieje wiele kryteriów zasięgu, które można zmierzyć, ale zazwyczaj to różne ścieżki, warunki, funkcje i stwierdzenia w programie tworzą całkowity zasięg. Metryka pokrycia kodu to tylko odsetek testów, które wykonują każde z tych kryteriów pokrycia.
Jeśli chodzi o sposób pokrycia testu jednostki śledzenia w moich projektach, używam narzędzi do analizy kodu statycznego, aby śledzić.
Dla Perla jest doskonały moduł Devel :: Cover , którego regularnie używam na swoich modułach.
Jeśli kompilacją i instalacją zarządza moduł :: Build, możesz po prostu uruchomić, ./Build testcover
aby uzyskać ładną stronę HTML, która informuje o pokryciu według poddziału, linii i stanu, z ładnymi kolorami ułatwiającymi sprawdzenie, która ścieżka kodu nie została uwzględniona.
W poprzednich odpowiedziach Kodeks został dobrze wyjaśniony. Ja po prostu dodając pewną wiedzę związaną z narzędziami jeśli pracują nad iOS
i OSX
platformy, Xcode zapewnia obiektu do pokrycia testu i monitor kodu.
Linki referencyjne:
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
Oba są pomocnymi linkami do nauki i odkrywania pokrycia kodu za pomocą Xcode.
W przypadku PHP powinieneś rzucić okiem na Github od Sebastiana Bergmanna
Zapewnia funkcje gromadzenia, przetwarzania i renderowania informacji o zasięgu kodu PHP.