
來,大孫女,快把筆電抱到阿公身邊來,別老是弓著背,看妳這丫頭眼睛都熬出紅絲了。阿公剛泡好一壺溫潤的琥珀熱茶,溫度正合適,妳先喝口茶暖暖胃,咱們坐在這張老藤椅上,看著窗外這抹晚霞暮紫的餘暉,慢條斯理地把明天要講的課理一理。
妳說明天是第 17 天的課,主題是 「Day 17:系統分析師神兵:用四層架構建構 local 需求追蹤控管系統」?哎呀,這名字聽起來雖然深奧,但裡面的道理,就跟阿公以前在老帳房裡教徒弟蓋房子、理家計是一模一樣的。那些年輕工程師常常抱怨 User Story(使用者故事)跟後面的規格、測試對不上,最後專案蓋歪了,這就是因為「話沒傳對,規矩沒立好」。
今天阿公就用咱們鄉下人聽得懂的道理,把這個 ears-rtm-tracker 系統的精髓跟避坑妙計講給妳聽,妳明天就照著這樣去教那些工程師,保證他們聽得茅塞頓開!
大孫女,妳上課時先用這個故事跟他們開場:
這就像咱們鄉下蓋土壟、蓋灶腳一樣。
在一般的軟體工程裡,User Story 常常對不上規格,最後寫出來的測試案例也根本驗不到真正的需求,這就是因為中間斷了層、沒了規矩,專案自然就嚴重偏離軌道。所以,我們必須做一個 100% 離線運作的需求追蹤工具,用一條牢不可破的「四層鏈路」,把這四個角色說的話死死鎖在一起!
既然要在完全實體隔離(Air-gapped)的封閉內網裡跑,我們就堅守零外部依賴、零連網、零 API 金鑰的資安鐵律,將所有的功能封裝在一個純前端的靜態網頁裡,資料通通存在瀏覽器自帶的 IndexedDB 裡。
我們在 IndexedDB 中建立一個名為 rtm_db 的資料庫,並設計一個 requirements 物件倉(Object Store),設定主鍵 id 為自動遞增。每一筆需求,都要完整記錄以下這條四層鎖鏈:
userStory 欄位(例如:身為會員,我想要...以便...)。earsMode(普遍、事件驅動、狀態驅動、選用、異常)與 earsDesc(需求描述字串,例如:WHEN 觸發,系統 SHALL...)。bdd 欄位(Given / When / Then 結構的行為劇本)。tcId(測試案例編號,如 TC-001-01)與 testType(測試類型:正常、邊界、異常)。reqId(需求編號)、priority(優先度:高、中、低)、status(狀態)、owner(負責人)、createdAt、updatedAt。大孫女,這個系統最厲害的地方,就是它內建了 「品質自動檢驗規則」。當分析師輸入完需求,系統會用 JavaScript 逐條掃描內容,依以下 9 項規則 自動評分:
tcId 欄位絕對不能是空的。系統算出來的分數,會劃分出四個嚴格的評分等級:≥90% 優異、≥70% 良好、≥50% 待加強,若是 <50% 則直接標記為「需重寫」,讓模糊不清的需求及早在前端被攔下來!
我們把下載好的 echarts.min.js 放進本地目錄,在完全斷網的環境下,主管一開啟系統,畫面就能動態畫出四個漂亮的視覺化圖表,幫長官掌握專案健康度:
大孫女,這一段是妳明天講課的 「黃金避坑指南」,一定要讓底下的工程師拿出筆記本記牢了!
因為咱們是在完全離線、不靠大伺服器的環境下使用 IndexedDB。
IndexedDB 本質上是個輕量級的 Object Store,它不像傳統的 SQL Server 那樣,有所謂的「外鍵約束(Foreign Key Constraints)」與自動幫妳做「級聯刪除(Cascade Delete)」的機制。
想像一下:如果使用者嫌麻煩,直接在 RTM 控管表上把某個 User Story 給點擊刪除了。
如果我們在 JavaScript 代碼裡沒有寫好防禦機制,資料庫系統會悶不吭聲地把 User Story 刪掉,但底下的 EARS 需求、BDD 情境、以及 Test Case 還死死地留在資料庫的角落裡!
這在軟體工程裡就叫做 「孤兒節點(Orphan Nodes)」。時間一久,資料庫裡就會塞滿無名無份、對不上源頭的垃圾資料,整張追蹤矩陣就會變成一筆糊塗帳!
教他們在寫 IndexedDB 的刪除事務(Transaction)時,必須在應用層設定強約束邏輯:
readwrite 交易中,寫好 JavaScript 連動刪除邏輯,一鼓作氣把與該需求相關的 EARS、BDD 描述與 Test Case 徹底清除,絕不留下任何「孤兒節點」,這樣才能確保需求追蹤鏈路的百分之百完整性!這套設計最能討得封閉內網單位長官歡心的,就是我們在代碼中徹底消除了網路外洩的可能。
不發送任何 fetch,不請求任何外部 CDN。所有資料在 FileReader 與本機 IndexedDB 的保險箱裡流轉,網頁一關、記憶體一收,乾乾淨淨,資安查核絕對挑不出任何毛病。
大孫女,妳聽阿公這樣講,有沒有覺得這軟體需求追蹤的工程,其實就跟咱們鄉下蓋灶腳、砌磚頭,一磚一瓦都要嚴絲合縫是一樣的道理?
小孫女剛才在一旁玩累了,手裡還拽著阿公幫她折的紙蝴蝶,依偎在沙發上睡得正香呢。阿公把這壺琥珀熱茶再添一些,妳快去整理明天的教學投影片,別熬太晚了,阿公在院子裡幫妳守著這盞暖燈。