diff --git a/project-5/README.md b/project-5/README.md index ad4b31a..9f716e8 100644 --- a/project-5/README.md +++ b/project-5/README.md @@ -1,19 +1,21 @@ -Give a concise overview of your design for the new features. How did you divide the code into classes and methods? Make sure you address whether and how you refactored the code implementing earlier features. +**Give a concise overview of your design for the new features. How did you divide the code into classes and methods? Make sure you address whether and how you refactored the code implementing earlier features.** We created a new class Gesture. We decided to make a Playable interface that Gesture and Note implement. Each Gesture has a set of Playables that it contains. We also added the group and ungroup methods within the TuneComposer class. We built on the project 5 starter solution and did not refactor this code in a significant way. -Explain what, if anything, is particularly elegant about your solution and why it is elegant. For full credit, apply concepts, guidelines, and/or principles you learned in class. +**Explain what, if anything, is particularly elegant about your solution and why it is elegant. For full credit, apply concepts, guidelines, and/or principles you learned in class.** Having an interface is elegant because it deals with the similarities between notes and gestures. It made scheduling notes to be played and nesting gestures fairly simple to implement. Having a Gesture that is a set of playables allows a Gesture to contain notes and other Gestures. Each class inherits the abstract methods in the interface. -Explain what, if anything, in your solution is inelegant and why you didn't make it elegant (for example, maybe you didn't have time or the knowledge to fix it). For full credit, apply concepts, guidelines, and/or principles you learned in class. +**Explain what, if anything, in your solution is inelegant and why you didn't make it elegant (for example, maybe you didn't have time or the knowledge to fix it). For full credit, apply concepts, guidelines, and/or principles you learned in class.** -The Ungroup method seems inelegant because it contains three for loops, one of which is nested inside another. It also requires the creation of two new arraylists. It's less elegant because we wrote it last so we couldn't think of another way to get it to work at all within the infrastructure we had made for the gestures and also we were running out of time at that point. Also, the way makeGroup ended up being implemented is inelegant and is the result of a patch to a documented issue. Writing a more elegant version would have required rewriting and redesigning a lot of code and there wasn't time by the time the issue was discovered. +The Ungroup method seems inelegant because it contains three for loops, one of which is nested inside another. _So are you concerned about the cyclomatic complexity?_ It also requires the creation of two new arraylists. It's less elegant because we wrote it last so we couldn't think of another way to get it to work at all within the infrastructure we had made for the gestures and also we were running out of time at that point. Also, the way makeGroup ended up being implemented is inelegant and is the result of a patch to a documented issue. Writing a more elegant version would have required rewriting and redesigning a lot of code and there wasn't time by the time the issue was discovered. -Include an estimate of your velocity. How many story points did you estimate you would complete during this assignment? How many did you actually complete, how many person-hours did the team spend, and what is the ratio of points/person-hour? I want you to monitor your velocity to help you plan better over the final iterations. There are no "good" or "bad" numbers for velocity. +**Include an estimate of your velocity. How many story points did you estimate you would complete during this assignment? How many did you actually complete, how many person-hours did the team spend, and what is the ratio of points/person-hour? I want you to monitor your velocity to help you plan better over the final iterations. There are no "good" or "bad" numbers for velocity.** -We worked about 23 person hours on this project. We thought there would be about 5 story points and that seems fairly accurate having completed it. The ratio of points/person hour is 1/4 to 1/5. +We worked about 23 person hours on this project. We thought there would be about 5 story points and that seems fairly accurate having completed it. The ratio of points/person hour is 1/4 to 1/5. -How did you colloborate? What role[s] did each team member play? What went well that your team will keep doing during the next project assignment? What will you improve? How? +_This is really helpful! I'll be very curious to see if that estimate changes for Project 6._ + +**How did you colloborate? What role[s] did each team member play? What went well that your team will keep doing during the next project assignment? What will you improve? How?** We primarily did pair programmming and occasionally worked in groups of three. To a certain extent everyone played the roles of developer, solutions architecht, and quality assurance. Occasionally someone would perform some of the functions of the development lead. We liked using the GitHub issues feature to systematically handle one implementation challenge at a time. This also allowed us to update members of the group on what parts still needed to be implemented. Hopefully we will all be able to meet together at once more in the future. diff --git a/project-5/rubric.md b/project-5/rubric.md new file mode 100644 index 0000000..392b24f --- /dev/null +++ b/project-5/rubric.md @@ -0,0 +1,61 @@ +# GRADE: 59.5/64 + +## Functional and implementation requirements: 34/36 points total + +Earned|Possible|Requirement | Comments +------|--------|------------|---------- +1|1| Add two new menu items to the Edit menu called Group and Ungroup. +4|4| When the Group menu item is chosen, all selected note bars are grouped into one gesture. A gesture behaves as if it is just one note bar with a complex sound to it. If nothing is selected when the Group menu item is chosen, nothing happens. +2|2| Selecting any note in a gesture causes the same thing to happen to all the others in the gesture. +2|2| Unselecting any note in a gesture with control-click causes the same thing to happen to all the others in the gesture. +2|2| Drag-selecting over a gesture consistently selects or unselects all the notes in the gesture. +2|4| Dragging note bars in a gesture moves or stretches all notes in the gesture. | _Moves, does not stretch_ +3|3| Gestures are indicated visually by a thin black dotted line around the group of note bars. +1|1| A selected gesture is indicated using a style similar to that of a selected note bar. +4|4| Gestures can include note bars or other gestures (that is, gestures can be nested). +4|4| When the Ungroup menu item is chosen, the selected gesture is ungrouped. Note that nested inner gestures are not ungrouped; you have to ungroup the nested gestures separately after ungrouping the outer gesture. If no groups are selected when Ungroup is chosen, nothing happens. +1|1| After selecting the Group menu item, the new gesture becomes the only selected item. +2|2| After choosing Ungroup, all the inner notebars and gestures of the ungrouped gesture are selected. _All the selected gestures are ungrouped. Nice!_ + +### "Stretch goal" + +Earned|Possible|Requirement | Comments +------|--------|------------|---------- +0|0| When the right edge of a gesture is grabbed and stretched left or right, the duration and offset of everything in the gesture should stretch proportionally. + +### No regressions - 1.5/2 points + +Earned|Possible|Requirement | Comments +------|--------|------------|---------- +1.5|2| All prior requirements are met, unless they have been superseded by new requirements. _Please fix the issue about platform-independent keyboard shortcuts. It should not be difficult._ + +### Release tag - 1/2 points + +Earned|Possible|Requirement | Comments +------|--------|------------|---------- +1|2| The release is tagged as project-5-release. _It was tagged as ```project-5``` and ```project_5_, neither of which is exactly what I asked for. I had a hard time finding your UML._ + +## Reflection - 11/12 points + +For project 5 and beyond, I will expect your discussion of design and elegance to refer explicitly to design principles we have discussed in class. + +Earned|Possible|Requirement | Comments +------|--------|------------|---------- +3|3| UML | _Classname should be Note?| +2|2| Design overview +2|2| What is elegant? +1|2| What is not elegant? | _I'd like to see more application of design principles here._ +1|1| Velocity +1|1| Collaboration statement | _I like that you referred to some of the roles we read about._ +1|1| Team retrospective + +## Elegance - 10/12 points + +I looked at your UML diagram to assess the elegance of your class design. You will get a grade for class design starting with Project 6. +I spot-checked a new class (Gesture) and a modified class (TuneComposer) to assess method-level design and self-explanatory code. + +Earned|Possible|Requirement | Comments +------|--------|------------|---------- +0|0| Class design +8|8| Method design +2|4| Self-explanatory code | _See my issues on GitHub._