專業程式設計師進階之路:從需求出發
在軟體開發的征途上,需求管理是每位程式設計師進階的必經之路。作為專業程式設計師,能否準確把握需求,不僅關係到專案的成敗,更是個人技術進階的重要一課。本文將探討如何從需求出發,實現專業程式設計師的進階之路。
混亂的需求:進階絆腳石
我們正在進行的的 AI 智慧回收機專案,遇到的最大挑戰便是需求問題。
功能規格書從一開始就存在缺陷,它沒有清晰地描述業務和問題,也沒有詳細說明如何滿足這些需求。隨著專案的推進,需求的不斷變更、不清晰、不完整和變形問題層出不窮。
我們還經常遇到只有簡單描述,甚至是口頭傳達的需求,有時我們甚至被預設應該瞭解這些需求。非專業軟體人員,如機械、電子、測試、實施人員、專案經理等,還時不時地告訴我們要加入某個功能或指導我們如何設計功能。
實際上,問題的核心在於我們沒有接收到正確的需求,或者沒有正確地接收需求。
需求是軟體專案的源頭,如果源頭存在問題,那後續的活動就不可能順利進行。
從一個程式設計師的角度來說,沒有正確的需求就沒有正確的設計。如果總是處於混亂的狀態中,我們將難以踏上專業進階之路。
理論上,高階別的程式設計師才會參與軟體需求分析過程,但實際上,我們在這裡都不知不覺地承擔了部分需求分析的工作。我們很難對別人提出要求,但作為需求的接收者,可以嘗試從我們自身來控制需求的正確性。
撥開迷霧:認識真實的需求
什麼是軟體需求?這個看似簡單的問題其實並不好回答。作為程式設計師,我們更關注的是,當要進行設計的時候,什麼是我們的輸入,這些輸入是否正確。
許多人可能沒有意識到自己在進行設計,完全是依賴一種樸素的想法、直覺和本能在進行開發,而忽略了設計前的思考,沒有考慮設計的輸入輸出。
事實上,只要你在寫程式碼之前有思考過如何實現功能,你已經在做設計了。而設計的輸入,正是我們要討論的需求。
需求是個複雜的工程,需要經過開發才能得到我們想要的結果。簡單來說,需求過程可以分為兩個環節:問題定義和需求分析。
問題定義
在進行設計之前,需要對系統要解決的問題做出清晰的陳述。
這裡的問題可以是當前系統存在的不足或者缺陷,也可以是當前系統想要解決的已知業務存在的問題(創造新價值)。
問題定義只定義“問題是什麼”,應該是一個簡單的描述,並且聽起來像一個問題,而不涉及任何的解決方案。
問題定義應該用使用者的語言來書寫,從使用者的角度來描述問題,不應該用軟體的專業術語來敘述。
定義好的問題,必須是具體的、可度量的、可實現的、可驗證的,還要取得相關人員的共識。
需求分析
業務場景是需求的靈魂。需求分析的本質在於業務分析,而非技術分析。
需求分析的任務是對問題域進行研究,從業務線索入手,而非系統結構。
需求分析的過程就是分析人員基於業務領域知識,將問題放到業務場景中,透過分解、組合,選擇一種技術可行的業務解決方案。
需求分析的結果就是軟體功能規格書中定義的內容,是軟體設計的輸入,應該具有正確性、完整性、可行性、可驗證性等特點。
摸索中前進:正確接收需求
當接收到需求時,開發人員的本能反應通常都是考慮技術上如何實現,但這些需求是真正的需求嗎?
作為開發人員,我們接收到的大多數需求已經經過了多次中轉,這導致需求的準確性和完整性受到影響。中轉人員很容易在轉述需求時加上自己的理解,專案經理或者部門主管也會從他們所認為的專案和技術角度來控制需求,以至於我們難以直接得到原始需求。哪怕我們可以直接面向使用者,也會遇到使用者無法準確表達需求、扭曲甚至放大需求的問題。
很多時候,我們需要透過一個相對曲折的過程去接近並獲取真正的需求。
業務為基
真正的需求往往來源於業務過程中遇到的問題。深入理解業務知識,對業務事件、實體和規則有詳細深入的瞭解,是理解需求的基石。對整個業務過程以及實際的業務場景有了正確的感知,才能理解需求的來龍去脈,提出正確的解決方案。基於業務領域知識和業務場景來理解和分析需求才是需求開發的正確之道。
深入本源
我們接收到的需求很多都是告訴我們要做什麼,卻沒有人告訴我們為什麼要這麼做。問題經常會被表象所掩蓋,在問題定義時,首先要做的就是揭開表象,分析問題背後的問題,尋找問題的本源。要多問為什麼,層層去挖掘問題背後的原因,判斷哪些原因是可以透過軟體系統來解決。同時還要認識到並非所有的問題都要依靠軟體來解決,有時更改硬體環境或者調整業務比技術更實際更有效。
思慮周全
使用者會從不同的角度、不同的層面、不同的粒度提出需求。由於使用者的背景不同,因此難免出現片面的、甚至相互矛盾的需求。每個單獨的需求通常都是整體需求的一部分,很少有孤立存在的需求。因此,當我們對需求進行分析時,要將需求放在整體需求當中進行考慮。要全面考慮需求之間的關係,識別相互競爭、相互矛盾的狀況,及時察覺錯誤,明確約束條件。
實踐中成長:走上進階之路
這裡分享的內容只適用於開發人員理解和接收需求內容,以便更好的進行開發活動。如果你想更進一步,進階為需求分析師甚至系統分析師,那麼你還得去學習更專業的需求開發知識。作為開發人員,只有透過不斷的學習和實踐來掌握需求開發的技能,才能走上進階的康莊大道。
結論
需求管理是軟體開發的核心,它直接影響到專案的成功和程式設計師的職業發展。透過正確理解需求、深入業務本源、全面思慮需求關係,程式設計師可以在實踐中不斷成長,走上專業進階之路。記住,進階之路永無止境,保持學習、保持實踐,是每一位專業程式設計師的不懈追求。