Software Engineering

Course Descriptions

EE 379K Requirements Engineering: Acquisition and Modeling
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.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 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 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 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 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.