By: Team F10-3 Since: Aug 2019 Licence: MIT

1. Introduction

This portfolio provides an overview of the CS2103/T Revision Tool and highlights my contribution in the project including a brief description of the key features that I implemented.

1.1. The Team

Our team of 5 consists of 2 Year 4 Engineering Science students, a Year 2 Computer Science / Business student, a Year 3 Communications and New Media student and myself, a Year 4 Industrial & Systems Engineering student.

1.2. About the Project

This 7-week project was started as part of NUS' Software Engineering (CS2103/T) module. The team was required to to either morph or enhance an existing application (Address Book - Level 3). Our team decided to morph the project into the CS2103/T Revision Tool (RT), a desktop quiz application which allows users to create their very own personally customised question banks and attempt these questions in the format of timed quizzes in an interactive manner later on. The user interacts with it using a Command Line Interface (CLI), and it has a Graphical User Interface (GUI) created using JavaFX. It is written in Java, and has about 14 kLoC.

UI of the Configuration Mode

Ui

UI of the Quiz Mode

Ui2

2. Summary of contributions

As a member of the project, I have volunteered to set up the project on GitHub and invited all of the group members into our team Repo. I have helped out in milestones and project management. I have been actively monitoring the build status of our project on GitHub. Furthermore, I developed the data analytics part of the application.

  • Major enhancement: added data analytics for the quiz

    • What it does: stats command generates and displays a list of past results of quiz attempts and their respective breakdown into scores for each difficulty levels. For each quiz attempt, the application also indicates to the user which type of questions the user did the worst in. history command shows the raw history of all quiz results and its breakdowns by difficulty levels to the user. This feature also indicates the number of quizzes attempted by the user so far.

    • Justification: This essential feature aids in keeping a record of all quiz results. The feature carries out some data processing and analytics before reporting these extra information back to the user in a proper format. This feature significantly improves the product by providing additional helpful information to the user so as to aid in improving his or her quiz scores and ultimately her revision outcome.

    • Highlights: This enhancement required the deep understanding of the entire project structure including the new quiz driver feature that forms the backbone of the project. It involves passing and retrieving of information from UI to Storage. Some tests were written for this feature. The History Class is created for subsequent storage of any statistical information of past quizzes.

    • Credits: Code for the GUI display and storage of information of this feature was adapted from Address Book – Level 3.

  • Minor enhancements: added the delete multiple questions feature for the app

    • Enabled delete to remove multiple questions at once based on listed index in configuration mode.

  • Code contributed: You can view the code I contributed to this project here, window=blank

  • Other contributions:

    • Project management:

      • Managed releases v1.1 - v1.2 (2 releases) on GitHub

      • Managed and resolved issues actively throughout project duration.

    • Enhancements to existing features:

      • Wrote tests for Statistics and History related features created by me.

    • Documentation:

      • Created sequence diagrams for StatsCommand feature and class diagram for storage component of the app

      • Created sequence diagram to better explain how history of quiz results is updated after every successful completion of quiz.

3. Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

3.1. Check your progress: stats

stats

Displays the percentage of questions answered correctly by difficulty, for all quiz attempts. Indicates to user which difficulty level he or she is weakest in. This feature only records results for the normal mode of quizzes.

Format: stats

Example:

Total: 68.42%

  • Difficulty 1: 100.00%

  • Difficulty 2: 100.00%

  • Difficulty 3: 14.29%

  • Please prioritise this type of questions: Difficulty 3

3.2. More data analytics [coming in v2.0]

3.2.1. More statistics stats

Users will be able to view average scores across all attempts of quizzes. They will also be able to view statistics not just for difficulty levels, but also for individual categories. This will help them to prioritise and know exactly which type of questions they are weaker at. This feature will also indicate to users further that overall across all quiz attempts which type of questions needs to be prioritised. In addition, with all these in mind, users can then make use of the custom quiz mode in section 4.3 to get more practise on specific types of questions.

3.2.2. Graphs history

Currently, as of v1.4, this command only shows a raw full history of scores and their breakdown by difficulty levels for all past quiz attempts. The number of quizzes attempted by the user in total is also shown in the results display. By v2.0, users will be able to view line graphs of their history of quiz attempts' results by categories and difficulty levels. This will show them how much they are progressing in their quiz results for each different type of questions.

Stats/History: Hitting Enter again after executing a stats or history command will return you back to configuration mode displaying the question bank.

4. Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

4.1. Data Analytics

4.1.1. Overview

There are many ways to present additional data to the user. While looking at user stories and deciding what our target audience will need, we realised that one important information needs to be present - the type of questions that user performs the weakest in. In order to present this information to the user, we needed a way to record results of quizzes, store these results, break down these results according to question types and report the type of questions that the user has performed badly in. These will be showcased in the stats command feature.

4.1.2. Implementation

updateStatistics feature

Quiz results are first recorded by successful completion of quizzes in Normal mode. At each quiz attempt, a Statistics object is first initiated. Every correct answer parsed by the user will trigger the code snippet below to updateStatistics.

updateStatistics

The sequence diagram for interactions between the Logic component and the Model component, from parsing of a correct answer in the Logic component to updating the Statistics class in the Model component is already shown above in Figure 11.

updateHistory feature

After the user successfully completes a quiz in Normal mode, History will be updated with this 'Statistics' object. History serves as a storage component for quiz results. This is done using the code snippet shown below.

updateHistory

Given below is the sequence diagram for interactions between the`Ui`component, Logic component and the Model component, from handling the end of a quiz in the Ui component to updating the History class with the Statistics object in the Model component.

updateHistorySequenceDiagram
Stats Command Feature

Given below is the sequence diagram for interactions within the Logic component for the execute("stats") API call.

StatsSequenceDiagram

The stats command will first activated the parser in Logic before executing the StatsCommand. This will then get the list of past statistics of quiz results from the model before sending a feedback to the user through the CommandResultBuilder. The CommandResultBuilder will trigger the handleStats method to finally show the list of statistics in the MainWindow through the Ui.