---
# System prepended metadata

title: 計概筆記

---

# 計概筆記


# reference and pointer
```C++
int x = 1;  
int *xPtr;
int y = 2; 
xPtr = &x;     // 將指標 xPtr 指向變數 x 的位址
*xPtr = 3;     // 將指標 xPtr 指向的內容設為 3 (改變變數 x 的值)
xPtr = &y;     // 將指標 xPtr 指向變數 y 的位址
cout << x << endl; // 印出變數 x 的值
```

* 改變指標的內容 (**`*xPtr = value;`**)
    - 指的是修改指標指向的變數的值，這會直接影響該變數的內容。

* 改變指標的指向 (**`xPtr = &y;`**)
     - 指的是將指標指向另一個變數的位址，這並不影響原來指向的變數的值。


# glass-box testing and balck-box testing
在軟體測試中，**Glass-Box Testing**（玻璃盒測試）和 **Black-Box Testing**（黑盒測試）是兩種主要的測試方法，它們基於不同的測試範圍與策略。

---

### **Glass-Box Testing（玻璃盒測試）**
#### **定義**
玻璃盒測試，也稱為 **White-Box Testing**（白盒測試），是一種測試方法，測試人員可以直接了解軟體的內部結構、邏輯和實現方式，並基於這些資訊設計測試用例。

#### **特點**
1. 測試人員需要對程式碼或內部邏輯有深入的了解。
2. 強調覆蓋程式的不同路徑、分支和條件。
3. 目的是檢測邏輯錯誤、路徑覆蓋不足或未執行的代碼。

#### **優點**
- 能有效檢測程式內部的邏輯錯誤。
- 可以測試所有的程式碼路徑，保證高覆蓋率。
- 減少隱藏的錯誤或死區代碼。

#### **缺點**
- 實現成本高，因為需要深入分析程式碼。
- 無法有效測試功能需求是否滿足。

#### **例子**
- **單元測試 (Unit Testing)**：測試單個函數或模組內部的邏輯。
- **語句覆蓋測試**：檢查所有程式語句是否都被執行。
- **條件覆蓋測試**：測試邏輯條件的所有可能結果（如 `if/else` 分支）。

---

### **Black-Box Testing（黑盒測試）**
#### **定義**
黑盒測試是一種測試方法，測試人員不需要了解軟體的內部結構，只基於輸入和輸出的結果來測試軟體是否正確執行。

#### **特點**
1. 測試人員僅關注功能規格和需求。
2. 測試用例是根據輸入值和預期的輸出來設計的。
3. 目的是檢測軟體功能的缺陷或與需求的不一致。

#### **優點**
- 測試方法簡單且與實現細節無關。
- 更適合發現功能需求上的問題。
- 測試可以由非開發人員（如 QA 人員）執行。

#### **缺點**
- 無法檢測程式內部的錯誤或邏輯問題。
- 測試覆蓋率較低，可能無法覆蓋所有程式路徑。

#### **例子**
- **功能測試 (Functional Testing)**：驗證特定功能是否按預期運行。
- **邊界值測試 (Boundary Value Testing)**：檢查輸入邊界條件（如最大值或最小值）。
- **等價類劃分測試 (Equivalence Partitioning)**：將輸入分為幾個等價類來進行測試。

---

### **比較**
| 特性               | **Glass-Box Testing**                | **Black-Box Testing**                |
|--------------------|--------------------------------------|---------------------------------------|
| **是否了解內部結構** | 需要了解程式碼和內部實現               | 不需要了解程式碼，僅關注輸入和輸出       |
| **測試目標**        | 驗證內部邏輯正確性                   | 驗證軟體是否滿足功能需求               |
| **測試人員**        | 通常是開發人員                      | 通常是測試人員（或用戶）              |
| **測試案例設計依據** | 程式的邏輯和結構                    | 軟體的需求和規格                     |
| **適用範圍**        | 單元測試、細節測試                  | 系統測試、功能測試                   |

---

### **總結**
1. **玻璃盒測試** 適用於驗證內部邏輯是否正確，重點在程式碼結構上。
2. **黑盒測試** 適用於驗證功能是否滿足需求，重點在於輸入輸出是否正確。
3. 實際測試中，兩者通常會結合使用，以達到更全面的測試覆蓋率和更高的軟體質量。


# const
* a const element can't use declarative to initialize, it must use member initializer

```C++
const int increment //wrong initialize

Increment::Increment(int c, int i)
    :count(c)
    // increment = i wrong initialize (const cannot be declared and gived by a new value)
    increment(i)



```

# expression

* (中左右) prefix noatation
    - 參數在後方

* (左中右) infix notation
    - 參數在兩旁

* (左右中) postfix notation 
    - 參數在前面