文件目錄12 / 20

留下決定12 / 20

看見意圖覆蓋

本頁內容

這個軟體,你心裡有數的部分有多少?意圖覆蓋用一張圖回答:每個程式碼檔案一個方塊,按模組排開,顏色越深,被說明引用的行越多。哪裡還是空白、哪裡的說明已經過時,一眼就能看到。指向一篇意圖,它覆蓋的檔案就亮起來。

打開意圖覆蓋

新增一個對話,傳送第一條訊息之前,訊息區顯示的就是意圖覆蓋卡片。也可以打開「設定 → 意圖覆蓋」(在目前專案一組裡),卡片會填滿整個頁面,看大專案更方便。

意圖覆蓋需要實作資料夾是一個 Git 倉庫。專案還沒有覆蓋結果時,卡片顯示「尚未計算」,提供兩個入口:「解釋」先讓 Agent 寫出說明,「現在計算」按現有的說明立即計算。大倉庫需要讀取全部檔案,可能要等一會兒。

之後每次解釋結束,卡片自動更新。標題行右側顯示最近一次解釋結束的時間和當時的提交編號,旁邊的按鈕可以重新計算。

讀懂卡片

卡片最上方是一個大數字:被說明引用到的行,佔範圍內全部程式碼行的比例。旁邊的「3 / 6 檔案」是有意圖對應的檔案數和檔案總數。

意圖覆蓋卡片:68% 的程式碼行被說明引用,41 / 60 個檔案有意圖對應。模組區按資料夾排開點陣,下方列出每篇意圖文件。

下面的進度列分三段,圖例寫在下方:

  • 被引用的行:實心段,長度和比例一致。
  • 解釋已過時:斜紋段,這些檔案在說明寫成之後改過。
  • 沒有意圖對應:空白,沒有任何說明引用這些檔案。

按模組看

「模組」區預設以點陣顯示:一個檔案一個點,按資料夾分組成行。有意圖對應的點,被引用的行佔比越高,顏色越深;解釋已過時的點帶斜紋;沒有意圖對應的點是空的。指向一個點,顯示檔名和被引用的比例。

右上角可以切換為長條:每個模組一行,條長按行數等比,條內按三種狀態分段。

點選一個模組進入它的下一層,標題行出現上一級按鈕和路徑。比如訂閱服務裡 billing、jobs、notify、web 四行排開,notify 一行幾乎全空:通知郵件的規則還沒有寫進意圖。

依意圖看

模組區下方是意圖清單,每篇意圖文件一行,按文件樹縮排,後面一條短線表示它對應的檔案數。還沒有任何程式碼對應的文件,名字變灰,短線為空。

  • 指向一篇文件:模組區裡與它無關的行變淡,版面不變。
  • 點選一篇文件:無關的行收起,進度列和點陣只顯示這篇意圖對應的程式碼,模組標題下方出現帶 × 的文件名標籤。
  • 再點一次、點標籤的 ×,或按 Esc,取消點選。

例如點選《續費》,模組區只剩 billing/grace.ts、jobs/renewal-job.ts 和幾個測試檔案。你立刻知道,改續費規則會動到哪裡。

怎樣理解這個數字

覆蓋率說的是說明引用了多少程式碼,不是程式碼品質,也不是測試覆蓋率。它幫你回答兩個問題:

  • 哪裡還沒有意圖:空白的模組,要麼是不重要的程式碼,要麼是你還沒想清楚、卻已經在執行的規則。後者值得寫一段意圖,再讓 Agent 解釋。
  • 哪裡的說明過時了:斜紋多的地方,最近改動多、說明沒跟上,見程式碼變了之後。

覆蓋率不必追求 100%。從你最在意的部分開始,讓它們先變深。

Parnas Index

「設定 → Parnas Index」從另一面看同一件事:程式碼改動牽動了多少意圖。名字來自 David Parnas 的模組劃分原則:好的模組把一項可能變化的決策藏在自己內部。在 Noea 裡,一段意圖近似一項決策,一個程式碼檔案近似一個模組。

頁面頂部的大數字,是平均每改動一個檔案,要重新核對的意圖段數,旁邊寫著完整檢查了多少段、其中多少沒有變化。數字越大,說明一處改動牽連的決策越多。時間範圍可選 7 天、30 天或 90 天。

頁面有兩個檢視:

檢視層級欄
這段程式碼牽動多少意圖檔案、定義牽動意圖、改動、每次牽動、沒有變化
這部分意圖被多少程式碼牽動文件、片段引用檔案、程式碼改動、意圖改動、沒有變化

點選一行就地展開:檔案行顯示它被說明引用的比例、牽動最多的意圖,以及「在意圖覆蓋中查看」;意圖行顯示它引用了幾個檔案、最常牽動它的程式碼,以及打開這段意圖的入口。

第一個檢視的檔案層級下方有一張「覆蓋與牽動」散佈圖:橫軸是被說明引用的行佔比,縱軸是每次改動牽動的意圖段數。右上角的檔案被引用得很密,又常被改動,一改就要核對很多意圖,值得想想能否拆開。覆蓋越高不一定越好。

專案還沒有關聯實作資料夾時,這兩個頁面都會提示先到「設定 → 專案」關聯。