Lecture Topics and Materials

Welcome to the Course

This introductory lecture provides an overview of the key material to be covered in the course, of the approach to be taken to teach the material, and of the mindset and expectations required of students in order to be successful.

Students should also familiarize themselves with the following course information and resources:

Prerequisite Technologies

These lectures cover several key prerequisite tools and technologies with which students are generally expected to have at least some familiarity already and with which students should be able to quickly gain proficiency. Mastery of these technologies will be essential to developing with Ruby on Rails, which is a key focus of the course.

Unix Shell Command-Line

This lecture provides a basic introduction to the Unix command-line that students will be using throughout the course.

Ruby Programming Language

This lecture provides a basic introduction to the Ruby Programming Language that is the language in which Rails is implemented.

HTML and HTTP

This lecture reviews two foundational web technologies, HTML and HTTP, which are essential to web development in general and to Ruby on Rails in particular.

Ruby on Rails

These lectures provide an introduction to core topics of the Ruby on Rails web development framework, which shall be used throughout the course.

Model-View-Controller Architecture

This lecture introduces the Model-View-Controller (MVC) architectural pattern, and explains how the pattern is applied to Ruby on Rails.

Model Classes

This lecture reviews foundational database concepts, focusing especially on the relational model and SQL query language, and it introduces the Rails Object-Relational Mapping (ORM) and the Rails MVC model component.

Additionally, in-class demonstrations show how to create model classes, how to seed the database with model records, and how to create an index page that displays all records of a particular type.

Model Validations and Tests

This lecture takes the form of in-class demonstrations that show how to create model tests that automatically test model code for errors and how to create model validations that help ensure that no invalid data is stored in the database.

RESTful Resources

This lecture introduces the REST architectural style and how Rails applies it.

Additionally, in-class demonstrations show how to create the standard RESTful resources for a model/controller.

Model Associations

This lecture introduces the topic of model class associations in Rails. In particular, it describes how to use Rails to encode links between model records of different types (from different database tables), and given an instance on one model class, how to access associated objects of a different model class type (e.g., for displaying on a page).

In-class demonstrations show how to set up associations between model classes, how to create association links between model records (in the seeds script), and how to conveniently retrieve and display associated records on a show page.

Authentication and Authorization

This lecture introduces the topics of authentication and authorization, and it covers how to implement these capabilities in Rails using the Devise gem.

In-class demonstrations show to add users and authentication to the app, how to require that users are signed in in order to access certain controller actions, and how to restrict user access to only resources that they are allowed to access.

Software Requirements

This lecture introduces the topic of software requirements. It covers various requirements challenges and categories in software engineering, and it explains how to document requirements as user stories.

Database Design

This lecture introduces the generalization relationship in object-oriented modeling and explains how to design a database using object-oriented data modeling.

Software Engineering Process and Planning

This lecture introduces the topics of software engineering process and project planning. It covers the waterfall process model, iterative and incremental processes, and how to estimate and prioritize user stories.

Git and GitHub-Based Project Workflow

These lectures cover how to use Git and GitHub to perform common version control tasks and how to perform the GitHub Flow-like workflow required for the team project.

Team Project Workflow

This lecture covers the GitHub-based workflow that teams are expected to use for the project.

Git Commands for Local Repos

This lecture covers the usage and semantics of Git commands that are commonly used on a local repo. In particular, the lecture uses a combination of live demonstrations and practice problems.

Git Commands for Remote Repos

This lecture covers the usage and semantics of Git commands that are commonly used on a remote repo. Like the previous lecture, the lecture uses a combination of live demonstrations and practice problems.

Testing

These lectures cover topics related to software testing, including how to perform statement coverage analysis in Rails, how to create functional tests (i.e., controller tests) in Rails, and how to calculate by hand other white-box coverage metrics.

Statement Coverage

This lecture covers the concept of white-box testing, and particular, statement coverage. The lecture uses a combination of slides and a demonstration of the tool, SimpleCov:

Functional Testing in Rails

This lecture describes how to perform functional testing Rails. Functional testing is sometime thought of as controller testing and involves simulating HTTP requests to test how the app responds. The lecture mainly involved a demonstration, which was actually second half of the previous demonstration on statement coverage.

White-Box Testing

This lecture adds to the previous lecture on statement coverage by introducing branch and path coverage and by describing how to calculate each of the coverage metrics using a control flow graph. The lecture involves a slide presentation and practice problems, including worked example solutions.

Software Design and Design Patterns

This lecture introduces software design concepts, including design coupling and indirection, along with software design patterns, including the Mediator and Observer patterns. The lecture involves a slide presentation and practice problems, including worked example solutions.

Security Attacks and Countermeasures

This lecture introduces some common security attacks that target web apps and describes effective countermeasures for thwarting such attacks. The lecture involves a slide presentation and practice problems.