Wątek przeniesiony 2020-07-06 03:06 z C# i .NET przez somekind.

Organizacja testów

Odpowiedz Nowy wątek
tk
2020-06-30 15:15
tk

Rejestracja: 8 lat temu

Ostatnio: 2 tygodnie temu

0

Witajcie,

Piszę sobie pewną aplikację w C# i .NET Core i zastanawiam się jak podejść do tworzenia projektów zawierających testy. W procesie wytwarzania oprogramowania chciałbym wykorzystać w miarę możliwości podejście Domain-Driven Design.

Z artykułów umieszczonych w Internecie wynika, że projekt wytwarzany metodą DDD powinien być podzielony na warstwy - powinien posiadać warstwę aplikacji, domeny, infrastruktury oraz prezentacji / interfejsu użytkownika. Ponadto z tego co udało mi się dowiedzieć poszczególne warstwy powinno się testować w sposób odpowiedni dla danej warstwy. Dla przykładu warstwę domeny należy testować jednostkowo a np. warstwę infrastruktury integracyjnie.

Utworzyłem więc solucję a w niej kilka projektów (na chwilę obecną mam jeden projekt dla jednej warstwy, np. mam projekt o nazwie domain dla warstwy domeny). Teraz chciałbym stworzyć projekty, w których pisałbym testy. Ponieważ warstwy powinno się testować w sposób odpowiedni dla danej warstwy sensowne jest utworzenie projektów według typu testów czyli projektów o nazwach zbliżonych do tych: UnitTests, IntegrationTests, FunctionalTests. Innym podejściem jest organizacja ze względu na testowany projekt. W takiej sytuacji można utworzyć projekty o nazwach zbliżonych do tych: DomainTests, ApplicationTests, InfrastructureTests.

Który sposób organizacji testów jest z Waszego punktu widzenia lepszy i jakie są zalety i wady obu rozwiązań? Lepiej stosować organizację ze względu na typ testów czy organizację ze względu na testowany projekt?

Pozostało 580 znaków

2020-07-01 00:13

Rejestracja: 3 lata temu

Ostatnio: 12 godzin temu

1

Typ testów, jak Zrobisz zmianę, to możesz odpalić wszystkie unit testy, na przykład i zobaczyć czy nie ma regresji.


Pozostało 580 znaków

2020-07-01 01:18
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Wrocław

1

Ja zazwyczaj mam NazwaProjektu.Tests dla każdego projektu w solucji, bo w każdym projekcie jest coś, co warto przetestować jednostkowo. Do tego jeden projekt NazwaApi.IntegrationTests, no bo na ogół tylko API umiem przetestować integracyjnie.
Przy czym ja nie widzę różnicy między testami integracyjnymi a funkcjonalnymi. A raczej uważam, że wszystkie testy powinny być funkcjonalne, bo jak test jest niefunkcjonalny, to po co on komu?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2020-07-01 03:00

Rejestracja: 13 lat temu

Ostatnio: 30 minut temu

1
somekind napisał(a):

Przy czym ja nie widzę różnicy między testami integracyjnymi a funkcjonalnymi. A raczej uważam, że wszystkie testy powinny być funkcjonalne, bo jak test jest niefunkcjonalny, to po co on komu?

Do testowania wymagań niefunkcjonalnych.

Pozostało 580 znaków

2020-07-01 03:08
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Wrocław

0

Wymagania mogą być funkcjonalne albo pozafunkcjonalne, jak coś jest niefunkcjonalne, to nie ma za bardzo sensu, więc tym bardziej nie powinno się tego wymagać.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2020-07-01 03:10

Rejestracja: 13 lat temu

Ostatnio: 30 minut temu

0

Nie wnikam w nazewnictwo, aczkolwiek na studiach miałem wymagania niefunkcjonalne i google zna to określenie bardzo dobrze. Edycja: wiki też: https://en.wikipedia.org/wiki/Non-functional_requirement

Testowanie tych wymagań jak najbardziej ma sens, wszelkiej maści load testy pod to podchodzą, a z mniej automatycznych na przykład badania "intuicyjności" interfejsu. Na pewno mówimy o tym samym (bo nie wydaje mi się, żebyś nie stosował testów obciążeniowych)?

edytowany 1x, ostatnio: Afish, 2020-07-01 03:11

Pozostało 580 znaków

2020-07-01 03:42
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Wrocław

0
Afish napisał(a):

Nie wnikam w nazewnictwo, aczkolwiek na studiach miałem wymagania niefunkcjonalne i google zna to określenie bardzo dobrze. Edycja: wiki też: https://en.wikipedia.org/wiki/Non-functional_requirement

Ludzie mówią powszechnie mówią też "włanczać", "w każdym bąć razie" czy "dedykowane miejsce parkingowe", ale to nie znaczy, że tak jest dobrze.
Wymagania niezwiązane z funkcjonalnością to wymagania pozafunkcjonalne, tak się właśnie angielskie "non-functional" powinno tłumaczyć, bo gdy tłumaczymy jako "niefunkcjonalne" to na pewno nie jest to, co mamy wówczas na myśli, gdyż "niefukcjonalny" to nieodpowiadający potrzebom. Wymaganie nieodpowiadania potrzebom brzmi jak jakiś dziwny paradoks.
To podobny błąd jak tłumaczenie "relationship" jako "relacja".

Testowanie tych wymagań jak najbardziej ma sens, wszelkiej maści load testy pod to podchodzą, a z mniej automatycznych na przykład badania "intuicyjności" interfejsu. Na pewno mówimy o tym samym (bo nie wydaje mi się, żebyś nie stosował testów obciążeniowych)?

Ja nie przeczę, że istnieją wymagania pozafunkcjonalne, ani też nie przeczę, że ma sens ich testowanie. A testy obciążeniowe to sam w sobie inny, bardziej filozoficzny temat, jedne firmy je mają, innym wystarcza monitorowanie produkcji.

Ja po prostu nie czaję tego rozróżniania testów funkcjonalnych od integracyjnych. Mogą istnieć testy funkcjonalne, które nie są integracyjnymi? Po co właściwie takie rozróżnianie?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2020-07-01 03:42

Pozostało 580 znaków

2020-07-01 04:03

Rejestracja: 13 lat temu

Ostatnio: 30 minut temu

1
somekind napisał(a):

Wymagania niezwiązane z funkcjonalnością to wymagania pozafunkcjonalne, tak się właśnie angielskie "non-functional" powinno tłumaczyć, bo gdy tłumaczymy jako "niefunkcjonalne" to na pewno nie jest to, co mamy wówczas na myśli, gdyż "niefukcjonalny" to nieodpowiadający potrzebom. Wymaganie nieodpowiadania potrzebom brzmi jak jakiś dziwny paradoks.

Nie wnikam, polska Wikipedia używa obu terminów wymiennie w https://pl.wikipedia.org/wiki/Wymaganie_(inżynieria)
Co ciekawe, mój słownik podkreśla "pozafunkcjonalne" ale nie podkreśla "niefunkcjonalne" :P

Mogą istnieć testy funkcjonalne, które nie są integracyjnymi?

Jak najbardziej, gdy testowane jest coś niewymagającego integracji z niczym innym. Biblioteki do parsowania CSV, left-pady, potencjalnie jakieś mniej zaawansowane grepy czy awk (te nieumiejące czytać z pliku).

Po co właściwie takie rozróżnianie?

Nie wiem, w testowaniu nawet "unit test" nie jest dobrze zdefiniowany (jest przynajmniej kilka różnych definicji pochodzących z obozów XP, TDD czy innych), więc takie dodatkowe rozróżnienia tym bardziej wprowadzają zamęt.

Pozostało 580 znaków

2020-07-01 12:18
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Wrocław

0
Afish napisał(a):

Nie wnikam, polska Wikipedia używa obu terminów wymiennie w https://pl.wikipedia.org/wiki/Wymaganie_(inżynieria)
Co ciekawe, mój słownik podkreśla "pozafunkcjonalne" ale nie podkreśla "niefunkcjonalne" :P

No bo słowo "niefunkcjonalne" jest znane od dawna i występuje w powszechnym słowniku w oczywistym znaczeniu, natomiast pozafunkcjonalne to neologizm branżowy. W poważnej literaturze znajdzie się takie tłumaczenie, tam gdzie ktoś uprawia kalkowanie w stylu "adresowania problemów" pojawiają się i "wymagania niefunkcjonalne".
Wiem, że to Tobie do pracy niepotrzebne, mi właściwie również, no ale skoro już piszemy po polsku, to piszmy. :)

Jak najbardziej, gdy testowane jest coś niewymagającego integracji z niczym innym. Biblioteki do parsowania CSV, left-pady, potencjalnie jakieś mniej zaawansowane grepy czy awk (te nieumiejące czytać z pliku).

Jak dla mnie to wszystko, co wymieniłeś jest do przetestowania po prostu jednostkowo.

Nie wiem, w testowaniu nawet "unit test" nie jest dobrze zdefiniowany (jest przynajmniej kilka różnych definicji pochodzących z obozów XP, TDD czy innych), więc takie dodatkowe rozróżnienia tym bardziej wprowadzają zamęt.

No ja dzielę na jednostkowe - testujące jednostki, nie mające zależności do świata zewnętrznego i szybkie, oraz integracyjne, czyli wywoływanie aplikacji z zewnątrz i sprawdzanie, czy wynik jej działania znalazł się tam, gdzie powinien.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2020-07-01 15:42

Rejestracja: 13 lat temu

Ostatnio: 30 minut temu

1
[somekind napisał(a)]

No bo słowo "niefunkcjonalne" jest znane od dawna i występuje w powszechnym słowniku w oczywistym znaczeniu, natomiast pozafunkcjonalne to neologizm branżowy. W poważnej literaturze znajdzie się takie tłumaczenie, tam gdzie ktoś uprawia kalkowanie w stylu "adresowania problemów" pojawiają się i "wymagania niefunkcjonalne".

Okej, brzmi sensownie.

Jak dla mnie to wszystko, co wymieniłeś jest do przetestowania po prostu jednostkowo.

No tak, w tym wypadku test jednostkowy będzie testem funkcjonalnym.

No ja dzielę na jednostkowe - testujące jednostki, nie mające zależności do świata zewnętrznego

Tu bardziej tłumaczysz izolację niż jednostkę, to jest jeszcze jeden punkt sporny. Nie oceniam, nie wnikam, po prostu wiele osób definiuje jednostkę i izolację inaczej, więc i cała reszta piramidy testów może być zupełnie inna. Pewnie za kilka dekad branża dorobi się spójnego słownictwa.

Pozostało 580 znaków

2020-07-03 21:24
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Wrocław

0
Afish napisał(a):

No tak, w tym wypadku test jednostkowy będzie testem funkcjonalnym.

@Afish: dobrze, to zgodnie z Twoimi definicjami, jaki test jednostkowy nie byłby testem funkcjonalnym?
Pytam, bo na różnych obrazkach, to testy funkcjonalne bywają rysowane ze dwie warstwy wyżej niż jednostkowe, więc coś mi tu nie pasuje.

Tu bardziej tłumaczysz izolację niż jednostkę, to jest jeszcze jeden punkt sporny.

No teoretycznie można wytłumaczyć lepiej, ale definicja, że testy jednostkowy testuje jednostkę, ma tę zaletę, że jest krótka i prawdziwa. :)

Pewnie za kilka dekad branża dorobi się spójnego słownictwa.

No nie wiem, skoro przez 30 lat nie mogła, to może się nie udać. No chyba, że wreszcie przejdzie ta ustawa. ;)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0