Curriculum
| Apply Now | Apply Now by selecting "Electrical and Computer Engineering-Software Engineering-Option III" in the drop-down menu. |
Program of Work
Fall Semester Enrollment
Fall 1 - 2 courses
Spring 1 - 2 courses
Summer 1 - 1 course
Fall 2 - 2 courses
Spring 2 - 2 courses
Summer 2 - Master's Report OR 1 course
Spring Semester Enrollment
Spring 1 - 2 courses
Summer 1 - 1 course
Fall 1 - 2 courses
Spring 2 - 2 courses
Summer 2 - 1 course
Fall 2 - 2 courses, OR 1 course & Master's Report
Courses cover a wide range of software topics on a rotating basis each semester to offer students the flexibility to customize their program of work to their educational needs.
Course Catalog
ECE 382V Cloud Native Application Development
This course explores the principles, practices and technologies behind cloud-native application development and DevOps. Students will learn how to design, build, deploy and manage scalable, resilient and secure applications using cloud-native patterns, microservices, containers and automation tools. Learning outcomes include:
- Define cloud-native architecture and its advantages over traditional systems.
- Apply the Twelve-Factor App methodology to design scalable and maintainable applications.
- Implement disposable infrastructure using Infrastructure as Code (IaC).
- Design and deploy microservices using containers and orchestration platforms.
- Set up CI/CD pipelines for automated deployment and testing.
- Integrate observability, logging, and monitoring into cloud-native systems.
- Evaluate migration strategies to transition legacy applications to cloud-native platforms.
- Understand and apply cloud-native security principles.
- Utilize service meshes, distributed tracing, and polyglot cloud strategies.
- Collaborate effectively in full-stack, self-sufficient teams.
ECE 381V: Statistical Machine Learning
Introduction to the theoretical and conceptual underpinnings of machine learning, and the practical algorithms that emerge from those foundations. Topics include the probably approximately correct (PAC) learning framework; generalization and the Vapnik- Chervonenkis dimension; the bias-variance tradeoff; linear classification and regression; logistic regression and gradient descent; overfitting and regularization; boosting; support vector machines and kernel methods; decision trees; neural networks; clustering; dimensionality reduction; feature selection/generation; generative models; and variational Bayesian methods.
ECE 382V: Algorithmic Foundations for Software Systems
This course studies combinatorial algorithms. Students will learn proof-based reasoning about algorithms; asymptotic complexity analysis; algorithm design principles; common types of algorithms and their applications; and the nature, impact, and handling of intractability. Please see the separate Course Plan for the tentative schedule of topics covered in the course. The principle focus of the lectures will be theoretical, in the style of the Algorithm Design text listed below. There will also be a number of programming assignments, in which you will be required to implement algorithms.
ECE 382C Software Architectures
The course will teach students about software architectures, architectural model specification techniques and analysis techniques offered by the research community as well as those architectures, model specifications and analytical methods commonly used in industry.
ECE 382C.16 Distributed Information System Security
Intended to acquaint the student with the analysis and engineering techniques employed in securing today's networked information system environment. Emphasis is placed on examination of practical security threats, exposures in distributed systems and the technology that is being applied and developed as countermeasures.
ECE 382C.3 Verification and Validation
This course covers various traditional and state-of-the-art techniques for software validation, a process that includes reasoning about (the correctness of) programs and testing programs. The course content will include both techniques for dynamic analysis, such as glass-box and black-box testing, equivalence partitioning, test strategy and automation, regression testing and debugging, and techniques for static analysis, such as symbolic execution, and also techniques for software model checking including those that employ artificial intelligence-based heuristics.
ECE 382C Mobile Computing
As mobile computing devices like laptops, PDAs, cellular phones, and even miniature sensors become increasingly pervasive, the demand for applications for this novel environment escalates. This course explores the effects of mobile computing on software design and development. The approach taken uses current research projects in the field of mobile computing to highlight the key aspects that complicate software engineering. We will focus on these concerns in the context of application development.
ECE 382V Parallel Algorithms
This course will focus on parallel algorithms for various applications. The course will expose students to theoretical as well as practical aspects of designing parallel software systems. It assumes that the student has undergraduate level knowledge of programming, data structures, operating systems, computer architecture, and algorithms. Following topics will be covered in the course:
- Introduction Parallel Models, PRAM Machines, Work-Time presentation
- Parallel Complexity: Class NC, P-Completeness, Class RNC
- Parallel Basic Algorithms: Reduce, Parallel Prefix Scan, Pointer Jumping, Partitioning, Cascading
- Parallel Sorting Algorithms: Odd-Even Sort, Bitonic Sort, Parallel Mergesort
- Parallel Graph Algorithms: Lattice Linear Predicates, Shortest Path Algorithms, Weighted Matching, Connected Components
- Parallel Tree Algorithms: Euler Tour Technique, Least Common Ancestor problem
- Parallel Dynamic Programming Algorithms: the longest subsequence problem, the optimal binary search tree problem, and the knapsack problem
- Maximal Independent Set problem: Luby's Algorithm
- Parallel Matrix Algorithms: Matrix multiplication, Matrix inversion
ECE 382V Systems Programming
This is a computer systems course with an emphasis in software. The course will start with looking at tools like compliers, linkers, loaders, and debuggers that an operating system provides and how they work. We will explore the POSIX System-Call API that all modern operating systems implement with focus on processes, threads, i/o and inter-process-communication. The second part of the class is on the design and implementation of an operating system with focus on process, memory virtualization, and concurrency.
ECE 382V Advanced Programming Tools
Programming is difficult - some of the problem developers face include.
- How can a project be structured so that developers can work on it concurrently?
- How can the building of a project be automated?
- How can a program be written to make it portable?
- How can a program be prototyped efficiently?
- How can a program be tested and debugged efficiently?
- How can the performance of a program be increased?
Using the right tools can solve these problems. Examples include tools for version control, documentation, program building and configuration, automatic testing, program analysis, and integrated development.
Our approach will be to introduce a specific problem, show how a tool can solve the problem, and then develop the technical principles underlying the tool. We will have written homework problems as well as coding exercises for each concept. The class will have a major design project that will begin at the start of the term. Use of the tools will be a required part of the project. We will use open-source tools to illustrate these concepts. The specific tool stack is described in the lectures section of this document. I selected these tools based on my experience at Google; they also power many state-of-the-art commercial projects.
ECE 382V Data Engineering
Course Description – Data Engineering is concerned with the role of data in the design, development, management, and utilization of complex computing/information systems. Issues of interest include database design; meta knowledge of the data and its processing; languages to describe data, define access, and manipulate databases; strategies and mechanisms for data access, security, and integrity control.
ECE 382V Software Testing
This course first introduces the basics of software testing theory and practice, and then presents some recently developed techniques for systematically finding bugs in programs and improving their reliability. Learning the techniques and tools presented in this course is likely to significantly increase the students’ productivity as software developers and testers, and improve the quality of the code they develop.
ECE 382V Scalable Machine Learning
This course focuses on applied aspects of machine learning with a specific focus on resource-optimized deployments of such algorithms in both cloud and edge environments. In real ML deployments, resources and time per query and for training are constrained. The course provides in-depth discussion of challenges from algorithmic and system implementation perspectives. The course focuses on the compute-heavy deep neural network (DNN) models of machine learning, such as convolutional neural nets, recurrent neural nets, recommender systems, and attention mechanisms. The class will involve a significant hands-on component in Python and Pytorch.
ECE 380L Data Mining
Basic concepts of data mining, in parallel with a practical track involving hands-on experience with industrial strength software and a term project will be covered.
ECE 382N Communication Networks: Tech/Arch/Protocol
This is an introductory course in Computer Networking. It covers all basic components of modern networks, including: link level technologies such as Ethernet, token rings, and wireless Ethernet; switching technologies such as bridges and ATM; internetworking including IP; the transport layer, including TCP and RPC; and congestion control. Time permitting, we will also consider security, quality of service, high-performance networks, and/or multimedia. Although IP and TCP are primary examples used in the course, it is NOT a course on TCP/IP.
ECE 382N.11 Distributed Systems
This course will expose students to the theoretical and practical aspects of designing distributed systems such as: Datagram Sockets, TCP sockets, Java RMI, Map Reduce Abstraction, Models of Distributed Computation, Logical clocks, vector clocks, Resource Allocation, Drinking Philosophers, Global Property Evaluation, Snapshots, Unstable properties, Ordering of Messages, Elections, Spanning Trees, Synchronizers, Consensus, Byzantine Agreement, and Self-stabilizing algorithms.
ECE 382N.4 Advanced Embedded Microcontroller Systems
Hardware and software design of microcontroller systems; applications, including communication systems; object-oriented and operating systems approaches to interfacing and resource management.
ECE 382 Algorithmic Foundations for Software Systems
We will begin by reviewing foundations of discrete mathematics. We will then study measuring program performance using the big-O notation. Following this, we will study fundamental data structures and their associated algorithms; specifically, we will cover lists, arrays, queues, stacks, hash tables, sets, binary trees, and graphs. We will then focus on general algorithm design principles, such as greedy approaches and dynamic programming. Our last topic will be matrix algorithms. The principle focus of the lectures will be on theoretical aspects, in the style of the CLRS Algorithms text listed below. There will also be programming assignments that will require implementing and testing algorithms. In addition, there will be a team project that either evaluates some textbook algorithm(s) in real-world settings, or explores how to specialize and enhance some textbook algorithm(s) under specific conditions.
ECE 381V Introduction to Optimization
This course will serve as an introduction to modeling, applications and algorithms of discrete and continuous optimization. The students will learn how to model the real world within the paradigms of linear programming, mixed integer linear programming, and more general convex optimization. We will emphasize interesting applications where these classes have had impact in industry, including applications in data mining and machine learning (no prior knowledge of Machine Learning is required).
ECE 379K Engineering Program Analysis
Dynamic analysis is commonly used to detect errors in software, including memory errors, concurrency errors (e.g., data races), performance issues, etc. Although valuable, dynamic analysis can be costly because the program execution needs to be (continuously) monitored to collect necessary data for the analysis. Additionally, naively engineered dynamic analysis can interfere with the program being analyzed, which can impact the conclusions of the analysis. The main goal for this course is to provide motivation for various dynamic analysis techniques, introduce popular tools that are frequently used to implement an efficient and effective dynamic analysis, and provide hands-on experience in developing dynamic analysis techniques.
ECE 382V: Programming Paradigms
There are hundreds of programming languages in use today, and many introduce distinct paradigms and features that shape how developers think about and write software. This course studies several such languages--Bash, Smalltalk, OCaml, Go, Rust, SQL, Cypher, and CSP--with an emphasis on the ideas behind their design rather than on syntax. We look at how language paradigms influence the way developers organize code, express computations, and reason about correctness. We also examine how these differences appear in real software engineering tasks, including how code is tested in each setting. The goal is to give students a solid understanding of multiple ways of thinking about programming, which is increasingly important as modern projects rely on multiple languages and engineers move between them regularly.
ECE 398R Master’s Report
Completion of report in the last semester enrolled in the program to fulfill the requirement for the master's degree. Offered on the credit/no credit basis only. Prerequisite: Graduate standing in electrical engineering and consent of the graduate adviser.
Master’s Report/Deadlines
Master's Report
Software Engineering graduate students can complete 10 courses to attain their degree, or 9 courses and a Master's Report. For more information, please review the following:
- Report Deadlines - This document lists all of the important deadlines students will need to meet in order to graduate (graduation application deadline, project dates): Dates & Deadlines
- Quick Reference Sheet - This document has links to the graduation application, formatting templates, formatting guidelines, and other important forms: Quick Reference Sheet (PDF)
- Choosing Committee Members - Information on how to select a supervisor and reader for the report/thesis committee: Quick Reference Sheet (PDF)
Students who choose to do a report must seek approval of their faculty supervisor on the topic one semester in advance.