橫切豎割話需求
軟件架構強調的是整體,而整體性的設計決策必須基于對需求的全面認識;
軟件架構應該是穩定的,而遺漏了重要需求的架構設計面臨的是返工的命運。
一言以蔽之,全面認識需求,是生產出高質量軟件所必須的“第一項修煉”。
作為一個軟件架構師,也不應對所有需求“胡子眉毛一把抓”,而是應全面認識需求——分門別類地將需求梳理清楚。
要全面認識需求,意味著我們必須從不同級別來考察需求:組織級、用戶級、開發級,還要對每個級別考慮不同類型的需求:功能需求、質量屬性、約束。
一方面,需求是分層次的。一個成功的軟件系統,對客戶高層而言能夠幫助他們達到業務目標,這些目標就是客戶高層眼中的需求;對實際使用系統的最終用戶而言,系統提供的能力能夠輔助他們完成日常工作,這些能力就是最終用戶眼中的需求;對開發者而言,有著更多用戶沒有覺察到的“需求”要實現……
關注需求層次的實踐意義在于,在需求之間建立起“可跟蹤性”,避免因遺漏需求而造成軟件“達不到要求”,也避免開發人員一廂情愿地為用戶“制造”沒有實際意義的無用功能。理解了需求分層的道理,軟件人員在聽到客戶方的老板說“需求就是我希望這套軟件能幫我賺更多的錢”時,就不會覺得好笑了,因為他知道這可能就是創建這套軟件系統的商業目標,并會對其他需求和設計產生影響。
另一方面,需求應該被分為不同的類型。例如,一個網上書店系統的功能需求可能包括“瀏覽書目”、“下訂單”、“跟蹤訂單狀態”、“為書籍打分”等,質量屬性需求包括“互操作性”和“安全性”等,而“必須運行于Linux平臺之上”屬于約束性需求之列。實踐一再表明,忽視質量屬性和約束性需求,常常導致架構設計最終失敗。
總之,通過需求分類,將有助于全面認識需求、分門別類地把握需求、設計出高質量的軟件架構。
全面認識需求還有一層含義,那就是應當在深思熟慮之后做出合適的需求權衡和取舍。一方面,眾多質量屬性需求之間往往會有沖突,我們必須權衡。另一方面,如果通過復雜設計所支持的變化根本不會發生,那么這種過度設計(Overengineering)就造成了資源的浪費并增加了開發難度。有人主張不要預測未來,本書并不同意,本書認為應當有依據地支持未來變化,對變化的判斷應該來自對需求及需求背景的深刻把握。
軟件架構應該是穩定的,而遺漏了重要需求的架構設計面臨的是返工的命運。
一言以蔽之,全面認識需求,是生產出高質量軟件所必須的“第一項修煉”。
作為一個軟件架構師,也不應對所有需求“胡子眉毛一把抓”,而是應全面認識需求——分門別類地將需求梳理清楚。
要全面認識需求,意味著我們必須從不同級別來考察需求:組織級、用戶級、開發級,還要對每個級別考慮不同類型的需求:功能需求、質量屬性、約束。
一方面,需求是分層次的。一個成功的軟件系統,對客戶高層而言能夠幫助他們達到業務目標,這些目標就是客戶高層眼中的需求;對實際使用系統的最終用戶而言,系統提供的能力能夠輔助他們完成日常工作,這些能力就是最終用戶眼中的需求;對開發者而言,有著更多用戶沒有覺察到的“需求”要實現……
關注需求層次的實踐意義在于,在需求之間建立起“可跟蹤性”,避免因遺漏需求而造成軟件“達不到要求”,也避免開發人員一廂情愿地為用戶“制造”沒有實際意義的無用功能。理解了需求分層的道理,軟件人員在聽到客戶方的老板說“需求就是我希望這套軟件能幫我賺更多的錢”時,就不會覺得好笑了,因為他知道這可能就是創建這套軟件系統的商業目標,并會對其他需求和設計產生影響。
另一方面,需求應該被分為不同的類型。例如,一個網上書店系統的功能需求可能包括“瀏覽書目”、“下訂單”、“跟蹤訂單狀態”、“為書籍打分”等,質量屬性需求包括“互操作性”和“安全性”等,而“必須運行于Linux平臺之上”屬于約束性需求之列。實踐一再表明,忽視質量屬性和約束性需求,常常導致架構設計最終失敗。
總之,通過需求分類,將有助于全面認識需求、分門別類地把握需求、設計出高質量的軟件架構。
全面認識需求還有一層含義,那就是應當在深思熟慮之后做出合適的需求權衡和取舍。一方面,眾多質量屬性需求之間往往會有沖突,我們必須權衡。另一方面,如果通過復雜設計所支持的變化根本不會發生,那么這種過度設計(Overengineering)就造成了資源的浪費并增加了開發難度。有人主張不要預測未來,本書并不同意,本書認為應當有依據地支持未來變化,對變化的判斷應該來自對需求及需求背景的深刻把握。
本文標簽:橫切豎割話需求
* 由于無法獲得聯系方式等原因,本網使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《橫切豎割話需求》相關權利人與機電之家網取得聯系。










