Zgodnie ze słownikiem ISTQB (tłumaczonym przez SJSI) funkcjonalność to zdolność oprogramowania do zapewnienia funkcji odpowiadających zdefiniowanym i przewidywanym potrzebom, gdy oprogramowanie jest używane w określonych warunkach.
Testowanie funkcjonalne pojawia się zazwyczaj w ujęciu czarnoskrzynkowym. Słownik definiuje projektowanie funkcjonalnych przypadków testowych jako procedurę bez zaglądania w wewnętrzną strukturę oprogramowania, nasza analiza zatrzymuje się więc na dostępnych dla oprogramowania interfejsach np. API lub GUI. Tester nie ma dostępu do informacji na temat wewnętrznej budowy oprogramowania, które testuje. Dotyczy to zarówno kodu, jak i architektury rozwiązania. Podobnie określa to Wikipedia, gdzie osoba testująca program nie opiera danych testowych na budowie wewnętrznej programu, lecz na założeniach funkcjonalnych, jakie program powinien spełniać zgodnie z dokumentacją. W przypadku braku implementacji funkcji wymaganych w założeniach, testy funkcjonalne wykryją błąd. Zakres badanych wartości jest zwykle inny niż w przypadku testów strukturalnych (białoskrzynkowych).
Z drugiej strony testowanie czarnoskrzynkowe zdefiniowane jest jako zarówno testowanie funkcjonalne, jak i niefunkcjonalne. Możemy więc założyć, że w rozumieniu ISTQB testowanie czarnej skrzynki jest pojęciem zawierającym testowanie funkcjonalności.
Testowanie funkcjonalne występuje jednak na wszystkich poziomach testów, od poziomu testów modułowych po testy akceptacyjne. Największy nacisk na testowanie funkcjonalne stawia się przy testowaniu systemowym. Wiemy natomiast, że funkcja jest również elementem modułu. Jeśli traktujemy moduł jak czarną skrzynkę, to interesuje nas jedynie informacja wejściowa i wyjściowa do i z modułu. Nie należy łączyć pojęcia funkcjonalności i uzyskania pokrycia dla wywołań funkcji, które wymaga od nas wiedzy programistycznej.
Podsumowując, testy funkcjonalne w ISTQB są wykonywane na wszystkich poziomach testów i dla testów potwierdzających (gdy retest dotyczy testowanie funkcji). Choć czasami schodzi się z testami funkcjonalnymi do pojedynczej funkcji w kodzie, to wykonujemy je bez zagłębiania się w samą strukturę kodu. Interesują nas jedynie przekazywane do funkcji parametry oraz zwracana przez nią wartość.