創(chuàng)建軟件架構時應該關注什么?
隨著互聯(lián)網的發(fā)展,軟件的體量越來越大,這就要求每一個產品在設計之初就需要設計相應的架構以適應產品長期的發(fā)展以及升級。作為產品經理——一個產品最主要的負責人,也應該知道一點軟件架構的知識。
軟件架構師的首要關注點不是系統(tǒng)的功能,而是軟件的品質,軟件品質關注點指明了功能呢必須以何種方式交付,才能被系統(tǒng)的利益相關人所接受。作為一個架構師,你應該了解軟件產品利益人以及他們的關注點:
- 投資人,他們想知道項目是否能夠在給定的資源和進度約束下完成。
- 架構師、開發(fā)人員、測試人員,他們首先考慮的是最初的構建和以后的維護與演進。
- 項目經理,他們需要組織團隊,制定迭代計劃。
- 市場人員,他們想通過軟件產品的品質特點實現(xiàn)與競爭者的差異化。
- 用戶,包括最終用戶、系統(tǒng)管理員,以及安裝、部署、準備、配置人員。
技術支持人員,他們關注幫助平臺電話呼入的數(shù)目和復雜性。
架構師第一項任務,就是與利益相關人員協(xié)作,理解這些品質關注點和約束,并為它們排列優(yōu)先級。為什么不從功能需求開始呢?因為通常有許多可能的系統(tǒng)分解方式。例如,從數(shù)據(jù)模型開始可能得到一種架構,而從業(yè)務處理模型開始則可能的得到不同的架構。在極端的情況下,系統(tǒng)沒有分解,被開發(fā)成單一的軟件。這可能會滿足所有功能需求,但是可能不會滿足品質需求。
一個項目通常情況下會有以下關注點:
功能性
產品向它的用戶提供哪些功能?
可變性
軟件將來可能需要哪些改變?哪些改變不太可能發(fā)生,不需要特別容易進行這些改變?
性能
產品將達到怎樣的性能?
容量
多少用戶將并發(fā)使用該系統(tǒng)?該系統(tǒng)將為用戶保存多少數(shù)據(jù)?
生態(tài)系統(tǒng)
在部署的生態(tài)環(huán)境中,該系統(tǒng)將與其他系統(tǒng)進行哪些交互?
模塊化
如何將編寫軟件的任務分解為工作指派(模塊),特別是這些模塊可以獨立地開發(fā),并能夠準確而容易地滿足彼此需要?
可構建性
如何將軟件構建為一組組建,并能夠獨立實現(xiàn)和驗證這些組建?哪些組建應該復用其他的產品,哪些應該從外部供應商出獲得?
產品化
如果產品將以幾種變體的形式存在,如何開發(fā)一個產品線,并利用這些變體的共性?產品線中的產品以怎樣的步驟開發(fā)?在創(chuàng)建一條軟件產品線時,要進行哪些投資?開發(fā)產品線中不同變體的選擇,預期會得到怎樣的回報?
特別是,是否可能開發(fā)最小的產品,然后再添加(擴展)組建,在不改變以前編寫的代碼的情況下,開發(fā)產品線的其他成員?
安全性
產品是否需要用戶認證,或者必須限制對數(shù)據(jù)的訪問?數(shù)據(jù)的安全性如何得到保證?如何抵擋“拒絕服務”攻擊或其他攻擊?
到這里是不是有點熟悉啊,這其實就是產品經理寫的PRD文檔中的一份,PRD文檔中有關于產品性能指標,安全的指標等等,而架構師很大部分工作就是在拿到PRD的時候把項目進行分解,讓其在架構上符合產品設計基本要求。