需求、需求工程与需求工程师 — 1.定义、作用
在軟件實(shí)現(xiàn)的過程中,需求分析的正確與否是軟件成功的基礎(chǔ)和前提,需求內(nèi)容不但包含了客戶對軟件的期望與要求,同時它也影響著系統(tǒng)采用的架構(gòu)方法、實(shí)現(xiàn)技術(shù)等。需求工程質(zhì)量的優(yōu)劣,直接影響著后續(xù)設(shè)計(jì)工程和開發(fā)工程的質(zhì)量,也關(guān)系到最終軟件整體的質(zhì)量。需求工程師是需求工程中的主角,需求工程師水平的高度,不但影響需求成果而且也直接影響完成軟件水平的高低。在這里就需求、需求工程和需求工程師三個要素的內(nèi)容、作用和關(guān)系做一些探索。
1.定位
■需求:需求就是客戶對要開發(fā)軟件提出的業(yè)務(wù)和系統(tǒng)兩個方面的期望和要求。
客戶對軟件提出需求的多少取決于該客戶的經(jīng)驗(yàn),如果經(jīng)驗(yàn)多就會提得多(包括業(yè)務(wù)、系統(tǒng)),如果經(jīng)驗(yàn)少,則提出的需求少,不足部分要由需求工程師補(bǔ)足、完善。
■需求工程:用工程化的方法系統(tǒng)地獲取客戶需求,包括調(diào)研、分析、編制資料,最終精準(zhǔn)地描述出待開發(fā)軟件的特征和相關(guān)約束。
需求工程是完成軟件開發(fā)全過程的第一步,需求工程的作用歸集為一句話就是:收集客戶想要做什么、最終確定實(shí)際做什么。
■需求工程師:是需求工程全過程的主要執(zhí)行角色。
他從客戶那里收集需求,并將客戶原始形態(tài)的需求表述,經(jīng)過梳理、補(bǔ)全、確認(rèn),全部轉(zhuǎn)換為符合計(jì)算機(jī)軟件要求的標(biāo)準(zhǔn)表達(dá)形式,以供后續(xù)的設(shè)計(jì)、開發(fā)之用。
需求工程師是客戶與開發(fā)工程師之間的溝通橋梁。
對于開發(fā)一款應(yīng)用軟件來說,需求工程成果的質(zhì)量極大地影響著這個軟件的結(jié)果,是決定軟件成敗的重要環(huán)節(jié),需求工程的成果是【需求規(guī)格說明書】,它不但是后續(xù)設(shè)計(jì)與開發(fā)的依據(jù),同時也是客戶對完成系統(tǒng)評估、驗(yàn)收的依據(jù)。
另外,需求工程的內(nèi)容也極大地影響著軟件開發(fā)的成本、技術(shù)、周期,資源、質(zhì)量以及最終客戶的滿意度等諸多方面。需求工程的成果不但會影響客戶最后獲得的效果,也會影響到軟件開發(fā)者的最終利益。
完成一款軟件的工作可以粗分為三個階段:需求工程、設(shè)計(jì)工程和開發(fā)工程,三者的關(guān)系如圖所示。
1)需求工程:收集客戶的原始需求,通過梳理、分析,形成的【需求說明規(guī)格書】,它作為設(shè)計(jì)工程的輸入以及開發(fā)工程成果的客戶驗(yàn)收依據(jù)。
2)設(shè)計(jì)工程:依據(jù)①的成果再進(jìn)一步分析、抽提,形成架構(gòu)、功能和數(shù)據(jù)的設(shè)計(jì)成果,這是開發(fā)工程編碼的依據(jù)。
3)開發(fā)工程:依據(jù)②的成果,用編碼將設(shè)計(jì)成果轉(zhuǎn)換為最終的軟件,交付客戶。
2.作用
1)從圖1的推進(jìn)變化上可以看出,需求工程①擔(dān)負(fù)著將客戶原始需求內(nèi)容理出頭緒并形成一份清晰明了、可以確認(rèn)的【需求規(guī)格說明書】的任務(wù);而從②~③的一系列工作,越靠后的部分就越單純,與業(yè)務(wù)的直接關(guān)聯(lián)就越少。
2)從圖中①、②和③的梯形的坡度夾角α的大小可以看出如下內(nèi)容:
□需求工程階段梯形坡度的夾角α1最大,這說明在將模糊不清的客戶原始需求轉(zhuǎn)換到清晰標(biāo)準(zhǔn)的需求的過程中,需求工作起的作用最大,它將大部分的不清晰、不確定的業(yè)務(wù)問題全部解決了。
□設(shè)計(jì)工程階段的夾角α2其次,這個部分重點(diǎn)解決技術(shù)實(shí)現(xiàn)層面的不清晰、不確定的內(nèi)容。
□開發(fā)過程階段的夾角α3最小,理論上說這個部分就應(yīng)該沒有不清晰、不確定的問題了。
3)α1的夾角越大越好
從上述夾角變化可以看出來,需求工程①是開拓者,它擔(dān)負(fù)了最為“雜、亂、累”的工作,從客戶原始需求到編碼的3個階段中對需求收斂*起的作用最大。①部分圖形的收斂越大(梯形的坡度大),以后的設(shè)計(jì)②、開發(fā)③的圖形就越接近于等邊矩形,這意味著工作就越順利。否則②和③階段的坡度依然很大,就說明需求工程做的不到位,將很多的未解決的問題推到了后續(xù)工程上,這樣會在后續(xù)的設(shè)計(jì)和開發(fā)中不斷地發(fā)現(xiàn)前期的需求問題從而造成設(shè)計(jì)和開發(fā)的返工。
試想一下,如果需求工程階段梯形的夾角α1趨近于0,即梯形的上下邊長S1=S2,參見圖2,就意味著需求工程師就像是個“傳聲筒”,將調(diào)研的客戶原始需求原封不動地交給了后面的設(shè)計(jì)師,設(shè)計(jì)師由于沒有直接接觸用戶 ,就要花費(fèi)大量的時間與需求工程師溝通,需求工程師沒有搞清楚的問題還要再去問客戶,這就造成了時間的浪費(fèi)。
4)α3的夾角越小越好
通常軟件開發(fā)成本構(gòu)成中③開發(fā)工程的成本占比最大,這個成本中還包括了返工、維護(hù)等。所以如果需求問題、設(shè)計(jì)問題都在①和②的部分內(nèi)解決,將個性化問題盡可能地通過分析和設(shè)計(jì)轉(zhuǎn)換為共性的方法解決,就可以最大限度提升開發(fā)階段模塊的復(fù)用性。
夾角α3越小,就意味著利用已有的模塊可以覆蓋大部分新需求。需求個性化內(nèi)容少是提升開發(fā)效率、降低軟件成本的最有效方法。
5)夾角α與功能復(fù)用率的關(guān)系
需求工程①對需求的收斂越大,后續(xù)的設(shè)計(jì)工程和開發(fā)過程的變化就越少,就越容易進(jìn)行規(guī)范化、標(biāo)準(zhǔn)化作業(yè),這兩個階段的成果就越容易復(fù)用。這一點(diǎn)對于現(xiàn)在廣泛進(jìn)行的面向?qū)ο笤O(shè)計(jì)、平臺式架構(gòu)、模塊化系統(tǒng)設(shè)計(jì)等非常重要,也就是說對客戶需求中個性與共性作如下處理:
□個性的內(nèi)容最好在①階段中處理,轉(zhuǎn)換成具有共性的內(nèi)容
□②中盡量都是共性的內(nèi)容,個性的內(nèi)容盡可能地利用共性的組合形式來實(shí)現(xiàn)
□③在軟件開發(fā)中沒有或很少有個性內(nèi)容,這樣開發(fā)效率最高(可復(fù)用的內(nèi)容最多)。
如果①和②沒有做好,個性的內(nèi)容大量的進(jìn)入到③階段,用技術(shù)方法解決去個性問題就有可能造成大量不必要的冗余。
在不少軟件企業(yè)中沒有設(shè)計(jì)階段的概念,也沒有計(jì)崗,基本上就是將需求調(diào)研的結(jié)果直接傳遞給了開發(fā)工程師,如圖3所示。
由于對需求不清楚,開發(fā)工程師通常要花費(fèi)遠(yuǎn)多于需求工程師的時間去研究需求,而很多對開發(fā)工程師來說很復(fù)雜的需求在客戶現(xiàn)場很容易就搞清楚。這樣的軟件開發(fā)管理方式就等于是把需求階段的工作后移到了開發(fā)工程中,后移的結(jié)果就會使得系統(tǒng)變得復(fù)雜,成本大幅度提升、交付時間加長。
3.總結(jié)
在前面的三個圖形中,圖1表達(dá)的狀態(tài)最為理想,圖3的狀態(tài)最差。
1)一般來說,如果需求工程師的工作優(yōu)秀、到位,就會帶來軟件開發(fā)的整體時間短、效率高、效果好。反之,則時間長、成本高、效益差。
很多的軟件項(xiàng)目都會盡量地壓縮需求階段的時間,盡可能地給開發(fā)留足時間,看似合理實(shí)則不然,由于需求階段的粗放工作,造成開發(fā)返工的風(fēng)險更高。這個做法使得每個階段都不能積累可以復(fù)用的成果,是個“惡循環(huán)”。
2)在正確完成軟件開發(fā)的前提條件下,三個階段中只有開發(fā)階段的時間可能縮短,比如:通過編碼技術(shù)進(jìn)步、提升功能復(fù)用性、平臺模塊化等方法。
需求階段的工作是最不容易縮短的,因?yàn)樾枨蠊こ處熞獙⒚鎸Φ臒o限多的可能性(業(yè)務(wù)領(lǐng)域、客戶/用戶的想法、多樣的專業(yè)知識等),這個工作非常依賴于個人的能力和經(jīng)驗(yàn)。
做好軟件重要的第一步:選好需求工程師、組織好需求工程、獲得正確的需求。
注:關(guān)于“收斂”的含義
收斂,指的是收集到的原始需求與同類系統(tǒng)標(biāo)準(zhǔn)之間的差距,經(jīng)過梳理分析之后,原始需求越接近系統(tǒng)標(biāo)準(zhǔn),說明收斂越快,可復(fù)用度就越高,新設(shè)計(jì)、開發(fā)工作量越小,效率就越高。
α角度越大就說明在該階段收斂的速度就越快,這個階段的工作貢獻(xiàn)就越大。
■本博文系列的下一篇:需求、需求工程與需求工程師 — 2.需求的來源
關(guān)于需求工程的詳細(xì)說明,請參考《大話軟件工程—需求分析與軟件設(shè)計(jì)》一書。
總結(jié)
以上是生活随笔為你收集整理的需求、需求工程与需求工程师 — 1.定义、作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入有序数组返回下标
- 下一篇: stm32f407 tim4 复用_波分