1.在軟件文檔中最主要包括以下幾點,能夠幫助客戶和開發人員理解產品如何工作,如何演化
語境、功能性概覽、質量屬性、約束、原則、軟件架構、外部接口、代碼、數據、基礎設施架構、部署、運營和支持、決策和日記
(1)語境(必須)
*這個軟件/產品/系統是關於什麼的
*構建的是什麼(願景)
*如何融入現有環境
*誰在使用(用戶、角色、參與者)
(2)功能性概覽,瞭解系統的關鍵功能是什麼,能夠解釋爲什麼讓你可以在系統的功能切片之間建立明確的鏈接
*系統實際上做什麼是否清楚
*那些特性、功能、用列、用戶過時等對架構是重要的,是否清楚
*重要的用戶是誰,以及系統如何滿足他們的需求是否清楚
*上述已用於塑造和定義架構是否清楚
*從流程的角度系統做什麼是否清晰
*系統的主要流程和信息流是什麼
(3)質量屬性
*架構必須滿足的質量屬性有清晰的認識
*質量屬性是否滿足(可衡量、可達成、相關、及時)
*明確標出一些有影響的質量屬性(如多語言支持)
*列出每個質量屬性時一個很好的起點
性能(延遲和吞吐)、可伸縮性(數據和流量)、可用性(運行時間、停機時間、定期維護、全天)、安全性(認證、授權、數據保密性)、可擴展性、靈活性、審計、監測和管理、可依賴性、故障轉移、業務連續性、戶操作性、遵守法律法規、國際化、可訪問性、易用
(4)約束
*時間、預算和資源
*允許使用的技術清單和技術約束
*目標部署平臺
*已有系統和繼承標準
*局部標準(開發、編碼)
*公共標準(交換數據格式、請求方式等HTTP/SOAP/XML/XML機構/WSDL等)
*標準協議
*標準格式
*軟件開發團隊的規模、技能配置
*所構建的軟件的本質(比如戰術和戰略);
*政治約束;
*內部知識產權的使用;
(5)、開發原則
*架構分層原則
*視圖中業務邏輯
*接口的使用
*始終使用ORM
*依賴注入
*高內聚低耦合
*SOLID原則(單一職責原則,開閉原則,里氏代換原則,接口隔離原則,依賴倒置原則)
*所有組件都是無狀態的(讓伸縮性更容易)
*富域模型、貧血域模型、選擇存儲過程、不使用存儲過程、錯誤處理、日記等的通用方法、購買而非構建
(6)軟件架構
*關鍵內部接口是那些
*展示了主要的組件及其交互
*展示了主要的容器和技術選擇
*是否有清晰的結構,對於軟件架構圖的說明
(7)代碼
*生成、渲染HTML,對生成HTML的內部框架的簡短描述,包括主要的類和概念
*數據綁定:根據HTTPPOST 請求更新業務對象的方法
*多頁數據採集:描述構建網頁表單的內部框架
*web mvc
*安全性:使用windows身份基礎(WiF)進行認證和授權的方法
*域模型:域模型重要部分的概覽
*組件框架:簡短描述了正在運行時重新配置組件而構建的框架
*配置:簡短描述爲了在運行時重新配置組件而構建的框架
*架構分層:分層策略和用來實現的模式的概覽
*異常和日記
*模式和原則
(8)數據
*數據模型、數據存儲、數據需要多少存儲空間
*歸檔和備份
*日誌文件和審計跟蹤是否有相似的要求
*是否用單文件來存儲
(9)基礎設施架構
*是否有清晰的物理架構
*在所有層中,什麼硬件做了這件事
*如果使用,他是否滿足冗餘,故障轉移,和災難恢復
*選擇的硬件組件如何改變大小和被選中是否清楚
*如果使用了多個服務器和網站,他們之間的網絡聯繫是什麼
*誰負責基礎設施的支持和維護
*有照管通用基礎架構(比如,數據庫,消息總線、應用服務器、網絡、路由器,交換機、負載均衡器、方向代理、互聯網連接)
*誰擁有資源
*開發、測試、驗收、試製、生產等是否有合適的環境
(10)部署,軟件和基礎設施之間的一個映射
用來描述軟件(容器)和基礎設施之間的映射,有時候這是簡單的一對一映射,(如把一個Web應用程序部署到單個web服務器上),其它時候回更復雜,一個web應用程序部署到服務器的集羣的多個服務器上
*軟件安裝和配置軟件在哪裏,怎麼做
*軟件如何部署到基礎設施腳骨部分描述的基礎設施元素上是否清楚(一對一映射,每個服務器多個容器等)
*內存和CPU在運行於單塊基礎設施上的進程間如何分配是否清楚
*有容器和組件以主動-主動、主動-被動、熱備用、冷備用等形態運行嗎
*部署和回滾策略是否已經定義
*軟件或基礎設施出現故障時會發生什麼
*跨站點的數據如何複製是否清楚
(11)運營和支持,描述人們如何運行、監測和管理你的軟件
*軟件如何爲運營、支持團隊提供監測和管理系統的能力是否清楚
*在架構的各個分層中這是如何實現的
*運營人員要如何診斷問題
*錯誤和信息的紀錄在哪裏
*更改配置是否需要重新啓動
*有需要定期執行的手動管理任務嗎
*舊數據需要定期歸檔嗎
(12)、決策日記
簡單紀錄所做的重要決策,包括技術選擇(產品、框架),整體架構(軟件結構、架構風格、分解、模式)
*你爲什麼選擇技術或框架X,而不是Y和Z
*你是怎麼做的,產品評估還是概念證明
*你是否根據公司政策和企業架構戰略而被迫做出關於X的決策
*你爲什麼選擇所採用的軟件架構?你考慮過其它那些選項,你怎麼知道解決方案滿足主要的非功能性需求