Academics
  /  
Courses
  /  
Descriptions
COMP_SCI 396: TDD, Refactoring and Design Patterns for Software Engineering


VIEW ALL COURSE TIMES AND SESSIONS

Prerequisites

CS 214 or CS MS or CS PhD or Instructor permission.

Description

Test-driven development (TDD) is an approach to software development where developers write tests first, then use those tests to drive the design and implementation of their software application. Refactoring, or the process of reworking code to improve readability and performance without changing the underlying function, is strongly intertwined with TDD. In this class we will explore software engineering design patterns, which are typical solutions to common problems in software design, by leveraging TDD and refactoring to identify errors, coding design flaws, and redundancy in code. A rich set of unit tests and consistent refactoring builds quality in to software applications and code by enabling domain and code designs to gradually emerge, and supports evolving business requirements.

In particular, this course will focus on:

  • Red Bar and Green Bar Testing Patterns
  • Keeping Code DRY
  • Divide and Conquer in testing
  • Modularization
  • Pairing and TDD
  • What is "good" code?
  • Readability
  • Identifying "smells"
  • Principles in refactoring
  • When/Why should we refactor?
  • Problems with refactoring
  • Creational design patterns
  • Structural design patterns
  • Behavioral design patterns
  • Version control with GitHub and a JetBrains IDE (specific to language)
  • Pending time: Beyond unit testing - other types of testing

Prerequisites: COMP_SCI 214 or at least a year of programming experience, preferably in multiple
languages.

  • This course fulfills the Technical Elective area.

REFERENCE TEXTBOOKS:

  • Refactoring: Improving the Design of Existing Code (2nd Edition), Martin Fowler

REQUIRED TEXTBOOK:

  • Test Driven Development by Example, Kent Beck
  • Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin

COURSE COORDINATORS: N/A

COURSE INSTRUCTOR: N/A

COURSE GOALS: