iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
IT Operation

AI 輔助開發下,測試如何保住品質防線系列 第 17

Day 17:徽章連到的 CI 服務,幾年前就沒人在用了

  • 分享至 

  • xImage
  •  

前言:徽章還在,但它指的東西早就換了

Day 04 講過 README 的功能說明沒跟上程式碼——那是「這個套件能做什麼」的文件漂移。今天要看另一種完全不同面向的漂移:README 頂端那排徽章,連到的 CI/覆蓋率服務,跟現在真正在跑的工具鏈已經是兩回事

今日目標

  • 核對 README 徽章實際連到哪裡,跟真正在跑的 CI 設定是否一致
  • 理解「功能文件漂移」跟「工具鏈文件漂移」是兩種不同性質的問題
  • 想清楚:徽章這種「看起來在運作」的視覺元素,比純文字說明更容易騙過讀者的第一印象
  • 知道這種脫鉤對一個新使用者的判斷會造成什麼影響

README 頂端的徽章連到哪裡

[![Build Status](https://img.shields.io/travis/omnipay-taiwan/omnipay-ecpay/master.svg?style=flat-square)]
(https://travis-ci.org/omnipay-taiwan/omnipay-ecpay)
[![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/omnipay-taiwan/omnipay-ecpay.svg?style=flat-square)]
(https://scrutinizer-ci.com/g/omnipay-taiwan/omnipay-ecpay/code-structure)
[![Quality Score](https://img.shields.io/scrutinizer/g/omnipay-taiwan/omnipay-ecpay.svg?style=flat-square)]
(https://scrutinizer-ci.com/g/omnipay-taiwan/omnipay-ecpay)

三個徽章分別連到 Travis CI 跟 Scrutinizer CI 這兩個第三方服務。但真正在跑的 pipeline 是 .github/workflows/tests.yml——GitHub Actions。這兩者完全脫鉤:Travis CI/Scrutinizer 上不會再有任何新的建置紀錄,README 上的徽章畫面,反映的是這個套件很早期(很可能是套件剛建立、還在用 Omnipay 官方骨架產生器預設模板的那個階段)留下的設定,之後專案切換到 GitHub Actions,卻沒有人回頭把 README 的徽章也一併換掉。

這種漂移跟 Day 04 的漂移,差在哪裡

Day 04 講的漂移是「README 的內容沒跟上程式碼」——寫了什麼、沒寫什麼、寫錯了什麼。今天講的漂移是「README 引用的外部服務沒跟上實際工具鏈」——連結指向的東西還存在,但已經不是真正在運作的那一套。

兩者的共通點是「文件被放著不管,程式碼/基礎設施持續在動」;差異在於第一種漂移讀者只要花時間讀程式碼就能自己補回來,第二種漂移讀者幾乎沒有辦法自己發現——徽章看起來就是徽章,圖示顯示著(可能是快取住的舊狀態、也可能顯示不出來),不會有任何跡象告訴你「這其實已經是死的連結」,除非你真的點進去看。

❌ vs ✅:徽章帶來的第一印象落差

❌ 讀者看到的畫面
[Build Status: 圖示顯示某種狀態] → 點進去是 Travis CI 上一個很久沒有新建置紀錄的頁面
[Coverage Status: 圖示顯示某種狀態] → 點進去是 Scrutinizer 上同樣停滯的頁面

讀者的合理猜測:這個套件的 CI/覆蓋率追蹤看起來還活著
✅ 讀者如果去看 .github/workflows/tests.yml
matrix: php ['7.1' ... '8.3']
run: composer install && vendor/bin/phpunit --testdox --no-coverage

讀者能看到的事實:CI 其實活著,只是換了地方,且覆蓋率追蹤目前完全沒有在跑

徽章這種視覺元素的問題在於,它給人「這裡有在維護」的第一印象,卻可能連到一個早就沒人在看的地方——這比一段過時的文字說明更容易誤導人,因為讀者通常不會逐一去點開每個徽章驗證它是不是真的還活著。

為什麼這件事值得放進這個系列

這個系列的主題句是「AI 能幫你補程式碼,但補不出你自己都沒發現的測試缺口」。徽章脫鉤剛好示範了同一個道理放大到「品質防線的可見度」上——如果連維護者自己都不會回頭檢查徽章連到哪裡,會有更多沒被意識到的落差藏在看起來沒問題的地方。這也是為什麼這個系列從第一天開始就強調「先核實再下結論」:不是套件寫得不好,是很多這類細節,一旦沒有人主動回頭檢查,就會一直維持著看起來沒事、實際上已經脫節的狀態。

今日思考題

你維護的專案 README 上有沒有類似的徽章、連結、或引用的第三方服務?下次有空的時候,花五分鐘把每一個都點開來看看,它們現在還連得到真正活著的東西嗎?

今日重點回顧

  • README 的三個徽章連到 Travis CI/Scrutinizer,但真正在跑的是 GitHub Actions,兩者已經脫鉤
  • 這是「工具鏈文件漂移」,跟 Day 04 講的「功能說明漂移」是不同性質的問題
  • 徽章這種視覺元素比純文字說明更容易造成誤導,因為讀者通常不會逐一驗證連結是否還活著
  • 沒有人主動回頭檢查的地方,就會一直維持著「看起來沒事」的假象

明日預告

明天換一個角度:這個套件沒有 PHPStan、沒有 Psalm,型別相關的錯誤目前完全沒有靜態分析工具把關,那到底是靠什麼在擋?順便看一個更嚴重的發現——依賴鏈裡累積的已知安全性風險。


上一篇
Day 16:跨版本相容,不是刻意做出來的,是「沒用到新語法」換來的
下一篇
Day 18:沒有 PHPStan,型別錯誤靠什麼擋?答案:目前沒有
系列文
AI 輔助開發下,測試如何保住品質防線19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言