在軟件實現的過程中,需求分析的正確與否是軟件成功的基礎和前提,需求內容不但包含瞭客戶對軟件的期望與要求,同時它也影響著系統采用的架構方法、實現技術等。需求工程質量的優劣,直接影響著後續設計工程和開發工程的質量,也關系到最終軟件整體的質量。需求工程師是需求工程中的主角,需求工程師水平的高度,不但影響需求成果而且也直接影響完成軟件水平的高低。在這裡就需求、需求工程和需求工程師三個要素的內容、作用和關系做一些探索。
■需求:需求就是客戶對要開發軟件提出的業務和系統兩個方面的期望和要求。
客戶對軟件提出需求的多少取決於該客戶的經驗,如果經驗多就會提得多(包括業務、系統),如果經驗少,則提出的需求少,不足部分要由需求工程師補足、完善。
對於開發一款應用軟件來說,需求工程成果的質量極大地影響著這個軟件的結果,是決定軟件成敗的重要環節,需求工程的成果是【需求規格說明書】,它不但是後續設計與開發的依據,同時也是客戶對完成系統評估、驗收的依據。
另外,需求工程的內容也極大地影響著軟件開發的成本、技術、周期,資源、質量以及最終客戶的滿意度等諸多方面。需求工程的成果不但會影響客戶最後獲得的效果,也會影響到軟件開發者的最終利益。
完成一款軟件的工作可以粗分為三個階段:需求工程、設計工程和開發工程,三者的關系如圖所示。
1)需求工程:收集客戶的原始需求,通過梳理、分析,形成的【需求說明規格書】,它作為設計工程的輸入以及開發工程成果的客戶驗收依據。
2)設計工程:依據①的成果再進一步分析、抽提,形成架構、功能和數據的設計成果,這是開發工程編碼的依據。
3)開發工程:依據②的成果,用編碼將設計成果轉換為最終的軟件,交付客戶。
1)從圖1的推進變化上可以看出,需求工程①擔負著將客戶原始需求內容理出頭緒並形成一份清晰明瞭、可以確認的【需求規格說明書】的任務;而從②~③的一系列工作,越靠後的部分就越單純,與業務的直接關聯就越少。
2)從圖中①、②和③的梯形的坡度夾角α的大小可以看出如下內容:
□需求工程階段梯形坡度的夾角α1最大,這說明在將模糊不清的客戶原始需求轉換到清晰標準的需求的過程中,需求工作起的作用最大,它將大部分的不清晰、不確定的業務問題全部解決瞭。
3)α1的夾角越大越好
從上述夾角變化可以看出來,需求工程①是開拓者,它擔負瞭最為“雜、亂、累”的工作,從客戶原始需求到編碼的3個階段中對需求收斂*起的作用最大。①部分圖形的收斂越大(梯形的坡度大),以後的設計②、開發③的圖形就越接近於等邊矩形,這意味著工作就越順利。否則②和③階段的坡度依然很大,就說明需求工程做的不到位,將很多的未解決的問題推到瞭後續工程上,這樣會在後續的設計和開發中不斷地發現前期的需求問題從而造成設計和開發的返工。
ee2710b88c53aa31fe6561df0404e467
試想一下,如果需求工程階段梯形的夾角α1趨近於0,即梯形的上下邊長S1=S2,參見圖2,就意味著需求工程師就像是個“傳聲筒”,將調研的客戶原始需求原封不動地交給瞭後面的設計師,設計師由於沒有直接接觸用戶 ,就要花費大量的時間與需求工程師溝通,需求工程師沒有搞清楚的問題還要再去問客戶,這就造成瞭時間的浪費。
4)α3的夾角越小越好
通常軟件開發成本構成中③開發工程的成本占比最大,這個成本中還包括瞭返工、維護等。所以如果需求問題、設計問題都在①和②的部分內解決,將個性化問題盡可能地通過分析和設計轉換為共性的方法解決,就可以最大限度提升開發階段模塊的復用性。
夾角α3越小,就意味著利用已有的模塊可以覆蓋大部分新需求。需求個性化內容少是提升開發效率、降低軟件成本的最有效方法。
5)夾角α與功能復用率的關系
需求工程①對需求的收斂越大,後續的設計工程和開發過程的變化就越少,就越容易進行規范化、標準化作業,這兩個階段的成果就越容易復用。這一點對於現在廣泛進行的面向對象設計、平臺式架構、模塊化系統設計等非常重要,也就是說對客戶需求中個性與共性作如下處理:
如果①和②沒有做好,個性的內容大量的進入到③階段,用技術方法解決去個性問題就有可能造成大量不必要的冗餘。
在不少軟件企業中沒有設計階段的概念,也沒有計崗,基本上就是將需求調研的結果直接傳遞給瞭開發工程師,如圖3所示。
6a7ee3a61b354f4464e2082c024f9a15
由於對需求不清楚,開發工程師通常要花費遠多於需求工程師的時間去研究需求,而很多對開發工程師來說很復雜的需求在客戶現場很容易就搞清楚。這樣的軟件開發管理方式就等於是把需求階段的工作後移到瞭開發工程中,後移的結果就會使得系統變得復雜,成本大幅度提升、交付時間加長。
在前面的三個圖形中,圖1表達的狀態最為理想,圖3的狀態最差。
1)一般來說,如果需求工程師的工作優秀、到位,就會帶來軟件開發的整體時間短、效率高、效果好。反之,則時間長、成本高、效益差。
很多的軟件項目都會盡量地壓縮需求階段的時間,盡可能地給開發留足時間,看似合理實則不然,由於需求階段的粗放工作,造成開發返工的風險更高。這個做法使得每個階段都不能積累可以復用的成果,是個“惡循環”。
2)在正確完成軟件開發的前提條件下,三個階段中隻有開發階段的時間可能縮短,比如:通過編碼技術進步、提升功能復用性、平臺模塊化等方法。
需求階段的工作是最不容易縮短的,因為需求工程師要將面對的無限多的可能性(業務領域、客戶/用戶的想法、多樣的專業知識等),這個工作非常依賴於個人的能力和經驗。
做好軟件重要的第一步:選好需求工程師、組織好需求工程、獲得正確的需求。
註:關於“收斂”的含義
★★推薦★★
■ 關於需求分析、需求分析師的參考書,這裡介紹「大話軟件工程—需求分析與軟件設計」一書(各大電商平臺有售),該書主要以需求分析師為對象,從軟件項目開發的實戰出發,一步一步詳細地地介紹瞭需求分析師從咨詢、需求調研、需求分析、需求設計、需求文檔的各個階段所需要的理論、方法、標準、模板。該書可以作為需求分析師的實操工具書和案頭字典。
■ 「大話軟件工程—需求分析與軟件設計」介紹
■ 「大話軟件工程—需求分析與軟件設計」視頻課程,請點擊下方的鏈接進入李鴻君課堂