Understanding Boundary Value Analysis in Software Testing: A Tutorial