PROJECT: GradTrak - A Graduation Tracker for NUS


Overview

GradTrak is an application that was morphed from the codebase of Address Book - Level 4. It was conceptualised and designed in mind to assist students of NUS to track their graduation progress and plan future modules that they want to take.

Summary of contributions

  • Major feature: added the ability for students to manage CAP and workload limits for each semester

    • What it does: allows the student to check if the current module plan for all semesters within the preferred limits in difficulty and time required The student can set their preferences and check against the modules they plan to take.

    • Why this feature: This is critical for students to ensure that they can manage their workload and maintain their targeted CAP for graduation. It is easier for students to detect if any semester will be too challenging or too easy for them. This may suggest reallocating some modules to distribute the difficulty more evenly across all semesters.

    • Highlights: This feature depends on many attributes that originally does not exist in the system and can only be implemented after implementing the other smaller features. Before being able to check their plan against their preferences, the student must first be able to set their preferences, as well as estimate their workload and grades for each planned module.

  • Minor enhancement: added the ability to shift the current semester when grades have been finalized. The current semester indicates that all modules taken in previous semesters have been completed and should be included in the calculation of the current CAP.

  • Code contributed: [Reposense]

  • Other contributions:

    • Pull Requests Made

    • Pull Requests Reviewed

    • Project Management

      • Put up user stories

    • Refactored Code

      • Morphed the original Person class in Address Book to contain the attributes of the module taken by the student - Level 4 code base

    • Documentation:

      • Changed some of the prose of the User Guide, Developer Guide (see above PR)

      • Modified some sections of User Guide, Developer Guide

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, such that technical terms describing how the application works are reduced as end-users are only concerned with how the application can help them.

The guide will include how students can use the application to manage their CAP and workload expectations while planning for modules to take.

Check CAP limits: cklimit

To find out if their current plans are suitable in maintaining their CAP for each semester, students would like to:

  • Know what their current CAP is.

  • Be able to estimate their minimum and maximum projected CAP based on their estimated grade range for each module

  • Find out if any semester has too many difficult modules that would pull down their CAP unexpectedly, or too many easy modules that could be distributed to other semesters to maintain a more steady and predictable CAP for all semesters.

GradTrak is able to consolidate all the information about the modules they plan to take and the limit preferences they have for each semester. This allows the student to run a CAP analysis on their current module plan and generate the results to be printed all in one page on their screen.

The edit command allows students to indicate their expected minimum and maximum grades for each module they plan to take.
The setlimit command allows students to indicate their CAP preferences for each semester.

The cklimit command calculates the expected minimum and maximum CAP of each semester and checks them against the limit preferences set by the student.
Format: cklimit

The image below shows the display after using the cklimit command

CheckLimitDisplay
Figure 1. Results of cklimit is displayed
  • This command also analyzes and prints workload information.

Check workload limits: cklimit

To find out if their current plans are optimized in workload distribution, students would like to:

  • Know what is the total number of workload hours for each semester in their current module plan.

  • Find out if any semester is too heavy or light on any type of workload that could suggest a reallocation of modules to redistribute the workload across all semesters.

GradTrak is able to consolidate all the information about the modules they plan to take and what limit preferences they have for each semester. This allows the student to run a workload analysis on their current module plan and generate the results to be printed all in one page on their screen.

The edit command allows students to indicate their expected workloads for each module they plan to take.
The setlimit command allows students to indicate their workload preferences for each semester.

The cklimit command calculates the total expected weekly workload of each semester and checks them against the limit preferences set by the student.
Format: cklimit

The image below shows the display after using the cklimit command and scrolling down the result page to the section on workload information:

CheckLimitScrolledDownDisplay
Figure 2. Results of cklimit is displayed after scrolling down the result page
  • This command also analyzes and prints CAP information

Set the current semester: cursem

GradTrak keeps track of the current semester of the student and considers all modules taken before the current semester to be completed. All completed modules must have a finalized grade and will be included in the calculation of the current CAP during the cklimit command.

After the student receives the results of the modules they took in the latest semester, they can confirm the grades attained in that semester and update GradTrak with their final grades. They can then inform GradTrak of their current semester to indicate completion of all modules in the previous semesters, so that the calculation of their current CAP will be updated as well.

The cursem command updates GradTrak with the current semester.
Format: cursem SEMESTER

  • The given semester must be a valid semester from year 1 to 5, in either the first or second semester, or GRAD if the student has completed all semesters.

  • All modules taken in the previous semesters must have a finalized grade. The minimum expected grade and maximum expected grade must be the same.

Examples:

  • cursem Y3S2
    Sets the current semester to the second semester of year 3.

  • cursem GRAD
    Sets the current semester to the graduated semester.

  • This command is undoable and redoable

Set CAP limits: setlimit

Some students have a desired CAP for graduation. They may like to plan their modules such that it helps them to keep their CAP at a suitable range at all times. This helps to ensure that they can easily apply for programs with minimum CAP requirements such as the Student Exchange Program, or NUS Overseas Colleges, or maintain the CAP requirement of their scholarship for each semester.

GradTrak can keep track of their CAP limit preferences so that it is possible to help them detect whether their current module plan fulfils their preferences.

The cklimit command allows the student to check their limit preferences against their current module plan.

The setlimit command allows you to set the minimum and maximum preferred CAP for a semester.
Format: setlimit SEMESTER [mincap/MIN_CAP] [maxcap/MAX_CAP]

  • Parameters can be in any order, but the semester must be entered first.

  • The given semester must be a valid semester from year 1 to 5, in either the first or second semester.

  • At least one field to be edited must be given.

  • Newly edited limits must be not be out of order. Minimum CAP must not be more than the maximum CAP

Examples:

  • setlimit Y1S1 mincap/2.52 maxcap/5
    This sets the minimum CAP acceptable to 2.52 and maximum CAP acceptable to 5.00 for the first semester in year 1.

  • This command also able to set workload limits for each semester.

  • This command is undoable and redoable

Set workload limits: setlimit

Some students who do not have a strong programming background may be slightly uncomfortable taking multiple programming modules in year 1 as they may feel too stressed from huge weekly lab workloads. Other students who like project work may like to take 1 or 2 team-based modules per semester that focuses on communication skills.

GradTrak can keep track of their workload limit preferences for each semester so that it is possible to help them detect whether their current module plan fulfils their preferences. Various types of workload limits such as total number of weekly lecture hours, tutorial hours, lab hours, project hours, and preparation hours can be set by the student.

The setlimit command allows you to set the minimum and maximum total weekly workload limits for a semester.
Format: setlimit SEMESTER [minlec/MIN_LECTURE_HOURS] [maxlec/MAX_LECTURE_HOURS] [mintut/MIN_TUTORIAL_HOURS] [maxtut/MAX_TUTORIAL_HOURS] [minlab/MIN_LAB_HOURS] [maxlab/MAX_LAB_HOURS] [minproj/MIN_PROJ_HOURS] [maxproj/MAX_PROJ_HOURS] [minprep/MIN_PREP_HOURS] [maxprep/MAX_PREP_HOURS]

  • Parameters can be in any order, but the semester must be entered first.

  • The given semester must be a valid semester from year 1 to 5, in either the first or second semester.

  • At least one field to be edited must be given.

  • Newly edited limits must be not be out of order such that the following requirements are met:

    • Minimum lecture hours must not be more than the maximum lecture hours

    • Minimum tutorial hours must not be more than the maximum tutorial hours

    • Minimum lab hours must not be more than the maximum lab hours

    • Minimum project hours must not be more than the maximum project hours

    • Minimum preparation hours must not be more than the maximum preparation hours

Examples:

  • setlimit Y1S2 minlec/2.5 maxproj/3
    This sets the minimum number of weekly lecture hours acceptable to 2.5 and maximum number of weekly project hours acceptable to 3 for the second semester in year 1.

  • This command also able to set CAP limits for each semester.

  • This command is undoable and redoable

End of extract of my contributions to the User Guide.

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. This is so that future developers who wish to maintain and update my code will able to do so easily after reading the guide and understanding how the application works.

The guide will include sequence diagrams about how the cursem, and setlimit commands interact with the system, as well as class diagrams that describe the architecture of the system.

Checking of limits

Current Implementation

The cklimit command is able to calculate the CAP and workload information of the current module plan and display the results in a report together with the preferred limits set by the student for comparison.

The LimitChecker class does all the computation and generation of the report. It makes use of the following classes as input:

  • Semester that holds the current semester

  • ObservableList of SemesterLimits that holds the current semester limits

  • ObservableList of ModuleTakens that holds the list of modules currently planned

  • ModuleInfoList that holds the list of modules with the number of module credits they have

The LimitChecker class is modelled with the class diagram as shown below.

LimitCheckerClassDiagram
Figure 3. LimitChecker class diagram

GradTrak uses the following classes to store and manipulate the variables for calculation:

  • CapAverage

  • WeightedGrade

  • ModuleInfoCredits

The CapAverage class contains an ArrayList of WeightedGrades. Each WeightedGrade has a CAP score and information on the number of module credits weighted by the score.

The aggregated minimum and maximum expected CAP is calculated with the minimum and maximum expected CAP of every module taken respectively.

The current CAP only includes modules that are completed. Modules are considered completed if they are taken on a semester before the current semester.

The CAP of the student is calculated using the formula below.

modular system
Figure 4. Formula for CAP calculation

The total number of hours for each type of workload for each semester are also summed up to be displayed.

Once all the calculations are completed, the HTML string report is generated and stored in the checkedReport variable in the LimitChecker to be displayed.

LimitChecker implements the ClassForPrinting and can be used to set the HTML string generated to be displayed on the BrowserPanel using the setSelectedClassForPrinting method as seen below.

ClassForPrintingUsageExample
Figure 5. Usage example for the ClassForPrinting

Design Considerations

Aspect: Having to change multiple types of limits.
  • Current choice: Using a single command to check both the CAP limits as well as the workload limits and print the results all to one page

    • Pros: Only one command needs to be known and it can check everything in one page to ensure that the module plan meets the selected limit preferences

    • Cons: Unwanted information that was not requested will also be shown on the page and may cause confusion

  • Alternative: Using separate commands to display CAP limits and workload limits on their own individual page

    • Pros: The information needed can be easily identified from the pages displayed

    • Cons: Two commands need to be known and keyed in to check the limits every time a modification is made to the module plan

The current choice was chosen because the student will become more experienced and familiar with GradTrak over time and be less confused by the result page. Scrolling up and down the page is easier than having to type two commands alternatively to view the limits.

Possible Improvements

  1. Check if any row has their minimum or maximum limits violated and highlight them to student

  2. Style the table to suit the theme of the app so that the student has a better experience using the app

Current Semester Tracking

Current Implementation

The cursem command allows the student to track the current semester using GradTrak. This indicates completion of all modules in the previous semesters and includes them in the current CAP computation during the cklimit command.

The interaction of how the cursem command interacts with the system is shown below as a sequence diagram.

SetCurrentSemesterSequenceDiagram
Figure 6. Sequence Diagram for setting of the current semester

Design Considerations

Aspect: Storage location of the current semester.
  • Current choice: Storing of current semester within the VersionedGradTrak

    • Pros: Allows the cursem command to be undoable and redoable

    • Cons: The storage file gradtrak.json has to contain more than just the modules taken and it is difficult to make changes as it would require restructuring a large part of the application and multiple unit tests.

  • Alternative: Storing of the current semester outside of the VersionedGradTrak together with the module and course information

    • Pros: Minimal changes are required to implement it

    • Cons: Problems may occur later on in maintaining the integrity of the application as cursem can only be performed if grades in the previous semesters have been finalized. The undo and redo commands can bypass the checks for finalized grades and lead to instability in the application.

The current choice was chosen because it will be worth the effort to restructure the application storage to make GradTrak easier to develop in the future and be less likely to cause problems.

Possible Improvements

  1. Prevent the student from adding or editing his module plan if doing so will violate the limits set

  2. Allowing the student to type semester indexes instead of the entire semester name

Semester CAP and workload management feature

Current Implementation

The setlimit command allows the student to set CAP limits and workload limits for each semester. This helps the student manage the difficulty and time required of the modules taken. Various types of limits can be set, such as the minimum and maximum number of weekly lecture hours, tutorial hours, lab hours, project hours, and preparation hours acceptable, as well as the minimum and maximum CAP acceptable for each semester.

The interaction of the setlimit command with the system is shown below as a sequence diagram.

SetSemesterLimitSequenceDiagram
Figure 7. Sequence Diagram for setting of the limits for a semester

End of extract of my contributions to the Developer Guide.