Software Engineering
SWE 1301 Software Development I
Prerequisite:  CS 1002 and Math 1113 or concurrently
3-2-4 This course provides an introduction to software development with a focus on structured programming.  Topics include an overview of programming, problem-solving and algorithm development, simple data types, arithmetic and logical operators, selection and repetition structures, text files, arrays, procedural abstraction and software design, and modular programming including subprograms.  Programming assignments focus on the techniques of good programming style and how to design, code, debug, and document programs.  The student will be able to solve problems using top-down design and modularize their solutions with proper use of abstraction mechanisms.
SWE 1302 Software Development II
Prerequisite: SWE 1301 and CS 1002
3-2-4 This second course in software development provides a focus on both abstraction and advanced programming techniques of object-oriented programming.  Topics include abstract data types, multidimensional arrays and records, recursion, pointers and linked lists, use of parameterized types, software engineering concepts, and introduction to the usage of dynamic data structures (stacks, queues, and trees) to solve application problems.  The student will be able to solve problems using objects, including designing and writing their own.  Programming assignments emphasize good software development principles such as information hiding, re-use, use of symbolic debuggers, and separate compilation.
SWE 2312 Introduction to Software Engineering
Prerequisite:  SWE 1302 or CS 1302
2-0-2 This course provides an overview of the software engineering discipline, introducing the student to the fundamental principles and methods of software engineering.  This course highlights the need for an engineering approach to software.  The course presents software development processes at the various degrees of granularity.  This ranges from organizational processes to team and individual engineer's processes.  The role of standards (i.e., IEEE) is illustrated.  CS majors may not receive degree credit for this course.
SWE 2642 Professional Practices and Ethics
Prerequisite: CS 1002 and either CS 1302 or SWE 1302 or IT 1124
2-0-2 This course covers the historical, social and economic consideration of the discipline.  It includes studies of professional conduct, risks, and liabilities, and intellectual property relative to the software engineering and computing professions.  Software engineering/computing case studies will be used.
SWE 2623 Software Systems Requirements
Prerequisite:  SWE 2312 and MATH 2345
3-0-3 The process of extracting and validating software requirements from a customer will be explored, including levels of user/customer involvement, the dynamics of interviewing, etc.  A large part of the course will be devoted to problem domain modeling using current analysis methods and supporting tools, including rapid prototyping aids.  Another important part of the course covers the role of formal specifications in the validation process of requirements specifications, and the use formal reasoning during software design, and the ability to perform proofs of correctness.  Working knowledge of a formal specification language (i.e., the Z language) will be demonstrated by a project.
SWE 3103 Discrete Time Signals & Systems
Prerequisite:  SWE 3633 and MATH 2254
3-0-3 This course covers discrete time signals, operations, linearity, sampling of continuous time-signals, and discrete-time fourier transform.  Frequency domain representation and analysis as well as the design and the operators of filters will be covered.
SWE 3633 Software Systems Architecture
Prerequisites:  SWE 2623 and CS 3424
3-0-3 The size and complexity of today's software systems require designers to go beyond algorithms and data structures, and to focus on overall system structures.  The course examines complex systems from software architecture point of view.  Historical development of abstraction techniques in computer science in terms of language, data types, and software architectures will be covered.  Other topics include static and dynamic structural issues, gross organization and global control, protocols of communication, synchronization and data access, partitioning and composition of design elements, assignment of functionality and their physical distribution.
SWE 3643 Software Testing and Quality Assurance
Prerequisite:  SWE 2623
3-0-3 This course will show how software quality assurance and configuration management is performed and how software process improvement is maintained in order to assure the highest possible quality.  Topics include software process metrics and their use in QA, testing approaches, methods and techniques.  Development of QA plans, reviews, inspections and audits will be done.  Configuration control boards and methods for software process improvement is discussed.
SWE 3683 Embedded Systems Analysis & Design
Prerequisite:  CS 3243
3-0-3 The analysis and design course focuses on using modern methods, techniques, and tools for specification and design of embedded systems.  Topics include analytical methods such as RMA, development methods such as HOOD, and notations like UML, Petri-nets, etc. are covered.  Performance evaluation based on modeling and simulation techniques is also covered.  This is a project based course.
SWE 4324 User-Centered Design
Prerequisite: CS 3423 for CS majors; permission of CS Department Chair for others
4-0-4 A course that presents the fundamental knowledge, processes, skills, and practices leading to the user-centered design of computer systems and applications. The course addresses the effectiveness of human interactions with computers by examining issues of physical ergonomics, cognition and perception, human memory and information processing, and evaluation of prototype software in a Usability Lab. Usability engineering techniques are covered leading to improved system effectiveness in supporting use of computers, user learning, diversity in interaction styles, and individual versus group work. Class exercises provide practice of needed skills. A major project that integrates all aspects of user-centered task-oriented design is included.
SWE 4624 Software Engineering
Prerequisite: CS 3424
4-0-4 The entire software engineering life cycle is explored, with emphasis on the initial phases. Topics include problem definition, systems analysis, requirements gathering, cost and benefit analysis, proposal preparation, prototyping, design techniques and usability testing. Software engineering principles, practices, and design standards are examined through case studies.  Various tools are used by students in conjunction with real-world projects. A major component is a team project which goes through prototyping and usability testing.  SWE majors may not receive degree credit for this course.
SWE 4633 Component-Based Development
Prerequisite:  SWE 3643
3-0-3 The study of prefabricated artifacts to be reused in software engineering will be covered.  Concepts include components and objects, black box vs. open-box composition, interfaces and explicit context dependencies, horizontal vs. vertical domains, polymorphism, type checking and substitutability.  Product line patterns, frameworks and architectures will be discussed.  Connection-oriented programming with event channels, CORBA event service and very late binding will also be covered.  JAVA beans and other connectivity such as OLE, DCOM, and Active X will be covered.
SWE 4643 Developing Reusable Software
Prerequisite:  SWE 3643
3-0-3 This course addresses both technical aspects and engineering tradeoffs involved in creating reusable software and in reengineering existing software to enhance its reusability.  Reuse-driven development process are described.  Alternative methods for domain analysis, domain design, and component implementation are presented, comparisons drawn, and examples shown.  Language design elements, assignment of functionality and physical distribution will be covered.
SWE 4653 Software Engineering Economics
Prerequisite:  SWE 3643
3-0-3 This course covers quality assessment, cost estimation, configuration management, software performance measures and management of the total quality environment for software development.  The course presents methods, tools, and techniques for estimating effort, scheduling, resource requirements, and risk factors as determined by required product features and quality attributes.
SWE 4663 Software Project Management
Prerequisite:  SWE 3643
3-0-3 This course focuses on organizational and technical roles in software engineering. Models of software engineering life cycle, software maturity framework, strategies of implementing software, software process assessment, project planning principles and tools, software configuration management, managing software quality and usability, leadership principles and legal issues will be covered.  A required team project combines technical and managerial techniques of software design and development.
SWE 4724 Software Engineering Project
Prerequisite: SWE 4624, ENGL 2010 and  SPCH 2400
4-0-4 This major project course is a follow-up to CS 4624. Emphasis is placed on completing the entire software engineering life cycle in team projects. Topics include software development, testing, implementation, and user manuals. Software engineering methodologies and some formal methods are covered. Software CASE tools are utilized in the projects from planning and analysis through implementation.
SWE 4743 Object-Oriented Development
Prerequisite: CS 3123 and CS 3424
3-0-3 This course covers the concepts of object-oriented analysis, design, and programming. Topics include objects, classes, messages, methods, encapsulation, and inheritance. Projects emphasize object-oriented problem-solving and are implemented in languages such as C++ or Smalltalk or Java.
 
Software Engineering Graduate
SWE 6343 User Interface Design and Implementation
Prerequisite: SWE 6623
3-0-3 This course covers the major frameworks, methods, and approaches to designing, engineering, implementing, and testing user interfaces.  It covers user and usability requirements gathering, task analysis, user-interface design, implementation of the user interface, and evaluation with respect to requirements and the users' tasks.  Illustrative design and implementation projects are completed throughout the term.
SWE 6623 Software Engineering I
Prerequisite: CS 5123/3424
3-0-3 This course covers the initial phases of the software-development life cycle.  Topics include planning, requirements analysis, requirements specification, and design.  A number of techniques for performing analysis and design are explored and applied in a major project.
SWE 6633 Software Project Management
Prerequisites: SWE 6623
3-0-3 Focus on organizational and technical roles in software engineering.  Emphasis on: models of software life cycle, software maturity framework, strategies of implementing software, software process assessment, project planning tools, software configuration management, managing software quality and usability, leadership principles, and professional and ethical issues.  A required project combines technical and managerial techniques for assessing software design and development.
SWE 6723 Software Engineering II
Prerequisite: SWE 6623
3-0-3 This course covers the entire software development life-cycle.  Emphasis is placed on advanced topics including prototyping, verification and validation, formal methods, and quality management.  A major component is a group project that utilizes a Computer Assisted Software Engineering (CASE) tool to assist in the in the analysis, design, and implementation of a system.
SWE 6743 Object-Oriented Analysis and Design
Prerequisites: CS 5183/3663 and SWE 6623
3-0-3 This course explores the object-oriented software development process including analysis, design, and programming. Emphasis is on the object-oriented paradigm.
SWE 6763 Software Metrics and Quality Management
Prerequisite: SWE 6623
3-0-3 This course covers the principles of software measurement such as, scaling, validity, and reliability. The various software metrics on volume, effort, quality, and cost estimation are explored. The theory and principles of software verification and validation effectiveness, and reliability models are studied. The application of these measurements to software customer satisfaction and total quality management is explored.
SWE 6783 User Interaction Engineering
Prerequisites: CS 5183/3663 and SWE 6623
3-0-3 This course follows a complete software-engineering cycle to produce software objects (classes and/or components) that support users in effective, efficient, and enjoyable interactions with computers.  Class exercises and a project incorporate concepts and methods including ethnographic and user analysis; cognitive ergonomics; usability metrics and criteria; software-engineering practices, conventions, standards, and documentation; device-user action mapping; person-system function allocation; quality management systems; conceptual prototyping; embedded systems in support of ubiquitous computing; and function-behavior analysis.
SWE 6813 Component Based Software Development
Prerequisites: CS 5123 and CS 5183
3-0-3 This course covers the concepts, foundations, and architectures of component-based software development (CBSD) and its related technologies.  Component-based tools and languages, approaches for implementation of CBSD, including designing, building, assembling, and deploying reusable COTS and in-house software components are discussed in depth.  The current concrete realizations of component technologies will be explored.  Students will do projects focused on the life cycle of software components.
SWE 6823 Embedded Systems Analysis and Design
Prerequisite: SWE 6623
3-0-3 This project-oriented course focuses on using modern methods, techniques, and tools for specification and design of embedded systems.  Topics include analytical methods, design/development methods, and notations.  Performance evaluation based on modeling and simulation techniques is also covered.
SWE 6843 Embedded Systems Construction and Testing
Prerequisite: CS 5243/3243
3-0-3 This project-oriented course focuses on the use of current software building technology, testing, reliability analysis, and benchmarking.  Topics include component-based development (CBD), implementation technologies, and real-time operating systems (RTOS), with emphasis on the use of measurement tools, and domain libraries.  The course also covers issues in hardware software co-design.
SWE 6883 Formal Methods in Software Engineering
Prerequisites: CS 5423 and SWE 6623
3-0-3 This course involves a study of formal methods applicable to software development with an emphasis on methods that support formal specification and verification.  Such methods may include transformational techniques, logic-based formalisms, algebraic and model-based specifications, tools, etc.
SWE 6901-6903 Special Topics
Prerequisite: As determined by the Instructor and Department Chair
1 to 3
hours
Special topics selected by the Department Chair.  Offered on a demand basis.  A student may repeat this course with special permission.
SWE 7903 Software Engineering Capstone
Prerequisite: Satisfactory completion of the MSSWE core (SWE 6623, SWE 6633, SWE 6723, SWE 6743, SWE 6763, and SWE 6883)
3-0-3 This course is designed for students to give a professional focus to their degree.  The students work in designated teams under the supervision of the course instructor (a CSE faculty member), on a project of practical significance in software engineering.  Each of the teams will deliver a final working product, generate a substantial final report, and give a final presentation on the project.