Final Exam

due Thursday 19 December at midnight, by email

This is a take-home exam. You may use whatever materials you like, including the source code that we have written and any notes/links provided. If you use quotes or ideas from any source other than your own mind, you must cite the source and use quotation marks appropriately.

You may not do this exam in groups. Your responses must be entirely your own. If I notice suspicious similarity between the answers of two or more students, or if your answers are copied from another source, your score will suffer.

All of your answers should be specific and pertain directly to the project we implemented this semester. I expect about 1–2 pages of explanation per question. Submit your answers by email to .

Choose two of the following questions.

  1. Over the course of this project, we have not been very disciplined about writing automated tests for our code. Research tools and techniques for testing a Python web app (ideally compatible with Google AppEngine). Distinguish between tools and techniques for unit testing, browser-based system testing, and coverage analysis.

  2. Once our software is in production and has actual users and their data, it can be difficult to make changes to the data model. What tools and techniques could we use to manage data migration as we adjust the model to implement new features? Your suggestion should again be compatible with Python and AppEngine’s High-Replication Datastore.

  3. There are many similarities between the libraries we’re using on AppEngine (webapp2, Jinja templates, ndb models) and Django, a different web framework for Python. What changes would we need to make to the handlers, templates, and models in order to transition to Django? (For now, assume we want to continue to use AppEngine, but we are just replacing the various libraries listed above with the similar facilities of Django. The next question is about moving off of AppEngine.)

  4. Suppose that, once our software is in production, we decide to move off of Google’s AppEngine platform. (You can assume we have already transitioned to using Django, as in question 3, as that should make migrating away from AppEngine easier.) What other kind of hosting is possible with Django, and what are the cost, scale, and efficiency considerations? Which database software would you recommend, and why? How do we migrate existing data within AppEngine’s High-Replication Datastore? How easy is it to deploy new updates to the software on your chosen provider?