| name | tsinswreng-requirements-analysis |
| description | 需求分析skill。默認情況下、你應當先做需求分析 再設計實現。除非用戶明確要求你不用分析 |
核心原則
需求分析的本質是交流、不是猜測。
用戶丟出一段話之後、你不能自己悶頭分析然後直接輸出一大堆。 需求分析的核心動作是反問——反覆向用戶提問、直到所有模糊點都被澄清。
寧可多問讓用戶覺得煩、也不能不問就瞎搞。
記住: 你沒有上下文、你不知道用戶的業務背景、你不知道用戶心裏沒說出來的前提假設。 這些東西只能通過問來獲取、不能靠猜。
反問的時機
以下任何情況、必須停下來反問、不能自己假設:
- 用戶的描述中有模糊的詞: 問清楚具體標準
- 用戶只說了要做什麼、沒說為什麼 —— 問清楚目標和背景
- 用戶的需求之間可能存在矛盾 —— 指出矛盾、讓用戶裁定
- 有信息你覺得缺了但用戶沒提 —— 主動問“XX方面你是怎麼考慮的”
- 你覺得用戶的某個要求可能不是最優解 —— 指出問題、提供替代思路
每一輪反問之後、根據用戶的回答繼續追問、直到沒有模糊點爲止。
需求分析階段的輸出是一份需求確認單、用戶確認後此階段完成。 除非用戶明確要求、在用戶確認需求之前、不得進入設計階段、不得寫任何代碼。
何時需要加載此skill
以下情況必須加載此skill進行需求分析:
- 接到新功能需求
- 用戶提出的需求描述比較模糊、需要澄清
- 需求涉及多個模塊或系統
- 需要做較大的重構或架構調整
以下情況可以跳過:
- 用戶已經給出非常明確、詳細的需求說明
- 修復一個範圍明確的 bug
- 修改註釋或文檔
- 純代碼風格/格式調整
識別信息缺口
收到需求後的第一反應不是開始分析、而是自問: “有什麼信息是我還不知道、但做好這件事必須要清楚的?”
常見的信息缺口:
- 用戶當前的技術棧和約束是什麼(框架、語言版本、AOT要求等)
- 用戶的業務場景和上下文(誰在用、用在哪、什麼時候用)
- 用戶對質量的預期(原型級別還是生產級別)
- 時間和資源約束(有沒有死線、有沒有人力限制)
- 與現有系統的關係(是全新的還是改現有的、改哪部分)
不要假設這些信息。 直接列出你缺的信息、向用戶提問。 問的時候不要一口氣問十個問題、按重要程度分批問、每次 2-3 個。
剝離問題與解法
用戶提出的需求往往是“要做什麼”(解法)、而非“想解決什麼”(問題)。 收到任務後、必須先區分二者:
- 真正的問題: 用戶想解決的痛點是什麼? 想達成什麼目標?
- 用戶提出的解法: 用戶給出的具體做法
如果兩者有差距——也就是用戶提出的解法未必是解決該問題的最佳方式——必須指出來、 說明原因、讓用戶確認是堅持原解法還是換個方向。
示例:
- 用戶說「加個緩存」→ 真正的問題可能是「查詢太慢」、緩存只是解法之一。應指出還有索引優化、數據預聚合、讀寫分離等方向
- 用戶說「把這兩個類合併」→ 真正的問題可能是「它們之間耦合太多難以維護」、合併未必是最佳解法
識別隱含需求
用戶說出來的往往只是冰山露出水面的部分。必須主動思考用戶沒有說但客觀上需要的東西。
每個需求拿到手後、從以下角度挖掘隱含需求:
- 安全相關: 是否需要權限控制、輸入校驗、敏感數據保護
- 異常處理: 依賴服務掛了怎麼辦、數據不一致時如何處理
- 可觀測性: 是否需要日誌、監控、告警
- 數據生命週期: 數據從哪來、存多久、什麼時候清理
- 配置與部署: 是否需要配置項、是否需要數據庫遷移
- 向後兼容: 是否影響已有功能、是否需要平滑過渡
列出這些隱含需求後、逐項讓用戶確認哪些要做、哪些不做、哪些後續再做。
範圍界定
必須明確劃定本次工作的範圍、防止 scope creep、也防止 AI 順手改一堆不相關的東西:
- 範圍內: 本次明確要做的事情
- 範圍外: 本次明確不做的事情(即使有關聯、即使看起來應該做)
- 暫不確定: 需要進一步討論的事項
範圍界定的粒度應該到“改哪些模塊/哪些層、不改哪些模塊/哪些層”的程度。
邊界條件與異常場景
在分析階段就強制思考以下場景、提前暴露潛在問題:
- 輸入邊界: 空輸入、超長輸入、非法格式、特殊字符
- 並發場景: 多用戶同時操作同一數據
- 資源耗盡: 數據量極大時內存是否會爆、連接池是否夠用
- 外部依賴: 依賴的服務/數據庫/文件系統不可用時如何降級
- 冪等性: 同一操作執行多次是否安全
- 時序問題: 操作順序是否敏感、延遲是否會導致問題
不是每個場景都需要處理、但要主動列出來讓用戶決定取捨。
影響範圍分析(業務視角)
從業務和功能角度分析本次改動的波及範圍:
- 會影響哪些已有功能/業務流程
- 是否需要改動數據庫表結構或配置文件
- 是否影響對外 API(包括第三方調用方)
- 是否與其他正在開發的功能有衝突
注意: 此處側重業務和功能層面、代碼層面的具體影響在設計階段(由 tsinswreng-structure-design skill 負責)再詳細分析。
需求確認的輸出格式
需求分析完成後、必須按照以下格式輸出需求確認、等待用戶確認後才能推進:
- 我理解的需求是: 用自己的話複述一遍需求、確保理解正確
- 核心目標: 本次要解決的關鍵問題是什麼(1-2句話)
- 隱含需求清單: 列出識別到的隱含需求、每項標注 [納入] / [不做] / [待定]、讓用戶確認
- 範圍界定: 明確本次做什麼、不做什麼
- 關鍵邊界條件: 列出需要關注的異常場景、每項標注處理策略
- 業務影響: 會影響哪些已有功能