本系統為典型 Web 應用,遵循《面向對象的系統分析與設計》方法,從問題域細化、人機介面、存儲設計、系統介面四個維度展開。
引入 Velocity 模板引擎後,調整類圖如下:
BuildInfoLog 改為介面。NightlyBuild 實作該介面,並繼承 java.util.Hashtable,以專案名為 Key、構建標籤列表為 Value。buildinfo_list.vm 模板,NightlyBuild 專注業務邏輯。NightlyBuildServlet 繼承 VelocityServlet,擔任控制器角色。

瀏覽者輸入系統 URL 後,首頁顯示構建信息目錄表格,各欄位超鏈接指向具體資源:
| 資源類型 | 超鏈接 URL 格式 |
|---|---|
| 管理日誌 | ${logTopDir}/ |
| 構建日誌 | ${projectLogTopDir}/${nightly_build_tag}.txt |
| 度量信息 | ${logTopDir}/${nightly_build_tag} |
| 測試記錄 | ${testTopDir}/${nightly_build_tag} |
| 覆蓋率 | ${testCoverTopDir}/${nightly_build_tag} |
| 產品 | ${distTopDir}/${nightly_build_tag} |
頁面以專案名(${key})分組,每組列出構建序號及對應資源鏈接。
採用檔案系統儲存,核心為 BuildInfoDir 介面,定義各類資源的根目錄與命名規則:
| 變量名 | 說明 | 預設值 |
|---|---|---|
| webAppDir | 應用伺服器 Web 應用根目錄 | 依安裝環境而定 |
| nightlyWebAppName | 本系統 Web 應用名稱 | "nightlybuild" |
| nightly_Build_Tags | 所有構建標籤列表檔案名 | "nightBuildLog" |
| logTopDir | 構建管理服務日誌目錄 | "adminLogs" |
| statCVSTopDir | 專案度量結果頂層路徑 | "statCVSes" |
| projectLogTopDir | 項目構建服務日誌頂層路徑 | "projectLogs" |
| testCoverTopDir | 測試覆蓋率結果頂層路徑 | "testCovers" |
| distTopDir | 發布版產出物頂層路徑 | 同 webAppDir |
| testTopDir | 測試結果頂層路徑 | "tests" |
nightly_Build_Tags 檔案每行一個標籤,格式:專案名-yyyymmdd_HHMMSS,例:nightlybuild-20030312_080100。
與構建系統介面即為上述 BuildInfoDir;與作業系統無直接介面。
考慮 Ant 腳本限制,引入 LogAdmin 類記錄 BuildAdmin 運行日誌,並透過 <ant> 任務鏈式調用 ProjectBuild。三類別(LogAdmin、BuildAdmin、ProjectBuild)均須可執行。

將構建流程劃分為固定腳本與專案相關腳本,符合模板方法模式:
ProjectBuild.test_project 模板方法:準備測試環境(編譯、打包、安裝)→ 執行測試 → 生成測試報告 → 生成覆蓋率信息。其中編譯、打包、測試為子類實作的抽象方法。ProjectBuild.dist_project 模板方法:編譯 → 打包 → 安裝。編譯、打包為抽象方法。
