Black-Box Testing: Techniques for Functional Testing of Software and Systems