INTRODUCTION:


Hello! My name is Wei Zhang but you may call me Clyde for short. I’m currently a second year student in NUS School of Computing, pursuing a Bachelor of Computing in Information Security.

At the time when this document was created (over a period of Jan 2019 to April 2019), I took CS2113T (Software Engineering & Object-Oriented Programming) and CCS2101 Effective Communication for Computing Professionals, which requires me to develop a desktop application and write documentations for it as part of the curriculum.

I held various roles in the development of this project which includes designing the application architecture, developing core features, code integration and testing.

Aside from this project, I’m also a self-taught Cyber Security Practitioner where my main interests are Penetration Testing and Digital Forensics.

ABOUT:


The purpose of this document is to showcase the contribution of my work towards this project as part of the learning in this module.

The outline of this document will be listed as follows, mainly describing the work I have done in both technical and non-technical aspect:

  • Summary of Contributions: Describes mainly the technical aspect of work I have contributing in the development of the project. It also includes any other possible contributions I have done that may not be technical.

  • Contributions to User Guide: Showcases my ability in writing a guide for user of the application that was developed for.

  • Contributions to Developer Guide: Showcases my ability in writing a guide for developers who may continue to work on the development and maintenance of the application in the future.

PROJECT: FOP Manager


Overview

FOP Manager is a desktop application developed for NUS undergraduate students who are Project Directors of Freshmen Orientation Programs to manage both participants and committee members of the program. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. The development of this application is to teach Principles of Software Engineering, which is part of the context of CS2113T.

Summary of contributions

This segment showcase my contribution to both the development of the application and the documentation of the project.

  • Major enhancement:

Description

Justification

Highlights

Randomize Command

A command that allows the Project Director to automatically assign all participants to created groups.

This allows the Project Director to automatically assigns all participants to created group at a random distribution without doing it manually.

The challenge here is to come out with a suitable algorithm which ensure even distribution and no possible loop holes (e.g. all OGLs in 1 group).

Redesign Model and Storage component

Redesigning the way the application stores and manages data

This enables the storing and managing of house and groups on top of the current participants.

The challenge here is figuring out how is the whole application designed as this modification requires knowing the code base very well.

  • Minor enhancement:

Description

Justification

Highlights

Input box is clear after every command execution

Simulate a Terminal/CMD (i.e. Command line Interface in Windows/Linux) interface which clears the input segment after every entering of commands (i.e. text is cleared when the user hits the 'enter' button).

This improves the user friendliness of using the command line as the target users prefers using CLI (Command line Interface) over GUI (Graphical User Interface).

The challenge here is to figure out the code for the UI component and ensuring which part of it is to be placed. This include ensuring the fix works as well.

  • Code contributed:

    • Randomize Command

      • Implementation (Pull requests #4, #37, #94)

      • Enhancement (Pull requests #148, #156)

    • Redesign current Model and Storage (Pull requests #2, #8, #12, #15, #43, #72)

    • Code cleaning and refactoring (Pull requests #147)

  • Other contributions:

    • Project management:

      • Reviewing most of the codes before officially merging and integrating

      • Setting up of the main project repository (GitHub)

      • Setting up continuous integration technology (TravisCI)

      • Setting up of code contribution analysis tool (RepoSense)

      • Managed release for v1.3 and v1.4 on GitHub

    • Documentation:

Contributions to the User Guide

This segment showcases my ability to write documents for end users based on the work that I have contributed.

Randomizing groupings : randomize

Randomize group allocation of all registered participants.
Format: randomize

Command will only work under the following conditions:
- At least 2 groups created
- Number of OGLs must be more than number of groups
- At least 2 participants registered

Examples:

  • randomize
    Successful Output:

randomize success
  • randomize.
    Error Output:

randomize fail

Contributions to the Developer Guide

This segment showcases my ability to write technical documents explaining the underlying technicalities for developers based on the work that I have contributed.

Randomized Group Allocation

FOP Manager has a randomize command, which allows the Project Director to automatically assign all participants to a group.

Following is the activity diagram when the command is executed:

RandomizeActivityDiagram

Current Implementation

The randomize is achieved by coding a sequence of steps to achieve the allocation of groups to participants:

  • Creating list holding specific type of participants (i.e. all OGLs will be stored in a list while freshmen will be stored in another)

  • Shuffles all of the previously created list

  • Assigns all of the participants to a group in order of freshmen, OGLs

Following is the sequence diagram of the flow of the program when the command is executed:

RandomizeSequenceDiagram
The above Sequence Diagram only shows the updating of group details for freshmen (for clarity purposes, refer to the codes for more details).

The algorithm is applied also to OGLs within the RandomizeCommand class.
Algorithm

This segment will show relevant diagrams explaining the algorithm for the shuffling of assignment and cases where the randomization will not happen. The following diagram shows the annotations and symbols that will be used:

RandomizeAlgo1

 

The following diagram shows an example where the Project Director has added sufficient OGLs and freshmen to the system, and created sufficient groups:

RandomizeAlgo2

 

Upon executing the randomize command, the system will first assign the freshmen to the groups first:

RandomizeAlgo3 1

 

Followed by assigning the OGLs to the group:

RandomizeAlgo3 2
The rationale for such assignment is to ensure that the every group has an OGL.

 

Following diagrams shows the cases where the randomization will not happen and will throws an error message backs to the user.

Insufficient participants:

RandomizeAlgo4

Insufficient OGLs to cover all the groups:

RandomizeAlgo5

Insufficient groups:

RandomizeAlgo6
Engineers are free to modify the algorithm for the random distribution but are advised to consider the corner cases similarly to the ones mentioned above.

Design Considerations

Aspect: Updating group attribute of participants
Alternatives Pros Cons

Programmatically simulate the calling of the edit command

Changing of interface with the Model component only requires changing the EditCommand and Parser

Tightly coupled with EditCommand and EditCommandParser

Calls the function that edit the details of the participants by interacting with the Model component (current choice)

Implementation is obvious, follow guidelines of the system architecture and cleaner code base

Coupled with ModelManager

Rationale: It is to follow the design architecture of the system, allowing it to be consistent with the rest of the codes and cleaner code base. It may seems intuitive for some engineers to programmatically simulate the edit command, but it might causes unknown complexity within the system if there is a change in the dependent classes.

Aspect: Shuffling of participants
Alternatives Pros Cons

Creating a list fo freshmen and OGLs, then shuffles the list separately (current choice)

Ensures all groups will have at least an OGL and balanced distribution amongst the group

Requires more memory space

Shuffling the list of participant

Saves memory space

Risk having uneven distribution (e.g. all OGLs in a group)

Rationale: The idea of separating freshmen and OGLs is to ensure that every group will have at least 1 type of participant. By shuffling the list of participant containing both freshmen and OGLs, we risk running into a situation where there are groups with no OGLs, which is something that a Project Director does not want. The current choice ensures that all of the OGLs will be distributed evenly into groups similarly to how the freshmen are distributed.

Before the randomization happens, the application ensures that there are sufficient OGLs to cover all of the created groups (i.e. at least 1 OGL per group). Refer to the codes for more details.