Software Engineering

SWE 1301  Software Development I
3-2-4
Prerequisite:  CS 1002 and Math 1113 or concurrently
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
3-2-4
Prerequisite: SWE 1301 and CS 1002
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
2-0-2
Prerequisite:  SWE 1302 or CS 1302
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
2-0-2
Prerequisite: CS 1002 and either CS 1302 or SWE 1302 or IT 1124
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
3-0-3
Prerequisite:  SWE 2312 and MATH 2345
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
3-0-3
Prerequisite:  SWE 3633 and MATH 2254
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
3-0-3
Prerequisite:  SWE 2623
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
3-0-3
Prerequisite:  SWE 2623
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
3-0-3
Prerequisite:  CS 3243
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
4-0-4
Prerequisite: CS 3423 for CS majors; permission of CS program head for others
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
4-0-4
Prerequisite: CS 3424
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
3-0-3
Prerequisite:  SWE 3643
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
3-0-3
Prerequisite:  SWE 3643
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
3-0-3
Prerequisite:  SWE 3643
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
3-0-3
Prerequisite:  SWE 3643
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
4-0-4
Prerequisite: SWE 4624, ENGL 2010 and  SPCH 2400
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
3-0-3
Prerequisite: CS 3123 and CS 3424
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
3-0-3
Prerequisite: SWE 6623
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
3-0-3
Prerequisite: CS 5123/3424
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
3-0-3
Prerequisites: SWE 6623
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
3-0-3
Prerequisite: SWE 6623
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
3-0-3
Prerequisites: CS 5183/3663 and SWE 6623
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
3-0-3
Prerequisite: SWE 6623
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
3-0-3
Prerequisites: CS 5183/3663 and SWE 6623
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
3-0-3
Prerequisites: CS 5123 and CS 5183
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
3-0-3
Prerequisite: SWE 6623
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
3-0-3
Prerequisite: CS 5243/3243
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
3-0-3
Prerequisites: CS 5423 and SWE 6623
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
1 to 3 hours
Prerequisite: As determined by the Instructor and Program Head
Special topics selected by the program head.  Offered on a demand basis.  A student may repeat this course with special permission.

SWE 7903  Software Engineering Capstone
3-0-3
Prerequisite: Satisfactory completion of the MSSWE core (SWE 6623, SWE 6633, SWE 6723, SWE 6743, SWE 6763, and SWE 6883)
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.