Daniel Shu and Sitao Chen
github id:
shudaniel
sitaochen
-
a. This is a binary clock, which displays the current time in base 2 represented by colored blocks.
-
b. As a user, I can open the Help menu so that I can view the instructions about how to read the binary clock. As a user, I can open one of the color menus so that I can change the color of the background or the on/off block. As a user, I can open the Screen Settings menu so that I can maximize of minimize the size of the blocks against the background.
-
c. The software does run. Right now, it only displays a bunch of flashing blocks that represent the time in binary. There are options to change the coloring or to pull up the instructions.
-
d. Instead of having an am/pm column, there could be an additional option to display the clock as a 24 hour clock in binary. Add the option to make some noise notification on the hour. Add an alarm that will go off at the exact second it is set to. Add the option to change to a hexadecimal or an octal clock.
-
e. The quality of the README is pretty good. It clearly documents how the code is separated into the different files and how to run the program. To improve it, there could be additional sections describing the different seting options. It, however, does not mention which classes are used and which ones are not. For example, the Circle.java and the BlockTut.java are currently not used.
-
f. TargetS "jar", "mantisJavadoc", "mantisJws" and "javadoc" need descriptions. According to the issues list, there is old legacy JWS stuff that needs to be removed, such as all the "mantis" tasks. The build.xml file overall, however, is clear and organied. All the 'expected' targets, such as run and compile, are present and clear in how they work.
-
g. Yes, there are enough issues that statisfy 1000 points. The issues are very clear about what they want, except the java.lang.StackOverflowError which is intentionally vague.
-
h. Refactor how TimePanel creates Blocks: #62
-
i. The main method is located inside BinaryClock.java, and BinaryClock.java also constructs the menubar GUI and puts together all the components. The TimePanel.java class creates the Block objects that makes up the clock. There is a Circle class that is not used in any of the classes. The BlockTut.java class, according to the comments, is currently bugged, and after searching through the code, we found that it is not used anywhere. It is meant to serve as a tutorial for the clock. All the classes have straightforward TO-DO lists about things to fix/add and comments about what the class is intended to do. The relationships between classes are documented in the README.md file, and in general the dependencies seem clear. In the TimePanel class, some of the code are repetitive and they can be refactored to be more efficient, flexible, and follow DRY. Also, the TimePanel hardcodes every single Block object. For other programmers, I would tell them to look at BinaryClock class first because it is the main class which calls other classes. We would suggest factoring out all the menubar so if additional menu settings wanted to be added, then the existing code would not have to be touched. This way, we could follow the Open-Closed principle. I would also say the Circle class is not used in any other classes.
-
j. BinaryClock has no test coverage. There are no JUnit tests for any of the methods. There is every opportunity to expand test coverage because there currently is none. The main features of the clock are the different display options, so there should be one test for each menubar feature. The TimePanel and Block objects also have their own individual methods that need to be tested. If we refactor the TimePanel to not hardcode each Block and instead make it more flexible, then we will have to write tests for that as well.