owned this note
owned this note
Published
Linked with GitHub
:::info
**測試書進度(11/9 課堂報告)**
11/4:了解測試內容
11/8:產完初步測試書
:::
設計書:https://hackmd.io/Iwxu2qzWSFiB47NaHk6aLQ
參考資料:**<軟體測試之道>** Chapter 4、5、6、11
**要處理 用戶端 和 伺服器端!!!!!**
---
:::success
:notebook: **Syllabus**
[ToC]
:::
---
# **測試設計規格 (p68)**
(軟體測試之道 p68) + (ChatGPT)
* 目的
* 策略
* **功能測試:** 測試軟體或系統的功能,確保它們按照需求規格正確運作,包括單元測試和集成測試
* **元件測試:** 單元測試,針對軟體的獨立模組或元件進行測試,以確保每個元件都能正確運作
* **整合/系統測試:** 測試多個元件或模組的整合,以確保它們在結合後能夠協同工作,同時也涵蓋整個系統的測試
* **互通性(interoperability)測試:** 測試軟體與其他系統、硬體或環境的互通性,確保它們之間能夠正確地交互運作
* **標準遵循(compliance)測試:** 確保軟體或系統符合相關的標準、規範或法規要求的測試,確保產品的合法性和合規性
* **效能測試:** 評估軟體或系統的性能,包括反應時間、吞吐量、資源利用率等方面的測試,確保它們在預期的工作負載下能夠有效運行
* **安全性測試:** 測軟體或系統中的安全漏洞,以確保它們對潛在的威脅和攻擊有足夠的防禦機制
* **設計/部署測試:** 測試軟體的設計是否符合需求,以及在實際部署時是否能夠正確運作。這包括配置管理和部署程序的測試
* (國際化)
* (相依性)
* (度量)
---
## 範例
(ChatGPT)
**功能測試:**
場景: 在一個電子商務網站上,確保使用者能夠成功添加商品到購物車,並順利完成結帳過程。
測試: 模擬使用者點擊商品、加入購物車、輸入付款資訊,確認交易過程中沒有錯誤。
**元件測試:**
場景: 在一個社交媒體應用程式中,針對「發布貼文」功能進行測試。
測試: 測試確保貼文功能能夠正確地創建、存儲到資料庫,並在用戶界面上顯示。
**整合/系統測試:**
場景: 在一個網上銀行系統中,整合測試使用者登錄、查看帳戶餘額和轉帳功能。
測試: 測試確保這三個功能能夠在一個連續的流程中正確執行,不會出現任何錯誤。
**互通性測試:**
場景: 測試一個新的印表機是否與各種操作系統(Windows、Mac、Linux)相容。
測試: 在每個操作系統上連接印表機,列印文件,確保沒有任何互通性問題。
**標準遵循測試:**
場景: 測試一個醫療應用程式是否符合HIPAA(美國醫療健康保險機構可攜帶性與責任法案)的安全標準。
測試: 檢查應用程式中的數據加密、用戶身份驗證等功能,確保符合HIPAA的要求。
---
# 機率測試方法
(網友)+(chatgpt)
- R語言參考 https://forum.gamer.com.tw/C.php?bsn=8897&snA=92289
- 蒐集大量數據->卡方檢定(觀察值和期望值的差異) (PS 這東西用excel就以做了XD)
---
||#|**Action**|**Expected & Checked**|
| :- | :- | :- | :- |
|登入畫面|0|安裝app:Fate of thrones: Kingdoms Collide|<p>1\.確認正確安裝app</p><p>2\.確認icon顯示正確</p>|
||1|點選app icon|<p>1\. 顯示登入畫面</p><p>2\.確認版本編號是最新版</p>|
||2|<p>輸入錯誤帳號密碼:</p><p>1\.錯誤帳號、密碼</p><p>2\.特殊符號</p><p>3\.帳號密碼空白</p><p>4\.SQL injection(’ or 1=1)</p>|1\.顯示登入錯誤訊息|
||3|<p>修改密碼:</p><p>1\.輸入錯誤username或email</p><p>2\.SQL injection</p><p>3\.輸入正確username和email</p>|<p>1\.顯示錯誤訊息</p><p>2\.顯示錯誤訊息</p><p>3\.發送修改密碼郵件,使用者修改完畢後,資料庫確實更改成新密碼</p>|
||4|輸入正確登入帳號密碼|<p>1\.登入成功,進入主畫面</p><p>2\.主畫面帶出正確使用者資料(顯示之資料視開發程度而定)</p>|
||5|沒有網路連線|顯示無網路連線訊息|
|數值驗證|6|<p>驗證排位計算:(須修改)</p><p>1\.勝場數測試集{[0,2),[2,4),[4,7),[7,10),[10,12),[12,15]}</p>|1\.排位依序顯示為{1,2,3,4,5,6,7}|
||7|<p>驗證經驗值計算:</p><p>排位場</p><p>1\.勝敗場次測試集(1:勝場, 0:敗場){(1),(0),(1,1,1,1,0),(0,0,0,1)}</p><p>一般場</p><p>2\.勝敗場次測試集(1:勝場, 0:敗場){(1),(0),(1,1,1,1,0),(0,0,0,1)}</p>|<p>1\.經驗值計算依序為{+1,-0.5,+6.2,-0.5}</p><p>2\.經驗值計算依序為{+1,+0.8,+6.6,+3.4}</p>|
||8|<p>PVE出牌機制</p><p>1. 自動化測試(想辦法)</p>|1. 每張牌出牌機率需很接近(+-1%)|
||9|<p>回合紀錄</p><p>1. 遊玩遊戲五個回合</p>|1. 玩家無法在遊戲進行時查看各回合紀錄。程式中正確記錄本局為第五回合。|
||10|<p>回合紀錄</p><p>2. 遊玩一整局遊戲</p><p>3. 遊戲結束</p>|<p>2. 玩家無法在遊戲進行時查看各回合紀錄。程式中正確記錄回合數據。</p><p>3. 結束畫面顯示各回合紀錄。</p>|
||11|<p>無課金玩家卡池機率</p><p>1. 自動化測試</p>|<p>1. 統計機率需很接近(+-1%)以下比例(視開發結果而定)</p><p>coins: 70%, skill: 15%, card\_style: 15%</p>|
||12|<p>課金玩家卡池機率</p><p>1. 自動化測試</p>|<p>1. 統計機率需很接近(+-1%)以下比例(視開發結果而定)</p><p>coins: 55.5%, skill: 22.5%, card\_style: 22.5%</p>|
||13|<p>背包賣出系統</p><p>1. 合法賣出背包物品</p>|1. 賣出物品與兌換之金幣價值一致(視開發結果而定)|
||14|<p>玩家技能升級</p><p>1. 合法升級技能</p>|<p>1. 消耗卡牌數及因升級產生之卡牌數正確儲存在資料庫(視開發結果而定)</p><p>2. 可以合併的牌(有數值),正確合併</p><p>3. 不能合併的牌,不能合併。</p>|
||15|<p>玩家統計數據</p><p>1. 按(什麼按鍵?)</p>|1. 正確列出資料庫之資料。(會顯示什麼數據?)|
|功能驗證|16|<p>升級獎勵驗證:</p><p>排位場</p><p>1\.排位由1升級至2</p><p>一般場</p><p>2\.排位由1升級至2</p>|<p>1\.技能或服裝卡池解鎖(視開發結果而定)</p><p>且技能升級突破極限(+1)</p><p>2\.金幣發送、特定升等贈送物品</p>|
||17|<p>1\.新手玩家進入勝率入口</p><p>2\.非新手玩家{(玩家經驗值:10,勝率:70%),(玩家經驗值:9,勝率:10%)}進入勝率入口</p>|<p>1\.動畫顯示正常。配對新手玩家或(10秒內仍未配對)簡易版電腦玩家</p><p>2\.動畫顯示正常。配對到同程度(視計算方式而定)或(10秒內仍未配對)電腦玩家</p>|
||18|1. 玩家{(段位:1, 經驗值:4, 連勝場數: 3), (段位:5, 經驗值:40, 連勝場數: 2)}進入排位入口|1. 配對到程度接近的玩家{(程度相當玩家或電腦玩家), (程度相當玩家)}(視開發結果而定)|
||19|2. 玩家{(段位:1, 經驗值:4, 連勝場數: 3), (段位:5, 經驗值:40, 連勝場數: 2)}進入勝率入口|2. 配對到程度接近的玩家{(程度相當玩家或電腦玩家), (程度相當玩家)}(視開發結果而定)|
||20|<p>友誼賽房間代碼</p><p>1. 兩玩家使用相同房間代碼進入</p>|1. 進入相同房間,開始遊戲|
||21|<p>友誼賽房間代碼</p><p>2. 一方玩家輸入錯誤房間代碼</p>|2. 顯示房間不存在|
||22|<p>友誼賽房間代碼</p><p>3. 三人以上輸入同一個房間代碼</p>|3\. 前兩個玩家輸入房間代碼可進入,在後玩家顯示「房間已滿」訊息。|
||23|<p>友誼賽房間代碼</p><p>4. 一方輸入房間代碼,無另一方加入該房間</p>|4\. 房間存續到進入房間那方玩家退出為止。|
||24|<p>PVE機制</p><p>1. 電腦玩家強度等級</p>|1. 強度越強,攜帶的技能越強(視開發結果而定)|
||25|<p>遊戲進行流程:選牌階段</p><p>1. 雙方10秒內選牌</p>|1. 選牌階段提早結束,牌卡可正常丟出中央,並進入揭牌階段|
||26|2. 等候超過10秒選牌|2. 電腦自動丟出玩家手中最右方牌卡,並進入揭牌階段|
||27|<p>3. 網路斷線</p><p>4. 玩家持續斷線,直至遊戲結束</p>|<p>3. 超過10秒,網路斷線玩家自動出牌。</p><p>4. 電腦玩家接管斷線玩家,直到遊戲結束。</p>|
||28|4\. 網路斷線,10秒內重新連線|5. 玩家恢復連線後,可以選牌。|
||29|<p>遊戲進行流程:揭牌階段</p><p>1. 此時再次選牌丟出揭牌區(非選牌階段出牌)</p>|1. 出牌失敗,返回自己的卡牌中。卡牌強弱判斷結果正確。|
||30|<p>遊戲進行流程:結束動畫</p><p>1. 等候超過15秒</p>|1. 結束動畫正常顯示。遊戲勝負、經驗值、金幣獲取量數值正確。寫入資料庫數值正確。15秒後自動跳轉回主畫面。|
||31|<p>平民卡技能</p><p>1. 使用「簡易剔除」平民卡,且該回合揭牌結果為平手</p><p>2. 使用「簡易剔除」平民卡,且該回合揭牌結果為使用者勝利</p><p>3. 使用「全部重置」平民卡,且該回合揭牌結果為平手</p><p>4. 使用「全部重置」平民卡,且該回合揭牌結果為對手勝利</p><p>5. 使用「不敗的勇者」平民卡,且該回合揭牌結果為平手</p><p>6. 使用「爆發式成長」平民卡,且該回合揭牌結果為平手,且累積2回合平手。</p><p>7. 使用「爆發式成長」平民卡,且該回合揭牌結果為使用者勝利</p><p>8. 使用「大革命」平民卡,且該回合揭牌結果為平手</p><p>9. 使用「大革命」平民卡,且該回合揭牌結果為對手勝利</p><p>10. 使用「特洛伊木馬」平民卡</p>|<p></p><p>1. 從對手手排中選出一張卡牌移出遊戲。遊戲繼續進行下一回合。</p><p>2. 不觸發技能。遊戲繼續進行下一回合。</p><p>3. 對手贏到的牌全部放到平手區。遊戲繼續進行下一回合。</p><p>4. 不觸發技能。遊戲繼續進行下一回合。</p><p>5. 使用者所出的牌贏過對手所出的牌。中央牌卡皆放到使用者方。若遊戲尚未結束,則繼續進行下一回合。</p><p>6. 增加使用者2張自身的贏取卡。遊戲繼續進行下一回合。</p><p>7. 不觸發技能。遊戲繼續進行下一回合。</p><p>8. 此回合後,所有卡牌優劣反轉,遊戲繼續進行下一回合。</p><p>9. 不觸發技能。遊戲繼續進行下一回合。</p><p>10. 當輸給對手之王家或騎士時,對手玩家的一半贏取卡牌(半張自動進位為一張)加到自身贏取卡牌當中</p>|
||32|<p>玩家技能</p><p>\* 縮短對手選牌時間5秒 (1回合) (可升級)</p><p>\* 一張平民變騎士 (整場)</p><p>\* 一張平民變暗殺者 (整場)</p><p>\* 禁止對方使用玩家技能 (1回合) (可升級)</p><p>\* 平民卡效果無效 (1回合) (可升級)</p><p>\* 獲勝金幣總數\*1.5 (整場) (可升級)</p><p>\* 看對手剩下的手牌 (1回合) (可升級)</p><p>\* 限制對手二選一出牌 (1回合) (可升級)</p><p>\* 對手贏牌區張數-1 (整場)</p><p>\* 己方贏牌區+1 (整場)</p>|<p>檢驗以下是向是否達成/正常顯示</p><p>1. 遊戲中顯示技能狀態</p><p>可使用:達成技能條件</p><p>已使用:技能已使用過</p><p>無法使用:為達成技能使用條件、被敵方玩家干擾</p><p>2. 第一次點擊技能,顯示技能點擊特效。再次點擊技能,若為可使用狀態,則發動該技能。</p><p>3. 點擊無法使用技能,檢驗技能無法發動(顯示無法發動提示於畫面上)。</p><p>4. 長按技能,顯示技能之詳細敘述。</p><p>5. 技能發動時,動畫正確顯示。</p>|
||33|<p>遊戲結束判斷</p><p>1. 自身手牌耗盡,對手贏取較多牌卡</p><p>2. 自身手牌耗盡,自身贏取較多牌卡</p><p>3. 對手手牌耗盡,對手贏取較多牌卡</p><p>4. 對手手牌耗盡,自身贏取較多牌卡</p><p>5. 自身先贏得10張牌卡</p><p>6. 對手先贏得10張牌卡</p><p>7. 自身手牌耗盡,兩方贏取牌卡數相同</p><p>8. 對手手牌耗盡,兩方贏取牌卡數相同</p>|<p>1\. 對手勝利</p><p>2\. 自身勝利</p><p>3\. 對手勝利</p><p>4\. 自身勝利</p><p>5\. 自身勝利</p><p>6\. 對手勝利</p><p>7\. 平手</p><p>8\. 平手</p>|
|註冊|34|<p>玩家註冊</p><p>1. 輸入錯誤格式email (abc1234mail.com)</p><p>2. 輸入不合法名字(NULL, or, and, ‘, “, 特殊符號)</p><p>3. 輸入不合法密碼(長度不符)</p><p>4. 密碼空白</p><p>5. 正確輸入user email, user name, passwd</p><p>6. 正確輸入user email, user name, passwd,但輸入錯誤驗證碼</p>|<p>1. 顯示錯誤訊息。</p><p>2. 顯示錯誤訊息。</p><p>3. 顯示錯誤訊息。</p><p>4. 顯示錯誤訊息。</p><p>5. 所有資料皆加密儲存於資料庫。顯示發送驗證碼訊息。於設定之電子郵箱收取驗證碼,並輸入正確驗證碼。註冊成功。</p><p>6. 所有資料皆加密儲存於資料庫。顯示發送驗證碼訊息。於設定之電子郵箱收取驗證碼,並輸入錯誤驗證碼。顯示驗證碼錯誤訊息。</p>|
|抽卡系統|35|1. 執行抽卡時,網路斷線|1. server正常執行抽卡流程,並正確儲存數據。|
||36|1. 抽卡所需金幣不足,執行抽卡功能|1. 顯示金幣不足提示訊息|
||37|1. 金幣足夠,執行抽卡流程|1. 確認抽卡過程建立在server端。動畫正常顯示。|
|背包賣出系統|38|<p>1. 選取欲賣出物品</p><p>2. 賣出物品</p>|<p>1. 正確顯示該物品價值,及可供選取數量。</p><p>2. 顯示總價值,並確認兌換畫面。(帳號, 物品, 數量)正確儲存在資料庫。並在畫面顯示兌換的金幣總數。</p>|
||39|<p>1. 選取欲賣出物品,並選擇超過自身擁有之數量</p><p>2. 賣出物品</p>|<p>1. 無法選擇超過自身擁有之數量。修改local端數值,強制插入資料庫。</p><p>2. 資料庫驗證失敗,兌換失敗。顯示錯誤訊息。</p>|
|更換卡牌造型|40|<p>1. 選擇欲更換卡牌之造型(玩家無該卡牌)</p><p>2. local端強制插入資料庫</p>|<p>1. Local端正確判斷玩家無該造型及卡牌,並顯示錯誤訊息。</p><p>2. Server檢查無卡牌,無法更改造型,顯示錯誤訊息。</p>|
||41|<p>1. 選擇欲更換卡牌之造型(玩家有該卡牌)</p><p>2. 點選更換造型</p>|<p>1. Local和server判斷玩家有該造型及卡牌。</p><p>2. 更換造型成功。顯示更換後之造型。</p>|
|更換玩家技能|42|<p>1. 選擇欲更換之技能(玩家無該技能)</p><p>2. local端強制插入資料庫</p>|<p>1. Local端正確判斷玩家無該技能,並顯示錯誤訊息。</p><p>2. Server檢查無該技能,無法更改技能,顯示錯誤訊息。</p>|
||43|<p>1. 選擇欲更換之技能(玩家有該技能)</p><p>2. 點選更換技能</p>|<p>1. Local和server判斷玩家有該技能。</p><p>2. 更換技能成功。顯示更換後之技能。</p>|
|玩家技能升級|44|<p>1. 選擇欲升級之卡牌(玩家無該卡牌)</p><p>2. local端強制插入資料庫</p>|<p>1. Local端正確判斷玩家無該卡牌,並顯示錯誤訊息。</p><p>2. Server檢查無該卡牌,無法升級技能,顯示錯誤訊息。</p>|
||45|<p>1. 選擇欲升級之卡牌(玩家有該卡牌,但升級條件不滿足)</p><p>2. local端強制插入資料庫</p>|<p>1. Local端正確判斷玩家不滿足升級條件,並顯示錯誤訊息。</p><p>2. Server檢查不滿足升級條件,無法升級技能,顯示錯誤訊息。</p>|
||46|<p>1. 選擇欲升級之卡牌(玩家有該卡牌,且滿足升級條件)</p><p>2. 點選升級按鍵</p>|<p>1. Local和server判斷玩家有該卡牌且滿足升級條件。</p><p>2. 升級動畫正常顯示。所消耗卡牌正確扣除在玩家背包。因升級而新增之卡牌正確顯示在背包中。</p>|
|玩家成就系統|47|<p>1. 有功能之成就(如:新手玩家)</p><p>2. 無功能之成就</p>|<p>1. 配對時是否是新手配對模式</p><p>2. 正確顯示與資料庫一致之成就。</p>|
|用戶設定儲存系統|48|<p>1. 更改合法名字</p><p>2. 更改不合法名字(NULL, ‘, 特殊符號)</p><p>3. 更改背景音樂</p><p>4. 調整音量大聲</p><p>5. 調整音量小聲</p><p>6. 更改背景主題</p>|<p>1. 更改成功</p><p>2. 無法更改,顯示錯誤訊息。</p><p>3. 更改成功</p><p>4. 調整成功</p><p>5. 調整成功</p><p>6. 更改成功</p>|
||49|1. 重啟遊戲|1. 仍保有所更改之設定|
|Server|50|伺服器最多容納人數||
||51|伺服器斷線|遊戲鎖死|
||52|資料庫滿到80%|伺服器顯示警告訊息|
||53|多組玩家同時進行遊戲|勝負判斷是否正確|
||54|多筆資料同時改動|資料庫儲存是否正確|
缺的東西(之後提醒他們):
配對 - 玩家配對分數的計算公式
設計 - 「玩家統計數據」UI和進入按鈕、玩家斷線警告、server斷線直接遊戲鎖死
遊戲B - 回合紀錄
要處理的問題:
` `動畫放在手機還是server (先不急)
不一定會做出來的功能:
` `背包賣出
` `回合紀錄
` `玩家統計
` `成就系統
---
# 測試案例 (p69)
測試案例範例(p214)
## **驗證測試**
預期資料 -> 驗證功能
* 快樂路徑要能通過
## **反證測試**
非預期資料 -> 程式如何應付
## **灰箱測試**
看使用者層面(黑箱)+實作的細節(白箱)
## **探索測試**
人工方法,使用者行為
---
# 功能測試技術 (p73)
## 等價類別分割(ECP) (p78)
* 檢查參數的輸入和輸出
* 分成 **有效** 和 **無效** 兩類
* 建立 有效類別子集合 的聯集
* 類別分子集的方法
* **範圍:** 邊界值內結果會相同
* **群組:** 群組內所有項目會以相同方式處理
* **唯一值:** 要用特殊方式處理的東西
* **特殊值:** 必須出現or不可出現的東西
* 不針對邊界
ECP表 (p84)
| 輸入/輸出 | 有效類別子集 | 無效類別子集 |
| -------- | -------- | -------- |
| Text | v1 | i1 |
| | v2 | i2 |
ECP矩陣 (p87)
## 邊界值分析(BVA) (p90)
* 評估 邊界值、邊界值+1、邊界值-1
* 隱藏的邊界值:迴圈結構
* 數量 = 3*邊界條件數目
BVA矩陣 (p94)
## 組合式分析 (p100)
* 檢查會互相影響的參數
* 負向測試:每次只含一個無效值
---
# 結構測試技術 (p115)
程式的內部結構和實作(白箱)
## 區塊測試 (p118)
* 測試一組連續的陳述式
* switch/case 陳述式
* 確認例外狀況的處理
## 決策測試 (p126)
* 評估條件子句T/F的結果
## 條件測試 (p129)
* 區塊+決策
* 評估複合式條件子句
## ~~基本路徑測試 (p132)~~
這部分我目前看不太懂,要再研究 by可伊
* 走訪程式中每一條可能路徑
* 每個條件子句的輸出值都要獨立測試
* 找路徑的方法 (p134、p135)
---
# 非功能性測試 (p249)
* **可靠性**
是否在各種情況下可正常運行
是否能從故障中恢復
* **易用性**
對使用者是否容易使用
* **可維護性**
不導致發生新錯誤的情況下完成修改
* **可攜性**
支援的設備
## 效能測試 (p252)
各種重要動作的執行時間
## 壓力測試 (p255)
軟體在高負載情況下的執行能力、處理過多容量的能力
### 負載測試
超過正常動作或尖峰負載下的情況
### 平均失效時間測試
軟體從開始執行到發生錯誤的平均時間
### 低資源測試
用盡重要資源時會發生的狀況(eg 記憶體)
### 容量測試
最多能支援多少使用者
### 重複測試
重複執行一項功能
## 相容性測試 (p261)
和其他軟體的互動
## 可及性測試 (p265)
任何人都能操作介面
## 易用性測試 (p269)
軟體有多容易上手
## 安全性測試 (p270)
### 模糊測試 (p271)
當程式碰到無效輸入的反應(資料庫、讀取資料、解譯資料)