ACS 4931: Testing & Architecture

Table of Contents

Repository Setup

⚠️ Important: Please follow these instructions exactly to set up your clone of this course repository.

Course Description

This course focuses on advanced topics such as debugging, unit testing, refactoring and design patterns. Students apply these concepts to existing portfolio projects to improve code qualities such as readability, modularity and extensibility. Topics covered include: debugging techniques, unit-testing, refactoring techniques, design patterns and navigating massive codebases. By the end of the course, students have practical knowledge of writing python unit tests, refactoring legacy code and implementing some design patterns.

Prerequisites

  • CS 1.0 - INTRODUCTION TO PROGRAMMING
  • CS 1.1 - OBJECT ORIENTED PROGRAMMING

Course Specifics

Course Delivery: hybrid | 7 weeks | 14 sessions

Course Credits: 3 units | 37.5 Seat Hours | 75 Total Hours

Learning Outcomes

Students by the end of the course will be able to ...

  1. Compare and contrast software architecture options and design patterns to make informed decisions around which to pick.
  2. Produce elegant pseudocode to quickly describe how to solve a problem.
  3. Practice techniques to improve the quality and craftsmanship of their software.
  4. Design and implement code refactoring techniques to improve readability.
  5. Apply debugging and unit-testing best practices to improve quality assurance.

Schedule

Course Dates: Tuesday, January 19 – Thursday, March 10, 2022 (7 weeks)
Class Times: Tuesday and Thursday at 10:00am –12:15pm PST (13 class sessions)

Class Topics
1 Debugging Steps
2 Debugging Techniques
3 Using a Debugger
4 Refactoring - PEP 8
5 Refactoring - Composing Methods
6 Refactoring - Composing Methods 2
7 Refactoring - Simplifying Conditional Expressions
8 Refactoring - Other Refactoring Techniques
9 Refactoring - Lab
10 Unit Testing 1
11 Architecture: The Observer Design Pattern
12 Architecture - State Pattern
13 Final Exam

Assignment Schedule

We will be using Gradescope, which allows us to provide fast and accurate feedback on your work. All assigned work will be submitted through Gradescope, and assignment and exam grades will be returned through Gradescope.

As soon as grades are posted, you will be notified immediately so that you can log in and see your feedback. You may also submit regrade requests if you feel we have made a mistake.

Your Gradescope login is your Dominican email, and your password can be changed at https://gradescope.com/reset_password. The same link can be used if you need to set your password for the first time.

The assignments cover debugging, refactoring, unit testing and architecture topics.. Please refer to exercises and for details.

For assignments and due dates, please refer to Gradescope.

As a rule of thumb, the due date of an assignment is one to two weeks after its corresponding lesson is taught.

Evaluation

To pass this course you must meet the following requirements:

  • Obtain at least 70% cumulative score on the assignments.
  • Pass the final summative assessment (minimum grade 70%).
  • Actively participate in class and abide by the attendance policy.
  • If an assignment is not passing, you have 1 week to make any necessary fixes and resubmit for full points.

Information Resources

  1. "Refactoring: Improving the Design of Existing Code" (1st edition) by Martin Fowler.
  2. "Effective Python: 90 Specific Ways to Write Better Python" (2nd edition) by Brett Slatkin.
  3. PEP 8 -- Style Guide for Python Code
  4. "Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems" by David J Agans