---
tags: "Testowanie oprogramowania"
---
## Bartłomiej Salachna, Krystian Jasionek
# Zestaw 3
## Zadanie 1
## Zadanie 2
### CCCC




### Codacy


## Zadanie 3

* **MVG** (McCabe's Cyclomatic Complexity) -- liczba charakteryzująca funkcję lub metodę, opisująca jej złożoność. Oblicza się ją, mając do dyspozycji graf przebiegu programu, ze wzoru
$$v(G)=e-n+2$$
gdzie $e$ to liczba krawędzi grafu, a $n$ to liczba wierzchołków. Można też skorzystać z prostszego wzoru
$$v(G)=d+1$$
gdzie $d$ to liczba węzłów decyzjnych w programie (w którym podejmowana jest decyzja tak/nie). Wystarczy wtedy zliczyć liczbę wystąpień słów kluczowych, takich jak `if`, `while`,`for` lub `case`. Im niższa wartość MVG tym prostsza do zrozumienia jest dana funkcja. Wartości powyżej $20$ wskazują na skomplikowany, podatny na błędy kod, który należy przeprojektować.
* **DIT** (depth of inheritance tree) -- liczba kolejnych klas, po których dziedziczy dana klasa (w przypadku dziedziczenia wielokrotnego to obliczana jest najdłuższa ścieżka od korzenia). Interpretacja DIT może zależeć od kontekstu. W niektórych przypadkach duża wartość DIT jest porządana, ponieważ pozwala na powtórne użycie tego samego kodu i uniknięcie redundancji, jednak może ona też prowadzić do przeładowania klasy odziedziczonymi metodami, co znacznie zmniejsza wygodę jej użycia i zwiększa podatność na błędy. Zgodnie z [ndepend.com](https://www.ndepend.com/docs/code-metrics) zalecane jest ograniczanie DIT do ok. $6$.
* **CBO** (coupling between objects) -- liczba określająca zależność miedzy pewną klasą a innymi klasami, nie będącymi jej przodkami ani potomkami. Jej wartość obliczana jest przez zliczenie liczby odwołań do innych klas w obrębie metod i atrybutów danej klasy (nie wlicza się odwołań do typów prymitywnych, np. `int`). Wysoka wartość CBO wskazuje na zbyt duże uzależnienie danej klasy od innych i konieczność przeprojektowania danego fragmentu programu.
* **Fan-out** (efferent coupling) -- mierzy zależności wychodzące z danej klasy, to znaczy jej wartość to liczba klas, od których dany obiekt jest zależny. Wskazuje ona, które klasy są najbardziej zależne od innych i przez to narażone na niestabilność i błędy przy wprowadzaniu zmian w innych fragmentach kodu. Rekomendowane wartośći tej metryki nie przekraczają $20$, wyższe powodują znaczne problemy z rozwojem i utrzymaniem oprogramowania. Przykład programu o wysokiej metryce fan-out może stanowić interfejs użytkownika, który musi być ściśle powiązany z logiką systemu, np. odczytywaniem i analizą wejścia użytkownika, itd. Odwrotnością tej metryki jest **fan-in** (afferent coupling), będąca liczbą klas zależnych od badanej klasy. Wysoka fan-in sugeruje wysoką stabilność, wymuszając ograniczenie zmian i dokładne testowanie, jednak zmniejsza elastyczność pracy programisty.