<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>議題hub on Tarragon</title><link>https://tarrragon.github.io/blog/tags/%E8%AD%B0%E9%A1%8Chub/</link><description>Recent content in 議題hub on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Thu, 18 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/%E8%AD%B0%E9%A1%8Chub/index.xml" rel="self" type="application/rss+xml"/><item><title>守衛和規則為什麼會誤觸</title><link>https://tarrragon.github.io/blog/til/terms/guard-misfires/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/til/terms/guard-misfires/</guid><description>&lt;p>你寫了一個守衛或規則（hook、linter、regex），它邏輯看起來沒錯，卻&lt;strong>命中了不該命中的東西&lt;/strong>——這是規則層的&lt;a href="../false-positive/">誤報&lt;/a>。多半的根因是同一個：規則寫得比意圖寬。&lt;/p>
&lt;h2 id="因果與一個切面">因、果、與一個切面&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>機制（因）&lt;/strong>：規則涵蓋範圍超出意圖，叫 &lt;strong>&lt;a href="../over-match/">over-match&lt;/a>&lt;/strong>（過寬匹配）。&lt;/li>
&lt;li>&lt;strong>結果（果）&lt;/strong>：守衛因此被形似但非真意圖的輸入觸發，叫 &lt;strong>&lt;a href="../false-trigger/">false trigger&lt;/a>&lt;/strong>（誤觸）。&lt;/li>
&lt;li>&lt;strong>linter 切面&lt;/strong>：靜態分析報的偽警告，叫 &lt;strong>&lt;a href="../spurious-warning/">spurious warning&lt;/a>&lt;/strong>。&lt;/li>
&lt;/ul>
&lt;h2 id="怎麼想這件事">怎麼想這件事&lt;/h2>
&lt;p>誤觸不是「偵測器壞了」，是規則的範圍沒收好。收窄規則時要拿捏：太寬會誤觸（&lt;a href="../false-positive/">誤報&lt;/a>），太窄會漏掉真的（&lt;a href="../false-negative/">漏接&lt;/a>）。這個拉扯就是&lt;a href="../measuring-detectors/">怎麼量偵測器&lt;/a>裡 precision 與 recall 的取捨。&lt;/p>
&lt;h2 id="從這裡往下讀">從這裡往下讀&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../over-match/">over-match&lt;/a>：規則過寬而誤命中。&lt;/li>
&lt;li>&lt;a href="../false-trigger/">false trigger&lt;/a>：守衛被誤觸。&lt;/li>
&lt;li>&lt;a href="../spurious-warning/">spurious warning&lt;/a>：linter 的偽警告。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>你寫了一個守衛或規則（hook、linter、regex），它邏輯看起來沒錯，卻<strong>命中了不該命中的東西</strong>——這是規則層的<a href="../false-positive/">誤報</a>。多半的根因是同一個：規則寫得比意圖寬。</p>
<h2 id="因果與一個切面">因、果、與一個切面</h2>
<ul>
<li><strong>機制（因）</strong>：規則涵蓋範圍超出意圖，叫 <strong><a href="../over-match/">over-match</a></strong>（過寬匹配）。</li>
<li><strong>結果（果）</strong>：守衛因此被形似但非真意圖的輸入觸發，叫 <strong><a href="../false-trigger/">false trigger</a></strong>（誤觸）。</li>
<li><strong>linter 切面</strong>：靜態分析報的偽警告，叫 <strong><a href="../spurious-warning/">spurious warning</a></strong>。</li>
</ul>
<h2 id="怎麼想這件事">怎麼想這件事</h2>
<p>誤觸不是「偵測器壞了」，是規則的範圍沒收好。收窄規則時要拿捏：太寬會誤觸（<a href="../false-positive/">誤報</a>），太窄會漏掉真的（<a href="../false-negative/">漏接</a>）。這個拉扯就是<a href="../measuring-detectors/">怎麼量偵測器</a>裡 precision 與 recall 的取捨。</p>
<h2 id="從這裡往下讀">從這裡往下讀</h2>
<ul>
<li><a href="../over-match/">over-match</a>：規則過寬而誤命中。</li>
<li><a href="../false-trigger/">false trigger</a>：守衛被誤觸。</li>
<li><a href="../spurious-warning/">spurious warning</a>：linter 的偽警告。</li>
</ul>
]]></content:encoded></item><item><title>你的自動判斷會犯兩種錯：誤報與漏接</title><link>https://tarrragon.github.io/blog/til/terms/detection-errors/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/til/terms/detection-errors/</guid><description>&lt;p>只要你做了一個&lt;strong>會自動判斷「有沒有」的東西&lt;/strong>——測試判斷程式碼有沒有壞、掃描判斷有沒有漏洞、分類器判斷是不是垃圾郵件、守衛判斷要不要攔——它就不會永遠對。而且它錯的方式只有兩種。&lt;/p>
&lt;h2 id="兩種錯">兩種錯&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>說「有」但其實沒有 → 誤報&lt;/strong>（&lt;a href="../false-positive/">false positive&lt;/a>）。&lt;/li>
&lt;li>&lt;strong>說「沒有」但其實有 → 漏接&lt;/strong>（&lt;a href="../false-negative/">false negative&lt;/a>）。&lt;/li>
&lt;/ul>
&lt;p>把判斷（有/無）對上真實（有/無），剛好四格——這張判斷×真實的對照表叫混淆矩陣，&lt;a href="../false-positive/">false positive&lt;/a> 那篇有完整版。&lt;/p>
&lt;h2 id="為什麼值得分清楚">為什麼值得分清楚&lt;/h2>
&lt;p>因為兩種錯的&lt;strong>代價往往不對稱&lt;/strong>，而且通常此消彼長：壓低一種會抬高另一種。癌症篩檢寧可誤報也不能漏接；自動封鎖寧可漏放也別誤殺。先想清楚「哪種錯更貴」，才知道偵測器該往哪邊偏。&lt;/p>
&lt;h2 id="從這裡往下讀">從這裡往下讀&lt;/h2>
&lt;ul>
&lt;li>想徹底搞懂這兩種錯：&lt;a href="../false-positive/">false positive&lt;/a>、&lt;a href="../false-negative/">false negative&lt;/a>。&lt;/li>
&lt;li>統計課對這兩種錯的編號：&lt;a href="../type-i-error/">Type I error&lt;/a>（= 誤報）、&lt;a href="../type-ii-error/">Type II error&lt;/a>（= 漏接）。&lt;/li>
&lt;li>想用數字衡量這兩種錯有多少：見&lt;a href="../measuring-detectors/">怎麼量一個偵測器準不準&lt;/a>。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>只要你做了一個<strong>會自動判斷「有沒有」的東西</strong>——測試判斷程式碼有沒有壞、掃描判斷有沒有漏洞、分類器判斷是不是垃圾郵件、守衛判斷要不要攔——它就不會永遠對。而且它錯的方式只有兩種。</p>
<h2 id="兩種錯">兩種錯</h2>
<ul>
<li><strong>說「有」但其實沒有 → 誤報</strong>（<a href="../false-positive/">false positive</a>）。</li>
<li><strong>說「沒有」但其實有 → 漏接</strong>（<a href="../false-negative/">false negative</a>）。</li>
</ul>
<p>把判斷（有/無）對上真實（有/無），剛好四格——這張判斷×真實的對照表叫混淆矩陣，<a href="../false-positive/">false positive</a> 那篇有完整版。</p>
<h2 id="為什麼值得分清楚">為什麼值得分清楚</h2>
<p>因為兩種錯的<strong>代價往往不對稱</strong>，而且通常此消彼長：壓低一種會抬高另一種。癌症篩檢寧可誤報也不能漏接；自動封鎖寧可漏放也別誤殺。先想清楚「哪種錯更貴」，才知道偵測器該往哪邊偏。</p>
<h2 id="從這裡往下讀">從這裡往下讀</h2>
<ul>
<li>想徹底搞懂這兩種錯：<a href="../false-positive/">false positive</a>、<a href="../false-negative/">false negative</a>。</li>
<li>統計課對這兩種錯的編號：<a href="../type-i-error/">Type I error</a>（= 誤報）、<a href="../type-ii-error/">Type II error</a>（= 漏接）。</li>
<li>想用數字衡量這兩種錯有多少：見<a href="../measuring-detectors/">怎麼量一個偵測器準不準</a>。</li>
</ul>
]]></content:encoded></item><item><title>告警太多，反而沒人看</title><link>https://tarrragon.github.io/blog/til/terms/alert-overload/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/til/terms/alert-overload/</guid><description>&lt;p>當你的監控、掃描或 linter 整天在響，而其中大半是&lt;a href="../false-positive/">誤報&lt;/a>，你會遇到一個比「單一誤報」更麻煩的問題：&lt;strong>真正重要的被淹沒，而且人開始不看了&lt;/strong>。&lt;/p>
&lt;h2 id="從一條誤報到沒人看">從一條誤報到沒人看&lt;/h2>
&lt;p>這是一條因果鏈：&lt;/p>
&lt;ul>
&lt;li>一條監控的誤報叫 &lt;strong>&lt;a href="../false-alarm/">false alarm&lt;/a>&lt;/strong>（偽警報）。&lt;/li>
&lt;li>大量誤報累積、淹沒真訊號，這個狀態叫 &lt;strong>&lt;a href="../noise/">noise&lt;/a>&lt;/strong>（噪音）。&lt;/li>
&lt;li>人因此對告警麻木、連真的也忽略，這個後果叫 &lt;strong>&lt;a href="../alert-fatigue/">alert fatigue&lt;/a>&lt;/strong>（告警疲勞）。&lt;/li>
&lt;/ul>
&lt;h2 id="為什麼是設計問題">為什麼是設計問題&lt;/h2>
&lt;p>因為每一條告警單看都「沒錯」，問題出在&lt;strong>總量&lt;/strong>。所以解法是系統性降噪：提高告警的 &lt;a href="../precision/">precision&lt;/a>、分級、讓每條告警都可行動。降噪不是美觀問題，是讓偵測系統還有人看的前提。&lt;/p>
&lt;h2 id="從這裡往下讀">從這裡往下讀&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../false-alarm/">false alarm&lt;/a>：監控的偽警報。&lt;/li>
&lt;li>&lt;a href="../noise/">noise&lt;/a>：淹沒真訊號的誤報。&lt;/li>
&lt;li>&lt;a href="../alert-fatigue/">alert fatigue&lt;/a>：告警疲勞。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>當你的監控、掃描或 linter 整天在響，而其中大半是<a href="../false-positive/">誤報</a>，你會遇到一個比「單一誤報」更麻煩的問題：<strong>真正重要的被淹沒，而且人開始不看了</strong>。</p>
<h2 id="從一條誤報到沒人看">從一條誤報到沒人看</h2>
<p>這是一條因果鏈：</p>
<ul>
<li>一條監控的誤報叫 <strong><a href="../false-alarm/">false alarm</a></strong>（偽警報）。</li>
<li>大量誤報累積、淹沒真訊號，這個狀態叫 <strong><a href="../noise/">noise</a></strong>（噪音）。</li>
<li>人因此對告警麻木、連真的也忽略，這個後果叫 <strong><a href="../alert-fatigue/">alert fatigue</a></strong>（告警疲勞）。</li>
</ul>
<h2 id="為什麼是設計問題">為什麼是設計問題</h2>
<p>因為每一條告警單看都「沒錯」，問題出在<strong>總量</strong>。所以解法是系統性降噪：提高告警的 <a href="../precision/">precision</a>、分級、讓每條告警都可行動。降噪不是美觀問題，是讓偵測系統還有人看的前提。</p>
<h2 id="從這裡往下讀">從這裡往下讀</h2>
<ul>
<li><a href="../false-alarm/">false alarm</a>：監控的偽警報。</li>
<li><a href="../noise/">noise</a>：淹沒真訊號的誤報。</li>
<li><a href="../alert-fatigue/">alert fatigue</a>：告警疲勞。</li>
</ul>
]]></content:encoded></item><item><title>怎麼量一個偵測器準不準</title><link>https://tarrragon.github.io/blog/til/terms/measuring-detectors/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/til/terms/measuring-detectors/</guid><description>&lt;p>當你想評估「這個偵測器到底好不好」，會發現只說一個「準確率」不夠——因為&lt;a href="../detection-errors/">誤報與漏接&lt;/a>是兩種不同的錯，要用兩把尺分開量。&lt;/p>
&lt;h2 id="兩把尺">兩把尺&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="../precision/">precision&lt;/a>（精確率）&lt;/strong>：報出來的之中，有多少是真的？被&lt;a href="../false-positive/">誤報&lt;/a>拉低。&lt;/li>
&lt;li>&lt;strong>&lt;a href="../recall/">recall&lt;/a>（召回率）&lt;/strong>：真的之中，抓到了多少？被&lt;a href="../false-negative/">漏接&lt;/a>拉低。&lt;/li>
&lt;/ul>
&lt;h2 id="為什麼要兩把">為什麼要兩把&lt;/h2>
&lt;p>因為只看一把會被騙。一個偵測器只要「什麼都不報」，就永遠不誤報、precision 看起來無敵——但 recall 是零，全漏了。反過來「全部都報」recall 滿分、precision 慘不忍睹。兩把一起看，才知道它是真準還是在作弊。&lt;/p>
&lt;p>兩者通常此消彼長，調和成單一數字是 F1 score。要偏哪一把，回到&lt;a href="../detection-errors/">誤報與漏接哪個更貴&lt;/a>的判斷。&lt;/p>
&lt;h2 id="從這裡往下讀">從這裡往下讀&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../precision/">precision&lt;/a>：報出來的有多少是真的。&lt;/li>
&lt;li>&lt;a href="../recall/">recall&lt;/a>：真的之中抓到多少。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>當你想評估「這個偵測器到底好不好」，會發現只說一個「準確率」不夠——因為<a href="../detection-errors/">誤報與漏接</a>是兩種不同的錯，要用兩把尺分開量。</p>
<h2 id="兩把尺">兩把尺</h2>
<ul>
<li><strong><a href="../precision/">precision</a>（精確率）</strong>：報出來的之中，有多少是真的？被<a href="../false-positive/">誤報</a>拉低。</li>
<li><strong><a href="../recall/">recall</a>（召回率）</strong>：真的之中，抓到了多少？被<a href="../false-negative/">漏接</a>拉低。</li>
</ul>
<h2 id="為什麼要兩把">為什麼要兩把</h2>
<p>因為只看一把會被騙。一個偵測器只要「什麼都不報」，就永遠不誤報、precision 看起來無敵——但 recall 是零，全漏了。反過來「全部都報」recall 滿分、precision 慘不忍睹。兩把一起看，才知道它是真準還是在作弊。</p>
<p>兩者通常此消彼長，調和成單一數字是 F1 score。要偏哪一把，回到<a href="../detection-errors/">誤報與漏接哪個更貴</a>的判斷。</p>
<h2 id="從這裡往下讀">從這裡往下讀</h2>
<ul>
<li><a href="../precision/">precision</a>：報出來的有多少是真的。</li>
<li><a href="../recall/">recall</a>：真的之中抓到多少。</li>
</ul>
]]></content:encoded></item><item><title>測試紅燈不一定是真的壞</title><link>https://tarrragon.github.io/blog/til/terms/unreliable-tests/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/til/terms/unreliable-tests/</guid><description>&lt;p>CI 紅了，你的第一個問題應該是：&lt;strong>這是真的壞，還是測試在騙我？&lt;/strong> 測試報紅卻不是被測程式碼的錯，就是測試領域的&lt;a href="../false-positive/">誤報&lt;/a>——而它有兩種典型樣態。&lt;/p>
&lt;h2 id="兩種假紅燈">兩種「假紅燈」&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="../flaky/">flaky&lt;/a>&lt;/strong>：同一份程式碼、什麼都沒改，卻時過時不過。問題在測試的&lt;strong>不穩定&lt;/strong>（競態、時序、共用狀態）。&lt;/li>
&lt;li>&lt;strong>&lt;a href="../spurious-failure/">spurious failure&lt;/a>&lt;/strong>：這次失敗的&lt;strong>原因不是被測對象&lt;/strong>——是環境、網路、CI 機器的暫態。&lt;/li>
&lt;/ul>
&lt;h2 id="為什麼要分清楚">為什麼要分清楚&lt;/h2>
&lt;p>因為修的地方不同：flaky 要修測試本身的不穩定，spurious failure 要修環境或基礎設施。更重要的是，把假紅燈和真失敗混在一起，會讓人養成「紅了先重跑」的反射，久了連真 bug 都被當假紅燈忽略——這就是測試版的&lt;a href="../alert-overload/">告警疲勞&lt;/a>。&lt;/p>
&lt;h2 id="從這裡往下讀">從這裡往下讀&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../flaky/">flaky&lt;/a>：時綠時紅的測試。&lt;/li>
&lt;li>&lt;a href="../spurious-failure/">spurious failure&lt;/a>：偽失敗。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>CI 紅了，你的第一個問題應該是：<strong>這是真的壞，還是測試在騙我？</strong> 測試報紅卻不是被測程式碼的錯，就是測試領域的<a href="../false-positive/">誤報</a>——而它有兩種典型樣態。</p>
<h2 id="兩種假紅燈">兩種「假紅燈」</h2>
<ul>
<li><strong><a href="../flaky/">flaky</a></strong>：同一份程式碼、什麼都沒改，卻時過時不過。問題在測試的<strong>不穩定</strong>（競態、時序、共用狀態）。</li>
<li><strong><a href="../spurious-failure/">spurious failure</a></strong>：這次失敗的<strong>原因不是被測對象</strong>——是環境、網路、CI 機器的暫態。</li>
</ul>
<h2 id="為什麼要分清楚">為什麼要分清楚</h2>
<p>因為修的地方不同：flaky 要修測試本身的不穩定，spurious failure 要修環境或基礎設施。更重要的是，把假紅燈和真失敗混在一起，會讓人養成「紅了先重跑」的反射，久了連真 bug 都被當假紅燈忽略——這就是測試版的<a href="../alert-overload/">告警疲勞</a>。</p>
<h2 id="從這裡往下讀">從這裡往下讀</h2>
<ul>
<li><a href="../flaky/">flaky</a>：時綠時紅的測試。</li>
<li><a href="../spurious-failure/">spurious failure</a>：偽失敗。</li>
</ul>
]]></content:encoded></item></channel></rss>