CS 257: Software Design

Web Application, Phase 1

For this project, I want you to work in groups of either 2 or 3 students. This project will last through midterm, so make sure you choose a partnership that will work for you. If you want help finding a partner, send me an email and I'll try to connect people.

When you search imdb.com for a movie, the interaction goes roughly like this:

This style of interaction (person → browser → web server → database → web server → browser → person) is at the heart of many of the most useful websites (not to mention the not-so-useful sites as well).

During the next couple weeks, we are going to develop a database-driven web application.

Phases of the job

Your work is going to proceed in phases, approximately like so:

  1. Choose and obtain a dataset to work with.
  2. Create a prioritized user-oriented feature list.
  3. Create mock-ups of your web page structure and its rough appearance.
  4. Design and set up a database to hold the data.
  5. Design a REST interface for the database (I'm sorry, but I can't bring myself to use the term "RESTful", which I find oddly annoying)
  6. Implement the REST interface
  7. Implement an end-to-end system that follows the pattern described in the imdb example above, but without useful queries and results. This will be sort of a database-driven client/server "hello world" application. (See "tracer bullets" in The Pragmatic Programmer.)
  8. Implement and test one feature at a time, according to your development plan. In between stages of this part, you might adjust your development plan to adapt to new understanding of the project. (This phase, one small testable bite at a time, is called iterating. (Um, watch out...it may be that the language in the video I just linked isn't entirely classroom-appropriate.))

This project will get you beginning experience with quite a few important software technologies, including HTML (including forms), HTTP, the standard Python CGI library, flask, PostgreSQL, the most commonly used Python PostgreSQL library, AJAX, JSON, and a little bit of Javascript. In the process of developing this project, we will also discuss use cases/user stories, test-driven development, the design of functional and client/server interfaces, automation with Makefiles, documentation, a variety of code construction topics, and undoubtedly other stuff that will come up as we proceed.

Phase 1: Conception and rough requirements

Your first assignment is to do steps 1, 2, and 3 from the list above. Hand in a single PDF file called web_app_conception.pdf containing:

Handing it in

Using one partner's bitbucket cs257 repository from the previous assignment, share the repository with everybody in the group (and jeffondich and aldrichc if you haven't already), add a directory called webapp, add the web_app_conception.pdf file to that directory, tag the repository with "webapp1", and push the content and the tag.

Also, please create a webapp/contributors.txt file listing the names and email addresses of all partners.

Have fun!