This course covers basic software engineering elements and processes. It focuses on techniques used throughout the software engineering process; the software lifecycle and modeling techniques for requirements specification and software design are emphasized. Both traditional and object-oriented approaches are addressed. This class covers software engineering concepts and will tie them together strategically to help ensure that software is engineered with high quality in addition to being safe, secure, reliable, and resilient. Topics covered will include software safety, security, reliability, availability, and resilience; software risk management; software quality through verification, validation, and testing; fault tolerance; concurrency; and advanced software modeling. The class also covers basic systems engineering concepts to ensure foundational understanding of the full software development process within a project as well as the managerial aspect of the software-based project. The class demonstrates the vital relationship between software engineering and scientific, technical, and other engineering disciplines.