---
# System prepended metadata

title: SSPfR section 1 homework

---

# SSPfR Section 1 Homework

## Preliminary Instructions
This homework will be automatically graded using GitHub Actions. Therefore, **modifying any file within the `.github` directory in any form is strictly prohibited**. Any violation will result in a score of 0 for this assignment.

All other files can be freely modified. However, if any issues arise after modifications, you must revert to a previous version on your own.

All the grading is done on the main branch.

Assignment video link: [Youtube](https://youtu.be/xfH8r_WUyDI)

**Deadline: 2025/3/11 23:59**


## Assignment Map & Grading Criteria

| Component                    | Weight | Component                      | Weight |
| ---------------------------- | ------ | ------------------------------ | ------ |
| Git Assignment               | 8%     | Commit Message Assignment | 3%     |
| Docker Assignment            | 8%     | DarkMaze Docker              | 15%    |
| Clean Code Assignment        | 8%     | DarkMaze Tools               | 24%    |
| Tools Assignment             | 8%     | DarkMaze Unit Test           | 18%    |
| Unit Test Assignment         | 8%     |                              |        |

---

### Evaluation Process

1. **Section 1 – Core Assignments (40% Total):**  
   - **Git Assignment**  
   - **Docker Assignment**  
   - **Clean Code Assignment**  
   - **Tools Assignment**  
   - **Unit Test Assignment**  
   
   These must be completed first. Only after finishing all items in Section 1 will the evaluation process open up for Section 2.

2. **Section 2 – DarkMaze Project (57% Total):**  
   - **DarkMaze Docker**  
   - **DarkMaze Tools**  
   - **DarkMaze Unit Test**  

3. **Independent Evaluation (3% Total):**  
   - **Commit Message:** This component is evaluated separately from the two sections and carries a weight of 3%.

![image](https://hackmd.io/_uploads/S18r0Ggj1x.png)

---

The grading process is sequential: complete Section 1 before proceeding to Section 2, and remember that the Commit Message score is independent and does not fall under any specific section.

## Prerequisite Steps - Retrieving Repositories
Click the link: [https://classroom.github.com/a/L6abwohU](https://classroom.github.com/a/L6abwohU)

You will be directed to the following screen:
![image](https://hackmd.io/_uploads/HJdLg7es1g.png)

Select your student ID and proceed.
![image](https://hackmd.io/_uploads/ryFdW7xjke.png)

Click "Agree" and continue.
![image](https://hackmd.io/_uploads/SJt6-7goye.png)

Once done, your assignment repository will be created. The link in the blue section is your repository. It functions like a regular repository, so it is not demonstrated here—please access it yourself.


## Homework Assignments

### 1. Commit Message Assignment (3%)

- **Assignment video timestamp:** [2:32](https://youtu.be/xfH8r_WUyDI?feature=shared&t=152)

- **Objective:**  
  Ensure that your commit messages comply with the specified rules as outlined in the provided article.

- **Instructions & Steps:**  
  - Read the article on commit message guidelines: [Commit Message Guidelines](https://ithelp.ithome.com.tw/articles/10228738).
  - Ensure that at least 90% of your pushed commits follow these rules.
  - Remember: only your latest pushed commits will be evaluated—if you make a mistake, correct it in your next push.

- **Submission Requirements:**  
  Push your commits to the repository with compliant commit messages.

- **Additional Notes:**  
  This assignment is worth 3% of your total grade.

---

### 2. Git Assignment (8%)

- **Assignment video timestamp:** [3:38](https://youtu.be/xfH8r_WUyDI?feature=shared&t=218)

- **Objective:**  
  Practice using Git and GitHub by forking a repository, creating a new file, and making a commit with a proper commit message.

- **Instructions & Steps:**  
  1. **Account Setup:**  
     - Create an account on Git and GitHub (if you haven’t done so already).
  2. **Repository Forking:**  
     - Fork the given repository on GitHub. (This step has already been completed in "Prerequisite Steps - Retrieving Repositories.")
  3. **File Creation:**  
     - In the `GitHW` directory, create a new file named `studentID.md`.
     - Add the text:  
       ```
       Hello World your_student_ID
       ```
  4. **Commit Changes:**  
     - Add and commit the new file with the commit message:  
       ```
       feat: gitHW commit
       ```
  5. **Push Changes:**  
     - Push the file to your repository.

- **Submission Requirements:**  
  Push your commits to GitHub ensuring the commit message follows the guidelines.

---

### 3. Docker Assignment (8%)

- **Assignment video timestamp:** [4:18](https://youtu.be/xfH8r_WUyDI?feature=shared&t=258)

- **Objective:**  
  Run the webpage `on port 5000` from the `DockerHW` directory using Docker Compose.

- **Instructions & Steps:**  
  1. **Dockerfile Creation:**  
     - Write a complete `Dockerfile` that builds the image for the webpage.
  2. **Docker Compose Setup:**  
     - Create a `docker-compose.yml` file to define and run the container.
  3. **Local Verification:**  
     - Run `docker-compose up` in the `DockerHW` directory to verify that the container is created successfully.

- **Submission Requirements:**  
  Once the container runs locally, push both the `Dockerfile` and `docker-compose.yml` to your repository. CI testing will verify their correctness.

---

### 4. Clean Code Assignment (8%)

- **Assignment video timestamp:** [5:14](https://youtu.be/xfH8r_WUyDI?feature=shared&t=314)

- **Objective:**  
  Refactor the code in `CleanCodeHW/calculate_pi.py` to eliminate magic numbers and replace unreasonable variable names.

- **Instructions & Steps:**  
  1. **Identify Magic Numbers:**  
     - Search the file for hard-coded numerical values (magic numbers) and replace them with appropriately named variables.
  2. **Rename Variables:**  
     - Identify any variable names that do not clearly describe their purpose and rename them to more meaningful names.
  3. **Maintain Whitespace:**  
     - **Important:** Do not add or remove any whitespace to avoid causing errors.

- **Submission Requirements:**  
  Commit and push the modified `calculate_pi.py` file to your repository.

---

### 5. Clean Code Tools Assignment (8%)

- **Assignment video timestamp:** [5:55](https://youtu.be/xfH8r_WUyDI?feature=shared&t=355)

- **Objective:**  
  Refactor the code in `ToolsHW/hw.py` following Clean Code principles and integrate SonarQube to assess code quality.

- **Instructions & Steps:**  
  1. **Refactor `hw.py`:**  
     - The program should compute `1 * 1` and, if the result is correct, play a video.
     - Standardize the code style (follow PEP 8 guidelines).
     - Remove unnecessary variables, functions, and duplicate code.
     - Simplify conditional structures and ensure function names are meaningful.
  2. **Integrate SonarQube for Code Quality Testing:**  
     - **Deploy SonarQube Locally:**  
       - Run the command:  
         ```bash
         docker run -d --name sonarqube -p 9000:9000 sonarqube:lts-community
         ```
       - Access SonarQube via [http://localhost:9000](http://localhost:9000) and log in using username and password: `admin`.
     - **Generate and Run Scanner Command:**  
       - Follow the manual setup: “Manually -> Set Up -> Locally -> Generate -> Choose Other.”
       - Copy the generated command (similar to below) and run it in your project directory:  
         ```bash
         sonar-scanner.bat -D"sonar.projectKey=dfs" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.login=your_token"
         ```
       - Consult the [SonarQube Scanner Documentation](https://docs.sonarsource.com/sonarqube-server/10.8/analyzing-source-code/scanners/sonarscanner/) if needed.
     - **Analyze and Improve:**  
       - Review the SonarQube report for bugs, code smells, and duplicate code.
       - Further improve your code based on the report.
  
- **Grading Criteria:**  
  - SonarQube Analysis: 4%  
  - Achieving a grade of A or above: 4%

- **Submission Requirements:**  
  Commit and push your refactored `hw.py` along with the SonarQube integration setup to your repository.

---

### 6. Unit Test Assignment (8%)

- **Assignment video timestamp:** [6:52](https://youtu.be/xfH8r_WUyDI?feature=shared&t=412)

- **Objective:**  
  Complete the unit tests for two problems: FizzBuzz and Regular Expression Matching.

- **Instructions & Steps:**  
  **(a) FizzBuzz Testing**
  - **Basic Unit Test (2 points):**
    1. Complete the file `test_fizzbuzz.py` located in the `Fizz Buzz/Basic` folder.
    2. Run pytest in that folder; the expected result is:  
       ```
       1 failed, 3 passed in <time>s
       ```
  - **Class Unit Test (2 points):**
    1. Complete the file `test_fizzbuzz.py` in the `Fizz Buzz/Class` folder.
    2. Note:  
       - `test_main` acts as an integration test.
       - `test_invalid_input` should correctly handle edge cases by raising an error.
    3. Run pytest; the expected result is:  
       ```
       2 failed, 5 passed in <time>s
       ```

  **(b) Regular Expression Matching Testing (4 points)**
  - **Parametrized Testing:**
    1. Use a single function to run all test cases found in `Regular Expression Matching/test_solution`.
    2. Run pytest; the expected result is:  
       ```
       1 failed, 6 passed in <time>s
       ```
  - **Handling xfail Tests:**
    1. Remove the triple quotes surrounding the xfail test.
    2. Move the failed test case into a new function.
    3. Re-run pytest; the expected outcome is:  
       ```
       6 passed, 1 xfailed in <time>s
       ```

- **Submission Requirements:**  
  Commit and push all updated test files and any changes made to your repository.

- **Additional Notes:**  
    There will be more instructions in the UnitTestHW folder on GitHub.
---

### 7. DarkMaze Assignment (57%)

- **Assignment video timestamp:** [8:07](https://youtu.be/xfH8r_WUyDI?feature=shared&t=487)

- **Objective:**  
  Complete the DarkMaze project, which involves setting up Docker, refactoring code, and creating unit tests for a maze game that challenges you to navigate through darkness with three lives.

- **Instructions & Steps:**  
  **Running DarkMaze Without Docker:**
  1. **Back-End:**  
     - Navigate to the `DarkMaze/backend` directory.
     - Run the command:  
       ```
       py -m src.main
       ```
  2. **Front-End:**  
     - Navigate to the `DarkMaze/frontend` directory.
     - Run the command:  
       ```
       py -m src.main
       ```
  3. **Play the Game:**  
     - Open your browser and go to: [http://localhost:8088](http://localhost:8088).

  **Assignment Categories and Weights:**
  - **DarkMaze Docker (15%):**  
    - Set up and configure Docker (e.g., writing Dockerfile and docker-compose.yml) for the DarkMaze project.
  - **DarkMaze Tools (24%):**  
    - Refactor and improve the game code following Clean Code principles (similar to previous assignments).
  - **DarkMaze Unit Test (18%):**  
    - Create or complete unit tests to ensure the game functions correctly.

- **Submission Requirements:**  
  Commit and push the complete DarkMaze project—including all Docker configuration files, refactored code, and test files—to your repository. CI/CD pipelines will run tests based on your submission.

## How to View Your Score
Click to enter the action, select the workflow you want to view, and scroll down to check the `calculate-score summary`.
![image](https://hackmd.io/_uploads/SyJ2VBEjJg.png)
