From 218c655732b16ea32c64f54c50d5c5ff3188538c Mon Sep 17 00:00:00 2001 From: huyidi <1013792433@qq.com> Date: Thu, 21 Mar 2019 00:57:40 +0800 Subject: [PATCH] Update DG --- docs/DeveloperGuide.adoc | 156 ++++++++++++++++++----------- docs/images/chrome_save_as_pdf.png | Bin 0 -> 27366 bytes 2 files changed, 97 insertions(+), 59 deletions(-) create mode 100644 docs/images/chrome_save_as_pdf.png diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 8bfc9f11f..98f3c919a 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -17,7 +17,10 @@ By: `CS2113-AY1819S2-M11-1` Since: `` Licence: `` == Introduction -The LeagueTracker provides football league operator with an efficient method of managing the current teams that are playing in the season. It features many ways to keep track of the teams and players playing in the league. The LeagueTracker will help manager have an easier time in keeping track of the curretn situation in the football league. +The LeagueTracker is a CLI (Command Line Interface) application written in OOP fashion with a very basic GUI. +This application is adapted from AddressBook3. It is created to provide league managers a football league operator with an efficient method of managing the league in the current season. It features many ways to keep track of the teams and players playing in the league. The LeagueTracker will make useful information of the league managed to be more organized and accessible. + + +This Developer Guide provides you useful information regarding setting, coding and testing of League Tracker. == Design @@ -26,7 +29,25 @@ The LeagueTracker provides football league operator with an efficient method of .Architecture Diagram image::Architecture.png[width="600"] -The *_Architecture Diagram_* given above explains the high-level design of the App. Given below is a quick overview of each component. +The *_Architecture Diagram_* given above explains the high-level design of the League Tracker. +Given below is a quick overview of each component. + + +*Main* has only one class called Main. It is responsible for: + +* At app launch: Initializing the components in the correct sequence, and connects them up with each other. + +* At shut down: Shutting down the components. + + + +*UI* is the User Interface of the App. Users interact with it through a command line interface. + +*Logic* is the command executor. + +*Data* Holds the data of the League Tracker in-memory. + +*Storage* Reads data from, and writes data to the hard disk. + == Setting up @@ -39,6 +60,7 @@ The *_Architecture Diagram_* given above explains the high-level design of the A === Setting up the project in your computer +To set up this project on our computer: + . Fork this repo, and clone the fork to your computer . Open IntelliJ (if you are not in the welcome screen, click `File` > `Close Project` to close the existing project dialog first) @@ -74,9 +96,9 @@ Optionally, you can follow the <> docume ==== Updating documentation to match your fork -After forking the repo, the documentation will still have the SE-EDU branding and refer to the `se-edu/addressbook-level4` repo. +After forking the repo, the documentation will still have the SE-EDU branding and refer to the `se-edu/addressbook-level3` repo. -If you plan to develop this fork as a separate product (i.e. instead of contributing to `se-edu/addressbook-level4`), you should do the following: +If you plan to develop this fork as a separate product (i.e. instead of contributing to `se-edu/addressbook-level3`), you should do the following: . Configure the <> in link:{repoURL}/build.gradle[`build.gradle`], such as the `site-name`, to suit your own project. @@ -97,6 +119,67 @@ Optionally, you can set up AppVeyor as a second CI (see <> to learn how to render `.adoc` files locally to preview the end result of your edits. +Alternatively, you can download the AsciiDoc plugin for IntelliJ, which allows you to preview the changes you have made to your `.adoc` files in real-time. + +=== Publishing Documentation + +See <> to learn how to deploy GitHub Pages using Travis. + +=== Converting Documentation to PDF format + +We use https://www.google.com/chrome/browser/desktop/[Google Chrome] for converting documentation to PDF format, as Chrome's PDF engine preserves hyperlinks used in webpages. + +Here are the steps to convert the project documentation files to PDF format. + +. Follow the instructions in <> to convert the AsciiDoc files in the `docs/` directory to HTML format. +. Go to your generated HTML files in the `build/docs` folder, right click on them and select `Open with` -> `Google Chrome`. +. Within Chrome, click on the `Print` option in Chrome's menu. +. Set the destination to `Save as PDF`, then click `Save` to save a copy of the file in PDF format. For best results, use the settings indicated in the screenshot below. + +.Saving documentation as PDF files in Chrome +image::chrome_save_as_pdf.png[width="300"] + +== Testing + +=== Running Tests + +There are three ways to run tests. + +[TIP] +The most reliable way to run tests is the 3rd one. The first two methods might fail some GUI tests due to platform/resolution-specific idiosyncrasies. + +*Method 1: Using IntelliJ JUnit test runner* + +* To run all tests, right-click on the `src/test/java` folder and choose `Run 'All Tests'` +* To run a subset of tests, you can right-click on a test package, test class, or a test and choose `Run 'ABC'` + +*Method 2: Using Gradle* + +* Open a console and run the command `gradlew clean allTests` (Mac/Linux: `./gradlew clean allTests`) + +[NOTE] +See <> for more info on how to run tests using Gradle. + +*Method 3: Using Gradle (headless)* + +Thanks to the https://github.com/TestFX/TestFX[TestFX] library we use, our GUI tests can be run in the _headless_ mode. In the headless mode, GUI tests do not show up on the screen. That means the developer can do other things on the Computer while the tests are running. + +To run tests in headless mode, open a console and run the command `gradlew clean headless allTests` (Mac/Linux: `./gradlew clean headless allTests`) + + == Dev Ops === Build Automation @@ -149,25 +232,24 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un [width="59%",cols="22%,<23%,<25%,<30%",options="header",] |======================================================================= |Priority |As a ... |I want to ... |So that I can... -|`* * *` |League Organiser |add, edit and delete players into the records | Add new player when they join,delete old player when they retire +|`* * *` |League Organiser |add, edit and delete players into the records | add new player when they join,delete old player when they retire -|`* * *` |League Organiser |add, edit and delete teams into current league| Add new team that move up major league +|`* * *` |League Organiser |add, edit and delete teams into current league| add new team that move up major league |`* * *` |League Organiser |list all teams and player. | See all current teams and player -|`* * *` |League Organiser |Able to see the performance of players in the league | Know player's goals scored and Penalties. +|`* * *` |League Organiser |see the performance of players in the league | know player's goals scored and Penalties. -|`* * *` |League Organiser |Able to see the teams ranking in league | Know which team is currently leading in points +|`* * *` |League Organiser |see the teams ranking in league | know which team is currently leading in points -|`* * *` |League Organiser |Able to keep track on the future match up for the playing teams| see the match scheduling +|`* * *` |League Organiser |keep track on the future match up for the playing teams| see the match scheduling -|`* *` |League Organiser | Able to see the statistic of each team | know the percentage of winnings, average of fouls per matches of each team +|`* * *` |League Organiser |add, edit and delete matches in current league | edit the match schedule -|`* *` |League Organiser |Able to tag injuries of players | know what old injuries player have +|`* * *` |League Organiser |see the real-time balancing of income of each team | know the financial condition of each team -|`*` |League Organiser |Able to constantly keep track of best player | able to find out the golden leg(best scorer) of the season +|`* *` |League Organiser |see the statistic of each team | know the percentage of winnings, average of fouls per matches of each team -|`*` |League Organiser | Select certain player to moniter performance | keep track of 'HOT' Players |======================================================================= @@ -263,7 +345,7 @@ Use Case: Edit Player Use case ends. [appendix] -==Glossary +== Glossary League: a group of football teams which play each other over a period for a championship. @@ -272,48 +354,4 @@ Transfer: the action taken whenever a player under contract moves between clubs. image::transfer.png[] -[appendix] -== Instructions for Manual Testing - -Given below are instructions to test the app manually. - -[NOTE] -These instructions only provide a starting point for testers to work on; testers are expected to do more _exploratory_ testing. - -=== Launch and Shutdown - -. Initial launch - -.. Download the jar file and copy into an empty folder -.. Double-click the jar file + - Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. - -. Saving window preferences - -.. Resize the window to an optimum size. Move the window to a different location. Close the window. -.. Re-launch the app by double-clicking the jar file. + - Expected: The most recent window size and location is retained. - -_{ more test cases ... }_ - -=== Deleting a person - -. Deleting a person while all persons are listed - -.. Prerequisites: List all persons using the `list` command. Multiple persons in the list. -.. Test case: `delete 1` + - Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated. -.. Test case: `delete 0` + - Expected: No person is deleted. Error details shown in the status message. Status bar remains the same. -.. Other incorrect delete commands to try: `delete`, `delete x` (where x is larger than the list size) _{give more}_ + - Expected: Similar to previous. - -_{ more test cases ... }_ - -=== Saving data - -. Dealing with missing/corrupted data files - -.. _{explain how to simulate a missing/corrupted file and the expected behavior}_ - -_{ more test cases ... }_ +[appendix] \ No newline at end of file diff --git a/docs/images/chrome_save_as_pdf.png b/docs/images/chrome_save_as_pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..53a1190bd48d2eed241defbc70ba22faa2a55582 GIT binary patch literal 27366 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 literal 0 HcmV?d00001