As part of the CS2103 Software Engineering module at the National University of Singapore, I was part of a team of five tasked to develop an application from a given Java address book application, which will be called AB3 in the rest of the portfolio. We chose to morph it into NUStudy, an application for managing lecture notes, questions and revision tasks — all three things pertinent to the average university student, regardless of location. Like the original, it has a command line as its main method of interaction and a JavaFX GUI for display. It has around 5000 lines of code and looks like this:
This portfolio showcases my contributions to NUStudy: implementing the lecture notes by retooling the existing Person class, related documentation in the user and developer guides and management of the Git repository surrounding NUStudy. It also showcases my technical writing skills and my ability to explain complicated enhancements or modifications to the uninitiated person.
In this portfolio monospace
indicates command-line input (commands, parameters, etc.)
and italics mark class names. Pull requests and issues will be marked solely
by their numbers and a # sign (e.g. #1);
unless otherwise specified they refer to NUStudy.
This is a brief description of my contributions to NUStudy – to code, documentation and project management. These contributions show my ability to not only write good code, but also manage and synthesise team members' varying output into a coherent whole.
-
I was responsible for implementing lecture notes (starting from #34). These are simple items with a title, some content and optionally an image. For this I modified the existing Person class in the original address book application and its associated commands (AddCommand, EditCommand, etc.) — I did not have to make any new classes.
-
Lecture notes are the primary source of a student’s acquired knowledge in university, yet they come in many formats. Having a unified appearance helps the student understand the content of lecture notes better, by removing unnecessary markup and distracting styles.
-
While adding this feature I also refactored all other code throughout the application to use names relevant to lecture notes. This helped my teammates add their own features, setting an example for them to follow.
-
Image support was implemented starting from #67. Instead of a custom class, I used JavaFX’s scene.image.Image, which reduced the additional code I had to write on top of the Title and Content classes by avoiding an unnecessary wrapper.
-
-
As my fellow team members added their features to the code, one of the constructors of CommandResult grew to have four boolean variables representing command side effects. In #71 I replaced the boolean arguments of this constructor with a single integer argument acting as a bit field.
-
This serves two purposes: to avoid unnecessary use of the boolean literals and to allow easy extension to more side effects by increasing the range of the integer argument.
-
-
I enforced a style for the user and developer guides and wrote several of their key sections, such as the user guide’s introduction and the developer guide’s non-functional requirements. See #21 and #22 for examples.
-
In v1.4 I improved the graphical user interface in response to bugs filed by other people (#148).
-
I was the lead integrator for NUStudy:
-
Managed all four releases (v1.1 to v1.4) on GitHub
-
Set up Travis and Netlify for the project, enabling continuous integration and previews of documentation
-
Resolved merge conflicts for teammates' pull requests (see #44 for an example)
-
Attached milestones and labels to issues and pull requests where the original authors failed to specify them
-
Before v1.2, the only person who could merge pull requests
-
-
I contributed to forum discussions, both as a receiver (#88, #106) and source (#68, #100) of information.
-
I reviewed the following pull requests non-trivially, among others: #40, #49, #53, #70.
-
Whenever I could, I resolved issues assigned to teammates other than me, e.g. #123, #131, #141.
-
A detailed exposition of all code I contributed to NUStudy can be found here.
Our application’s user guide had to be updated with the new features we added in code. The sections below are what I wrote for my features, demonstrating my ability to write clear, concise end-user documentation.
In addition, I also harmonised the layout of the user guide and formatted other team members' contributions to said guide in a common manner.
Like other projects in CS2103, there is the expectation that future developers could build on NUStudy. Thus we also updated the developer guide; below are my principal contributions to it, showcasing three aspects: my ability to write technical documentation, the complexity of what I contributed in code and my proficiency in using diagrams to explain my work.
Both the use of a JavaFX built-in object for images and the system-dependent implementation of graphical objects required me to make certain critical decisions regarding image support in lecture notes.
The remaining documentation, shown below, is my contribution to the developer guide concerning aspects not directly related to source code – use cases, non-functional requirements and a glossary.