Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CS2113T-W09-2] iGraduate #4

Open
wants to merge 984 commits into
base: master
Choose a base branch
from

Conversation

kewenlok
Copy link

@kewenlok kewenlok commented Mar 3, 2021

iGraduate is a command-line application that will help NUS students majoring in information security check his/her graduation progress and modules taken in a coherent manner based on the programme requirements.

nagiteja referenced this pull request in nagiteja/tp Mar 7, 2021
Copy link

@fsgmhoward fsgmhoward left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally the Dev Guide looks great and detailed with many diagrams to facilitate understanding! I have just put some points that I am a bit confused about as comments.

Comment on lines 4 to 36
- [iGraduate Developer Guide](#igraduate-developer-guide)
* [1. Introduction](#1-introduction)
* [2. Setting up, getting started](#2-setting-up-getting-started)
+ [2.1 Terminal](#21-terminal)
+ [2.2 Intellij IDEA (Recommended)](#22-intellij-idea-recommended)
* [3. Design](#3-design)
+ [3.1 Architecture](#31-architecture)
+ [3.2 UI Component](#32-ui-component)
+ [3.3 Logic Component](#33-logic-component)
+ [3.4 Model Component](#34-model-component)
+ [3.4.1 `module` Package](#341-module-package)
+ [3.4.1.1 `Module` Class](#3411-module-class)
+ [3.4.1.2 `CoreModule` Class](#3412-coremodule-class)
+ [3.4.1.3 `GeModule` Class](#3413-gemodule-class)
+ [3.4.1.4 `ElectiveModule` Class](#3414-electivemodule-class)
+ [3.4.1.5 `MathModule` Class](#3415-mathmodule-class)
+ [3.4.2 `list` Package](#342-list-package)
+ [3.4.2.1 `ModuleList` Class](#3421-modulelist-class)
+ [3.5 Storage Component](#35-storage-component)
+ [3.6 Common Classes](#36-common-classes)
* [4. Implementation](#4-implementation)
+ [4.1 UI](#41-ui)
+ [4.2 Parser](#42-parser)
+ [4.3 Command](#43-command)
+ [4.4 Module](#44-module)
+ [4.5 ModuleList](#45-modulelist)
+ [4.6 Storage](#46-storage)
+ [4.7 Exception](#47-exception)
* [Appendix: Requirements](#appendix-requirements)
+ [Product Scope](#product-scope)
+ [Target User Profile](#target-user-profile)
+ [Value Proposition](#value-proposition)
+ [User Stories](#user-stories)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be better if use * for unordered list as per SE-EDU's markdown convention?

and methods applicable to all class objects. It is then inherited by all other child module classes. A class diagram illustrating
the relationship between the interaction of classes under the module package is shown below.

![archi](images/ModuleClassDiagram.png)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

archi

Would this diagram be a bit redundant especially on the list of methods presented given it is exactly the same for all classes 🤔 ? It also looks like being out of date as some methods were not included.


The sequence diagram below shows the execution of add command in action:

![archi](./images/AddCommandSequenceDiagram.png)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

For the "cross" you put for AddCommand, would you like to put it lower? It looks like the instance is out of reference even before it returns values for the current diagram.


The following is the UML diagrams for update command consisting of updating each flag.

![archi](./images/updateClassDiagram.jpg)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Shouldn't these roles and navigability numbers be at the right side (marked by arrow) instead?

Copy link

@Emkay16 Emkay16 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall, the developer guide appears neat although with some formatting issues along the way.


![archi](./images/ParserSequenceDiagram.png)

<sup>***Figure 4.2.1** Sequence diagram of `Parser` class with user input *"done CS1010 -g A"**</sup>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an issue with the markdown formatting here? Seems like there are a few extra asterisks around.

1. List incomplete modules available to be marked as done based on prerequisites completed:
- `available`

[DIAGRAM]
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps it would be better to leave placeholder markings such as these as a comment so it wouldn't be rendered out. This placeholder appears in multiple parts and can be a little jarring for readers.

occurrence would be a module named `Software Engineering and Object-Oriented Programming`, which contains
dashes when the delimiters are used for separating various module information is also a dash.

Considerations were also given to use more unique delimiters (such as \, `|`, etc.) to avoid accidental parsing
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the \ also be enclosed in backticks here since the | is?

- `Model` -> The user data held by the program
- `Module` -> Holds the information of individual modules.
- `ModuleList` -> Holds data of all modules of the app in memory.
- `Storage` -> Reads data from, and writes data to, the hard disk.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a major issue, but the markdown coding standard seems to favour the use of * over - for unordered lists.


Below is a Command class diagram.

![archi](images/CommandClassDiagram.png)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Due to the width of this diagram, it can be quite hard to read as the words are very small.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, perhaps you can try to arrange the subclasses around the abstract class

The module list is stored in a storage file named `modules.json` in the `data` folder
(`<program location>/data/modules.json`).

![archi](./images/storageSequenceDiagram.jpg)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the diagrams (this included) appear different in format/style from the others. Perhaps it would be better to use a consistent format/style across the whole document?

Copy link

@FarmZH98 FarmZH98 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I think your team did a great job, as I have trouble finding bugs

2. Then, `removeFromModuleUntakenPrerequisites` is called to remove `existingModule` from the prerequisitesUntaken table
from the list of modules that require `existingModule` as a prerequisite.

Given below is the class diagram of `ModuleList` showing its 3 main functions.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are 3 functions sufficient for explanation?


Below is a Command class diagram.

![archi](images/CommandClassDiagram.png)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, perhaps you can try to arrange the subclasses around the abstract class

The CAP command calculates the current CAP of the user based on the grades of modules that are marked as done. The
command also displays the degree classification of the user. There are no flags or additional parameters required.

![archi](./images/CapCommandSequenceDiagram.png)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I the diagram slightly overdetalied with the cap command calling itself multiple times?

2. Extract the relevant parameters and flags required to run the command
3. Create a new `Command` object and hand it over to `iGraduate` to execute

![archi](./images/ParserSequenceDiagram.png)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are all the self call methods necessary to be included?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, seems like it could be excluded for more readability.

+ [Progress](#progress)
+ [List Modules](#list-modules)
+ [Saving data](#saving-data)
## 1. Introduction

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you intent for introduction to be a main header instead?
image

@heyjinwei
Copy link

image

Should "Introduction" be indented at the same level as the other headers like "Setting up, getting started"?

@heyjinwei
Copy link

image
Is this diagram too complicated?

@heyjinwei
Copy link

image
Is there a way to represent this information clearer with less repitition?

@heyjinwei
Copy link

image
Similarly, is there a way to represent this information with less reptition?


### 3.1 Architecture

![archi](./images/ArchitectureDiagram.png)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
Perhaps resize the diagram to match the text size so that it looks more polished?


![archi](images/CommandClassDiagram.png)

<sup>***Figure 3.3.2.1** UML class diagram for Command class*</sup>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
Is this the intended size for the diagram? Do you think it's better to split up the diagram into several reference diagram so that developers will have an easier time reading them?

and methods applicable to all class objects. It is then inherited by all other child module classes. A class diagram illustrating
the relationship between the interaction of classes under the module package is shown below.

![archi](images/ModuleClassDiagram.png)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it more readable if you separate the repeated content into a new reference?

and `requiredByModules` module respectively, whereas `getStatusIcon` returns the status icon based on the module
status. For customized formatting of module printing messages, `toString` method is overridden.

#### 3.4.1.2 `CoreModule` Class
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should you avoid using 'toString' in all of the subclass explanation? Since you already mentioned it in the parent class explanation, is it enough to just stated that all the subclass contains the 'toString' method?


Class Diagram:

![archi](./images/storageClassDiagram.jpg)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small issue but do you think it's better to use the same uml diagram style throughout the document?

2. Extract the relevant parameters and flags required to run the command
3. Create a new `Command` object and hand it over to `iGraduate` to execute

![archi](./images/ParserSequenceDiagram.png)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, seems like it could be excluded for more readability.

kewenlok and others added 30 commits April 12, 2021 21:33
Fix small details in Sequence Diagrams
Update author tag and documentation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants