This project is fairly open ended: you will be extending some open-source application. There are several dilverables, along with some constraints on the app you can pick. The goal is that your contribution will help the open-source community in some way, but you won’t be explicitly graded on whether or not your changes make it into the application “for real.”

Picking an App

You are to find some open-source application to extend. This should be an Android application, but exceptions will be made on a case-by-case basis as long as the project fits the main idea involved in the course.

In finding apps, I encourage you to use Github and F-Droid, and open-source app store. Here are the constraints on the apps you pick:

  • The app you pick must be written in Java, or a closely-related language (e.g., Kotlin).

  • The app must be over 10 thousand lines but under 100 thousand.

  • The app must be open-source, i.e., it should be freely available.

  • There should be some community that actively maintains the app, e.g., don’t choose an app that has been long-since abandoned by its former developer. Email me for exceptions to this.

Constraints on the features you plan to implement

  • Your feature should contribute to the app in a sensible way. I.e., it should not be fake or superficial (e.g., simply changing the theme), it should require serious changes to the app’s code.

  • Your feature should require between 150 and 2000 lines of code to implement. Of course, lines of code is a poor metric, since it’s not a great proxy for complexity, but basically: I don’t want you to just be able to add a single method and call yourself done.

  • Your code should add tests for the feature in the app. If the app does not have testing infrastructure, you should build it on your own.

  • You must at least attempt to make contact with the developer to let them know about the feature you implement, and (if they like it) I encourage you to get it included in the app.

Deliverable 1 (Nov 1): Proposing and Architecting your Feature [20%]

You are to identify some feature lacking in the app and propose it to me no later than November 1st. You will then write up a “project proposal” that is no shorter than 500 words, and no longer than 1000 words, and send it to me. Your proposal should be an executive summary of the feature you intend to implement. In particular, I will not give extensions to this deadline.

Your summary should be submitted as a PDF to me via email. I will email you back to let you know it is completed. This will be graded for completion, not prose, but I expect you to write in a professional style.

Your executive summary should cover the following:

  • The app you plan to extend and some rough statistics about it: how many downloads (if it is on the app store) it has, how many active developers it has, how big it is (number of lines), etc…

  • A rough high-level overview of what the app currently does.

  • The feature you want to implement, and a rough high-level sketch of the parts of the app that you will be required to extend.

  • Why you think the feature will be interesting / valuable

  • How you will test the feature.

  • How you will attempt to contact the author and let them know you implemented the feature.

This part is due by Nov 1st.

Deliverable 2 (Nov 7): Repository, Class Diagram and Implementation Plan [20%]

This part has you develop a class-diagram for your proposed implementation. Basically, you should think through the code you need to add and design out a diagram that details how the features work.

  • You should create a new repository on Github and put your working implementation of the app there.

  • You must write another document that gives a class diagram for your proposed extension to the app, along with a short (300-1000 word) PDF document detailing your implementation plan. In your document you should be specific and refer to your class diagram.

  • You can use any version of UML you want, though I recommend the Wikipedia page

Deliverable 3 (Nov 21): Your feature [60%]

  • You must deliver your feature to me via sharing your Github repo, along with your tests. Additionally, you must show me (in person) that your feature works.

This is largely completion grading: if you implement it and it works, and you write good tests that show me it works, I’ll give you all of the points. Additionally, I will be grading on code style.

Grading:

  • 45% Does your feature work
  • 10% Do you have thoughtful tests that test each part
  • 5% Code style. I will write up thoughtful reasoning about your code style