Overview
3VIA is a desktop application that can be used by motivated learners who wants to reinforce their knowledge. 3VIA features 3 main components to facilitate this reinforcement of knowledge, namely learning, testing and reviewing. 3VIA was written using Java, with the user mainly interacting with 3VIA through command line but an user interface is also provided that was created using JavaFX.
Summary of contributions
-
Major enhancement: added Open Ended Test feature.
-
What it does: In this test mode, users are shown questions and they will have to key in their answer, and check if their user supplied answer is correct when compared with the correct answer.
-
Justification: It is 1 of the 2 testing features in 3VIA. It allows users to be able to test themselves on whether they have the knowledge in the topic that is tested.
-
Highlights: The feature was challenging because it dealt with multiple components,
Logic
,Model
,Storage
,Commands
and UI.
-
-
Code contributed: [Functional code & Test code]
-
Other contributions:
-
Project management:
-
Conceptualized future releases.
-
-
Enhancements to existing features:
-
Ported undo and redo functions from original AddressBook to 3VIA.
-
-
Documentation:
-
Updated user guide and developer guide for 3VIA.
-
-
Community:
-
Reviewed PRs of team members to improve code quality.
-
-
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. |
Undoing previous command : undo
Restores the app to the state before the previous undoable command was executed.
Format: undo
Undoable commands: those commands that modify the app’s content ( |
Examples:
-
delete 1
undo
Thedelete 1
command is reversed -
select 1
learn
undo
Theundo
command not executed as there are no undoable commands previously executed. -
delete 1
clear
undo
Theclear
command is reversed
undo
Thedelete 1
command is reversed. -
import C:\Users\username\Desktop\text.txt
learn
undo
Theimport
command is reversed
Redoing the previously undone command : redo
Reverses the most recent undo
command.
Format: redo
Examples:
-
delete 1
undo
`delete 1` command is reversed
redo
`delete 1` command is reapplied -
delete 1
redo
Theredo
command was not executed as there are noundo
commands previously executed. -
delete 1
clear
undo
`clear` command is reversed
undo
`delete 1` command is reversed
redo
`delete 1` command is reapplied
redo
`clear` command is reapplied. -
import C:\Users\username\Desktop\text.txt
learn
undo
`import` command is reversed
redo
`import` command is reapplied. === Starting an Open Ended Test:testO
Start an open-ended test of a specified topic. In an open-ended test, the user will key in their answer to the questions, and get the choose whether he/she has answered correctly by comparing their answers with the expected answer.
Format:testO TOPIC
The following commands can only be used during an Open Ended Test
.
Answering a question:
Type your answer in the command field and press enter
to submit your answer. If you don’t have an answer in mind, you can just press enter
with nothing in the command field. We accept your silence as an answer.
Format: ANSWER_FROM_USER
Determining the correctness of your answer:
After answering the question, you would be given a comparison between the expected and actual answer you entered. You would be required to determine the correctness of your answer since the questions are open ended. The app will keep track of your score.
Note: Any input that begins with 'Y' or 'N' will be acceptable inputs.
Format: Y
(correct) OR N
(wrong)
Quit the test:
Test is exited.
Format: exit
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. |
Open Ended Test
Current Implementation
The implementation of an OpenEndedTest is facilitated by the AppState
and OpenEndedTest
model.
The AppState
model defines the state of which the application is in, and that will affect the type of interactions the user can have with the program. The OpenEndedTest
model is a subclass of
TriviaTest
.
Additionally, OpenEndedTest
also implements the following operations:
-
OpenEndedTest#startTest()
— Does the necessary initialisations to start a OpenEndedTest. -
OpenEndedTest#stopTest()
— Does the necessary clean up to stop a OpenEndedTest. -
OpenEndedTest#recordAnswer(userInput)
— Records the user’s answer to a question. -
OpenEndedTest#addAttempt(userInput)
— Records the user’s input of whether an attempt is correct, and stores it together with the user’s answer into an Attempt.
These operations are exposed in the Model
interface as Model#startTriviaTest()
, Model#stopTriviaTest()
, recordAnswerToOpenEndedTest
and isOpenEndedTestAnswerCorrect
respectively.
The following activity diagram shows the complete lifecycle of a OpenEndedTest.

Given below is an example usage scenario and how the OpenEndedTest behaves at each step.
Step 1. The user enter theOpenEndedTest_ActivityDiagram testO
command and a new OpenEndedTestCommand
will be created.
Step 2. The OpenEndedTestCommand
will be executed and a new OpenEndedTest Object will be created as shown in the below Sequence diagram.

Step 3. After the OpenEndedTest has been started, the user can only input the following commands:
-
USER_INPUT
Will be the user’s answer to the question. It can be a blank line. [During Question State (Question is shown, waiting for user answer)]] -
IS_ANSWER_CORRECT
The user will indicate if the question was answered correctly. [During Answer State (Answer is shown, waiting for correctness)] -
exit
If the user inputexit
, the OpenEndedTest will end and the information related to that OpenEndedTest will not be recorded.
Step 4. When the user answers a question, the sequence will execute a list of steps, as shown in the sequence diagram below, to determine record the answer and display the correct answer.

Step 5. The user will now compare the user supplied answer with the card answer and manually indicate if the user supplied answer is correct. The sequence wull execute a list of steps, as show in the sequence diagram below, to record the card, user answer and correctness into an attempt and display the next question.

Step 6. After all cards have been answered, the System will store the results on the hard disk and display the test’s result.
Step 7. At this stage, the System will await exit
command from the user so that user can be taken back to the home page.
Design Considerations
Deciding correctness of user answer
-
Alternative 1 (current choice): Display the correct answer as well as user answer, and let the user decide if the answer is correct.
-
Pros: Flexible on the user side, easier to implement as there is no need for keywords that has to be supplied when importing cards to determine correctness when compared with user answer.
-
Cons: User determines the correctness, so it not a rigid system.
-
-
Alternative 2: Create a
List
of keywords that must be in user answer for it to be correct-
Cons: Additional work is required to determine the keywords when the cards are imported, as well as in parsing and comparing the user answer with the keywords to determine correctness.
-