Essential Software Testing: A Use-Case Approach