WCDB3


Due: Thu, 17 Apr 2014, 10pm
80 pts, 8% of total grade.


Specification


Write a program to import and export validated XML of world crises using Element Tree.

For all projects, the minimum requirement for getting a non-zero grade is to write standard-compliant Python (2.7 or 3.2.3), to satisfy all of the requirements in the table below, including the precise naming of all the files, and to fill out the Google Form.

For this project, the additional minimum requirement for getting a non-zero grade is that you use Element Tree.

IMDB has two major kinds of relations: movies/shows and people. Movies/shows link to people and people link back to movies/shows.

WCDB will have three major kinds of relations: crises, organizations, and people, and again each will link to the others.

There will be three phases.

Phase Features
III Using the MySQL schema chosen by the grader, optimize its normalization.
Adapt the import/export facility to the new MySQL schema.
The import facility must import into the MySQL DB. The export facility must export from the MySQL DB.
The import facility must be modified to handle the merging of data. There is no right or wrong way to do this. Come up with the best design that you can and be sure to documnent it. Import/export the data of all of the other groups.
Adapt the set of unit tests to test the MySQL DB.
Adapt the UML class diagram of the MySQL DB design.
Use any UML editor that you like.
The diagram must only show the associations and multiplicity between the classes.
Create five interesting and unique queries, specified only in English. Post them to Piazza.
Implemenent the queries of your group and of all the other groups. Reach a consensus on their results. The results will not match perfectly between groups, because the merging import design will differ somewhat between groups.
Create a critique of your final project by answering the following questions:
What did we do well?
What did we learn?
What can we do better?
What puzzles us?
Create a Prezi presentation. Include the critique above.
Give a 15 min presentation in class.
Everyone must participate.
Each member must get equal time.
Walk through the Prezi presentation and include the critique above.

The relations must contain the following:

Relation Attributes
Crisis name, kind, location, date and time, human impact, economic impact, resources needed, ways to help, image URLs (e.g. Bing, Flickr, Google), video URLs (e.g. Bing, Google, Vimeo), map URLs (e.g. Google Maps), social network feed URLs (e.g. Facebook, Twitter), citations, external link URLs, organizations, people
Organization name, kind, location, history, contact info, image URLs (e.g. Bing, Flickr, Google), video URLs (e.g. Bing, Google, Vimeo), map URLs (e.g. Google Maps), social network feed URLs (e.g. Facebook, Twitter), citations, external link URLs, crises, people
Person name, kind, location, image URLs (e.g. Bing, Flickr, Google), video URLs (e.g. Bing, Google, Vimeo), map URLs (e.g. Google Maps), social network feed URLs (e.g. Facebook, Twitter), citations, external links, crises, organizations

The Prezi presentation must contain the following:

Part Features
Title The group name.
The group members.
The major responsibility of each group member.
Import/Export Describe the design of merge.
Documentation Show the documentation produced by pydoc.
Unit Tests Run the unit tests.
Issue Tracker Show the issue tracker in GitHub, pointing out total issues, resolved issues, unresolved issues, and owners of the issues.
Critiques Present the critiques.
Other Bring a laptop for the presentation and double check that you have everything you need before (e.g. the right adapter).
Double check the resolution that results when using the projector.
Practice and time the presentation.
To the best of your ability, do not demo anything that you haven't tested! What would Steve Jobs do!
The grade for the presentation will be totally determined by your peers.

Groups


Pick a project leader for the group. A group member can only be project leader once.

Once the grader has graded the project, that will be the project grade.

The project leader will always receive the project grade.

The project leader can add or subtract up to 10 points to or from any member of the group in exchange for adding or subtracting the same amount of points from the other member(s) of the group.

For example, the leader could add 10 points to person A, and subtract 5 points from person B and person C.

The leader will report those adjustments in the Google form.

Tools


Guides


Requirements


Points Description Files
1 5 pts A private Git repository at GitHub, named cs327e-wcdb, with the grader invited as collaborator and at least 5 commits, one for each bug or feature.
If you cannot describe your changes in a sentence, you are not committing often enough. Meaningful commit messages identifying the corresponding issue in the issue tracker (below). See here.
cs327e-wcdb
2 5 pts A GitHub issue tracker with an issue for each of the requirements in this table and at least 10 more issues, one for each bug or feature, both open and closed with a good description and a label.
Use milestones: wcdb1, wcdb2, and wcdb3.
3 5 pts An average of at least 3 unit tests for each function, in the files TestWCDB.py and TestWCDB.out.xml, that tests corner cases and failure cases.
A clone of the public test repo with a copy of your unit tests in the files <group-name>-TestWCDB.py and <group-name>-TestWCDB.out.
TestWCDB.py
TestWCDB.out
4 10 pts At least 10 acceptance tests (separated by one blank line) with at least 500 lines total, in the files RunWCDB.in.xml and RunWCDB.out.xml, that tests corner cases and failure cases.
A copy of your acceptance tests in the files <group-name>-RunWCDB.in.xml and <group-name>-RunWCDB.out.xml in the public test repo.
RunWCDB.py
RunWCDB.in.xml
RunWCDB.out.xml
5 10 pts A standard-compliant Python (2.7 or 3.2.3) program in the file WCDB.py, with assertions that check pre-conditions, post-conditions, argument validity, and return-value validity, that runs as fast as possible and uses as little memory as possible. WCDB.py
6 5 pts A MySQL schema in the file <group-name>-WCDB.sql in the public test repo. WCDB.sql
7 10 pts The MySQL queries in the files <group-name>-Queries.sql and <group-name>-Queries.html in the public test repo. Queries.sql
Queries.html
8 5 pts HTML documentation in the file WCDB.html, that documents the interfaces to your functions.
Inline comments if you need to explain the why of a particular implementation.
A consistent coding convention with good variable names, good indentation, blank lines, and blank spaces.
WCDB.html
9 5 pts The UML diagram. UML.pdf
10 20 pts The presentation.
You can submit this separately on the day after your presentation.
Presentation.pdf
11 A makefile. makefile.py
12 A Google Form.

Checklist


  1. Create a private Git repository at GitHub, named cs327e-wcdb.
  2. Use the same repo for all three phases.
  3. Add all of the requirements (above) to the issue tracker at GitHub.
  4. Clone your private WCDB repo onto your local directory.
  5. Invite the grader to your private WCDB repo.
  6. Confirm that the grader has invited you back to the public test repo.
  7. Clone the public test repo onto your local directory. It is critical that you clone the public test repo into a different directory than the one you're using for your private WCDB repo.
  8. Copy the WCDB files from the clone of the public class repo to the clone of the private WCDB repo.
  9. Write unit tests in TestWCDB.py until you have an average of 3 tests for each function, confirm the expected failures, and add, commit, and push to the private WCDB repo.
  10. Adopt and normalize the MySQL schema chosen by the grader.
  11. Implement and debug the simplest possible solution in WCDB.py until all tests pass and add, commit, and push to the private WCDB repo.
  12. Import all of the data on from the other groups.
  13. Copy your unit tests, your acceptance tests, and your MySQL schema to your clone of the public test repo, rename the files, do a git pull to synchronize your clone, and then add, commit, and push to the public test repo.
  14. Run pydoc on WCDB.py.
  15. Adapt the UML diagram.
  16. Fill in the Google Form.
  17. It is your responsibility to protect your code from the rest of the students in the class. If your code gets out, you are as guilty as the recipient of academic dishonesty.

Grader


Name GitHub ID GitHub Test Repository Google Form
Fiona Lara fiofou wcdb-tests Google Form

Submission


Provide your git SHA in the Google Form.

Obtain your git SHA with

git rev-parse HEAD

Make sure you have the following files:

  1. makefile
  2. Presentation.pdf
  3. Queries.html
  4. Queries.sql
  5. RunWCDB.in.xml
  6. RunWCDB.out.xml
  7. RunWCDB.py
  8. TestWCDB.out
  9. TestWCDB.py
  10. UML.pdf
  11. WCDB.html
  12. WCDB.py
  13. WCDB.sql