Master of Engineering in Software Engineering
University of Maryland - A. James Clark School of Engineering
Key Information
Campus location
College Park, USA
Languages
English
Study format
Distance Learning, On-Campus
Duration
2 years
Pace
Full time, Part time
Tuition fees
USD 45,000 / per course
Application deadline
15 May 2024*
Earliest start date
28 May 2024
* on-campus international: September 24th
Introduction
The Software Engineering program is concerned with developing and maintaining software systems that behave reliably and efficiently, are affordable to develop and maintain and satisfy all the requirements that customers have defined for them. Our faculty consists of world-class researchers and practitioners who apply the latest Software Engineering principles on large projects at NASA, DARPA, Raytheon, and Lockheed Martin.
Students earning a Master of Engineering or Graduate Certificate in Engineering degree through our program will learn to develop and maintain affordable, reliable, and efficient software systems that align with customer needs. Courses focus on three technical areas—cybersecurity, computer engineering, and systems engineering—preparing students to help solve pressing real-world problems.
Admissions
Curriculum
Degree Requirements
Master of Engineering: 30 Credits or 10 Courses
Students pursuing this option must complete five courses from the core curriculum, 1 software-specific technical elective, and 4 additional technical electives. There is no research or thesis required for this degree.
Graduate Certificate in Engineering: 12 Credits or 4 Courses
Students pursuing a Graduate Certificate in Engineering must complete the following four courses:
- ENPM611, Software Engineering
- ENPM612, System and Software Requirements
- ENPM613, Software Design & Implementation
- ENPM614, Software Testing & Maintenance
Courses
ENPM611 Software Engineering (3 Credits) | Core
Fall 2024 M 4:00 pm - 6:40 pm Christopher Ackermann
Software engineering concepts, methods, and practices important to both the theorist and the practitioner will be covered. The entire range of responsibilities expected of a software engineer are presented. The fundamental areas of requirements development, software design, programming languages, and testing are covered extensively. Sessions on supporting areas such as systems engineering, project management, and software estimation are also included.
Prerequisite: Competency in one programming language and must have completed an undergraduate software engineering course or permission of course instructor.
ENPM612 System and Software Requirements (3 Credits) | Core
Focus will be placed on the theoretical and practical aspects of requirements development. Students will recognize the place of requirements, how to work with users, requirements methods and techniques, the various requirements types, how to set requirements development schedules, requirements evolution, how to model and prototype requirements, how to evaluate and manage risk in requirements, techniques to test requirements, how to manage the requirements process, and how to write an effective requirements document.
Prerequisite: ENPM611.
ENPM613 Software Design & Implementation (3 Credits) | Core
Fall 2024 W 7:00 pm - 9:40 pm Tony Barber
Covers the software design process, from understanding the need or problem to creating suitable architecture and detailed design solutions, to preserving and evolving the design during implementation and maintenance. The main study topics include requirements analysis models; user-centered design; architecture design through decomposition and composition; architecture styles and architecture tactics for supporting various quality attributes such as security and usability; design for reuse and with reuse; detailed design object-oriented principles (such as SOLID) and design patterns; approaches for evaluating, comparing, and selecting design solutions; standard notations for documenting architecture views, detailed design, and analysis models; and industry standards for creating design deliverables. Students will acquire not only technical knowledge, but also soft skills such as communication, collaboration, critical thinking, leadership, negotiation, and time management.
Prerequisite: ENPM611.
ENPM614 Software Testing & Maintenence (3 Credits) | Core
The purpose of this course is to provide an overview of software testing and maintenance and how these activities fit into the Software Engineering Life Cycle. Many examples used in the lectures are derived from analysis of various NASA systems. Topics include various forms of testing such as Functional Testing, Combinatorial Testing, Structural Testing, Model-Based Testing, Security-oriented testing as well as Software Architecture's role in testability & maintainability, Regression Testing, Automated Testing, Testing Coverage including MC/DC coverage and testing standards.
Prerequisite: ENPM611.
ENPM637 Managing Software Engineering Projects (3 Credits) | Elective
This course addresses the breadth of managing software engineering projects. It will help in transforming inspiring software engineers into software project leaders. The course will impart advanced principles, methods and tools for management of software projects in a realistic software engineering context. An Integrated Lean Project Management (ILPM) framework which is an implementation-oriented hybrid of traditional Project Management Institute (PMI) and Agile project management paradigms will be coached. After completing this course, students will be able to: select & justify software engineering projects by establishing relevant business cases, managing customer requirements, developing key components of software engineering project plan and the planning process, identifying software project risks, and developing risk mitigation strategies, develop a project team to build and deliver the product, understand and apply methods for solving and avoiding common difficulties associated with managing software engineering project, perform post-implementation review, and improve the effectiveness and efficiency of software development projects.
ENPM655 AI-based Software Systems (3 Credits) | Elective
Fall 2024 Class time/details on ELMS Mikael Lindvall , Joshua Giltinan
The goal of this new course is to address the important problem of specifying, developing, and testing software systems that are based on artificial intelligence (AI) components. Since such systems are often safety-critical or must be dependable for other reasons, quality must be built throughout the software development life cycle. It is important to note that the focus of the course is not on generic software engineering or on how to train neural networks, even though we will touch upon those topics. The core of the course is instead about how to specify, develop, and test software systems that are based on or use AI. Data scientists are often great at building models with cutting-edge techniques, but incorporating those models into functioning software products presents different engineering challenges. For example, data scientists may work with un-versioned notebooks on static data sets and focus on prediction accuracy while ignoring scalability, robustness, update latency, or operating cost. Software engineers, in contrast, are typically trained with clear specifications and tend to focus on code, but may not be aware of the difficulties of working with data and unreliable models. They have a large toolset for decision-making and quality assurance, but may not know how to apply those to AI-enabled systems and their challenges. This course discusses questions such as: To what degree can existing SE practices be used for building intelligent systems? To what degree are new practices needed? This course adopts a software engineering perspective on building intelligent systems, focusing on what a software engineer can do to turn a machine learning idea into a scalable and reliable product. The course will use software and systems engineering terminology and techniques (e.g., test coverage, architecture views, fault trees) and discuss challenges posed by using such techniques on machine learning/AI components. The course will include one lecture on teaching/refreshing fundamentals of machine learning and AI to provide a basic understanding of relevant concepts (e.g., feature engineering, linear regression vs fault trees vs neural networks). The course will also briefly cover design thinking and tradeoff analysis. It will focus primarily on practical approaches that can be used now and will feature hands-on practice with modern tools and infrastructure.
ENPM680 Introduction to Secure Coding for Software Engineering (3 Credits) | Elective
Fall 2024 Class time/details on ELMS Gananand Kini
Software pervades our everyday lives and is a critical part of many of the technologies in use by people globally. It is both complex and diverse in its applications including but not limited to a significant number of domains where technology is used including communications, finance, manufacturing, etc. Software tends to fail [1] due to several factors and these causes of software failures are referred to as bugs. However, a significant class of these bugs tends to have serious security implications that affect the confidentiality, integrity, availability, and non-repudiation principles that underpin the security of managing and operating such software systems. This course will cover core concepts and techniques to analyze and characterize such security bugs, and potential ways to mitigate them. Concepts will be introduced and discussed within the context of an adversary intent on altering or subverting the behavior of the software with security impacts. The course does not expect students to have any prior security experience. After this course the student will be familiar with: 1. Auditing a software application to find security weaknesses. 2. Describing weaknesses using CWE. 3. Methodology and techniques used in peer code review. 4. Using analysis tools to find security weaknesses. [1] https://spectrum.ieee.org/computing/software/why-software-fails
ENPM696 Reverse Software Engineering (3 Credits) | Core
Fall 2024 W 4:00pm - 6:40pm Allen Hazelton
This course provides an in-depth understanding of software reverse engineering concepts and hands-on training with reverse engineering tools, including disassemblers, decompilers, and code analyzers. Students will become familiar with both low-level software and the x86 instruction set through binary reversing sessions. This course also provides insights into many subjects such as system security, source code analysis, software design, and program understanding that will be beneficial in a variety of fields.
Prerequisite: ENPM691 and CMSC106
Rankings
Online Programs
#6 Online Graduate Engineering Programs - U.S. News and World Report Best Online Graduate Engineering Programs
U.S. Graduate Programs
#19 Graduate Engineering - U.S. News and World Report 2023 Best Engineering Graduate Programs
Specialties:
- #15 Aerospace Engineering
- #16 Electrical Engineering; #15 Computer Engineering
- #17 Mechanical Engineering
Entrepreneurship Rankings
- #7 Undergraduate Program
- #18 Graduate Program
Princeton Review's Top 50 Schools For Entrepreneurship Programs"