Software Engineering

Course Descriptions

EE 382C.11 Requirements Engineering
This course will address theoretical and practical methods for acquiring and modeling requirements for various systems stakeholders. Topics will include methods and techniques for managing the acquisition process among distributed team members and distributed stakeholders, eliciting and verifying requirements as a function of the type of stakeholder, the types of requirements, and system development maturity, managing the requirements artifacts, constructing model-based representations of requirements, synthesizing requirements for various stakeholders, and analyzing and evolving model-based requirements.

EE 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.

EE 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.

EE 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.

EE 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.

EE 382V Parallel Algorithms
This is an introductory graduate course in parallel algorithms. It assume undergraduate knowledge of sequential algorithms. The following topics will be covered in the course:

  • Basic Techniques: Reduce, Parallel Prefix Scan, Pointer Jumping, Partitioning, Cascading
  • Breaking Symmetry: Maximal Independent Set Problem
  • Sorting Algorithms: Odd-Even Sort, Bitonic Sort, Parallel Mergesort, Parallel Radix Sort
  • Randomization: Markov's inequality, Chernoff Bound
  • Parallel Graph Algorithms: BFS, Ear Decomposition, Spanning Tree, Shortest Path
  • Parallel Matrix Algorithms: Matrix multiplication, Matrix inversion
  • Miscellaneous: Parallel FFT, String Matching
  • Cuda: Implementing Parallel Algorithms on GPU using CUDA
  • MPI: Implementing Parallel Algorithms using MPI

EE 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.

EE 382V Formal Methods in Distributed Systems
This course gives an introduction to the use of formal methods within the software design process. Specifically, this class will cover the application of models to distributed and concurrent systems. Modern software systems are commonly highly distributed, and this added sophistication further complicates software design. The rigor offered by formal methods aims to make the process more precise.

EE 382V Advanced Programming Tools
Programming is difficult - some of the problem developers face include.

  1. How can a project be structured so that developers can work on it concurrently?
  2. How can the building of a project be automated?
  3. How can a program be written to make it portable?
  4. How can a program be prototyped efficiently?
  5. How can a program be tested and debugged efficiently?
  6. 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.

EE 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.

EE 382V Social Computing
This is an introductory course on social networks, markets and Internet computing. The emphasis of this course is on algorithms where multiple agents interact with each other. The following topics will be covered in the course: Matching Bipartite Matching, online matching, Hungarian algorithm, Auction-based algorithm Stable Matching: Optimal matching, enumerating all matchings, Kidney-Exchange Auctions: First-price, Second-Price Auctions, VCG Mechanisms Games Mixed strategies, Nash Equilibrium, Pareto Optimality, Social Optimality Voting: majority rules, positional voting, Arrow's Theorem Experts Algorithm: Multiplicative Updates Method P2P Computing: Consistent Hashing Streaming Algorithms: Sketches, Bloom Filter, Heavy Hitters Privacy and Authentication: Public Key Cryptography.

EE 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.

EE 382V Large-scale Machine Learning
Linear classifiers and logistic regression. Feedforward neural networks. Convolutional neural networks. Deep learning training by backpropagation. Interpretability of deep neural networks. Prediction and overfitting. Statistical Learning theory. Unsupervised machine learning. Deep generative unsupervised models. Generative Adversarial networks and Autoencoders. Applied deep learning using Python, Tensorflow and Keras.

EE 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.

EE 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!

EE 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.

EE382N.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.

EE 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.

EE 382C System Engineering Program Management and Evaluation
Management, engineering, and evaluation approaches applicable to a spectrum of software development programs is taught. General guidelines, metrics, program artifacts, and processes will be discussed in conjunction with case studies.

EE 382C.12 Multicore Computing
This course will expose students to the theoretical and practical aspects of designing multicore software systems such as: programming constructs for concurrent computation, openMP, sequential consistency, linearizability, lock-based synchronization, lock-free synchronization, wait-free synchronization, consensus number, software transactional memory, testing and debugging parallel programs, race detection, concurrent data structures such as stacks, queues, linked lists, hash tables and skiplists, and model checking of concurrent programs.

EE 382 Computer Graphics
This is an introductory course on the major topics in computer graphics including image synthesis, interactive techniques, geometric modeling, and computer-based animation. Covered material includes: OpenGL programming, principles of operation of raster graphics systems, sampling and antialiasing, homogeneous coordinate transformation techniques, parallel and central projection and perspective transformations, hidden surface removal, light and reflectance models for local and global illumination, shading techniques, ray tracing, basic object modeling techniques, visual perception and basic color theory, hierarchical modeling, and basic animation.

EE 382 Middleware
This course is a graduate level course introducing and investigating middleware at all levels, largely from a software engineering perspective. Students are introduced to various types of middleware (from object-oriented middleware to message-oriented middleware and beyond) both through lecture materials and through active "mini-projects" through which the students build complex applications using existing middleware solutions. The course also offers lectures on "trends" in middleware, including how middleware addresses challenges related to mobile computing, sensor networks, real-time computing, "green computing," etc.

EE 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 a number of 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.

EE 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).

EE 379K Engineering Dynamic 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.

EE 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.