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:
- Course syllabus
- eCourseware course site (to be used for posting grades and submitting work via dropboxes)
- Piazza course site (to be used for posting questions and answers; you will receive an email invitation)
- Course schedule (found on the course homepage)
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.
- Lecture slides
- Lecture video (under Content in eCourseware)
- Practice Problems (solutions included)
Database Design
This lecture introduces the generalization relationship in object-oriented modeling and explains how to design a database using object-oriented data modeling.
- Lecture slides
- Lecture video (under Content in eCourseware)
- Practice Problems (solutions included)
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.
- Lecture slides
- Lecture video (under Content in eCourseware)
- Practice Problems (solutions included)
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.
- Lecture video (2020-04-08 under Content in eCourseware)
- Demo: Version Control Using Git and Local Repositories
- Demo: Working with Branches in Git
- Practice Problems (Solutions)
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.
- Lecture video (2020-04-13 under Content in eCourseware)
- Demo app GitHub repo
- Practice Problems (Solutions)
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.
- Lecture video (2020-04-20 under Content in eCourseware)
- Lecture slides
- Practice Problems (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.
- Lecture video (2020-04-22 under Content in eCourseware)
- Lecture slides
- Practice Problems (solutions included)
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.
- Lecture video (2020-04-27 under Content in eCourseware)
- Lecture slides
- Practice Problems (solutions included)