Software Engineering Minor

Required Courses
Introduction to Software Engineering
An introductory course in software engineering, emphasizing the organizational aspects of software development and software design and implementation by individuals and small teams within a process/product framework. Topics include the software lifecycle, software design, user interface issues, specification and implementation of components, assessing design quality, design reviews and code inspections, software testing, basic support tools, technical communications and system documentation, team-based development. A term-long, team-based project done in a studio format is used to reinforce concepts presented in class.
Engineering of Software Subsystems
An introduction to the principles of the foundations of contemporary software design. Topics include software subsystem modeling, design patterns, design tradeoffs, and component-based software development, with a focus on application of these concepts to concrete design problems. The relationship between design and related process issues such as testing, estimation, and maintenance are also discussed.
Software Process and Project Management
An introductory course to software process and related software project management issues. Emphasis is on the study, use, evaluation, and improvement of the software development process and related project management. Topics include software development methodologies, software project planning and tracking, change control, software quality assurance, risk management, and software process assessment and improvement.
Choose two courses from the following groups:
   Engineering Secure Software
Principles and practices forming the foundation for developing secure software systems. Coverage ranges across the entire development lifecycle: requirements, design, implementation and testing. Emphasis is on practices and patterns that reduce or eliminate security breaches in software intensive systems, and on testing systems to expose security weaknesses.
   Engineering of Concurrent and Distributed Software Systems
The principles, practices and patterns applicable to the design and construction of concurrent and distributed software systems. Topics include synchronization, coordination and communication; deadlock, safety and liveness; concurrent and distributed design patterns; analysis of performance; distributed state management.
   Engineering of Enterprise Software Systems
This course addresses architecture-level design of large, enterprise-critical software systems. The course focuses on enterprise-level design patterns and on design approaches for object-oriented and aspect-oriented application containers: encapsulating database access, application distribution, concurrent session management, security, scalability, reliability, web-based user interaction, and the programming models and tools to support system development, integration, testing, and deployment. Hands-on exercises and a team project will reinforce the course concepts and expose students to the complexity of these systems.
   Engineering of Web Based Software Systems
A course in web engineering, emphasizing organizational aspects of web development, design and implementation by individuals and small teams. Students will be instructed in the proper application of software engineering principles to the creation of web applications. Course topics will include, but not be limited to web usability, accessibility, testing, web services, databases, requirements elicitation and negotiation. A term-long, team-based project done in a studio format is used to reinforce concepts presented in class.
   Software System Requirements and Architectures
Principles and practices related to identifying software system stakeholders, eliciting functional and quality requirements, translating requirements into architectural structures, and analyzing candidate architectures with respect to the requirements.
   Human Centered Requirements and Design
This course introduces quantitative models and techniques of human-computer interface analysis, design and evaluation, which are relevant to the software engineering approach of software development. User-focused requirements engineering topics are also covered. Contemporary human computer interaction (HCI) techniques are surveyed, with a focus on when and where they are applicable in the software development process. Students will deliver usable software systems derived from an engineering approach to the application of scientific theory and modeling. Other topics may include usability evaluation design, methods of evaluation, data analysis, social and ethical impacts of usability, prototyping and tools.
   Real Time and Embedded Systems
   Modeling of Real Time Systems
   Performance Engineering of Real Time and Embedded Systems
   Software Engineering Design Seminar
Emerging topics of relevance in software engineering design.
   Hardware/Software Co-Design for Cryptographic Applications
The objective of this course is to establish knowledge and skills necessary for efficient implementations of cryptographic primitives on reconfigurable hardware. Implementation platform will be a field programmable gate array (FPGAs) containing general purpose processor and additional reconfigurable fabric for implementations of custom hardware accelerators. In the studio format students work on team projects that require them to design, and then compare and contrast software, custom FPGA hardware, and hybrid hardware-software co-design implementations of selected cryptographic primitives.
   Software Process and Product Quality
This course covers advanced topics in software engineering relating to software quality, with processes and metrics being viewed as a means to achieving quality. Quality is interpreted broadly to include product functionality and performance, project schedule and budget, and business objectives. Software metrics help a software organization on two main fronts: quality assessment of its products and processes, and process improvement towards its main goal: the production of successful software artifacts within schedule and budget constraints.
   Trends in Software Development Processes
A course in the exploration of current approaches in planning, executing and managing the project activities performed during the development of a professional software product. Topics include the characteristics of state of the practice development methods, selecting practices best suited based on project context and techniques for refining practices to achieve process improvement. Students work on team projects inclusive of all development life cycle activities to reinforce concepts presented in class.
   Software Engineering Process Seminar
Emerging topics of relevance in software engineering process.
   Mathematical Models of Software
An introduction to the use of mathematics to model software as part of the software process. Included will be models of software structure and functionality, concurrent and distributed computation, and structured data.
   Software Testing
Concepts and techniques for testing soft ware and assuring its quality. Topics cover software testing at the unit and system levels; static vs. dynamic analysis; functional testing; inspections; and reliability assessment.
   Software Engineering Seminar
Emerging topics of relevance in software engineering.