Non-Functional Requirements in Software Engineering by Lawrence Chung & Brian Nixon