3. Project 1

3.1. General Project Rules

  • You must use Eclipse IDE, and you must use it to submit to Web-CAT. We won’t accept submissions any other way.

  • There are 4 projects during the semester, each has a 3-4 week lifecyle.

    • Each has three milestones, so about one/week.

    • P1’s first milestone is really easy (make minor changes to the starter kit and submit to Web-CAT), and is due at 11pm on Wednesday, September 3.

  • A major part of the project score is based on correctness, as defined by passing the reference tests at Web-CAT. We won’t tell you a lot of detail about what is in the reference tests.

  • A major part of the “correctness” score is adjusted by the quality of your own test suite (as defined by Mutation Testing coverage — we will discuss this later).

3.2. Project 1: Movie Rater Database

  • You will implement a “movie recommendation database”.

    • Movies have an abstract index (a positive integer).

    • Reviewers have an abstract index (a positive integer).

    • A review is just an integer score from 1-10 for a given reviewer/movie pair.

  • Besides storing, updating, and deleting reviews, you will support implementing a simple “similarity” score.

    • This idea is at the heart of “recommender” systems that permeate the internet. Recommender systems “recommend” things to you.

3.3. Data Representation

  • The data structures challenge is how to store the ratings.

    • A natural approach would be to use an array.

    • But there are not many reviews for any given movie, and not many movies are reviewed by any reviewer.

    • So if we used an array, most positions would have “empty” values.

    • We solve this problem by implementing a “Sparse Matrix”.

3.4. Sparse Matrix

Sparse Matrix

3.5. What We Give You to Get Started

  • We specify the class name for the project (MovieRaterProj), an interface that you must implement (MovieRater), and the name of a class that implements MovieRater (MovieRaterDB).

  • This lets us write reference test cases for grading that make calls to the interface.

    • Reference tests do not write to System.out, or check the contents of System.out.

  • We give you some initial tests (MovieRaterTest) that are meant to demonstrate all the requirements related to formatting the interface method return values.

    • If we get questions indicating that we left something ambiguous, we will update the example tests for you to see.

    • Important service: We will check any tests added to MovieRaterTest against the reference implementation. This lets you verify that your tests are correct (meaning, that you have no misconceptions about the project requirements — if your tests are thorough).

  • The project design is pretty simple, because all that you really need to add is the implementation for the Sparse Matrix.