This course covers the fundamentals of constructing robust and usable software systems. The principles of requirements engineering and analysis are discussed thoroughly. This course provides an introduction to quality assurance, software testing and project management. Students will learn valuable skills necessary for software engineering practices, including creating project plans, soliciting requirements, creating design models, and practicing software validation and verification activities. In addition, students will gain hands-on experience in designing a software development process to meet desired needs and constraints.