wtorek, 22 października 2013

Walidacja czy weryfikacja?

W inżynierii oprogramowania w różnych kontekstach pojawiają się pojęcia walidacji i weryfikacji. Często te pojęcia wymieniane są razem, a przez to znaczenie każdego z tych słów bywa niejasne i różnie interpretowane. W języku angielskim istnieje nawet odpowiedni akronim dla nich: V&V (verification and validation).

Czy zastanawialiście się na przykład nad tym:
  • Czy czynność polegająca na sprawdzeniu, czy wymagania funkcjonalne sformułowane przez analityka są zgodne z założonymi celami przedsięwzięcia, to - walidacja czy weryfikacja wymagań?
  • Czy sprawdzenie zgodności kodu oprogramowania z przyjętymi standardami (np. konwencja nazewnictwa klas Javy), to - walidacja, czy weryfikacja kodu?
  • Czy sprawdzenie zgodności komunikatu XML z XSD, to - walidacja, czy weryfikacja?
  • Czy testy funkcjonalne lub niefunkcjonalne wykonywane przez testera, to - walidacja, czy weryfikacja oprogramowania?

Polskojęzyczne definicje

W słowniku języka polskiego natrafiamy na następujące definicje tych pojęć:
Walidacja - ogół czynności mających na celu zbadanie odpowiedniości, trafności lub dokładności czegoś
Weryfikacja - sprawdzenie prawdziwości, przydatności lub prawidłowości czegoś
Pojęcia te mają zastosowanie w wielu dziedzinach życia. A jak należałoby je rozumieć w informatyce? Polskojęzyczna Wikipedia definiuje je następująco:
Walidacja – w naukach technicznych i informatyce działanie mające na celu potwierdzenie w sposób udokumentowany i zgodny z założeniami, że procedury, procesy, urządzenia, materiały, czynności i systemy rzeczywiście prowadzą do zaplanowanych wyników.
Weryfikacja – sprawdzenie, działanie zmierzające do rozstrzygnięcia prawdziwości danego zdania.
Wikipedia zatem daje nam więcej informacji na temat walidacji, natomiast nie rozwija dalej pojęcia weryfikacji. Możliwe jest długie debatowanie nad znaczeniem przytoczonych wyżej definicji.

Anglojęzyczne definicje

Angielska edycja Wikipedii zawiera bardziej rozbudowany opis tych pojęć w odniesieniu do inżynierii oprogramowania. Spójrzmy, w jaki sposób rozróżniono tam walidację od weryfikacji.
Verification and validation are not the same thing, although they are often confused. Boehm succinctly expressed the difference between them:
  • Validation: Are we building the right product?
  • Verification: Are we building the product right?
[...] 
In other words, validation ensures that the product actually meets the user's needs, and that the specifications were correct in the first place, while verification is ensuring that the product has been built according to the requirements and design specifications. Validation ensures that "you built the right thing". Verification ensures that "you built it right". Validation confirms that the product, as provided, will fulfill its intended use.
Na podstawie powyższych opisów, które w Wikipedii opatrzone są wieloma przypisami naukowymi można by uznać, że znaleźliśmy już odpowiedź na pytanie, czym jest walidacja, a czym weryfikacja.
W opisie pojawiają się jednak pojęcia takie, jak "requirements" i "design specifications". Spróbujmy zatem poszukać jeszcze jakichś źródeł informacji z dziedziny inżynierii wymagań.
W tej dziedzinie warto zajrzeć do "biblii" analityków biznesowych, jaką jest BABOK® (A Guide to the Business Analysis Body of Knowledge®). Na stronie 234 można znaleźć następujące definicje:
Validation - the process of checking a product to ensure that it satisfies its intended use and conforms to its requirements. Validation ensures that you built the correct solution.
Verification - the process of checking that a deliverable produced at a given stage of development satisfies the conditions or specifications of the previous stage. Verification ensures that you built the solution correctly. 

Wydaje mi się, że po zapoznaniu się z powyższymi źródłami można wyrobić sobie już opinię, że
istnieje czytelne rozróżnienie pojęć walidacji i weryfikacji:
  • Walidacja - pozwala stwierdzić, czy tworzony produkt jest właściwy, czyli zgodny potrzebami użytkowników (sądzę, że trafniejsze byłoby jednak sformułowanie: zgodny z potrzebami interesariuszy).
  • Weryfikacja - pozwala stwierdzić, czy produkt jest budowany we właściwy sposób.

Praktyczne znaczenie

Czy jednak w praktyce, zwłaszcza w realizowanych projektach, istotne jest rozróżnienie walidacji od weryfikacji? Sądzę, że tak.
Jeśli na przykład klient żąda od wykonawcy zapewnienia, że w odniesieniu do budowanego rozwiązania zapewniono na odpowiednim poziomie procesy walidacji i weryfikacji, to bez jasnego rozróżnienia tych procesów może dojść do nieporozumienia.
Myślę, najbardziej czytelny byłby przykład z budownictwa. Wyobraźmy sobie skrajny przypadek dotyczący projektu budowy mostu. Wykonawca może udowadniać, że bardzo rygorystycznie przestrzega wszelkich norm jakościowych, zastosowane materiały spełniają najwyższe normy, a prace budowlane są prowadzone z najwyższą staranności oraz, że są zgodne z ogólnie przyjętymi standardami i dobrymi praktykami. Jednakże, jeśli po zakończeniu projektu okaże się, że most został wybudowany wzdłuż rzeki, a nie w poprzek - oznacza to, że proces weryfikacji był prawidłowy, ale zabrakło walidacji.
W inżynierii oprogramowania również zdarzają się doskonałe projekty, w których stosowane są na przykład zaawansowane narzędzia do weryfikacji zgodności kodu źródłowego ze standardami lub narzędzia do wielostronnego testowania tworzonego oprogramowania. Jednak, gdy dochodzi do odbioru produktu - nierzadko okazuje się, że takiego produktu nie da się używać, bo na przykład kolejność wprowadzania danych nie odpowiada procesowi biznesowemu w organizacji lub zapomniano, że nie zawsze rejestrowana osoba posiada numer PESEL itp.

Właściwe rozróżnienie procesów walidacji i weryfikacji pozwala przyłożyć do nich odpowiednie wagi. Jest to szczególnie istotne, gdy pracujemy pod presją czasu.
Cóż z tego, że zbudujemy produkt we właściwy sposób, jeśli produkt ten trafi do kosza?


1 komentarz:

  1. Bardzo dziękuje za świetny artykuł. Z samych definicji człowiek tak dobrze nie zrozumie, przykład zawsze pomaga. Pozdrawiam

    OdpowiedzUsuń