軟件架構(gòu)強(qiáng)調(diào)的是整體,而整體性的設(shè)計(jì)決策必須基于對(duì)需求的全面認(rèn)識(shí);
軟件架構(gòu)應(yīng)該是穩(wěn)定的,而遺漏了重要需求的架構(gòu)設(shè)計(jì)面臨的是返工的命運(yùn)。
一言以蔽之,全面認(rèn)識(shí)需求,是生產(chǎn)出高質(zhì)量軟件所必須的“第一項(xiàng)修煉”。
作為一個(gè)軟件架構(gòu)師,也不應(yīng)對(duì)所有需求“胡子眉毛一把抓”,而是應(yīng)全面認(rèn)識(shí)需求——分門別類地將需求梳理清楚。
要全面認(rèn)識(shí)需求,意味著我們必須從不同級(jí)別來考察需求:組織級(jí)、用戶級(jí)、開發(fā)級(jí),還要對(duì)每個(gè)級(jí)別考慮不同類型的需求:功能需求、質(zhì)量屬性、約束。
一方面,需求是分層次的。一個(gè)成功的軟件系統(tǒng),對(duì)客戶高層而言能夠幫助他們達(dá)到業(yè)務(wù)目標(biāo),這些目標(biāo)就是客戶高層眼中的需求;對(duì)實(shí)際使用系統(tǒng)的最終用戶而言,系統(tǒng)提供的能力能夠輔助他們完成日常工作,這些能力就是最終用戶眼中的需求;對(duì)開發(fā)者而言,有著更多用戶沒有覺察到的“需求”要實(shí)現(xiàn)……
關(guān)注需求層次的實(shí)踐意義在于,在需求之間建立起“可跟蹤性”,避免因遺漏需求而造成軟件“達(dá)不到要求”,也避免開發(fā)人員一廂情愿地為用戶“制造”沒有實(shí)際意義的無用功能。理解了需求分層的道理,軟件人員在聽到客戶方的老板說“需求就是我希望這套軟件能幫我賺更多的錢”時(shí),就不會(huì)覺得好笑了,因?yàn)樗肋@可能就是創(chuàng)建這套軟件系統(tǒng)的商業(yè)目標(biāo),并會(huì)對(duì)其他需求和設(shè)計(jì)產(chǎn)生影響。
另一方面,需求應(yīng)該被分為不同的類型。例如,一個(gè)網(wǎng)上書店系統(tǒng)的功能需求可能包括“瀏覽書目”、“下訂單”、“跟蹤訂單狀態(tài)”、“為書籍打分”等,質(zhì)量屬性需求包括“互操作性”和“安全性”等,而“必須運(yùn)行于Linux平臺(tái)之上”屬于約束性需求之列。實(shí)踐一再表明,忽視質(zhì)量屬性和約束性需求,常常導(dǎo)致架構(gòu)設(shè)計(jì)最終失敗。
總之,通過需求分類,將有助于全面認(rèn)識(shí)需求、分門別類地把握需求、設(shè)計(jì)出高質(zhì)量的軟件架構(gòu)。
全面認(rèn)識(shí)需求還有一層含義,那就是應(yīng)當(dāng)在深思熟慮之后做出合適的需求權(quán)衡和取舍。一方面,眾多質(zhì)量屬性需求之間往往會(huì)有沖突,我們必須權(quán)衡。另一方面,如果通過復(fù)雜設(shè)計(jì)所支持的變化根本不會(huì)發(fā)生,那么這種過度設(shè)計(jì)(Overengineering)就造成了資源的浪費(fèi)并增加了開發(fā)難度。有人主張不要預(yù)測(cè)未來,本書并不同意,本書認(rèn)為應(yīng)當(dāng)有依據(jù)地支持未來變化,對(duì)變化的判斷應(yīng)該來自對(duì)需求及需求背景的深刻把握。
項(xiàng)目經(jīng)理勝任力免費(fèi)測(cè)評(píng)PMQ上線啦!快來測(cè)測(cè)你排多少名吧~
http://opto-elec.com.cn/pmqhd/index.html