Udostępnij za pośrednictwem


Wiązania eksploracji

Pex Ustawienia AttributeBase to abstrakcyjna klasa bazowa dla ustawień powiązanych jako atrybuty. Zobacz Ustawienia Waterfall, aby zapoznać się z omówieniem ustawień w środowisku IntelliTest.

Ustawienia można modyfikować przy użyciu nazwanych właściwości tego i jego atrybutów pochodnych:

[PexClass(MaxRuns = 10)]
public partial class FooTest {...}
  • Ograniczenia rozwiązywania ograniczeń
  • Granice ścieżki eksploracji
    • MaxBranches — maksymalna liczba gałęzi, które mogą być pobierane wzdłuż pojedynczej ścieżki wykonywania.
    • MaxCalls — maksymalna liczba wywołań, które mogą być wykonywane podczas pojedynczej ścieżki wykonywania.
    • MaxStack — maksymalny rozmiar stosu w dowolnym momencie podczas pojedynczej ścieżki wykonywania mierzony jako liczba aktywnych ramek wywołań.
    • MaxConditions — maksymalna liczba warunków dla danych wejściowych, które mogą być sprawdzane podczas pojedynczej ścieżki wykonywania.
  • Wiązania eksploracji
    • MaxRuns — maksymalna liczba przebiegów, które będą podejmowane podczas eksploracji.
    • MaxRunsWithoutNewTests — maksymalna liczba kolejnych przebiegów bez emitowania nowego testu.
    • MaxRunsWithUniquePaths — maksymalna liczba przebiegów z unikatowymi ścieżkami wykonywania, które będą podejmowane podczas eksploracji.
    • MaxExceptions — maksymalna liczba wyjątków, które można znaleźć dla kombinacji wszystkich odnalezionych ścieżek wykonywania.
  • Ustawienia generowania kodu pakietu testów

MaxConstraintSolverTime

Liczba sekund , przez które moduł rozwiązywania ograniczeń musi obliczyć dane wejściowe, które spowodują wykonanie nowej i innej ścieżki wykonywania. Jest to opcja Pex Ustawienia AttributeBase i jej typów pochodnych.

Im głębiej intelliTest bada ścieżki wykonywania programu, tym bardziej złożone są systemy ograniczeń, które intelliTest tworzy z przepływu sterowania i przepływu danych programu. W zależności od ograniczenia czasu można ustawić tę wartość, aby umożliwić intelliTest uzyskanie większej lub mniejszej ilości czasu na odnajdywanie nowych ścieżek wykonywania.

Zazwyczaj przyczyną przekroczenia limitu czasu jest to, że narzędzie IntelliTest próbuje znaleźć rozwiązanie dla systemu ograniczeń, który nie ma rozwiązania, ale nie jest świadomy tego faktu. Ponieważ jest to najczęstszy przypadek przekroczenia limitu czasu, może to nie mieć sensu, aby zwiększyć granicę.

MaxConstraintSolverMemory

Liczba megabajtów, które moduł rozwiązywania ograniczeń musi obliczyć dane wejściowe, które spowodują wykonanie nowej i innej ścieżki wykonywania. Jest to opcja Pex Ustawienia AttributeBase* i jej typów pochodnych.

Dokładniejsze narzędzie IntelliTest bada ścieżki wykonywania programu, tym bardziej złożone są systemy ograniczeń, które intelliTest tworzy z przepływu sterowania i przepływu danych programu. W zależności od dostępnej pamięci komputera można ustawić tę wartość, aby umożliwić intelliTest radzenie sobie z bardziej złożonymi systemami ograniczeń.

Zazwyczaj przyczyną przekroczenia limitu czasu jest to, że narzędzie IntelliTest próbuje znaleźć rozwiązanie dla systemu ograniczeń, który nie ma rozwiązania, ale nie jest świadomy tego faktu. Ponieważ jest to najczęstsza przyczyna sytuacji poza pamięcią, może to nie mieć sensu, aby zwiększyć granicę.

MaxBranches

Maksymalna liczba gałęzi, które mogą być pobierane wzdłuż pojedynczej ścieżki wykonywania.

Motywacją związaną z tą eksploracją jest ograniczenie długości dowolnej ścieżki wykonywania badanej przez narzędzie IntelliTest podczas generowania danych wejściowych. W szczególności uniemożliwia to narzędzie IntelliTest przestaje odpowiadać, jeśli program przechodzi w nieskończoną pętlę.

Każda gałąź warunkowa i bezwarunkowa wykonywanego i monitorowanego kodu jest liczone do tego limitu, w tym gałęzi, które nie zależą od danych wejściowych sparametryzowanego testu.

Na przykład następujący kod używa gałęzi w kolejności 100:

for (int i=0; i<100; i++) { }

MaxCalls

Maksymalna liczba wywołań, które mogą być wykonywane podczas pojedynczej ścieżki wykonywania.

Motywacją związaną z tą eksploracją jest ograniczenie długości dowolnej ścieżki wykonywania badanej przez narzędzie IntelliTest podczas generowania danych wejściowych. W szczególności uniemożliwia to firmie IntelliTest przestaje odpowiadać, jeśli program wywołuje metodę rekursywnie nieskończoną liczbę razy, co spowodowałoby przepełnienie stosu, z którego funkcja IntelliTest nie może odzyskać sprawności.

Każde wywołanie (bezpośrednie, pośrednie, wirtualne, skokowe) wykonanego i monitorowanego kodu jest liczone do tego limitu.

MaxStack

Maksymalny rozmiar stosu w dowolnym momencie w ramach pojedynczej ścieżki wykonywania mierzony przez liczbę aktywnych ramek wywołań.

Motywacją związaną z tą eksploracją jest ograniczenie rozmiaru stosu dowolnej ścieżki wykonywania, którą narzędzie IntelliTest bada podczas generowania danych wejściowych. W szczególności uniemożliwia to intelliTest korzystanie ze wszystkich dostępnych przestrzeni stosu, co spowodowałoby przepełnienie stosu, z którego funkcja IntelliTest nie może odzyskać danych.

MaxConditions

Maksymalna liczba warunków dla danych wejściowych, które mogą być sprawdzane podczas pojedynczej ścieżki wykonywania.

Motywacją związaną z tą eksploracją jest ograniczenie złożoności każdej ścieżki wykonywania, którą narzędzie IntelliTest bada podczas generowania danych wejściowych. Każda gałąź warunkowa, która zależy od danych wejściowych sparametryzowanego testu, jest liczone do tego limitu.

Na przykład każda ścieżka w poniższym kodzie korzysta z warunków n+1:

[PexMethod]
void ParameterizedTest(int n)
{
     for (int i=0; i<n; i++) { // conditions are "0<n", "1<n", ..., "!(n<n)"
          ...
     }
     for (int i=0; i<100; i++) { // irrelevant for MaxConditions, since conditions do not depend on input
          ...
     }
}

MaxRuns

Maksymalna liczba przebiegów, które narzędzie IntelliTest spróbuje podczas eksploracji testu.

Motywacją związaną z tą eksploracją jest to, że każdy kod, który zawiera pętle lub rekursję, może mieć nieskończoną liczbę ścieżek wykonywania, a tym samym narzędzie IntelliTest musi być ograniczone podczas generowania danych wejściowych.

Dwa ustawienia MaxRuns i MaxRunsWithUniquePaths są powiązane w następujący sposób:

  • Narzędzie IntelliTest wywoła sparametryzowaną metodę testową do maksymalnych czasów z różnymi danymi wejściowymi testu.
  • Jeśli wykonany kod jest deterministyczny, narzędzie IntelliTest za każdym razem zajmie inną ścieżkę wykonywania. Jednak w niektórych warunkach wykonany kod może podążać za ścieżką wykonywania, która została już podjęta wcześniej, z różnymi danymi wejściowymi.
  • Funkcja IntelliTest zlicza liczbę odnalezionych unikatowych ścieżek wykonywania; ta liczba jest ograniczona przez opcję MaxRunsWithUniquePaths .

MaxRunsWithoutNewTests

Maksymalna liczba kolejnych przebiegów bez emitowania nowego testu.

Chociaż narzędzie IntelliTest często może znaleźć wiele interesujących danych wejściowych testów w krótkim czasie, po chwili nie znajdzie więcej nowych danych wejściowych testów i nie będzie emitować więcej testów jednostkowych. Ta opcja konfiguracji powoduje ograniczenie liczby kolejnych prób, które intelliTest może wykonać bez emitowania nowego testu. Po osiągnięciu zatrzyma eksplorację.

MaxRunsWithUniquePaths

Maksymalna liczba unikatowych ścieżek, które należy wziąć pod uwagę podczas eksploracji narzędzia IntelliTest.

Motywacją związaną z tą eksploracją jest to, że każdy kod zawierający pętle lub rekursja może mieć nieskończoną liczbę ścieżek wykonywania, dlatego funkcja IntelliTest musi być ograniczona podczas generowania danych wejściowych.

Dwa ustawienia MaxRuns i MaxRunsWithUniquePaths są powiązane w następujący sposób:

  • Narzędzie IntelliTest wywoła sparametryzowaną metodę testową do maksymalnych czasów z różnymi danymi wejściowymi testu.
  • Jeśli wykonany kod jest deterministyczny, narzędzie IntelliTest za każdym razem zajmie inną ścieżkę wykonywania. Jednak w niektórych warunkach wykonany kod może podążać za ścieżką wykonywania, która została już podjęta wcześniej, z różnymi danymi wejściowymi.
  • Funkcja IntelliTest zlicza liczbę odnalezionych unikatowych ścieżek wykonywania; ta liczba jest ograniczona przez opcję MaxRunsWithUniquePaths .

MaxExceptions

Maksymalna liczba wyjątków, które można napotkać przed zatrzymaniem eksploracji.

Motywacją związaną z tą eksploracją jest zatrzymanie eksploracji kodu zawierającego wiele usterek. Jeśli narzędzie IntelliTest znajdzie zbyt wiele błędów w kodzie, eksploracja zostanie zatrzymana.

TestExcludePathBoundsExceeded

Ścieżki wykonywania przekraczające skonfigurowane ograniczenia ścieżki MaxCalls, MaxBranches, MaxStack i MaxConditions są ignorowane.

Motywacją związaną z tą eksploracją jest radzenie sobie (najprawdopodobniej) z testami niepowodującym zakończenia. Gdy narzędzie IntelliTest osiągnie granicę eksploracji, taką jak MaxCalls, MaxBranches, MaxStack lub MaxConditions, zakłada, że test nie będzie procesem zakończenia i nie spowoduje późniejszego przepełnienia stosu. Takie przypadki testowe mogą stanowić problemy z innymi platformami testowymi, a ten atrybut umożliwia zapobieganie emitowaniu przypadków testowych przez narzędzie IntelliTest w przypadku potencjalnie niepowodujących zakończenia procesów lub przypadków testowych, które spowodują przepełnienie stosu.

TestEmissionFilter

Wskazuje typy testów, które powinny emitować intelliTest. Możliwe wartości to:

  • Wszystkie — emituj testy dla wszystkich elementów, w tym naruszeń założeń.
  • FailuresAndIncreasedBranchHits (wartość domyślna) — emituj testy dla wszystkich unikatowych awarii i za każdym razem, gdy przypadek testowy zwiększa pokrycie kontrolowane przez TestEmissionBranchHits.
  • FailuresAndUniquePaths — emituj testy dla wszystkich niepowodzeń odnajdowania narzędzia IntelliTest, a także dla każdego danych wejściowych testu, które powodują unikatową ścieżkę wykonywania.
  • Błędy — emituj tylko testy pod kątem błędów.

TestEmissionBranchHits

W zależności od bieżącego ustawienia TestEmissionFilter funkcja IntelliTest emituje nowe przypadki testowe, gdy obejmują gałąź w programie, który nie został omówiony wcześniej.

Ustawienie TestEmissionBranchHits określa, czy narzędzie IntelliTest powinno po prostu rozważyć, czy gałąź została w ogóle objęta (TestEmissionBranchHits=1), jeśli test obejmował go raz lub dwa razy (TestEmissionBranchHits=2) itd.

TestEmissionBranchHits=1 utworzy bardzo mały pakiet testowy, który będzie obejmował wszystkie gałęzie, do których może dotrzeć intelliTest. W szczególności ten zestaw testów będzie również obejmować wszystkie podstawowe bloki i instrukcje, które zostały osiągnięte.

Domyślnie dla tej opcji jest TestEmissionBranchHits=2, który generuje bardziej ekspresyjny zestaw testów, który jest również lepiej dostosowany do wykrywania przyszłych błędów regresji.

Chcesz przesłać opinię?

Opublikuj swoje pomysły i sugestie funkcji w społeczności deweloperów.