Students in disciplines with a heavy reliance on software applications may be interested in pursuing a minor in software engineering. The minor provides a broad view of the software engineering landscape including introductory material and fundamentals in design and process. Students deepen their software design skills and learn techniques for working on a productive software engineering team by choosing electives in design or process to gain a deeper understanding of one of these areas, or they may choose to balance their courses for a broad view of both topics.
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. (Prerequisite: CSCI-140 or CSCI-142 or CSCI-242 or SWEN-124 or CSEC-124 or GCIS-124 or equivalent course.) Lec/Lab 3 (Fall, Spring).
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. (Prerequisites: SWEN-261 and (SWEN-250 or (CSCI-243 or 4003-334) or CMPE-380 or SOFTENG-MN) or equivalent courses.) Lec/Lab 3 (Fall, Spring).
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. (Prerequisites: SWEN-261 or equivalent course) Lecture 3 (Fall, Spring).
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. (Prerequisites: SWEN-261 and (SWEN-488 or SWEN-498 or SWEN-499 or CSEC-499 or CSCI-488 or CSCI-499 or CMPE-499) or equivalent course.) Studio 3 (Fall, Spring).
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. (Prerequisites: SWEN-262 and (SWEN-220 or SWEN-344) or equivalent courses.) Studio 3 (Fall, Spring).
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. (Prerequisites: SWEN-262 and (SWEN-220 or SWEN-344) or equivalent courses.) Lec/Lab 3 (Fall, Spring).
Software System Requirements and Architecture
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. (Prerequisites: SWEN-488 or SWEN-498 or SWEN-499 or CSCI-499 or CSCI-488 or CMPE-499 or CSEC-499 or equivalent courses.
Co-requisites: SWEN-444 or SWEN-445 or equivalent course.) Studio 3 (Fall, Spring).
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. (Prerequisites: SWEN-262 or equivalent courses.
Co-requisites: STAT-205 or STAT-145 or MATH-251 or equivalent courses.) Lec/Lab 3 (Fall, Spring).
Software Engineering Design Seminar
Emerging topics of relevance in software engineering design. (Prerequisites: SWEN-262 and (SWEN-220 or SWEN-344) or equivalent courses.) Lecture 3 (Fall, Spring).
Real-Time and Embedded Systems
This course provides a general introduction to real-time and embedded systems. It will introduce a representative family of microcontrollers and require students to program on these devices. Fundamental material on real-time operating systems, such as requirements specification, scheduling algorithms and priority inversion avoidance will be presented. The features of a commercial real-time operating system will be discussed and used for course projects. (Prerequisites: SWEN-340 or CMPE-240 or CSCI-251 or CMPE-380 or ((CPET-201 and CPET-202) or 0618-303) or equivalent course.) Lec/Lab 3 (Fall, Spring).
Modeling of Real-Time Systems
This course introduces the modeling of real-time software systems. It takes an engineering approach to the design of these systems by analyzing system models before beginning implementation. UML will be the primary modeling methodology. Non-UML methodologies will also be discussed. Implementations of real-time systems will be developed manually from the models and using automated tools to generate the code. (Prerequisites: CMPE-240 or CSCI-251 or CMPE-380 or SWEN-340 or equivalent course.) Lec/Lab 3 (Spring).
Performance Engineering of Real-Time and Embedded Systems
This course discusses issues of performance in real-time and embedded systems. Techniques for profiling the resource usage of a system and for measuring the effect of increasing system requirements will be covered. The control of physical systems will motivate the need for performance tuning of a real-time system. Students will write programs running under a real-time operating system that can maintain control of a physical system. The course will discuss and experiment with performance trade-offs that can be made using hardware-software co-design. (Prerequisites: CMPE-240 or CSCI-251 or CMPE-380 or SWEN-340 or equivalent course.) Lecture 3 (Fall).
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. (Prerequisite: SWEN-261 and CSCI-462 or equivalent courses.) Studio 3 (Spring).
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. (Prerequisites: SWEN-256 and (STAT-205 or STAT-145 or MATH-251) and (SWEN-488 or SWEN-498 or SWEN-499 or CSCI-499 or CSCI-488 or CSEC-499 or CMPE-499) or equivalent courses.) Lecture 3 (Fall, Spring).
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. (Prerequisites: SWEN-256 or equivalent course.) Lec/Lab 3 (Fall, Spring).
Software Engineering Process Seminar
Emerging topics of relevance in software engineering process. (Prerequisites: SWEN-256 or equivalent course.) Lecture (Fall, Spring).
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. (Prerequisites: (MATH-190 or MATH-131) and (CSCI-140, CSCI-142 or CSCI-242) or equivalent courses.) Lecture 3 (Fall, Spring).
Software Design for Computing Systems
To design and develop high quality products software engineers need to understand the physical components and systems that are an integral part of these products. This understanding is critical in the fulfillment of non-functional requirements such as performance, reliability and security. This course will provide software engineering students with hardware, computer architecture, and networking domain specific knowledge. Course programming assignments will provide practical experience developing software that interfaces with hardware components and systems. Credit cannot be granted for this course and CMPE-240. (Prerequisites: (SWEN-250 and SWEN-220) or SWEN-262. Students may not take and receive credit for CMPE-240 and SWEN-340. If you have earned credit for CMPE-240 or you are currently enrolled in CMPE-240 you will not be permitted to enroll in SWEN-340.) Lecture 3 (Fall, Spring).
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. (Prerequisite: CSCI-140 or CSCI-142 or CSCI-242 or SWEN-124 or CSEC-124 or GCIS-124 or equivalent course.) Lec/Lab 3 (Fall, Spring).
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. (Prerequisites: SWEN-261 or equivalent course) Lecture 3 (Fall, Spring).
Software Engineering Seminar
Emerging topics of relevance in software engineering. Lecture (Fall, Spring).