摘要:架構(gòu)設(shè)計是軟件開發(fā)過程的重要組成部分,它不是單純的技術(shù),也不具有一種特定的形式,更不是與客戶需求無關(guān)的。良好的軟件架構(gòu)能夠服務(wù)于整個開發(fā)過程,有效地降低項目風(fēng)險,確保項目能夠朝著健康的方向發(fā)展
從事過軟件項目開發(fā)的系統(tǒng)架構(gòu)設(shè)計師都有這樣的困惑:為什么到了項目接近尾聲的時候,仍然還有那么多沒有解決的問題?
理論上講,應(yīng)該是先分析,后設(shè)計,再編碼,那為什么項目在交貨以后,我們還在不斷的編寫設(shè)計文檔?為什么每次客戶需求發(fā)生變更,我們又要投入大量的資源來應(yīng)對不斷變化的客戶需求?為什么軟件開發(fā)會碰到這么多困難,我們天天加班加點,不斷地去解決開發(fā)中碰到的種種問題,可是問題越解決越多,得到的效果卻那么不盡人意?
項目出現(xiàn)這些問題,原因很多,概括起來可以分為兩種:管理因素和技術(shù)因素。國內(nèi)普遍重視管理因素,而忽視技術(shù)因素,所以出現(xiàn)層出不窮的問題也就無法避免。
軟件架構(gòu)設(shè)計屬于技術(shù)因素,它位于軟件開發(fā)過程的前期階段,架構(gòu)設(shè)計的過程,是分析客戶需求、挖掘非功能性需求、并將客戶需求所定義的領(lǐng)域知識轉(zhuǎn)化為軟件系統(tǒng)模型的過程,由此可見,架構(gòu)設(shè)計所涵蓋的范圍非常廣泛。
架構(gòu)設(shè)計源于客戶需求
在進行需求分析的過程中,系統(tǒng)分析員將客戶需求轉(zhuǎn)化為計算機模型,然而在這個過程中,系統(tǒng)分析員本身的特性也就決定了這一角色很難把握住客戶的非功能性需求。
需求需要挖掘,尤其對于大型的軟件系統(tǒng)而言,光靠系統(tǒng)分析員這個單一的角色,很難完成需求分析與挖掘的艱巨任務(wù)。在需求分析的過程中,架構(gòu)設(shè)計師更為關(guān)注的是系統(tǒng)的非功能性需求,例如穩(wěn)定性、可擴展性、可維護性、安全性、高效性等等,這些需求都是需要挖掘的。
如何挖掘?挖掘方式取決于核心需求。舉個很簡單的例子,客戶需要實現(xiàn)兩個系統(tǒng)的數(shù)據(jù)傳輸,這是個核心功能性需求,而在這個需求的背后,還包括了“傳輸過程要求可靠”、“需要采用一種特定的數(shù)據(jù)格式進行傳輸”、“由于數(shù)據(jù)包含一定的機密因素,因此需要加密,并需要選擇合適的加密算法”等等一系列的非功能性需求。
此時,架構(gòu)設(shè)計師不僅需要了解客戶本身的功能需求,還需要能夠發(fā)掘非功能需求。因此,優(yōu)秀的架構(gòu)設(shè)計師一定是一個經(jīng)驗豐富的需求工程師,需求分析讓架構(gòu)設(shè)計師知道,我需要考慮哪些因素,而深厚的軟件技術(shù)功底讓架構(gòu)設(shè)計師知道,如何去考慮這些因素??梢?,架構(gòu)設(shè)計源于客戶需求。
架構(gòu)設(shè)計源于對知識的不斷積累
首先應(yīng)該認(rèn)識到,沒有對領(lǐng)域知識、軟件系統(tǒng)特性與軟件技術(shù)等的深刻理解,就無從談及架構(gòu)設(shè)計,而深厚的領(lǐng)域知識與技術(shù)經(jīng)驗則是源于不斷的積累。
目前,市場上確實很多產(chǎn)品在架構(gòu)上已經(jīng)非常成熟和穩(wěn)定,但這些產(chǎn)品的成熟架構(gòu)也是通過長期不斷的實踐與積累才逐步形成的。經(jīng)驗豐富的架構(gòu)設(shè)計師可以在開發(fā)產(chǎn)品的同時總結(jié)出一套架構(gòu)模式,這對維護產(chǎn)品的體系結(jié)構(gòu),以及開發(fā)同類產(chǎn)品都有深遠(yuǎn)的意義。
從另一個角度講,產(chǎn)品的架構(gòu)并非一成不變,隨著技術(shù)的不斷創(chuàng)新與發(fā)展,新技術(shù)一定會被應(yīng)用到現(xiàn)有的系統(tǒng)架構(gòu)中。此時,軟件架構(gòu)可能需要進行調(diào)整,我們也不能再說,我們沒有必要去關(guān)心這些產(chǎn)品架構(gòu)了。
架構(gòu)設(shè)計是一種取舍過程
實現(xiàn)某一非功能性需求,可以有很多種方法,但并不是每種方法都是最合適的,這在架構(gòu)設(shè)計的過程中需要做出取舍。例如,為了使得軟件系統(tǒng)具有易擴展、易更改的能力,我們可以采用插件體系結(jié)構(gòu)或內(nèi)嵌腳本系統(tǒng)結(jié)構(gòu),兩者都可以使得軟件系統(tǒng)具有方便擴展的能力。
然而,如果客戶的業(yè)務(wù)流程會經(jīng)常變化,或者軟件系統(tǒng)產(chǎn)品會應(yīng)用到具有不同業(yè)務(wù)流程的多個客戶時,采用后者可能會更加符合軟件本身的特點。
當(dāng)今IT業(yè)技術(shù)層出不窮,在特定的應(yīng)用場景中,采用何種技術(shù)何種模式最合適,這就是架構(gòu)設(shè)計的取舍。JAVA和.NET孰好孰壞?討論這樣的問題也不再有意義。軟件工程大師MartinFowler曾經(jīng)說過:架構(gòu)師是對所有重要事情做出決定的人,這一決定也囊括了取舍。
架構(gòu)設(shè)計將服務(wù)于整個開發(fā)過程
良好的架構(gòu)設(shè)計不僅使得軟件系統(tǒng)能夠滿足客戶需求,它更為軟件系統(tǒng)帶來了安全性、穩(wěn)定性、可擴展性等屬性,而這些屬性在應(yīng)對客戶需求變更、提高軟件可測試性與可維護性、降低維護成本、提高開發(fā)效率等各方面都起著非常重要的作用。
客戶所需要的是可以用于生產(chǎn)實踐的最終產(chǎn)品,他們自然不會去關(guān)心你的軟件系統(tǒng)采用何種設(shè)計和架構(gòu),但作為軟件系統(tǒng)的分析者、設(shè)計者和開發(fā)者,我們必須為軟件產(chǎn)品尋求一種合理的架構(gòu)設(shè)計,因為它不僅能夠使系統(tǒng)滿足非功能性需求,而且能夠降低開發(fā)成本和維護費用。
總之,架構(gòu)設(shè)計是軟件開發(fā)過程的重要組成部分,它不是單純的技術(shù),也不具有一種特定的形式,更不是與客戶需求無關(guān)的。良好的軟件架構(gòu)能夠服務(wù)于整個開發(fā)過程,有效地降低項目風(fēng)險,確保項目能夠朝著健康的方向發(fā)展。因此,我們必須重視架構(gòu)設(shè)計在軟件開發(fā)中的重要作用。
更多軟考資訊請關(guān)注希賽軟考網(wǎng)。
相關(guān)推薦:
系統(tǒng)架構(gòu)設(shè)計師的前景職業(yè)分析
我們?yōu)槭裁匆獔罂枷到y(tǒng)架構(gòu)師考試?
軟考備考資料免費領(lǐng)取
去領(lǐng)取