NSEN 6001 Software Engineering (3 sem. cr.) The term
software engineering was coined in 1968 as a response to the problems of developing quality software on time and within budget. Software developers were not able to set concrete objectives, predict the resources necessary to attain those objectives, and manage the customers’ expectations. Engineers are often faced with ill-defined problems and have to rely on empirical methods to evaluate solutions, but they are still able to build high-quality products using off-the-shelf components, integrating them under time and budget constraints. Useful software systems are complex, and to remain useful, they need to evolve with the end-users’ needs and the target environment. This course describes object-oriented techniques for conquering complex and changing software systems. Key techniques include UML, use case specification, object modeling, reusing software architectures, design patterns, mapping models to code, testing, rationale management, project management, and agile methods.
NSEN 6011 Formal Methods in Software Engineering (3 sem. cr.)
After reviewing the basic logic that will be used in the course as an aid to programming, students look at formal specifications and how they are refined to become programs. The course focuses on those programming constructs that are common to most programming languages (e.g., assignment statement, if statement, array); however, the course may also include parallel and interacting processes and probabilistic programming. Students define the formal semantics of the language features used, both execution control and data structures. The course emphasizes program development to meet specifications and program modifications that preserve correctness, rather than on verification after a program is finished.
NSEN 6061 Software Measurement (3 sem. cr.)
This course includes topics such as measurement theory; development, validation, and use of software measures; software measures in the life cycle, including cost estimation; design measures; software complexity; programmer productivity; test coverage; software reuse; and software reliability.
NSEN 6111 Software Architectures (3 sem. cr.)
This course examines the top-level design or architecture of software systems. Students learn about various architectural styles and the types of applications for which they are most suited. Students consider different formalisms or architectural description languages for specifying software architectures. They also study frameworks, patterns, and the role of architecture in the overall software development life cycle.
NSEN 6251 Software Specification (3 sem. cr.)
This is a graduate-level survey of concepts, principles, and techniques related to software and systems specification. Topics include system modeling, requirements elicitation, analysis and documentation techniques, validation and prototyping, and formal methods. Students practice the techniques presented in class via individual and/or group exercises and a term project.
NSEN 6301 Object-Oriented Analysis and Design (3 sem. cr.)
This course is a study of object-oriented analysis and design. Students compare the different object-oriented software engineering methodologies and explore the object-model-to-database mapping process.
NSEN 6305 Object-Oriented Programming (3 sem cr.)
This course focuses on the C++ and Java programming languages and includes classes, inheritance, encapsulation, polymorphism, class derivation, abstract classes, interfaces, static class members, object construction and destruction, namespaces, exception handling, function overloading and overriding, function name overload resolution, container classes, template classes, Unified Modeling Language, graphical user interfaces, multithreading, networking, and database programming.
NSEN 6331 Embedded Systems Software Development (3 sem. cr.)
Embedded software is found in most electronic devices designed today, including PDAs, microwaves, VCRs, cellular telephones, and pagers. Each of these embedded systems is unique and highly customized to the specific application. As a result, embedded systems development is a widely varying field that can take years to master. This course provides students with an overview of the basic principles of writing software for embedded systems. Students survey the issues and discuss the various techniques for dealing with them. In particular, they discuss approaches to the appropriate use of the real-time operating systems upon which much embedded software is based. Students learn about the embedded systems development cycle and the specialized aspects of developing and testing software in this environment. Key methods and technologies for each phase of the development process are covered: specification, partition, design, integration, validation, and maintenance and upgrade.
NSEN 6411 Software Unit and Integration Testing and Verification (3 sem. cr.)
Intended primarily for programmers, this is a graduate-level survey of the concepts, principles, and techniques related to software unit/component-level testing, integration testing, and formal program verification. Topics include black-box and white-box test case design strategies, incremental integration testing techniques, inspections and reviews, axiomatic verification techniques, predicate transforms, and function-based verification. Students practice the techniques presented in class via individual and/or group exercises.
NSEN 6414 Object-Oriented Testing (3 sem. cr.)
The focus of this course is on object-oriented and component-based software testing techniques, but many of the techniques discussed in this course can be used regardless of the development paradigm. Students learn what to test in object-oriented development efforts as well as techniques for how to test object-oriented software. They discuss real-world issues that arise in planning and implementing effective testing for object-oriented and component-based software development. The course explores how testing object-oriented software differs from testing procedural software and highlights the challenges and opportunities inherent in object-oriented software testing. The course also covers integration testing in each stage of development and describes what to test at each stage. This process, as well as specific testing techniques, is supported by comprehensive examples.
NSEN 6421 Software System-Level Testing (3 sem. cr.)
The objective of system testing is to evaluate how well a software system meets the expectations of its users. System testing includes verification and validation activities, and a broad range of testing types. This course—intended primarily for system-level testers, test managers, and QA personnel—addresses all aspects of system testing including techniques, tools, processes, documentation, metrics, and management. Specific topics include scenario-based testing, state-based testing, performance testing, stress testing, configuration testing, reliability and availability analysis, regression testing, security testing, usability testing, test planning and tracking, test processes, test maturity, test metrics, test documentation, and test team management.
NSEN 6471 Software Quality Management (3 sem. cr.)
In this course, students explore the plans and actions necessary to provide confidence that a software product conforms to established technical requirements. Topics include strategies for quality engineering, product review, development of test plans and procedures, testing, audits, and configuration management. Also covered are the concept of software quality, software metrics, Total Quality Management, and implementation of a software quality assurance process.
NSEN 6511 Software Project Management (3 sem. cr.)
This course provides students with the knowledge, processes, and tools required for a software engineer or technical manager to successfully direct and oversee a software development project. Topics include planning, leading, organizing, estimating, directing, monitoring, and controlling software projects and their teams. Quantitative progress measures, software life cycles, estimating, and risk management are emphasized throughout the course, which is built around a case study. The first assignment is to develop an initial project management plan for the case study project. Subsequent assignments require the students to update this plan, taking into consideration new events and challenges confronting the project. As the case study project evolves, a progression of people, management, and technical issues are discussed.
NSEN 6993 Independent Study (1-3 sem. cr.)
Students complete an independent study on a software engineering topic with course objectives determined in consultation with a supervising instructor.
NSEN 6994 Directed Research (1–3 sem. cr.)
Students research an area of software engineering under the supervision of an instructor. The research problem is determined in consultation with the supervising instructor.
NSEN 8997 Thesis (3 sem. cr.)
Students may conduct thesis research to complete the M.S. in Software Engineering, in lieu of general elective courses. Students may register for this course for a maximum of two semesters, for a total of six semester credits.