SE 101 - Introduction to Methods of Software Engineering
An introduction to some of the basic methods and principles used by software engineers, including fundamentals of technical communication, measurement, analysis, and design. Some aspects of the software engineering profession, including standards, safety and intellectual property.

CS 246 - Software Abstraction and Specification
Systematic methods for designing, coding, testing, and documenting medium-sized programs. Major topics include formal specification, abstraction, modularity and reusability. Students will become strong apprentice programmers able to write a clear specification for a problem, read a specification and design the software to implement it, use appropriate data structures in a program, write reusable code and reuse existing code when possible, debug a program, and adequately test a program.

CS 247 - Software Engineering Principles
Systematic methods for designing, coding, testing, and documenting medium-sized programs. Major topics include abstraction, modularity, software modeling, object-oriented programming and design, generic programming, testing and debugging.

SE463/CS445 - Software Requirements and Specification
Introduces students to the requirements definition phase of software development; models, notations, and processes for software requirements, identification, representation, analysis, and validation. Cost estimation from early documents and specifications.

CS 745 - Computer Aided Verification (grad course)
This course introduces the theory and practice of formal methods for the design and analysis of software systems. The emphasis is on models of software, algorithms for analyzing models, and heuristics for coping with the algorithm's high computational complexity.

CS 846 - Model Based Software Engineering (grad course)
This course looks at the state of the art of Model-based software engineering (MBSE). MBSE is an approach to software development in which software models play a primary and indispensible role. It allows developers to work and reason about software requirements, design, and correctness at higher levels of abstraction, and to generate automatically implementations, deployments, and other artifacts.

PD 10 - Professional Responsibility in Computing (short course)
This course considers many of the legal and ethical issues that arise in the development of software and digital-content products or services that are to be sold to the public. Course topics include laws that impose obligations on products or producers (e.g., privacy laws, accessibility laws, intellectual-property laws, regulated industries); contracts (e.g., licenses, warranties, privacy policies); gender diversity and inclusivity; and ethical responsibilities to employers, clients, the users of products, and to society as a whole.