Skip to main content
CPE
371
Software Engineering and Development
The course introduces the basic concepts of software engineering, methodologies, and process models. The course covers the followings: Software life cycle, models and methods for software specification, analysis and design, object oriented analysis and design using UML, patterns, frameworks and APIs, architectural design, distributed system architectures. The course also introduces the use of state-of-the-art tools for computer-aided software engineering. The course increase students' knowledge of classic and modern software engineering techniques, and develop concrete experience in turning ill-formed concepts into products working with a team.
Prerequisites:
0600209,0600310
Corequisites:
0612341
0612371
(3-2-3)

Credits and Contact Hours

3 credits, 43 hours

Course Instructor Name

Prof. Mehmet H. Karaata, Dr. Abdullah Shaibani

Textbook

Ian Sommerville, Engineering Software Products: An introduction to modern software engineering, 1st Edition, Pearson

Reference Text

Software Engineering: A practitioner's Approach, Roger Pressman and Bruce Maxim, 8th Edition

Catalog Description

The course introduces the basic concepts of software engineering, methodologies, and process models. The course covers the followings: Software life cycle, models and methods for software specification, analysis and design, object oriented analysis and design using UML, patterns, frameworks and APIs, architectural design, distributed system architectures. The course also introduces the use of state-of-the-art tools for computer-aided software engineering. The course increase students' knowledge of classic and modern software engineering techniques and develop concrete experience in turning ill-formed concepts into products working with a team.

Prerequisite

ENGR-209 and ENGR-310

Co-requisite

CpE-341

Specific Goals for the Course

Upon successful completion of this course, students will be able to:

Apply software engineering knowledge and models. (Student outcome: 2)

Analyze a software system proposal and choose the appropriate software model for the system. (Student outcomes: 2)

Understand the functional and non-functional system properties. (Student outcomes: 2)

Produce user and system specification documents using standard templates. (Student outcomes: 3, 4)

Apply agile software engineering on a project and its principle best practices to software development. (Student outcome: 2)

Analyze and design software systems to generate software requirements and design specifications. (Student outcomes: 2, 3)

Understand and identify various software engineering problems, and solve these problems using computer-aided software engineering (CASE) tools.

Use software analysis and design methods, as well as modern software engineering tools to work on their projects.

Understand and apply object-oriented analysis and design techniques, including UML. (Student outcomes: 2)

Understand the properties of good system architecture and commonly used design patterns. (Student outcomes: 2)

Collaborate in small teams to apply software engineering knowledge to a selected project, then submit a written report and present the work orally while maintaining an ethical and professional behavior. (Student outcomes: 3, 4, 5)

Topics to Be Covered

Software Products

Agile Software Engineering

Features, Scenarios and Stories

Software Architecture

Cloud-based Software

Microservices Architecture

Security and Privacy

Reliable Programming

Testing

DevOps and Code Management

UML Diagrams and Practice