Final Exam

due Monday 13 May 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 grade 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. Suppose that you finish your game app, it’s in the Google Play store, and you’re making a small but steady income. Then the money suddenly stops and the negative reviews pile up. Before long, you understand it’s because the new release of Android 5.0 (Chocolate Soufflé) is out on the street and your app crashes all the time – even during simple operations that always worked before!

    In what ways might you have suffered from Programming by Coincidence? (§31 of Pragmatic Programmer or here). What is your plan for solving the problem?

  2. Earlier in the course, we discussed decoupling and investigated the Observer Pattern (§29 of Pragmatic Programmer and other references, our Java example). If you have applied this pattern in your Android project, describe how. If you have not applied it yet, describe what you would change.

    What data is Observable and what components are Observers? What is the benefit you achieve by applying this pattern?

  3. Another software engineering topic we discussed in some depth is testing. For each type of testing below, describe how you have (or how you could) implement it for your Android project. Would you need to refactor your code? Use particular new tools?

    • Unit testing
    • Integration testing
    • System testing
    • Interface testing

    See also: §43 of Pragmatic Programmer: Ruthless Testing