CSSE 220 – Object-Oriented Software Development
Vector Graphics Team Project

Overview

For this project you will create a program for drawing “vector graphics”. Unlike the graphics created by a program like Paint in Windows, vector graphics store each shape separately. This allows individual shapes to be selected, resized, moved, layered, or deleted independently of the other shapes. And because the program records the properties of each shape, you can zoom in on a vector graphics image without it becoming pixelated. Examples of vector graphics programs include Visio, the shape drawing facility in Microsoft Word and Powerpoint, and OmniGraffle for the Macintosh.

Here is a cool QuickTime movie about the project (circa 27 MB).

Administrative Background

Team Assignment

This is a team assignment. That means that some “divide and conquer” is valuable (indeed, necessary!) and appropriate.

It is also a learning experience. To that end:

Team Grading Note

If all team members obey the above two rules for an appropriate learning experience, and if all team members “carry their weight” in the project, then all team members will receive the same score for this assignment.

Subversion Repository

Your SVN repository for this assignment is:

    http://svn.cs.rose-hulman.edu/repos/csse220-200930-TeamX
where X is your team number (1, 2, 3, ...). You should check out the VectorGraphics project from this repository, and all subsequent work should be placed in this project folder and committed back to your repository.

Add ordinary (non-code) files to your Eclipse project as follows:

  1. Outside Eclipse, put the file into your VectorGraphics project (under C:\JavaProjects or wherever your workspace is), in the appropriate subfolder.
  2. Within Eclipse, right-click the VectorGraphics project folder in the Package Explorer view, and choose Refresh.
  3. Your file should appear under the subfolder you placed it in. Now right-click the VectorGraphics project folder again, and choose Team → Commit. Be sure the new file is checked so that it is added to the repository. Enter an appropriate message and complete the commit.

Process

You will use many of the Rules and Practices of Extreme Programming. In particular, you will use:

Deliverables

Milestone dates are listed in the table below. This rest of this section describes the artifacts (deliverables) due at each milestone. Follow the instructions carefully.

You will usually have half of each of our sessions to work on your team project. (We'll do other, individual work in the other half of each session.) You should usually use your in-class team time to:

That way you will minimize the amount of out-of-class team meetings necessary.

Project Schedule and Milestones

Cycle 0 (for specification and design — not a development cycle) Cycle 1 Cycle 2 Cycle 3
April 23 - 28 April 28 - May 1 May 1 - 5 May 5 - 11

 

Milestone date Time due Deliverable(s) due
Friday, April 24 By the END of class: Screen Layout sketch, draft (you'll do these in class)
CRC cards (you'll do these in class)
Monday, April 27 By 10 p.m. Screen Layout sketch, final
  • This should be a “final” draft, in that you are ready to work from it, but you are permitted to change your Screen Layout / User Interface during the project.
  • If you do choose to make changes, make sure that all team members agree to the changes. One way to be certain of agreement is to update the Screen Layout sketch and have everyone initial the updated sketch.
UML class diagram
  • I'll give you feedback on your UML class diagram in class the following day.
  • Your UML class diagram is a living document. It will almost certainly change some (hopefully not radically) during the project. Just commit the new version to your repository, each time you make changes.
  • At this point, your UML class diagram should contain all the classes you anticipate for the project, with all their relationships (arrows). It should also contain details (attributes and properties) that you can already see to be relevant, although many of those details will await your UML class diagram update for Cycle 1 (see below).
  • Do NOT do ANY CODING of VectorGraphics until:
    1. You have done your User Stories for Cycle 1 (in class), AND
    2. I have approved your UML class diagram.
    • You can do Swing Experiments, just not VectorGraphics itself.
Tuesday, April 28 By the BEGINNING of class: Cycle 0 Swing Experiments (if any)
Cycle 0 Individual Reports (one for each team member)
By the END of class: Cycle 1 User Stories
UML class diagram UPDATED to contain details (attributes, properties) relevant to Cycle 1
  • Do NOT do ANY CODING of Cycle 1 until:
    1. You have done your User Stories for Cycle 1, AND
    2. I have approved the draft of your UML class diagram, AND
    3. You have updated your UML class diagram for Cycle 1.
  • Implement by using documented stubs. Commit your work after stubbing, to demonstrate that you are doing so.
  • Do at least 1/3 of your coding using pair programming. Document this in your individual reports.
Cycle 1 Task List
  • Your Task List can (and often will) change during the cycle. Commit changes to your repository when you update the file.
By midnight: Your Team Evaluation Survey for Cycle 0
Friday, May 1 By the BEGINNING of class: Cycle 1 Swing Experiments (if any)
Cycle 1 Status Report
Cycle 1 Individual Reports (one for each team member)
By the END of class: Cycle 2 User Stories
UML class diagram UPDATED to contain details (attributes, properties) relevant to Cycle 2
  • Do NOT do ANY CODING of Cycle 2 until:
    1. You have done your User Stories for Cycle 2, AND
    2. You have updated your UML class diagram for Cycle 2.
  • Implement by using documented stubs. Commit your work after stubbing, to demonstrate that you are doing so.
  • Do at least 1/3 of your coding using pair programming. Document this in your individual reports.
Cycle 2 Task List
  • Your Task List can (and often will) change during the cycle. Commit changes to your repository when you update the file.
By midnight: Your Team Evaluation Survey for Cycle 1
Tuesday, May 5 By the BEGINNING of class: Cycle 2 Swing Experiments (if any)
Cycle 2 Status Report
Cycle 2 Individual Reports (one for each team member)
By the END of class: Cycle 3 User Stories
UML class diagram UPDATED to contain details (attributes, properties) relevant to Cycle 3
  • Do NOT do ANY CODING of Cycle 3 until:
    1. You have done your User Stories for Cycle 3, AND
    2. You have updated your UML class diagram for Cycle 3.
  • Implement by using documented stubs. Commit your work after stubbing, to demonstrate that you are doing so.
  • Do at least 1/3 of your coding using pair programming. Document this in your individual reports.
Cycle 3 Task List
  • Your Task List can (and often will) change during the cycle. Commit changes to your repository when you update the file.
By midnight: Your Team Evaluation Survey for Cycle 2
Monday, May 11 By 10 p.m.: Cycle 3 Swing Experiments (if any)
Cycle 3 Status Report
Cycle 3 Individual Reports (one for each team member)
Final working code
By midnight: Your Team Evaluation Survey for the entire project

Screen Layout sketches

Before brainstorming candidate classes using CRC cards (see next section), you will find it helpful to make some sketches of potential screen layouts (depicting user interfaces) for your project.

Reach consensus in class on a draft of the Screen Layout sketch that you will use. Then, one or more team members may finish the sketch outside of class.

To be turned in:

  1. Your Screen Layout sketch must be a PDF file named something like ScreenLayout.pdf.

  2. Place your Screen Layout sketch in the Planning subfolder of your project.
  3. In Eclipse, refresh if needed and commit the change.

CRC Cards and UML Class Diagram

You must use the object-oriented design technique discussed in your textbook (Chapter 8, sections 1 and 2, and Chapter 12) and in class to generate CRC Cards and a UML Class Diagram for your project.

You must draw your UML Class Diagram using UMLet.

To be turned in:

To turn in your CRC Cards:

  1. Put your team number on the back of each of your completed CRC Cards and hand them in when you complete them in class.
  2. We'll promptly scan them into a file called CRCCards.pdf
  3. We'll commit them to your VectorGraphics project in your team repository for you, in the Planning   subfolder.

To turn in your UML Class Diagram:

  1. Your UML Class Diagram must be in two files: as a UXF file (native format for UMLet) AND as a PDF file. named something like UMLClassDiagram.uxf and UMLClassDiagram.pdf, respectively.

  2. Place your UML Class Diagram files in the Planning subfolder of your project.
  3. In Eclipse, refresh if needed and commit the change.

User Stories

Short development cycles are a key feature of Extreme Programming. This is especially useful for projects where the development team—that’s you—is unfamiliar with the problem to be solved. At the start of each development cycle, the team negotiates with the customer on the work to be accomplished during that cycle.

The customer suggests user stories to be completed. These are short, often one sentence, descriptions of what the user would be able to do with the software. For example,

User launches program and sees a blank drawing area and some buttons representing actions that could be taken.

This story doesn’t say anything about the buttons actually working, so that is not part of this user story. A user story for a button working might be something like,

User clicks the Rectangle button and can then draw a rectangle in the drawing area by clicking and dragging the mouse.

User stories are powerful in two important ways. First, they make it very clear how to test whether the story has been completed. Second, they keep the development team focused on the importance of meeting the needs of the user.

After the customer has suggested some user stories for the cycle, the development team will decide whether it is reasonable to complete them all in the time available. If not, the customer will withdraw some of the proposed stories until an achievable set of stories is agreed upon.

For this assignment you’ll play both the customer role and that of the development team. As a customer, the number of features completed will help determine your grade (and how much fun you have with the project). As a development team, you’ll have to do the work to implement the user stories.

At the START of each development cycle, you should write a short text document that lists the user stories that you plan to complete during that cycle.

To be turned in:

To turn in your user stories, at the beginning of EACH development cycle:

  1. Your User Stories document must be a TEXT file named something like CycleNUserStories.txt, where N   is the cycle number (1, 2, or 3).
  2. Place your CycleNUserStories.txt document in the Planning subfolder of your project.
  3. In Eclipse, refresh if needed and commit the change.

Task Lists

After you write your user stories for a cycle, make a task list for implementing those user stories.

This document should contain a list of tasks that you think you have to do to implement the user stories for the cycle. (Also include other major tasks done during the cycle like doing Swing Experiments.)

To be turned in:

To turn in your task lists, at the beginning of EACH development cycle:

  1. Your Task List document must be a TEXT file or   a Microsoft Word document (your choice) named something like CycleNTaskList.txt or CycleNTaskList.doc or CycleNTaskList.docx, where N   is the cycle number (1, 2, or 3).
  2. Place your Task List document in the Planning subfolder of your project.
  3. In Eclipse, refresh if needed and commit the change.

Status Reports

At the END of each development cycle, you should write a short text document indicating either that you completed all of the user stories for the cycle or else listing any user stories the team planned to complete but was not able to. Briefly state any complications that prevented you from completing the stories, for example, “We underestimated how hard it would be to implement mouse dragging.” If you implemented any important features beyond your planned user stories, indicate so.

To be turned in:

To turn in your status report, at then end of EACH development cycle:

  1. Your Status Report document must be a TEXT file named something like CycleNStatusReport.txt, where N   is the cycle number (1, 2, or 3).
  2. Place your CycleNStatusReport.txt document in the Planning subfolder of your project.
  3. In Eclipse, refresh if needed and commit the change.

Individual Reports

One of the hardest skills to develop in software engineering is how to estimate how long it will take to implement a given feature. According to the Personal Software Process (PSP), one of the best ways to being developing this skill is to:

  1. For each feature you implement or task that you do, estimate how long you think it will take you to do that task.
  2. Measure how long it in fact took you to do that task.
  3. Note the difference between (a) and (b).
Over time, your estimates improve, as you notice when you overestimate and when you underestimate.

To this end, throughout the project, keep track of and record:

Note that you plan EVERY major task (including non-programming tasks) and estimate the time required for EVERY such task and measure the time it took (to the nearest hour) and record the time it took.

At the end of EACH cycle (including Cycle 0), list your records in a short TEXT file with 3 columns: one for each of the three bullets list above. After the last line, sum columns 2 and 3. For each line, indicate whether it was a whole-team activity, my yourself, with a partner, or (especially important) if it was pair programming. For example, someone's Individual Report for Cycle 0 might be:

			Design the user interface by doing a draft of the Screen Layout, whole team:                      1  1
			Begin the OO design by using CRC cards, whole team:                                               1  1
			Complete the Screen Layout draft, by myself:                                                      1  2
			Do the outline of the UML class diagram, whole team:                                              1  1
			Complete the UML for the VGFrame, Shape, Rectangle and Ellipse classes, with Husna:               3  2
			Do a Swing Experiment to learn about JSliders, pair programming with Nyimbo (NOT YET COMPLETED):  3  0
			Total:                                                                                           10  7
		

To be turned in:

To turn in your Individual Report, at then end of EACH development cycle (including Cycle 0):

  1. Your Individual Report document must be a TEXT file named something like CycleNXXXIndividualReport.txt, where N   is the cycle number (0, 1, 2, or 3) and XXX   is your username.
  2. Place your CycleNXXXIndividualReport.txt document in the Planning subfolder of your project.
  3. In Eclipse, refresh if needed and commit the change.

Swing Experiments

When you intend to use a Swing class that no one on your team has used before, you should assign a team member to research it right away. That person should find and/or write a small program that uses the class, so you can become knowledgeable about the class before you need to incorporate it into your larger program.

You might have only one or two Swing Experiments or many, depending on the extent to which your GUI uses Swing classes that you have not yet experienced.

To be turned in:

To turn in your Swing Experiments, simply put them in the swingExperiments package in your repository, at any point during the project.

Final Working Code

We’ll grade the version of your code committed to your repository at the final-working-code deadline. Your code should be appropriately-commented and should use good style, including (but not limited to) appropriate class, method, field, and variable names. No Eclipse warnings (or errors!) should remain for your final code.

If there are aspects of your classes that can be tested apart from the GUI, then you should provide JUnit tests for those features.

Some comments on Subversion and team projects:

Commit your code often. And don’t forget to update your code before working and before committing. The chances of SVN conflicts grow exponentially with the number of team members, but they decrease with the number of lines of code in the project. The net result is that you’ll have more trouble at the beginning of a project. For this reason it makes a lot of sense to take care to work on completely different classes in the beginning.

Team Evaluation

For each cycle (including Cycle 0), we will post a team evaluation survey on ANGEL. You will receive individual points for completing the survey. I will also use the survey results to help decide whether to give different assignment scores to different team members and to repair any dysfunctional teams. Perhaps most importantly, the survey results will help both you and me identify where you are doing well as a teammate and where you can improve.

Features

This QuickTime movie shows how the developers of OmniGraffle implemented the features below. You don’t have to implement the features the same way they did—I’d be amazed if you did—but hopefully the movie clarifies what a user could do with each feature.

Required Features

A successful program must include all of the following features:

Additional Features

Once your team completes the required features, you should try to complete as many of these additional features as time permits.

Bonus Features

If your team completes all of the required and additional features above, then you can implement some of these bonus features. I’ll only award bonus points for these if all of the required and additional features are also implemented correctly.

Grading

The above section lists the features that your program is required to have and several potential additional features. This is still a fairly new project (and completely new to me), so I’m not sure what to expect. That said, here is my grading plan: First, compute the process score, which is 30 points based on:

Then compute the implementation score, which is 70 points as follows: Your overall score is the sum of your process and implementation scores.