需求、需求工程与需求工程师 — 6. 设计能力的要求
在軟件行業中,“設計”一詞既熟悉又陌生,理論上大家都知道軟件開發前需要做設計,但是具體要說明什么是設計、設計包括的內容、方法、交付物、標準以及由誰來設計時,卻又說不太清楚(除去一些大型軟件企業外)。多數的軟件公司沒有“設計師”的崗位,甚至都沒有設置設計環節,特別是在中小型的軟件公司,需求調研完成直接交給程序員是普遍現象。一般來說這樣的軟件公司的業務架構圖、界面原型設計等工作都是由需求工程師來完成的。有鑒于此,這里簡單地介紹一下需求工程師在從事“設計角色”時需要的能力。
圖1 設計工作的位置
設計工作的內容可以分為二大部分
□非技術部分:包括了業務設計、應用設計兩個部分(需求工程師要掌握,本文重點)
□技術部分:技術設計(開發工程師要掌握,本文不涉及)
第三篇介紹對需求工程師設計能力的要求
怎么判斷需求工程師是否做了“設計崗位”的工作呢?嚴格的說開發工程師(程序員)應該是按照設計規格書進行編碼開發的。如果你所在的軟件公司在需求工程師和開發工程師之間沒有“設計師崗位”,那么開發工程師就一定是依據需求工程師編制的【需求規格說明書】進行編碼開發的,此時就可以判斷:需求工程師在調研分析需求的同時,也做了包括業務設計、應用設計等在內的設計工作(技術設計是由懂得技術的開發工程師完成的)。
1. 設計目的
設計工作的目的是將前面需求分析的結果,按照軟件實現的要求細化為具體的架構圖形、功能界面原型、數據關系圖以及支持開發的說明文字等資料。
所有的系統相關人(客戶、咨詢/需求、程序員、測試、實施等)通過這個設計資料,在軟件開發完成前就可以準確地了解未來的系統,如根據這個設計資料可以知道:
□系統具有什么功能、運行方式、給客戶工作帶來的變化效果等。
□系統實現的技術路線、實現方案、測試用例等
□所需編碼資源、進度計劃、交付內容等。
設計工作是搞清楚怎么做什么系統的過程。
2. 設計作用
1) 設計工作的作用
設計工作的作用可以分為幾個方面來來理解。
(1)業務設計
決定了產品的“可用性”,業務設計正確說明系統可用。業務設計是參照客戶的實際工作,確定具體的業務邏輯、數據邏輯、業務功能等,比如報銷模塊的設計內容:報銷流程(業務邏輯)、報銷數據來源(數據邏輯)、報銷操作界面(業務功能)。設計結果的正確與否直接關系到這個系統是否可用,因此業務設計正確是系統建設的基礎。
(2)應用設計
決定了產品的“易用性”,應用設計正確說明系統好用。應用設計重點關注的是系統設計是否人性化、是否給客戶帶來工作效率的提升,比如:將系統從“人找事”設計成為“事找人”,這樣的設計為客戶帶來工作環境的優化,大幅度提升工作效率,減少人為的工作失誤,讓系統自動地為用戶提供服務。
(3)客戶價值
軟件的客戶價值主要來源于業務設計和應用設計的成果,前者決定了業務價值的高低(系統帶來的業務優化、改善、效益的提升)、后者決定了應用價值(系統帶來的工作方式變化、工作效率的提升),特別是應用設計的結果極大地影響客戶對系統的滿意度。
(4)降低風險
設計工作做得越細致、具體,通過反復的“設計推演”,就可以避免開發完成后的返工,這是設計工作的一個非常重要的目的。
順便說一句,由于軟件行業普遍存在著對“設計工作”的重視不足,軟件完成后大量的、頻繁的返工是常見現象,其重要原因之一就是缺乏設計(或缺乏優秀的設計),開發前誰都不知道完成后的系統是什么樣的(缺乏業務驗證、應用驗證),完成后一試用客戶就會提出很多要修改的要求,系統不得不修改,甚至要推翻重來。
2) 需求工程師的作用
在沒有設計師崗位的軟件公司,需求工程師事實上是充當了“設計師”的角色。不論在哪個行業、也不論制作什么產品,設計師都是產品成功與否的關鍵角色,設計師的水平直接關系到了產品的水平、最終決定了產品的價值。在設計方面需求工程師的作用歸納如下(不限于此):
□在前面咨詢和調研角色將需要的素材和要求全部收集并確認完成,下面要由設計角色參照要求將需求素材與軟件技術要求相結合,給出未來系統的設計圖(設計資料)。
□設計工作是決定產品的關鍵,需求工程師要判斷設計的正確性、可行性、合理性等。
□設計角色在系統開發過程中具有決定權,包括系統樣式、規格、標準(業務和應用兩方面),技術設計師和程序員原則上是不可以在未經許可的情況下改動設計。
□嚴格地講,程序員不是按照需求,而是按照設計資料進行編碼開發的;同理,測試工程師也是基于設計資料編寫用例和測試的。
□將客戶提出的需求,按照軟件的要求進行,使得需求可以轉換為軟件系統的功能。
■可以說,需求工程師的工作成果是軟件開發內容、客戶滿意度、軟件價值的關鍵。
注:關于設計與架構的異同
“設計”是個大概念,設計包含了“架構”,架構工作屬于設計全過程中的初期階段,架構的主要內容是進行“規劃、概要”等粗粒度的設計,其重點在對系統進行整體的規劃、制定系統的設計理念、框架、主線、原則、標準等。一般談到設計時,不但包括系統的整體架構,也包括詳細設計(小到一個“字段”在界面上的擺放位置)。因此“設計師”的工作范圍更加寬泛,而“架構師”的工作一般特指設計階段的前期工作。
3. 設計能力
搞清楚了設計的目的和作用后,下面就要談談在這個階段對需求工程師的能力要求。對需求工程師的設計能力要求與他和后面技術工程師之間的交付內容相關。作為設計角色,需求工程師要能夠精準地給出業務和應用兩個方面對系統的功能要求、標準。下面主要從兩個方面談一下:必備能力、專業知識。
1)必備能力
針對“設計師”的崗位,對需求工程師能力要求相對較高,他要掌握的能力比較綜合,不是簡單的看、聽、說的單一能力等,而是思維能力和動手能力相結合的綜合能力,這里舉幾項做個參考(不限于此):
(1)規劃能力
具有站在客戶領導視角觀察和理解問題的能力,可以從整體上理解客戶需求(經營、管理和執行三層提出的需求),要能夠同時考慮到:新系統與其它既有系統在空間上的關系、新系統今天的內容與明天的擴展在時間上的關系。
(2)建模能力
要能夠從系統的視角對需求進行分析、抽提、找出規律,然后建立最簡潔的業務處理模型。模型建立的好,則系統的架構合理、復用性強、容易實現、且對需求的應變能力也強。
(3)畫圖能力
毫無疑問,設計交付成果的重要形式就是圖形(業務架構圖、數據關系圖、界面原型圖等),看一眼圖形基本上就可以判斷出來設計者的水平,所以對需求工程師來說:用圖形的方式能夠正確地表達多少設計成果是非常重要的能力判斷標準。
(4)邏輯能力
對于軟件工程一階段中的所有角色(咨詢、調研和設計)來說,邏輯能力都是必不可少的,而且對于設計崗位的邏輯能力不但要體現在思維層面,更重要的是要將思維的結果用正確的圖形表達出來,圖形中的邏輯要清晰。
2)專業知識
需求工程師作為“設計師”的角色,在設計階段需要的專業知識主要是指軟件設計方面。包括:
(1)概要設計知識:根據前期的【需求規格說明書】對系統進行頂層設計,包括整體規劃、設計理念、業務主線、技術路線、原則以及相應的規則和標準等內容。
(2)詳細設計知識(業務):根據【概要設計規格書】,對架構層、功能層和數據層的內容進行業務方面的細節設計,如業務建模、業務原型確定、字段定義、字典/看板/表單等的設計。
(3)詳細設計知識(應用):根據【概要設計規格書】,對架構層、功能層和數據層的內容進行應用方面的細節設計,如系統原型、流程機制、登錄、門戶、權限、以及系統易用性相關的設計。
(4)詳細設計知識(技術):不在對需求工程師能力的要求范圍內(省略)。
(5)用例設計知識:前面設計的是否合理、正確、并滿足客戶需求呢?這里就需要進行用例設計,包括業務用例(檢驗業務設計部分的內容)、應用用例(檢驗應用設計部分的內容)。
(6)技術實現知識:對需求工程師雖不要求會編碼,但是最好也能夠掌握一定的系統構成、系統開發、系統測試等相關常識(越多越好),有了這方面的知識更容易判斷客戶需求與軟件實現之間的合理性。
■能力,來源于將學習到的知識在實踐中進行反復的應用、總結、積累。
4. 設計成果
設計成果包括了以上全部的設計資料
(1)概要設計規格書。
(2)詳細設計(業務)的規格書、業務用例。
(3)應用設計(應用)的規格書、應用用例。
■設計小結
相比較于咨詢和調研的工作內容來說,設計工作要求的難度可能比較大,需要的知識也比較多,但是在小規模的軟件企業或是小型的軟件項目中大都沒有特定的設計師,因此需求工程師具有一定的設計能力就尤為重要。
■需求工程師的能力總結
至此關于需求工程師的能力要求就介紹完了,從上述的介紹中可以看出來,完美的系統開發除去需要大量優秀的程序員外,同樣還需要很多優秀的需求工程師,沒有需求工程師正確地完成上述工作(咨詢、調研、設計),程序員的技術水平再高也無法得到優秀的產品。這兩者的協同合作是完成系統的必要條件,不存在哪個為主哪個為輔為判斷。
從圖1上可以看出、需求工程師的前面是咨詢師的崗位、后面是設計師的崗位,不論向哪個方向努力,都會有一個更高的崗位在等待著需求工程師。需求工程師的調研能力是咨詢能力和設計能力的基礎要求。
如果你在一個小型的軟件公司、或是一個小項目里做事,那么上述所說的“咨詢師、需求工程師、軟件設計師”三者所需要的能力都要具備。
你從事的是其中哪個角色?是否打算成為一個全能的角色呢?
■關于軟件設計,請參看李鴻君的“如何繪制邏輯圖”、“界面設計方法”等系列博文。
本系列到此結束。關于詳細的設計方法介紹,請參考《大話軟件工程—需求分析與軟件設計》一書。
總結
以上是生活随笔為你收集整理的需求、需求工程与需求工程师 — 6. 设计能力的要求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五一汇编题
- 下一篇: 汇编OFFSET,SEG,LEA