Czym się różni weryfikacja od walidacji i kontaminacja od konkatenacji?

11 maja 2022 | Szkolenia dla testerów

Problemem wielu samouków w IT jest to, że ich wiedza jest nierówna. Czasem posiadają bardzo głębokie rozumienie rzeczy złożonych, niedostępnych zwykłym śmiertelnikom - a jednocześnie - wywracają się na czymś, co jest oczywiste dla studentów pierwszego roku dowolnej dziedziny informatyki. I co gorsza - potem głupio o taką rzecz podstawową spytać. Do tego - czasem odpowiedź mocno zależy od kontekstu, co jeszcze komplikuje sprawę - bo zapytać - nie tylko wstyd, ale nie wiadomo do końca - jak.

Powyższe dwa - banalne pytania - są dobrym przykładem czegoś takiego.

Zadajmy więc pierwsze z nich uwzględniając kontekst a drugie - kontekstu nie uwzględniając, by pokazać do jakich nieporozumień to może prowadzić.

Czym więc na gruncie testowania aplikacji, w rozumieniu ISTQB, się różni weryfikacja od walidacji?

Weryfikacja - to sprawdzanie poprawności i dostarczanie obiektywnego dowodu, że produkt procesu wytwarzania oprogramowania spełnia zdefiniowane wymagania. Mówiąc po ludzku: czy produkt robi to, co miał robić.

Walidacja - to z kolei sprawdzanie poprawności i dostarczanie obiektywnego dowodu, że produkt procesu wytwarzania oprogramowania spełnia potrzeby i wymagania użytkownika. Czyli - znów po ludzku - czy produkt robi to, co użytkownik potrzebuje by robił.

Można prościej?

Można. Weryfikacja to sprawdzenie działania zgodnie ze specyfikacją. To nakłada na nas pewne warunki wstępne - przede wszystkim tą specyfikację - musimy mieć.

Walidacja to odpowiedz na pytanie, czy klient dostał produkt, który zamówił.

Wyniki tych procesów mogą być oczywiście ze sobą zupełnie niezgodne.

Przykładowo - jeśli stworzyliśmy świetny okręt podwodny w zgodzie z jego specyfikacją, to weryfikacja przebiegnie pomyślnie. Ale jeśli zamawiający oczekiwał helikoptera - to walidacja musi zakończyć się negatywnie.

Dlaczego napisałem, że tak istotny jest kontekst?

Bo jeśli spytamy o to samo nie w kontekście ISTQB i ogólnie testowania aplikacji - ale w kontekście danych - na przykład jakiegoś dewelopera czy architekta - uzyskamy zupełnie inne odpowiedzi.

A teraz drugie pytanie, czym różni się kontaminacja od konkatenacji?

Jeśli nie określimy kontekstu - to praktycznie nie sposób odpowiedzieć prawidłowo na to pytanie. Można owszem bardzo ogólnie powiedzieć, że konkatenacja to proces łączenia ze sobą, a kontaminacja to proces zabrudzania czegoś - ale niewiele to nam powie. Inną odpowiedź uzyskamy na gruncie programowania, testowania, a inną - a jakże - na gruncie nauk społecznych (przykładowo w metodologii badań nauk społecznych często pojawia się tak zwana kontaminacja kryterium - czyli sytuacja, w której znajomość wyników danej osoby w teście wpływa na ocenę jej wyniku zmiennej kryterialnej), matematyki, teorii języków formalnych, literatury, słowotwórstwa itp. (w literaturze konkatenacja to łańcuchowe sprzęganie wersów lub większych całości tekstu przez powtórzenia, kontaminacja w słowotwórstwie to tworzenie zbitek ze słów lub wyrażeń wykorzystując ich podobieństwo, część z nich prowadzi do powstania rozpowszechnionych błędów językowych).

Na gruncie IT konkatenacja jest najczęściej rozumiana jako konkatenacja wyrażeń - czyli łączenie ze sobą wyrażeń takich samych lub różnych typów - najczęściej są to wyrażenia tekstowe (lub rzutowane do tekstu) a ich wynikiem jest tekst / ciąg znaków. O kontaminacji - już dawno w tym kontekście nie słyszałem, ale mówiło się kiedyś o kontaminacji kodu i o kontaminacji licencyjnej - przykładowo, jeśli do tworzenia oprogramowania o licencji zamkniętej użyliśmy oprogramowania, którego licencja wymusza użycie go tylko w oprogramowaniu otwartym (open source) - to właśnie dokonaliśmy takiej licencyjnej kontaminacji.

No dobra - chyba wykazałem, że nie da się odpowiedzieć na to z pozoru banalne pytanie - nie zawężając kontekstu. A jeśli zawęzimy go do testowania? To się wtedy okaże proste. Konkatenacja jest rozumiana jako połączenie wyników testów podsystemu by uzyskać test systemu. Kontaminacja z kolei - czyli zabrudzenie - to efekt nieprawidłowego setupu lub teardownu testów.

Zobacz również