Final exam

due Sun May 10 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 concrete and pertain specifically to the project we implemented this semester. I expect about a page or two of explanation per question. Submit your answers by email to .


  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 6.0 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? What is your plan for solving the problem?

  2. Earlier in the course, we discussed coupling and cohesion, and we tried to factor out the rules of the Memory Game from the Android interface. In what way does this change improve coupling and/or cohesion? How could we further improve the coupling and cohesion of the classes that make up our game app?

  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