Courses

CSCI 45000 - Principles of Software Engineering

Course Description

Tools and techniques used in software development. Lifecycle concepts applied to program specification, development, and maintenance. Topics include overall design principles in software development; the use of structured programming techniques in writing large programs; formal methods of program verification; and techniques and software tools for program testing, maintenance, and documentation. A primary goal of this course is to provide experience in team development of software. There is emphasis on understanding and evaluating software quality metrics at each phase of the software lifecycle.

Level: Undergraduate
Taught: Fall, Even Years

CSCI 50600 - Management of the Software Development Process

Course Description

We begin with an overview of the fundamental software engineering principles, concepts, and related issues. We then focus on the importance of software quality. Finally, we explore each phase of the software lifecycle to understand its importance to ensuring high quality software. Because software engineering is heavily rooted in a social process, this course is primary discussion based. A team-based software development project is also required where students have the opportunity to apply learned techniques. Some related topics include: lifecycle models, cost estimation, risk analysis, component reuse, traceability, metric and process improvement, and testing and integration.

Level: Graduate
Taught: Fall

CSCI 50700 - Object-oriented Design and Programming

Course Description

This course is designed to teach students best practices in designing and implementing object-oriented systems of high quality. To accomplish this task, we start with an overview of software design patterns and their role in developing high-quality software. We then begin surveying different design-level software design patterns, such as the Bridge, Strategy, Wrapper Facade, and Visitor software design pattern. Next, we touch on software design patterns for building distributed systems. Finally, we finish the course by surveying software anti-patterns, which are common design mistakes that negatively impact system quality, such as degrading performance as the system scales in size and complexity. Students will have to opportunity to apply learned techniques on several programming projects throughout the semester.

Level: Graduate
Taught: Spring

CSCI 50900 - Software Quality Assurance

Course Description

This course is designed to teach students best practices in testing different classes of software systems. To accomplish this task, we start with an overview of software testing and its role in developing high-quality software. We then begin studying, in depth, traditional software testing methods, such as functional, structural, and integration testing. Finally, we finish the course by surveying contemporary software testing methods, such as exploratory testing, model-based testing, search-based testing, and non-functional testing. Students will have to opportunity to apply learned techniques on several programming projects throughout the semester.

Level: Graduate
Taught: Fall, Odd Years

CSCI 59000 - Advanced Topics in Software Engineering (Independent Study)

Course Description

This course is designed to introduce interested students to my research. The course is a project-based course where we work together on an open research problem in one of my areas of research. If you are interested in doing a Master Thesis and have not committed, then this is a good introductory course to determine if a Thesis is something you want to pursue. You must have completed CSCI 50600 and/or CSCI 50700 to enroll in this course

Level: Graduate
Taught: By Request Only