Master of Engineering in Software Engineering
University of Maryland - A. James Clark School of Engineering
College Park, USA
Distance Learning, On-Campus
2 - 5 years
Full time, Part time
USD 4,021 / per course *
Earliest start date
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.
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
ENPM611 Software Engineering (3 Credits) | Core
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 is 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 the course instructor.
ENPM612 System and Software Requirements (3 Credits) | Core
The 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.
ENPM613 Software Design & Implementation (3 Credits) | Core
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.
ENPM614 Software Testing & Maintenence (3 Credits) | Core
Aspects of software development after coding is completed will be covered. Students will understand the various levels of testing, techniques for creating test data, how to manage test cases and scenarios, testing strategies and methods, testing batch, client/server, real-time, and Internet systems, and the development of an effective test plan. Software maintenance will include the creation of easily maintained software; preventive maintenance, corrective maintenance, and enhancements; configuration management practices; and assuring quality in software maintenance.
ENPM696 Reverse Software Engineering (3 Credits) | Core
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.
ENPM808E 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 the 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 the post-implementation review, and improve the effectiveness and efficiency of software development projects.
ENPM808O AI-based Software Systems (3 Credits) | Elective
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, it is important that quality is 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.
ENPM809W Introduction to Secure Coding for Software Engineering (3 Credits) | Elective
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  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. At the conclusion of 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.