Functional and Nonfunctional Requirements: Specification and Types