前言
起初接觸到 SIT(System Integration Testing)與 UAT(User Acceptance Testing),是因為我在進行一個偏產品導向的 side project。在實作過程中,我開始關注「穩定性」這件事 — — 功能是否能順利串接、流程是否能被長期維護、使用者體驗是否一致。
同時也啟發我在資料科學的工作中,不只專注在模型的準確度與分析洞察,當模型上線和成為產品時,是否也應該關注它們的穩定性與可用性?也因此,我試著加入 SIT/UAT 的測試流程,嘗試從產品開發的角度重新審視資料科學的實務,探索模型與系統整合之間的關鍵環節。

Photo by Pramod Tiwari on Unsplash
資料科學家到底需不需要懂 SIT 和 UAT
SIT(系統整合測試)與 UAT(使用者驗收測試) 聽起來像是軟體工程師的工作範疇,但作為資料科學家,是否也需要掌握這些測試技能?其實,這取決於工作中的角色定位與工作型態。以下是三種常見情境:
- 學術研究型 DS 或只做模型開發者 : 不太需要 SIT/UAT
這類角色多數專注於模型實驗與驗證,例如技術研究、或產出概念性報告。模型的最終落地與系統整合由其他工程團隊負責,因此 SIT/UAT 並非工作核心,也很少需要直接參與。 - 企業內部資料產品導向的 DS : 需要理解但不需主導
當開發的模型是要部署在企業實際系統中,像是金融詐欺偵測、推薦系統、客戶風險評估等,模型的預測會被整合到業務流程、UI 介面甚至自動化決策中。即使 DS 不是 SIT/UAT 的主導者,也需要了解資料流的整合、特徵轉換的一致性,並參與部分測試流程,才能確保模型最終表現與開發時一致。 - 全端資料科學家、MLOps、Startup DS : 非常需要
如果負責「從資料探索 → 模型建立 → 上線部署 → 持續維運」的角色,尤其在團隊人力有限的情況下,SIT/UAT 也是 DS deliver 成果的必要工作。此時,懂測試不只是加分,而是避免模型部署翻車的基本功。
企業內部 DS 對 SIT/UAT 的需求程度
目前我在公司的角色,屬於企業內部資料產品導向的資料科學家。這意味著我開發的模型並不只是做完報告、給出分析結果,而是實際會被部署到公司系統中,影響真實的業務流程與決策。
那麼,在這樣的角色下,如果對 SIT/UAT 完全不熟,會發生什麼事呢?
- 不懂 SIT/UAT,會有哪些風險?
- 模型部署出錯難以察覺:特徵欄位順序被改動、格式錯誤、缺欄值等問題,若沒有參與測試,可能直到模型行為異常才被發現。
- 難以與 RD/QA 協作:當資料異常、轉換邏輯不一致,無法快速釐清問題來源,導致溝通成本提高。
- 忽略使用者體驗與實用性:模型結果可能形式正確,但不符合業務端的期待與使用情境,最終無法產生價值。
- 誤以為模型準確率就是一切:實際上,落地後的「穩定性」與「一致性」常比準確率還重要。
2. 理解 SIT/UAT,可以帶來什麼改變?
- 能主動驗證模型在真實環境的行為:從開發測試資料 → 模擬 API 串接 → 驗證結果格式一致,都能更有把握。
- 更懂得從使用者角度看模型成果:會關心「業務怎麼看這個分數?」「這個結果放在介面上會不會誤導?」這是產品導向的思維。
- 加速跨部門溝通與問題排查:能用測試語言與 QA、工程師溝通,成為真正能與系統整合的人。
- 提升模型產品化的成功率:懂得寫測試案例與驗收條件,讓模型不只「能跑」,而是「跑得穩」、「被用得久」。
什麼是 SIT 和 UAT?測試流程中的角色與責任
當資料產品進入實際部署階段,不再只是 notebook 中的模型或報表,而是需要進入系統、被實際使用,這時測試流程就變得非常重要。SIT(System Integration Testing)與 UAT(User Acceptance Testing)是關鍵。
SIT(系統整合測試)
- 指將資料管線、模型、API、資料庫等各模組整合在一起後,進行端到端的技術性測試。目的是確保資料能正確地流動、轉換、預測、並傳遞給下一個模組(例如 UI 或回寫資料庫)。
- 這階段通常由資料工程師或後端工程師主導,但資料科學家也會參與,因為很多錯誤(如特徵順序錯誤、格式不同、欄位命名不一致)只有 DS 最清楚當初建模的依據。
- 簡單來說,SIT 解決的是:模型能不能順利被「串起來」!
UAT(使用者驗收測試)
- 在 SIT 成功後,讓實際使用者(通常是 PM、業務端、風控部門等)進行功能與結果的驗收測試。重點不在技術,而在業務價值:模型結果是否可解釋?使用流程是否順暢?分數或標籤對使用者有意義嗎?
- 這階段的重點是「人怎麼看這個系統」,而資料科學家會協助提供模型的解釋邏輯、設計簡單的驗證案例、甚至與使用者一起討論模型的限制與使用方式。
- UAT 關心的是:結果是否合理?例如: 預測分數或標籤對使用者是否「有意義」?流程是否符合業務情境?這個功能是否達成業務需求?
如果 DS 想點這項技能,可以從哪裡學起?
對資料科學家來說,學習 SIT/UAT 不一定要像軟體測試工程師一樣全盤掌握所有測試技術,但理解核心概念、具備撰寫簡單測試的能力,就已經能在模型部署與產品化流程中站穩腳步。
概念面:換位思考,如果要驗收我自己的模型,我會檢查哪些地方?
以下是一個基本的 SIT 驗收思考流程,可以用這框架來設計測試邏輯:
- 明確功能名稱:要驗證的模型功能是什麼?例如:模型預測 API、風險分數標示邏輯
- 定義測試條件:包含輸入資料的類型、欄位、限制條件,哪些狀況需要特別檢查?
- 準備測試案例:建立正常資料、異常資料、邊界值、缺值等情境,模擬真實使用可能出現的資料
- 執行測試流程:用模擬資料跑一次實際流程,看資料能否正確傳入、模型是否正確回應
- 驗收預期結果:模型輸出是否符合預期?若不符合,有沒有清楚報錯或容錯處理?

SIT 測試模板
實作面:資料科學家如何實際參與 SIT 測試
已經理解了基本的驗收模型的概念後,下一步就是實際動手驗證資料與模型在系統中是否整合、穩定運作。對 DS 來說,進入 SIT 的實作面可以從熟悉的 Python 工具開始,逐步建立起有效的測試能力。
- 基本且實用的 Python 測試工具:
從pytest
和assert
開始學起,撰寫簡單的測試函數驗證平常的資料處理流程,是最直接有效的入門方式。

2. 從數據各面向進行驗證:
(1) 資料前處理模組驗證
- 檢查欄位是否存在、是否為預期型別、轉換後是否符合預期格式
assert 'user_id' in df.columns
assert df['amount'].dtype == float
(2) 特徵工程與模型輸出驗證
- 驗證特徵邏輯一致、類別轉換無誤、模型輸出合理
assert set(df['risk_level'].unique()) <= {'low', 'med', 'high'}
(3) 整體資料流程測試
- 使用模擬資料(mock data)從輸入到預測結果完整跑一次,驗證資料流與 API 是否串接正確
- 用
mock
模擬前端送資料 → 輸入 pipeline → 輸出預測結果並比對格式與值範圍
(4) 錯誤情境與容錯處理驗證
- 測試缺值、型別錯誤、資料缺欄等情境是否有良好報錯或 fallback
try/except
與assertRaises
檢查錯誤訊息是否正確出現
實作案例:驗證模型結果寫入資料庫
情境是:假設有一函式 predict_and_save_result(input_data, db_path)
,會執行模型預測並將結果寫入 SQLite 資料庫的 prediction_result
表中。
- 針對該功能寫 pytest 測試 function 範例
import sqlite3
import os
import pytest
from my_module import predict_and_save_result # 假設功能寫在這
@pytest.fixture
def test_db(tmp_path):
"""建立測試用的暫存資料庫檔案"""
db_path = tmp_path / "test_result.db"
return str(db_path)
def test_predict_result_saved(test_db):
"""測試模型預測結果是否成功寫入資料庫"""
# 模擬輸入資料
input_data = {"user_id": 1, "feature_x": 0.75, "feature_y": 100}
# 執行預測與寫入流程
predict_and_save_result(input_data, test_db)
# 驗證資料庫是否有正確寫入一筆預測結果
conn = sqlite3.connect(test_db)
cursor = conn.cursor()
cursor.execute("SELECT * FROM prediction_result WHERE user_id = 1;")
result = cursor.fetchone()
conn.close()
assert result is not None, "預測結果未成功寫入 prediction_result 表"
2. 執行 pytest
(1) 執行指定檔案的測試(例如 test_predict.py
)
pytest tests/test_predict.py
(2) 執行 coverage 測試
pytest --cov=my_module tests/
3. 執行結果
============================= test session starts =============================
collected 1 item
tests/test_predict.py::test_predict_result_saved PASSED [100%]
---------- coverage: platform darwin, python 3.10.4-final-0 -----------
Name Stmts Miss Cover
-----------------------------------------
my_module.py 45 5 89%
tests/test_predict.py 20 0 100%
-----------------------------------------
TOTAL 65 5 92%
Required test coverage of 90% reached. Total coverage: 92.31%
============================== 1 passed in 0.42s ==============================
- 測試成功:顯示 PASSED
- 測試失敗 : 顯示 FAILED 並指出是哪個 assert 沒過
結語:從資料到產品,DS 能做的其實更多
SIT/UAT 不只是工程師的事,也不只是測試的過程。對資料科學家來說,它是讓模型真正落地、產生價值的關鍵環節。從理解測試觀念、寫幾個測試案例開始,到與工程、業務的合作對齊,都是邁向產品導向思維的重要一步。
如果你和我一樣,開始關注模型穩定性與使用體驗,相信這條路會讓你不只成為一位會建模的資料科學家,更是一位真正「做出產品」的技術實踐者。
感謝讀到這裡的你,我們下次見!