Overview
SuperTA is a class management tool created for School of Computing (SoC) Teaching Assistants (TA) and professors. It enables the TAs and professors to better manage their tutorial classes and streamline trivial process such as attendance marking and assignment marks management.
This project involves a team of Computer Science (CS) undergraduates to develop a software from an existing software product. The 10KoC codebase was originally adapted from Seedu’s AddressBook – Level 4 application. The user of interacts with SuperTA using a CLI, and it has a GUI created with JavaFX.
Summary of contributions
-
Major enhancement: enhancement made to find command (#64)
-
What it does: allows the user to find students in the software and list the students according to the searched keyword.
-
Justification: Previously, user can only search students using name. After the enhancements are made, user can now search students using other parameters such as phone number or student ID. This enhancement improves the product usability as users can now find their desired result more easily.
-
Highlights: Further improvements on the command will be needed in the future as more parameters are added into the software such as tutorial groups and assignment grades.
-
Credits: Most of the codes are adapted from Seedu’s Addressbook application, and further enhancements are made thereafter.
-
-
Minor enhancement: added
UpdateAssignmentCommandwhich allow users to edit an existing assignment details (ie assignment title, maximum marks) from an existing tutorial group. (#152) -
Code contributed: (https://nus-cs2103-ay1819s1.github.io/cs2103-dashboard/#=undefined&search=darieca)
-
Other contributions:
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. |
Locating students by keywords: find
Finds and lists all students in the SuperTA client whose information matched with the entered keywords.
Format: find [n/NAME] [p/PHONE] [e/EMAIL] [id/STUDENT-ID]
Examples:
-
find n/John
ReturnsjohnandJohn Doe -
find p/91234567
Returns student with phone number91234567 -
find e/Johndoe@hotmail.com
Returns student with emailJohndoe@hotmail.com -
find n/John id/A0123456T
ReturnsjohnandJohn Doeand student with student idA0123456T -
find n/Alice n/Hans
ReturnsHansonly
Update an Assignment: update-assignment
Updates an existing assignment’s details such as title and maximum marks.
Format: update-assignment tg/TUTORIAL-GROUP-ID as/OLD-ASSIGNMENT-TITLE
[new_as/NEW-ASSIGNMENT-TITLE] [new_m/NEW-ASSIGNMENT-MAX-MARKS]
Examples:
-
update-assignment tg/04a as/lab1 new_as/lab2
Updates an assignment namedlab1tolab2for the tutorial group with an ID of04a. -
update-assignment tg/04a as/lab1 new_m/50
Updateslab1assignment maximum marks from40.0to50.0marks for the tutorial group with an ID of04a. -
update-assignment tg/04a as/lab1 new_as/lab2 new_m/50
Updates an assignment namedlab1and maximum marks of40.0, to assignment namedlab2and maximum marks of50.0for the tutorial group with an ID of04a.
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. |
Find feature
Current Implementation
The find command is facilitated by the FindCommand class.
It extends the abstract class Command,
and it is triggered when the user enters find into SuperTaClient.
The sequence diagram below shows the overview when FindCommand is called:
The FindCommand is implemented as follows:
-
LogicManageris called to execute the entered argument. -
LogicManagercallsSuperTaClientParser, and parses the argument through the methodparseCommand(). -
SuperTaClientParsercalls its respective command parsers of the argument usingparse(). In this case, theFindCommandParseris called. -
FindCommandParserwill now parse the arguments and turn intoname,phone,emailandstudentIDpredicates. These predicates will be passed toFindCommand. -
When
LogicManagerinvokesexecute(),FindCommandwill callupdateFilteredStudentList()to the model component and update the student list to the latest results.
Design Considerations
Aspect: How FindCommandParser parse predicates
-
Alternative 1 (current choice): Each parameter field (ie
name,phone) are parsed into its respective predicates (ie.namePredicate,phonePredicate).-
Pros: Easy to implement. Predicates are grouped into how they are parsed.
-
Cons: Less user-friendly. Users are required to remember the prefixes for each field.
-
-
Alternative 2: Parse all arguments into a general
string, then search all the fields and stored into a main predicate.-
Pros: More versatile and user-friendly. The
stringis able to search all the fields. -
Cons: Slightly more tedious as compared to alternative 1. The general
stringneeds to parse into respective field objects and predicates for each available parameter.
-
Update Assignment feature
Current Implementation
The update-assignment command is facilitated by UpdateAssignmentCommand class.
It extends the abstract class command,
and it is triggered when the user enters update-assignment into SuperTaClient.
Actual changes of this command are made through Model#updateAssignment().
The UpdateAssignmentCommand is implemented as follows:
UpdateAssignmentCommand only works when there is an existing assignment in an existing tutorial group,
and the updated assignment name is not the same as other existing assignment title.
In this implementation, it is assumed that there is a valid tutorial group and a valid existing assignment.
|
update-assignment command-
LogicManageris called to execute the entered argument. -
LogicManagercallsSuperTaClientParser, and parses the argument through the methodparseCommand(). -
SuperTaClientParsercalls its respective command parsers of the argument usingparse(). In this case, theUpdateAssignmentCommandParser()is called. -
UpdatAassignmentCommandParserwill now parse the arguments. -
UpdateAssignmentCommandParserwill create a newUpdateAssignmentDescriptorand set the updated assignment details, which later will be passed toUpdateAssignmentCommand. -
When
LogicManagerinvokesexecute(),UpdateAssignmentCommandwill callupdateAssignment()to the model component.
update-assignment command-
When
updateAssignment()is called inModelManager, it will retrievetutorialGroupandassignmentinformation fromSuperTaClientandTutorialGrouprespectively. -
After locating the specific
assignmentto be changed,ModelManagernow callsupdateAssignment()toUiqueAssignmentListto replace the old assignment details. -
Updated information will be returned to the
logiccomponent (as ‘updated’) in the above diagram.
Design Considerations
Aspect: Implementation of UpdateAssignmentDescriptor in UpdateAssignmentCommand
-
Alternative 1 (current choice): Use of
UpdateAssignmentDescriptorinUpdateAssignmentCommandto store the updatedassignmentdetails.-
Pros: Strengthen Single Responsibility Principle (SRP), as the
UpdateAssignmentCommandwill not need to check for differences between the old and updatedassignmentdetails. -
Cons: May increase coupling. If the additional
assignmentdetails are added in in the future such as section maximum marks,UpdateAssignmentDescriptorhave to change accordingly as well.
-
-
Alternative 2: Remove
UpdateAssignmentDescriptorand parse updatedassignmentdetails as a newassignment.-
Pros: Decreases coupling.
-
Cons: Harder to implement if user only indicate to update one field. (eg: update
assignmentTitleonly, whilemaxMarksstay the same). In this case,UpdateAssignmentCommandneed to factor in the differences changed after the updatedassignmentdetails.
-
Aspect: Data structure of update-assignment in ModelManager
-
Alternative 1: Locate
assignmentfromassignmentList, then delete oldassignmentand add updatedassignment.-
Pros: Easier to implement as it made use of other existing assignment commands such as
addAssignment()anddeleteAssignment(). No additional methods are needed forupdateAssignment(). -
Cons: As each assignment contains a
GradeBookwhich stores all student grades, deleting the oldassignmentand add a newassignmentmay risk of losing the existingGradeBookrecords. In addition, assignment index list may be affected after deletion as well.
-
-
Alternative 2 (current choice): Locate
assignmentfromassignmentListand replace the oldassignmentwith updatedassignmentdetails.-
Pros: No risk of losing
GradeBookrecords as only theassignmentTitleandmaxMarksare being edited. -
Cons: An additional method,
updateAssignment()will be implemented instead.
-
Finding a student
-
Finding a student while all students are listed
-
Test case:
find n/john
Expected: All students with namejohnwill be on the list. Since it is case-insensitive, variations such as ‘John’ or ‘joHn’ will appear on the filtered list as well. -
Test case:
find n/john mary
Expected: All students with namejohnor ‘mary’ will be on the list. Similar to a, case-insensitive variations will appear on the filtered list. -
Test case:
find p/91234567 id/A0123456T
Expected: All students with phone number91234567or with student IDA0123456Twill appear on the filtered list. -
Other than the indicated prefixes (
n/,p/, ‘e/’, ‘id/’), any other prefixes (ie.tg/, ‘m/`) will show an invalid command format error message.
-
Updating an assignment detail
-
Update an assignment detail
-
Prerequisites: Have one tutorial group with an ID of
04a.
View the tutorial group using theview-tutorial-group id/04acommand.
Have an assignment title namedlab1with a maximum mark of40.0.
Have an assignment title namedlab3with a maximum mark of50.0. -
Test case:
update-assignment tg/04a as/lab1 new_as/lab2
Expected: Assignmentlab1name should now be changed tolab2under theAssignmentsUI panel. Maximum marks should be maintained at40.0marks. -
Test case:
update-assignment tg/04a as/lab2 new_m/50.0
Expected: Assignmentlab2maximum marks should be changed from40.0marks to50.0marks under theAssignmentsUI panel. -
Test case:
update-assignment tg/04a as/lab2 new_m/lab3
Expected: An error message should be displayed, showing that assignment name already exists in the database. -
Test case:
update-assignment tg/04a as/lab4 new_m/lab5
Expected: An error message should be displayed, showing that assignment does not exist.
-