完整流程共 8 個階段,下圖標出每個階段的產出與目前進度。用例設計的展開方式列在它下方:先用測試矩陣、狀態機與互動原型系統化展開,再寫成 BDD 情境,最後交給獨立評審打分。
- 01上下文收集6 個需求來源完成
- 02風險分析11 個風險完成
- 03用例設計37 個情境完成
- 04人工確認等待你確認進行中
- 05腳本生成37 個 @auto 情境尚未開始
- 06執行與修復執行並修正測試尚未開始
- 07代碼審查審查測試與產品碼尚未開始
- 08報告發布結論尚未開始
- 測試矩陣6 張矩陣 · 34 列
- 狀態機14 條轉換
- 互動原型5 個畫面 · 37 個示範
- BDD 情境37 個情境
- 獨立評審94 分
★ 人工確認是整個流程中唯一需要你決定的地方;其他階段由 AI 完成,並由 CLI 檢查放行條件。確認之後才會開始寫自動化測試。
覆蓋摘要
由設計產物自動計算。
驗收範圍
這次要驗收的內容與資料來源。
- text使用者對話
- dochttps://deephow.com/platform/youtubification-of-operational-knowledge
- dochttps://deephow.com/product-tour(Knowledge thru Video 第 18 步截圖)
- codeapp/views/editor-panels.js(quickEdit、reflow)
- codeapp/views/editor.js(change、undo/redo、timelineHtml、erase、eraseStep、Save、Discard、leave)
- codeapp/views/player.js(stepAt、updateOverlay)
風險與覆蓋
P0 與 P1 必須被情境覆蓋,或寫明延後的理由。
- R-1P0刪除、移動、拆分、合併步驟後,翻譯與註記沒有跟著調整,內容對錯步驟translations[lang].steps 以陣列索引對應原步驟;刪除第 2 步後,西文第 2 步仍是舊的「Entrar a la lista」,學員看到的翻譯與畫面錯位。annotations 以絕對秒數記錄,Erase 前段後註記仍停在原秒數,提示出現在錯誤步驟,甚至超出影片長度。TC-23 TC-24 TC-25已覆蓋
- R-2P1時間軸選取的步驟在結構變更後失效,Erase Video 刪錯步驟或整頁出錯ui.selectedStep 為索引,刪除/移動/合併後不會重設:先選第 7 步再刪掉任一步,Erase Video 仍可按,讀 steps[6] 為 undefined → step.title 丟 TypeError;移動後則會刪到另一個步驟的片段(不可逆的內容遺失,需靠 Undo)。TC-20 TC-21 TC-22已覆蓋
- R-3P1改完步驟標題或逐字稿直接按 Save,修改沒存到標題在 change、逐字稿在 blur 時才寫入草稿並整頁重繪;按 Save 的 mousedown 先觸發 blur → 重繪換掉 Save 按鈕 → click 失效。作者以為已存,實際未存。TC-8已覆蓋
- R-4P1步驟時間表算錯:起始時間不連續、總長與各步加總不一致、出現 0 秒步驟播放器以 start 判定目前步驟、以 duration 畫分段進度條。拆分 1 秒步驟會得到 1 秒 + 0 秒;0 秒步驟在播放器永遠不會被判定為目前步驟、點了也跳到下一步。TC-9 TC-11 TC-14 TC-15 TC-17 TC-35已覆蓋
- R-5P1Undo / Redo 與 Save、Discard、切換工具的互動錯誤Save 後 past 不清空,Undo 可回到儲存前並讓 Save 再亮起;Discard 清空歷史;新操作後 Redo 應清空。錯誤時作者會誤刪或誤復原步驟。TC-26 TC-27 TC-28 TC-29 TC-32 TC-33 TC-34已覆蓋
- R-6P1拆分、合併時逐字稿、標題、附件歸屬錯誤拆分:附件只留在前半、後半標題加 (2);合併:保留前一步標題,後一步標題消失、附件合併。歸屬錯誤會讓學員在錯的步驟看到 SOP 文件。TC-11 TC-12 TC-13 TC-15 TC-16已覆蓋
- R-7P1刪除步驟與 Erase Video 的保護:最後一步、取消確認、不可逆只剩 1 步時必須拒絕;取消確認不得改動;刪除後總長縮短、後續步驟起點前移。TC-17 TC-18 TC-19 TC-21 TC-26已覆蓋
- R-8P2步驟標題與逐字稿輸入邊界標題清空需還原並提示;80 字上限;HTML 字元需以純文字顯示;逐字稿清空會刪除該行,全部清空後步驟沒有字幕;Enter 不應插入換行。TC-2 TC-3 TC-4 TC-6 TC-7已覆蓋
- R-9P2上移/下移在頭尾的邊界與重排後的定位第一步上移、最後一步下移必須停用;重排後縮圖編號、時間軸、播放器順序要一致。TC-9 TC-10已覆蓋
- R-10P1保存後播放器呈現與 Editor 不一致學員端以保存後的 steps 顯示步驟清單、字卡、字幕與總時長;未保存的草稿不應外洩到播放器。TC-1 TC-5 TC-30 TC-31 TC-35已覆蓋
- R-11P3時間軸縮放與點擊定位縮放 1–4 超出範圍、點擊定位超出影片長度、播放頭位置錯誤,造成選錯位置。TC-36 TC-37已覆蓋
測試設計技法
12 種技法逐一判定;不適用必須寫出理由。
角色與權限
role-permission · 不適用clone 只有一位已登入的作者 Amy Clark,無角色切換;權限列於 context.outOfScope
成對組合
pairwise · 不適用結構操作(4 種)與連動資料(翻譯、註記、附件)的組合已以 M-3、M-5 逐一展開,互相獨立的因子不足 3 個
併發與重複操作
concurrency · 不適用單一作者在單一分頁編輯,所有操作同步完成、沒有背景工作;編輯與 Save 的事件競態已以 error-guessing 的「直接按儲存」覆蓋
外部依賴失效
dependency-failure · 不適用Quick Edit 的所有操作都在瀏覽器記憶體與 localStorage 內完成,不呼叫外部服務
環境與設定差異
environment · 不適用沒有 feature flag 或方案差異;New Editor BETA 只影響上傳偏好,clone 的 Editor 行為相同
評審
依評分標準逐項打分;點開每個維度可以看到核對了什麼、為什麼扣分。
及格門檻 85 分 · 共 1 輪評審
- [風險覆蓋] R-9 可補「移動後播放器順序」情境
- [預期可判定] TC-22 的「頁面沒有錯誤」在腳本以 pageerror 監聽判定
- [技法] M-5 移動步驟時註記的行為待 PM 回覆
- [BDD] TC-27 可封裝成「我做了三個修改後全部復原」
待釐清
需要需求方回答的問題,會影響預期結果。
- 移動/刪除後影片是否應重排或剪輯(context assumptions)
- 1 秒步驟拆分規則
- 逐字稿可否為 0 行
- Save 後是否保留 Undo 歷史
- Undo 歷史上限 50 步
- 移動步驟時註記是否跟著移動(M-5 未測列)
檢查提醒
不會擋下流程,但值得確認。
- P0 風險 R-1 只有正向用例,建議補負向/邊界/例外情境
每一列是一個要驗證的條件組合。有對應情境的列會標出情境編號;不測的列必須寫明理由。
步驟標題與逐字稿輸入
| 欄位 | 輸入類別 | 預期 | 情境 |
|---|---|---|---|
| 標題 | 一般文字 | 三處同步新標題 | TC-1 |
| 標題 | 空白 | 還原並提示 | TC-2 |
| 標題 | HTML 字元 | 純文字 | TC-4 |
| 逐字稿 | 一般文字 | 保留新文字、行數不變 | TC-5 |
| 逐字稿 | 空白 | 刪除該行 | TC-6 |
| 逐字稿 | Enter | 結束編輯不加行 | TC-7 |
數量與位置邊界
標題長度 80 測 81;步驟位置測首、尾;步驟數下限 1;時長下限 1 秒;縮放 1–4 測越界
| 門檻 | 測值 | 預期 | 情境 |
|---|---|---|---|
| 標題上限 80 | 81 字 | 保留 80 | TC-3 |
| 標題上限 80 | 80 字 | — | 不測80 字為 81 字截斷後的結果,同一情境已驗證 |
| 位置:第 1 步 | 上移 | 停用 | TC-10 |
| 位置:最後一步 | 下移/合併 | 停用 | TC-10 TC-16 |
| 步驟數下限 1 | 刪除唯一步驟 | 拒絕並提示 | TC-19 |
| 逐字稿行數下限 2 才可拆 | 1 行 | 停用 | TC-12 |
| 步驟時長 1 秒 | 拆分 | 不得出現 0 秒 | TC-14 |
| 縮放 1–4 | 連按 5 次 | 停在 4 / 1 | TC-37 |
結構操作的結果(決策表)
| 操作 | 前置條件 | 步驟數 | 標題 | 逐字稿 | 時長 | 附件 | 情境 |
|---|---|---|---|---|---|---|---|
| 下移 | 非最後一步 | 不變 | 交換 | 跟著步驟 | 起點重算 | 跟著步驟 | TC-9 |
| 拆分 | ≥2 行 | +1 | 後半加 (2) | 對半 | 對半、總和不變 | 留前半 | TC-11 TC-13 |
| 合併 | 非最後一步 | −1 | 保留前一步 | 前後相接 | 相加 | 合併 | TC-15 |
| 刪除 | ≥2 步、確認 | −1 | — | — | 總長縮短、後續前移 | — | TC-17 |
| 刪除 | 取消確認 | 不變 | — | — | — | — | TC-18 |
| Erase Video | 已選取步驟 | −1 | — | — | 同刪除 | — | TC-21 |
正向/負向/例外路徑
| 動作 | 正向 | 負向 | 例外 | 情境 |
|---|---|---|---|---|
| 編輯標題 | 同步新標題 | 清空被擋 | 編輯後直接 Save | TC-1 TC-2 TC-8 |
| 刪除步驟 | 刪除並重算 | 取消/只剩一步 | 選取失效後 Erase | TC-17 TC-18 TC-19 TC-22 |
| 儲存 | 學員端更新 | 未存不外洩 | — | TC-30 TC-31 |
功能中的狀態與轉換。允許的轉換都要有情境走過;系統必須阻擋的轉換也要有負向情境驗證。
Quick Edit 草稿(draft / saved / 復原歷史)
只畫出允許的轉換。
flowchart LR
start(("·")):::start
s0("已儲存(無變更)")
s1("有未儲存變更")
s2("已復原(可重做)")
s3("已離開 Editor")
start --> s0
s0 -->|"編輯標題/逐字稿、移動、拆分、合併、刪除、Erase<br>儲存後按復原"| s1
s0_loop("↺ 取消刪除確認"):::loop
s0 -.- s0_loop
s1 -->|"復原"| s2
s2 -->|"重做<br>復原後做新操作(重做清空)"| s1
s1 -->|"Save<br>Discard changes"| s0
s1_loop("↺ 離開時選擇留下"):::loop
s1 -.- s1_loop
s1 -->|"離開並放棄變更"| s3
s0 -->|"無變更時離開"| s3
classDef start fill:#16191a,stroke:#16191a
classDef loop stroke-dasharray:4 3,font-size:12px無法載入狀態圖元件(可能離線),請參考轉換表。
轉換表
允許與應被阻擋的轉換。
| 從 | 觸發條件 | 到 | 結果 | 情境 |
|---|---|---|---|---|
| 已儲存(無變更) | 編輯標題/逐字稿、移動、拆分、合併、刪除、Erase | 有未儲存變更 | 允許 | TC-1 TC-9 TC-11 TC-15 TC-17 TC-21 |
| 已儲存(無變更) | 取消刪除確認 | 已儲存(無變更) | 允許 | TC-18 |
| 有未儲存變更 | 復原 | 已復原(可重做) | 允許 | TC-26 TC-27 |
| 已復原(可重做) | 重做 | 有未儲存變更 | 允許 | TC-26 |
| 已復原(可重做) | 復原後做新操作(重做清空) | 有未儲存變更 | 允許 | TC-28 |
| 有未儲存變更 | Save | 已儲存(無變更) | 允許 | TC-30 TC-8 |
| 有未儲存變更 | Discard changes | 已儲存(無變更) | 允許 | TC-33 |
| 已儲存(無變更) | 儲存後按復原 | 有未儲存變更 | 允許 | TC-34 |
| 有未儲存變更 | 離開時選擇留下 | 有未儲存變更 | 允許 | TC-32 |
| 有未儲存變更 | 離開並放棄變更 | 已離開 Editor | 允許 | TC-31 |
| 已儲存(無變更) | 無變更時離開 | 已離開 Editor | 允許 | TC-35 |
| 已儲存(無變更) | 未修改時按復原/重做 | — | 阻擋 · 沒有歷史,按鈕停用 | TC-29 |
| 有未儲存變更 | 只剩一步時刪除 | — | 阻擋 · 至少保留一步 | TC-19 |
| 已儲存(無變更) | 未選取步驟按 Erase Video | — | 阻擋 · 按鈕停用 | TC-20 |
在左側點選情境,右側會自動示範該情境的操作與結果;也可以直接在畫面上點擊、輸入,自由走一遍流程。 在新分頁開啟原型 ↗
給 PM 與 RD 對齊的 user story 驗收:主要正向、負向,以及需要 PM 決定的異常與高價值邊界。完整測試範圍見 QA 驗收清單。
調整步驟順序
把太長的步驟拆成兩步
把太碎的步驟合成一步
刪除多餘步驟
刪步驟後翻譯不錯位
刪步驟後畫面提示不錯位
不會刪錯步驟
誤刪可以復原
改完直接儲存就能存好
學員看到儲存後的步驟
待釐清
需要 PM 回答的問題,會影響預期結果。
- 移動或刪除步驟後,影片畫面要不要跟著重排、剪掉?
- 步驟很短(1 秒)時還能拆分嗎?
- 步驟的說明文字可以全部刪光嗎?
- 儲存後還要能復原到儲存前嗎?
QA 測試範圍:每個情境一段,前置條件、操作、預期結果。逐條核對後打勾,勾選只存在你的瀏覽器中。
校正 AI 產生的步驟標題與逐字稿
作為一個 Smart Video 作者我想要修正 AI 切出來的步驟標題與逐字稿以便學員看到正確的作業說明與字幕
步驟標題4
修改步驟標題後縮圖與時間軸同步顯示新標題
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我把第 "2" 步標題改成 "Climb Into the Lift"
預期結果
- 第 "2" 步縮圖顯示 "2. Climb Into the Lift"
- 時間軸第 "2" 段顯示 "2. Climb Into the Lift"
清空步驟標題時還原原標題並提示
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我把第 "2" 步標題清空
預期結果
- 系統提示 "Step title cannot be empty"
- 第 "2" 步標題仍為 "Enter the List"
步驟標題最多保留 80 個字
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我在第 "2" 步標題輸入 "81" 個字
預期結果
- 第 "2" 步標題只保留前 "80" 個字
步驟標題含 HTML 字元時以純文字顯示
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我把第 "2" 步標題改成 "<b>Lift</b>"
預期結果
- 第 "2" 步縮圖以純文字顯示 "2. <b>Lift</b>"
逐字稿4
修改逐字稿一行後保留新文字
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我把第 "1" 步第 "2" 行改成 "This is Bill Hurley, chief at MXD."
預期結果
- 第 "1" 步第 "2" 行為 "This is Bill Hurley, chief at MXD."
- 第 "1" 步仍有 "4" 行
清空逐字稿一行時刪除該行
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我把第 "1" 步第 "2" 行清空
預期結果
- 第 "1" 步剩 "3" 行
- 第 "1" 步第 "2" 行為 "This morning to show you how"
在逐字稿按 Enter 結束編輯而不新增行
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我在第 "2" 步第 "1" 行按 Enter
預期結果
- 第 "2" 步仍只有 "1" 行
修改步驟標題後直接按儲存一次就能存檔
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List"
操作
- 我把第 "2" 步標題改成 "Climb Into the Lift" 後直接按 "Save"
預期結果
- 系統提示 "Changes saved"
- 重新整理後第 "2" 步標題為 "Climb Into the Lift"
調整 AI 切出的步驟結構
作為一個 Smart Video 作者我想要重新排序、拆分、合併或刪除步驟以便步驟切分符合現場作業的實際順序與粒度
上移/下移2
把第 2 步下移後與第 3 步交換且起點重算
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我把第 "2" 步下移
預期結果
- 第 "2" 步為 "Secure the Chain",第 "3" 步為 "Enter the List"
- 每一步的起點等於前面各步時長加總
第一步不能上移且最後一步不能下移
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我查看第 "1" 步與第 "7" 步的工具列
預期結果
- 第 "1" 步的上移無法點擊
- 第 "7" 步的下移無法點擊
拆分4
拆分 4 行的步驟成兩步且逐字稿對半
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我拆分第 "1" 步
預期結果
- 共有 "8" 個步驟
- 第 "1" 步標題為 "Operate Skyjack Scissor Lift" 且有 "2" 行
- 第 "2" 步標題為 "Operate Skyjack Scissor Lift (2)" 且有 "2" 行
- 兩步時長加總等於原第 "1" 步時長
只有一行逐字稿的步驟不能拆分
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我查看第 "2" 步的工具列
預期結果
- 第 "2" 步的拆分無法點擊
拆分有附件的步驟時附件留在前半步
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
- 第 "4" 步有附件 "chain-spec.pdf"
操作
- 我拆分第 "4" 步
預期結果
- 第 "4" 步有附件 "chain-spec.pdf"
- 第 "5" 步沒有附件
拆分只有 1 秒的步驟不會產生 0 秒步驟
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
- 第 "4" 步時長為 "1" 秒且有 "2" 行逐字稿
操作
- 我拆分第 "4" 步
預期結果
- 沒有任何步驟的時長為 "0" 秒
合併2
合併第 2 步與第 3 步後保留前一步標題並合併逐字稿
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我把第 "2" 步與下一步合併
預期結果
- 共有 "6" 個步驟
- 第 "2" 步標題為 "Enter the List",逐字稿依序為 "we'll start by climbing into the list." 與 "it's secure the chain."
- 第 "2" 步時長等於原第 "2"、"3" 步時長加總
最後一步不能再往下合併
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我查看第 "7" 步的工具列
預期結果
- 第 "7" 步的合併無法點擊
刪除與 Erase Video6
確認刪除中間步驟後總長縮短且後續步驟前移
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我刪除第 "3" 步並確認
預期結果
- 共有 "6" 個步驟
- 總長減少原第 "3" 步的時長
- 第 "3" 步為 "Pull Emergency Stop" 且起點等於原第 "3" 步起點
取消刪除確認時步驟不變
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我刪除第 "3" 步但在確認時取消
預期結果
- 仍有 "7" 個步驟
- "Save" 按鈕維持不可點擊
只剩一個步驟時不能再刪除
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
- 這支影片只剩 "1" 個步驟
操作
- 我嘗試刪除這個步驟
預期結果
- 系統提示 "A Smart Video needs at least one step"
- 仍有 "1" 個步驟
未選取時間軸步驟時無法使用 Erase Video
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我開啟 Quick Edit 面板但未選取任何步驟
預期結果
- "Erase Video" 無法點擊
在時間軸選取步驟後 Erase Video 移除該步
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
操作
- 我在時間軸選取第 "5" 步並以 "Erase Video" 移除
預期結果
- 共有 "6" 個步驟
- 不再有 "Turn Power Switch to AD" 步驟
選取最後一步後刪掉其他步驟再 Erase 不會出錯也不會刪錯
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片有 "7" 個步驟、總長 "01:44"
- 我在時間軸選取第 "7" 步 "Disable Scissor Lift Power"
操作
- 我刪除第 "1" 步並確認後再按 "Erase Video"
預期結果
- 頁面沒有錯誤
- 不會刪除 "Disable Scissor Lift Power" 以外的步驟
調整步驟後相關內容跟著同步
作為一個 Smart Video 作者我想要在重排或刪除步驟後,翻譯與註記仍對應到正確的步驟以便各語言學員與畫面提示都不會錯位
刪除步驟後翻譯的步驟同時移除
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片已有 "Spanish-MX" 翻譯並已儲存
操作
- 我刪除第 "2" 步並確認
預期結果
- "Spanish-MX" 翻譯的第 "2" 步為 "Asegure la cadena"
移動步驟後翻譯的步驟順序同步
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片已有 "Spanish-MX" 翻譯並已儲存
操作
- 我把第 "2" 步下移
預期結果
- "Spanish-MX" 翻譯的第 "2" 步為 "Asegure la cadena"
- "Spanish-MX" 翻譯的第 "3" 步為 "Entrar a la lista"
刪除前面的步驟後註記跟著前移
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 這支影片已有 "Spanish-MX" 翻譯並已儲存
- 第 "6" 步開始後 "5" 秒有一則註記 "Squeeze the trigger"
操作
- 我刪除第 "2" 步並確認
預期結果
- 註記 "Squeeze the trigger" 仍在第 "5" 步開始後 "5" 秒
步驟編輯的復原、儲存與學員端呈現
作為一個 Smart Video 作者我想要能復原誤操作,並清楚掌握何時保存以便學員看到的是我確認過的步驟
Undo / Redo4
誤刪步驟後可以復原與重做
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我刪除第 "3" 步並確認後按復原
預期結果
- 仍有 "7" 個步驟且第 "3" 步為 "Secure the Chain"
- 按重做後共有 "6" 個步驟
連續三個操作可以依序全部復原
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我依序修改第 "2" 步標題、下移第 "4" 步、合併第 "5" 步後連按 "3" 次復原
預期結果
- 步驟與進入 Editor 時完全相同
- "Save" 按鈕無法點擊
復原後做新操作時重做被清空
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我下移第 "2" 步、按復原、再修改第 "1" 步標題
預期結果
- 重做無法點擊
尚未修改時無法復原或重做
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我開啟 Quick Edit 面板
預期結果
- 復原與重做都無法點擊
儲存、放棄、離開6
儲存後學員在播放器看到新的步驟
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我把第 "2" 步與下一步合併並儲存
- 我在播放器開啟這支影片
預期結果
- 步驟清單有 "6" 個步驟
- 第 "2" 個步驟顯示 "Enter the List"
未儲存的步驟變更不會出現在播放器
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我刪除第 "3" 步並確認但不儲存
- 我離開 Editor 並選擇放棄變更
預期結果
- 播放器步驟清單仍有 "7" 個步驟
有未儲存的步驟變更時離開會提示並可留下
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我下移第 "2" 步後嘗試離開 Editor 並選擇留下
預期結果
- 仍停在 Quick Edit 且第 "2" 步為 "Secure the Chain"
放棄變更後回到上次儲存的步驟
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 我已把第 "2" 步標題改成 "Climb Into the Lift" 並儲存
操作
- 我再刪除第 "1" 步並確認後選擇 "Discard changes"
預期結果
- 共有 "7" 個步驟且第 "2" 步標題為 "Climb Into the Lift"
儲存後按復原會回到儲存前並變成未儲存
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 我已把第 "2" 步標題改成 "Climb Into the Lift" 並儲存
操作
- 我按復原
預期結果
- 第 "2" 步標題為 "Enter the List"
- "Save" 按鈕可以點擊
儲存刪除後在播放器點最後一步會跳到正確起點
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
- 我已刪除第 "3" 步並儲存
操作
- 我在播放器點選第 "6" 個步驟
預期結果
- 播放時間位於 "Disable Scissor Lift Power" 的起點
- 步驟字卡顯示 "06 Disable Scissor Lift Power"
時間軸定位2
點縮圖會選取該步並把播放頭移到起點
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我點選第 "4" 步縮圖
預期結果
- 時間軸第 "4" 段為選取狀態
- 預覽時間為第 "4" 步起點
時間軸縮放只能在 1 到 4 倍之間
前置條件
- 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板
操作
- 我連按 "5" 次放大後再連按 "5" 次縮小
預期結果
- 縮放值依序停在 "4" 與 "1"
沒有符合篩選條件的情境。
以下 Gherkin 是用例的原文,確認後會直接轉成自動化測試。
步驟顏色
Given、When、Then 各用一種顏色,一眼分出前置、操作與結果。
Tag 說明
CLI 依 tag 做覆蓋檢查。
| 套件 | @regression 每個情境都要有;核心正向流程再加 @smoke |
| 執行 | @auto 代表可以自動化;沒有 @auto 就是人工驗收 |
| 性質 | @邊界 只標臨界值、資源耗盡、競態、故障這類極端情境 |
| 描述 | 其餘中文 tag 描述頁面與情境條件,例如 @登入頁面 @密碼錯誤 |
| 編號 | 情境編號、優先級與風險記在 design.json,不放進 tag |
# 頁面 code 路徑:app/views/editor-panels.js(quickEdit:data-qe-title、data-qe-line)# 註:步驟標題在離開欄位時寫入草稿;逐字稿行在離開該行時寫入Feature: 校正 AI 產生的步驟標題與逐字稿 作為一個 Smart Video 作者 我想要修正 AI 切出來的步驟標題與逐字稿 以便學員看到正確的作業說明與字幕 Background: Given 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板 And 這支影片有 "7" 個步驟,第 "2" 步標題為 "Enter the List" # ############################################ # 步驟標題 # ############################################ @QuickEdit面板 @smoke @regression @auto @修改標題 Scenario: 修改步驟標題後縮圖與時間軸同步顯示新標題 When 我把第 "2" 步標題改成 "Climb Into the Lift" Then 第 "2" 步縮圖顯示 "2. Climb Into the Lift" And 時間軸第 "2" 段顯示 "2. Climb Into the Lift" @QuickEdit面板 @regression @auto @標題清空 Scenario: 清空步驟標題時還原原標題並提示 When 我把第 "2" 步標題清空 Then 系統提示 "Step title cannot be empty" And 第 "2" 步標題仍為 "Enter the List" @QuickEdit面板 @regression @auto @邊界 @標題80字 Scenario: 步驟標題最多保留 80 個字 When 我在第 "2" 步標題輸入 "81" 個字 Then 第 "2" 步標題只保留前 "80" 個字 @QuickEdit面板 @regression @auto @特殊字元 Scenario: 步驟標題含 HTML 字元時以純文字顯示 When 我把第 "2" 步標題改成 "<b>Lift</b>" Then 第 "2" 步縮圖以純文字顯示 "2. <b>Lift</b>" # ############################################ # 逐字稿 # ############################################ @QuickEdit面板 @regression @auto @修改逐字稿 Scenario: 修改逐字稿一行後保留新文字 When 我把第 "1" 步第 "2" 行改成 "This is Bill Hurley, chief at MXD." Then 第 "1" 步第 "2" 行為 "This is Bill Hurley, chief at MXD." And 第 "1" 步仍有 "4" 行 @QuickEdit面板 @regression @auto @清空逐字稿行 Scenario: 清空逐字稿一行時刪除該行 When 我把第 "1" 步第 "2" 行清空 Then 第 "1" 步剩 "3" 行 And 第 "1" 步第 "2" 行為 "This morning to show you how" @QuickEdit面板 @regression @auto @Enter結束編輯 Scenario: 在逐字稿按 Enter 結束編輯而不新增行 When 我在第 "2" 步第 "1" 行按 Enter Then 第 "2" 步仍只有 "1" 行 @QuickEdit面板 @regression @auto @編輯後直接儲存 Scenario: 修改步驟標題後直接按儲存一次就能存檔 When 我把第 "2" 步標題改成 "Climb Into the Lift" 後直接按 "Save" Then 系統提示 "Changes saved" And 重新整理後第 "2" 步標題為 "Climb Into the Lift"
# 頁面 code 路徑:app/views/editor-panels.js(quickEdit:move、split、merge、del)、app/views/editor.js(eraseStep)# 註:clone 只重算步驟時間表,不重排或剪輯影片檔(見 context assumptions)Feature: 調整 AI 切出的步驟結構 作為一個 Smart Video 作者 我想要重新排序、拆分、合併或刪除步驟 以便步驟切分符合現場作業的實際順序與粒度 Background: Given 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板 And 這支影片有 "7" 個步驟、總長 "01:44" # ############################################ # 上移/下移 # ############################################ @步驟排序 @smoke @regression @auto @下移步驟 Scenario: 把第 2 步下移後與第 3 步交換且起點重算 When 我把第 "2" 步下移 Then 第 "2" 步為 "Secure the Chain",第 "3" 步為 "Enter the List" And 每一步的起點等於前面各步時長加總 @步驟排序 @regression @auto @邊界 @首尾不可移 Scenario: 第一步不能上移且最後一步不能下移 When 我查看第 "1" 步與第 "7" 步的工具列 Then 第 "1" 步的上移無法點擊 And 第 "7" 步的下移無法點擊 # ############################################ # 拆分 # ############################################ @步驟拆分 @regression @auto @拆分步驟 Scenario: 拆分 4 行的步驟成兩步且逐字稿對半 When 我拆分第 "1" 步 Then 共有 "8" 個步驟 And 第 "1" 步標題為 "Operate Skyjack Scissor Lift" 且有 "2" 行 And 第 "2" 步標題為 "Operate Skyjack Scissor Lift (2)" 且有 "2" 行 And 兩步時長加總等於原第 "1" 步時長 @步驟拆分 @regression @auto @單行不可拆 Scenario: 只有一行逐字稿的步驟不能拆分 When 我查看第 "2" 步的工具列 Then 第 "2" 步的拆分無法點擊 @步驟拆分 @regression @auto @拆分附件歸屬 Scenario: 拆分有附件的步驟時附件留在前半步 Given 第 "4" 步有附件 "chain-spec.pdf" When 我拆分第 "4" 步 Then 第 "4" 步有附件 "chain-spec.pdf" And 第 "5" 步沒有附件 @步驟拆分 @regression @auto @邊界 @一秒步驟拆分 Scenario: 拆分只有 1 秒的步驟不會產生 0 秒步驟 Given 第 "4" 步時長為 "1" 秒且有 "2" 行逐字稿 When 我拆分第 "4" 步 Then 沒有任何步驟的時長為 "0" 秒 # ############################################ # 合併 # ############################################ @步驟合併 @regression @auto @合併步驟 Scenario: 合併第 2 步與第 3 步後保留前一步標題並合併逐字稿 When 我把第 "2" 步與下一步合併 Then 共有 "6" 個步驟 And 第 "2" 步標題為 "Enter the List",逐字稿依序為 "we'll start by climbing into the list." 與 "it's secure the chain." And 第 "2" 步時長等於原第 "2"、"3" 步時長加總 @步驟合併 @regression @auto @邊界 @最後一步不可合併 Scenario: 最後一步不能再往下合併 When 我查看第 "7" 步的工具列 Then 第 "7" 步的合併無法點擊 # ############################################ # 刪除與 Erase Video # ############################################ @步驟刪除 @regression @auto @刪除步驟 Scenario: 確認刪除中間步驟後總長縮短且後續步驟前移 When 我刪除第 "3" 步並確認 Then 共有 "6" 個步驟 And 總長減少原第 "3" 步的時長 And 第 "3" 步為 "Pull Emergency Stop" 且起點等於原第 "3" 步起點 @步驟刪除 @regression @auto @取消刪除 Scenario: 取消刪除確認時步驟不變 When 我刪除第 "3" 步但在確認時取消 Then 仍有 "7" 個步驟 And "Save" 按鈕維持不可點擊 @步驟刪除 @regression @auto @邊界 @只剩一步 Scenario: 只剩一個步驟時不能再刪除 Given 這支影片只剩 "1" 個步驟 When 我嘗試刪除這個步驟 Then 系統提示 "A Smart Video needs at least one step" And 仍有 "1" 個步驟 @時間軸 @regression @auto @未選步驟 Scenario: 未選取時間軸步驟時無法使用 Erase Video When 我開啟 Quick Edit 面板但未選取任何步驟 Then "Erase Video" 無法點擊 @時間軸 @regression @auto @Erase選取步驟 Scenario: 在時間軸選取步驟後 Erase Video 移除該步 When 我在時間軸選取第 "5" 步並以 "Erase Video" 移除 Then 共有 "6" 個步驟 And 不再有 "Turn Power Switch to AD" 步驟 @時間軸 @regression @auto @邊界 @選取後結構改變 Scenario: 選取最後一步後刪掉其他步驟再 Erase 不會出錯也不會刪錯 Given 我在時間軸選取第 "7" 步 "Disable Scissor Lift Power" When 我刪除第 "1" 步並確認後再按 "Erase Video" Then 頁面沒有錯誤 And 不會刪除 "Disable Scissor Lift Power" 以外的步驟
# 頁面 code 路徑:app/views/editor-panels.js(quickEdit、buildTranslation、annotations)# 註:翻譯以步驟順序對應;註記以秒數定位。預期行為為「跟著步驟一起調整」,現行實作疑似未調整(R-1)Feature: 調整步驟後相關內容跟著同步 作為一個 Smart Video 作者 我想要在重排或刪除步驟後,翻譯與註記仍對應到正確的步驟 以便各語言學員與畫面提示都不會錯位 Background: Given 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板 And 這支影片已有 "Spanish-MX" 翻譯並已儲存 @相關內容 @regression @auto @刪除後翻譯 Scenario: 刪除步驟後翻譯的步驟同時移除 When 我刪除第 "2" 步並確認 Then "Spanish-MX" 翻譯的第 "2" 步為 "Asegure la cadena" @相關內容 @regression @auto @移動後翻譯 Scenario: 移動步驟後翻譯的步驟順序同步 When 我把第 "2" 步下移 Then "Spanish-MX" 翻譯的第 "2" 步為 "Asegure la cadena" And "Spanish-MX" 翻譯的第 "3" 步為 "Entrar a la lista" @相關內容 @regression @auto @邊界 @刪除後註記 Scenario: 刪除前面的步驟後註記跟著前移 Given 第 "6" 步開始後 "5" 秒有一則註記 "Squeeze the trigger" When 我刪除第 "2" 步並確認 Then 註記 "Squeeze the trigger" 仍在第 "5" 步開始後 "5" 秒
# 頁面 code 路徑:app/views/editor.js(change、undo/redo、Save、Discard、leave、timeline)、app/views/player.js# 註:Undo/Redo 位於時間軸工具列Feature: 步驟編輯的復原、儲存與學員端呈現 作為一個 Smart Video 作者 我想要能復原誤操作,並清楚掌握何時保存 以便學員看到的是我確認過的步驟 Background: Given 我在 "Forklift Operation Walkthrough" 的 Editor Quick Edit 面板 # ############################################ # Undo / Redo # ############################################ @復原重做 @smoke @regression @auto @復原刪除 Scenario: 誤刪步驟後可以復原與重做 When 我刪除第 "3" 步並確認後按復原 Then 仍有 "7" 個步驟且第 "3" 步為 "Secure the Chain" And 按重做後共有 "6" 個步驟 @復原重做 @regression @auto @多次復原 Scenario: 連續三個操作可以依序全部復原 When 我依序修改第 "2" 步標題、下移第 "4" 步、合併第 "5" 步後連按 "3" 次復原 Then 步驟與進入 Editor 時完全相同 And "Save" 按鈕無法點擊 @復原重做 @regression @auto @新操作清空重做 Scenario: 復原後做新操作時重做被清空 When 我下移第 "2" 步、按復原、再修改第 "1" 步標題 Then 重做無法點擊 @復原重做 @regression @auto @初始無復原 Scenario: 尚未修改時無法復原或重做 When 我開啟 Quick Edit 面板 Then 復原與重做都無法點擊 # ############################################ # 儲存、放棄、離開 # ############################################ @步驟儲存 @smoke @regression @auto @儲存後學員端 Scenario: 儲存後學員在播放器看到新的步驟 When 我把第 "2" 步與下一步合併並儲存 And 我在播放器開啟這支影片 Then 步驟清單有 "6" 個步驟 And 第 "2" 個步驟顯示 "Enter the List" @步驟儲存 @regression @auto @未存不外洩 Scenario: 未儲存的步驟變更不會出現在播放器 When 我刪除第 "3" 步並確認但不儲存 And 我離開 Editor 並選擇放棄變更 Then 播放器步驟清單仍有 "7" 個步驟 @步驟儲存 @regression @auto @未存離開留下 Scenario: 有未儲存的步驟變更時離開會提示並可留下 When 我下移第 "2" 步後嘗試離開 Editor 並選擇留下 Then 仍停在 Quick Edit 且第 "2" 步為 "Secure the Chain" @步驟儲存 @regression @auto @放棄變更 Scenario: 放棄變更後回到上次儲存的步驟 Given 我已把第 "2" 步標題改成 "Climb Into the Lift" 並儲存 When 我再刪除第 "1" 步並確認後選擇 "Discard changes" Then 共有 "7" 個步驟且第 "2" 步標題為 "Climb Into the Lift" @步驟儲存 @regression @auto @儲存後復原 Scenario: 儲存後按復原會回到儲存前並變成未儲存 Given 我已把第 "2" 步標題改成 "Climb Into the Lift" 並儲存 When 我按復原 Then 第 "2" 步標題為 "Enter the List" And "Save" 按鈕可以點擊 @步驟儲存 @regression @auto @播放器步驟定位 Scenario: 儲存刪除後在播放器點最後一步會跳到正確起點 Given 我已刪除第 "3" 步並儲存 When 我在播放器點選第 "6" 個步驟 Then 播放時間位於 "Disable Scissor Lift Power" 的起點 And 步驟字卡顯示 "06 Disable Scissor Lift Power" # ############################################ # 時間軸定位 # ############################################ @時間軸 @regression @auto @縮圖定位 Scenario: 點縮圖會選取該步並把播放頭移到起點 When 我點選第 "4" 步縮圖 Then 時間軸第 "4" 段為選取狀態 And 預覽時間為第 "4" 步起點 @時間軸 @regression @auto @邊界 @縮放上下限 Scenario: 時間軸縮放只能在 1 到 4 倍之間 When 我連按 "5" 次放大後再連按 "5" 次縮小 Then 縮放值依序停在 "4" 與 "1"