--- tags: - Rails Develoepr Foundation - 開發必學的需求分析法 --- # 2023-12-10 - 開發必學的需求分析法 ## 事前準備 本次課程實作的部分會以協作的形式進行,需確認可以正常使用 Hackmd 以及 FigJam 即可。 ### 工具 上課過程會使用以下工具 | 名稱 | 說明 | |------------------|---------------------------------| | FigJam | 需求分析練習,請確認瀏覽器可以正常開啟 | ## 課後問卷 麻煩大家協助填寫改善課程品質,以及了解大家對哪些類型的內容更有興趣 [➡️ 問卷連結](https://www.surveycake.com/s/lyNa3) ## 講師資訊 課程內容無法涵蓋的部分,可以追蹤網誌、YouTube 會以小單元或者系列連載的方式分享出來。 | 網站 | 介紹 | |-----------------|------| | [個人網誌](https://blog.aotoki.me) | 系列文章連載、主題式討論 | [Facebook 粉絲專頁](https://fb.me/aotoki.me) | 主題式討論 | [YouTube 頻道](https://www.youtube.com/channel/UCcABbJfCL0DfNh3wDk_-7lg) | 技術講解 | [Discord 社群](https://discord.com/invite/t2Kd6PNvvA) | 技術討論,上課的問題也可以在此發問 | [訂閱電子報](https://mailchi.mp/aotoki/rails-developer-foundation) | 即時收到網誌通知 ## 實作練習 隨著人工智慧的發展,我們已經開發好 AI 功能的 API。然而,我們需要對這個 API 基於運算時間計價,並且以帳號為計算。 ### 需求分析 > 將上述的需求轉換為使用者故事(User Story)以及規格(Specification)根據需要可以向產品負責人(Product Owner,講師)提問 #### User Story - User Application Client 發送 API 請求至 Server,API 請求紀錄、AI 功能的執行紀錄及運算時間,會在系統端儲存下來 - User 透過 API 請求使用 AI 功能之後,User 進入個人後台,可查詢 API 叫用紀錄、單次運算時間 - User Application Client,可叫用特定 API 查詢指定時間區間內的使用紀錄 - 使用者開啟 App/Web 頁面,點擊「使用紀錄」進入頁面,指定「查詢日期區間」(日期 A to B) ,按下「確認」,取得指定區間 (date A to B)的使用紀錄 - 使用者使用 AI 功能,AI 功能花了 10 秒回應,該玩家被收 1000 台幣。 #### Specification - 每個 api request 都可以透過 token 來辨識 User - 每個 api request time 與 response time 都有被記錄 - 不同 api 運算時間的單位價格需要可以被動態設定 - 用戶的使用紀錄可以被依照時間區間做彙總,以及透過 api 查詢相關資料 - API 紀錄包含的資料欄位有: - User ID - Token value - Request time - Response time - AI function ID - AI function Runtime ### 功能分析 > 根據需求分析的結果,在 FigJam 白板上協力將系統模型繪製出來 [➡️ FigJam 連結](https://www.figma.com/file/0jiBk4Z986BBcopneApVxb/2023-12-10---%E9%96%8B%E7%99%BC%E5%BF%85%E5%AD%B8%E7%9A%84%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90%E6%B3%95?type=whiteboard&node-id=0%3A1&t=AYwypoh54S4o3KkO-1) ### 驗收文件 > 根據練習的成果,嘗試以 Gherkin 格式(或者其他格式)將驗收用的文件撰寫出來 #### Feature: 對 AI 功能 API 基於運算時間計價,並且以帳號為計算 <!-- 對這份規格書更多的介紹 (非必要,不影響自動測試) --> <!-- 介紹.... --> <!-- 介紹.... --> #### Scenario: 使用者使用 AI 功能,AI 功能花了 10 秒回應,該玩家被收 1000 台幣 Given 每秒100元 When 執行了10秒 Then 得到1000 台幣 #### Scenario: Given 前提條件是.... When 我做了某件事.... Then 結果應該得到... ## 共筆區域 > 歡迎在這裡撰寫筆記跟其他同學協力紀錄 > [name=蒼時弦や] ### Keys - 什麼是資料(data)?什麼是資訊(information)? - 什麼是脈絡(context)? - 模型(Model) 是什麼樣的概念? - 應用程式 (Application) 是什麼? - Requirement - 使用者提出一個需求時,你會怎麼做? - User Story - 跟需求相比的差異是什麼? - Specification - 規格跟需求的差異是什麼? - Key Examples - 關鍵案例在軟體開發中發揮了什麼效益? - Analysis - 為什麼要做功能分析? - Boundary - 什麼是邊界? - Bounded Context - 脈絡的邊界在哪裡? - Domain Model - 領域模型是什麼? - Entity - 實體是什麼? - Value Object - 數值是什麼? - Aggregate Root - 聚合根是什麼? - Query - 領域模型能處理好讀取嗎? - Check - 如何確認功能完成? - Gherkin - Feature - 一個測試該測什麼? - 為什麼養成習慣寫測試,可以讓你的寫程式開發速度變快? ### Points - MVC 其實最初是 front-end 的理論 - Model -> 模擬真實世界的一個物件 - 情境:身為玩家,我想知道儲值的寶石剩下多少 - User Story -> 脈絡 (context) -> 人、事、時、地、物 - Requirement -> User Story -> Specification - User Story 應該儘可能地涵蓋到關鍵案例 - 關鍵案例 + 關鍵案例 + 關鍵案例 + ... -> 完整功能 - 同樣是「錢包」在手遊、電商等不同領域,概念是不同的 - Boundary -> 事物的「邊緣」或「限制」 - 在軟體開發當中,會有「指責邊界」和「脈絡邊界」的存在 - 脈絡的邊界是一個「功能」或者「操作單位」 - 領域的概念模型 (domain model),包含資料和行為 (例如: 桌遊) - 透過邊界劃分出領域,那麼領域模型反映出系統中的某個概念 - 模型驅動(model-driven)是先思考模型可以做什麼事情 - 資料驅動(data-driven)則是先思考要保存怎樣的資料 - Entity - 具備唯一識別的物件 (例如擁有 ID 的個體) - 我們通常會將行為和狀態一起定義在實體中 - Value Object - 抽象無法以「個體」表示的概念 - Aggregate Root 也是 Entity,是一個操作單位 - 要改變餘額或者紀錄交易,都是以 Wallet 為操作單位 - 有 Aggregate Root 概念之後,對資料處理的職責回明確很多 - Check - 當有可見的輸出時,才能夠被檢查 - User Story 描述的就是測試的脈絡和結果,可以直接寫測試 - 耗時間的都不是真正寫程式的過程,而是過度依賴 PM、QA、PO 幫你驗收和手動測試,所以最好培養起寫測試的能力和習慣 (5分鐘 vs. 5秒鐘) - 當每個功能都有一條對應的驗收成果,實作就會相對流暢 ### Retrospect - Aggregate Root -> 區分出工作單位 - 驗收驅動測試的開發流程 -> 讓成果能被看見 - Cucumber -> 測試的同時產出文件
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up