This course covers the theory, tools and techniques of problem analysis for software systems development, covering both information systems and control systems. Topics include: requirements specification, object-oriented analysis, business process modeling, and analysis of non-functional requirements. The course will discuss concepts for systematically establishing, defining and managing the requirements for a large, complex, changing and software-intensive systems, from technical, organizational and management perspectives. The course will consider the past, present and future paradigms and methodologies in requirements engineering. The course will cover informal, semi-formal and formal approaches, while striking a balance between theory and practice. The course will involve building models of both requirements engineering process and requirements engineering product, concerning both functional and non-functional goals/requirements/specifications, using a systematic decision-making process.