This book presents a balanced view of the issues, concepts, models, techniques and tools found in requirements engineering and practice. It considers requirements as a combination of three concurrent and interacting processes: eliciting knowledge related to a problem domain, ensuring the validity of such knowledge and specifying the problem in a formal way.