TAP 文章系列-12 | 小步快跑的程式碼掃描,實現質量左移

語言: CN / TW / HK

測試是軟體質量的基礎,測試左移為應用準時上線的關鍵

在以往的日子,一個應用軟體專案開發工作,相關人員無不將注意力放在範疇、預算與專案週期三個面向。而「墨菲定律」卻如影隨形,不斷髮威;我們總是無法避免的如「人月神話」書中所描述的一樣陷入困境。

通常,需求訪談消耗掉大量時間,大大的壓縮了開發所需要的時間,即使系統設計被清楚的討論與制訂,開發者依舊被專案週期壓得喘不過氣來,所以測試是最常被省略的部分一直到應用要上生產環境時,才發現應用程式沒有完全實現原先設計目標,沒辦法滿足客戶要求,甚至原始碼的編寫或是使用的框架具有安全的風險,最後導致整個專案延期

即便最終,系統在跌跌撞撞的開發過程後上線,緊接的一連串Bug修正、功能增加與修改,都是是專案規劃初期應該想到,卻又沒想到的部分。

一個系統經過多年的使用與維護,歷經多代輪替的開發者,早已偏離原來的設計再加上沒有良好的架構設計,也沒有從專案開始時就納入的測試,後續的開發者沒有充足的信心與多餘的時間進行重構,以至於整個系統的維護工作日趨沉重,也讓迭代速度不斷下降,整個系統也越加混亂與熱力學的熵增定律:「每個系統會從有序走向無序,日趨混亂,且不可逆」,不謀而合。

相信許多具有應用開發與運維實務經驗的讀者,每次在系統上線時總是有種惶惶不安、驚濤駭浪的刺激感。 

Working Effectively with Legacy Code 的作者Michael C. Feathers在書中定義了遺留系統即為沒有測試覆蓋(保護)的系統,也是有待改善的系統,可見測試的重要性,卻是傳統應用開發所欠缺的部分。

前述的傳統瀑布式專案管理方式,確實弊病叢生,因此敏捷開發思維橫空出世,提倡測試先行、增量開發與及早部署這個概念改變了這個世界開發軟體的方式。 

VMware Tanzu Labs(Pivotal Labs)的技術專家 Mark Parker,曾經於2016年的SpringOne活動上,以 “TDD: The Bad Parts”為題目的演講中提出,如何讓應用程式可以高效開發、持續且即時部署的關鍵,即為測試。

但是,現在多半開發在個階段測試工作所花費的時間與精力,通常如下圖左邊的倒三角形,單元測試花費很少時間,系統整合測試與驗收測試則需要更多的工作量才可完成;其中原因不難理解,一旦系統進入SIT或是UAT的測試階段,其需要與其他系統對接,所以在問題查詢需要更多時間,且功能修正過程中則需要請其他周邊系統與團隊配合,才能夠重新部署測試。

綜合上述問題,反之,若將更多時間與精力放在單元測試工作上,將會省去大量的SITUAT工作量。

而如果期待系統可以快速反應需求變化,也希望有正確高品質的原始碼,不斷地重構以便取得整潔的原始碼,也透過測試驅動開發,讓開發者與業務相關人員對於推出的應用與提供的服務更加有信心,都是必要的步驟與正向迴圈。

敏捷開發的工程實踐管理方式,推動測試左移,質量左移

我們簡單將應用程式開發到上線,簡單劃分成迭代開發與上線部署兩個階段。

在第一個開發階段,是屬於開發者所需關注的部分,除了完成客戶要求的系統規格、功能,若期許達到開發者可以達到敏捷團隊的要求,則樂於分享的開放式心態、團隊緊密的合作方式、開發者講求紀律的自我要求,皆是VMware Tanzu Labs提供給客戶的參考意見。 

Kent BeckUncle Bob推廣測試驅動開發(Test Driven Development, 簡稱 TDD)這是一種從 test code的角度來是看待production code的軟體開發方式,根據需求所規劃的測試案例,遵循簡單原則,先不考慮進一步的架構問題,以滿足測試條件為要點,反覆的以紅燈、綠燈、重構為迴圈,從test code production code中往返;

因為有 test code的保護,可落實Martin Fowler在他的著作—“Refactoring”書中所提:「一個系統的重構工作是從第一原始碼被寫出來開始,到系統停用為止」,大大避免了前述「熵增定律」的發生更容易的開發出易於測試、維護的 production code

有別過去寫在檔案上僵化且沒有持續維護的規格,此過程中的測試案例,進而成為可執行的製品,避免開發過程中改AB的問題,確保系統的正確性。如此一來,敏捷開發與雲原生概念中的持續整合、持續交付,才能夠快速且有信心的執行。

敏捷開發方法論中,不論是eXtreme Programing的迭代(Iteration)或是Scrum的衝刺(Sprint),皆要求以小步快跑的增量方式,並儘速反覆的推送到生產環境,完成客戶所需功能,取得業務價值。

這個要求,也就是應用程式開發與上線的第二階段:一開始是所謂的持續整合,所涵蓋的範圍,有原始碼的整合、測試與掃描,在雲原生的技術中,還要歷經映象生成,緊接著再進行映象掃描、簽章,最後儲存至映象倉庫後,靜待最後的部署。

這些過程,須由安全、運維與平臺團隊根據組織要求,共同制定與搭建流水線,提供給開發者使用;為求高效且減少人為介入的錯誤,須以自動化方式進行,但也可根據管理與安全上的要求設定質量門禁,讓負責質量有機會可做最後的確認,之後再部署到UAT或是生產環境中。

前述這些工作皆可在雲原生基金會所帶領的生態系中,找到適合企業使用者想要的工具但是穩定又可靠的開源工具,有一定選擇的困難度。

加上需要安全、運維與平臺團隊自行評估、搭建與測試,再到後期的管理,讓這項工作顯得更加沉重。

 Tanzu Application Platform與Supply Chain Security Tool 

Tanzu Application Platform(簡稱 TAP)是根據VMware多年來協助企業客戶,進行數字化轉型工作後,所累積的經驗與彙整企業客戶、開發者使用體驗,歸納並設計出一系列的技術棧。

呼應了前面提到的開發迭代與上線部署兩個階段(在此稱為 Inner Loop  Outer Loop),其目的在提升開發團隊與運維團隊的生產力、容器平臺的可觀察性,以及應用與容器部署至Kubernetes後的安全性。

不管是 Inner Loop 還是 Outer LoopTAP皆以Choreographer Supply Chain技術為基礎框架,根據兩個階段的不同要求與架構設計,可選擇單叢集或是單一責任的多叢集,如IterateBuildStageProduction等。

並搭配Tanzu Build ServiceAnchore Syft&Grype等技術,其中提供的Supply Chain Security Tool將可大幅簡化,Outer Loop流程中相關團隊的建置與管理工作負擔。

Outer Loop中包含ScanStoreSign等安全相關技術;Scan包括了原始碼掃描與容器映象掃描,Store則可以在Scan之後,將應用程式中所使用的相關套件進行記錄,做為軟體元資料庫(software metadata)Sign則可為容器進行安全簽名

從幾個關鍵的步驟來逐一理解:

1.原始碼掃描Source Scan與映象掃描 Image Scan

TAP 採用Anchore Syft&Grype針對原始碼與打包完成容器映象進行掃描,除了在Inner Loop的第一階段進行測試,在Outer Loop的第二階段依然可以再次進行測試,徹底實現敏捷測試要求的測試左移或是測試前移要求。 TAP所採用的Anchore Grype支援CycloneDX格式的軟體物料清單SBOM,為未來的擴充留下寬廣的一條路。以下圖示,簡單呈現其架構與運作方式。

在掃描過程中,將會自動化的清查與盤點,該應用程式所使用相關框架、程式庫等,並將其結果紀錄於TAP的資料庫之中,做為後續運維的備查資料,在發生安全遺漏時,將有跡可循,提供快速解決問題的線索。

2.軟體元資料紀錄(metadata store)

根據統計,每個系統使用將近130個左右的相依套件,其中百分之九十為開源軟體,因此這些開源軟體狀況的掌握,與未來在發生安全疑慮的時候可以快速反應與處置,對於企業客戶極為重要。 

TAP自帶PostgreSQL實現Metadata Store功能,負責紀錄Scan後的結果,將應用程式所使用的相套件進行記錄。當前,TAP可以使用insight cli  API  metadata store 內容進行查詢,提供使用者完整的參考資訊

查詢程式碼metadata

查詢容器映象metadata

3.映象建置 Build

TAP 採用Tanzu Build Service(簡稱 TBS)或是Kpack,提供安全的基礎容器映象、Spring RuntimeOpenJDK與多種程式語言支援

使用TBS除了省去撰寫與管理Dockerfile的麻煩,經過TBS所建置的容器更是優化後的結果,避免因為不同技術人員所撰寫的Dockerfile,存在著技術水平落差;並讓基礎映象、runtime有統一的版本,達成容器管理工作;

此外TBS還可以對映象進行籤,配合平臺的安全策略,即可過濾掉未被安全籤認可的容器,滿足安全控管的需求。

總結與展望

現今企業所需要面對的競爭對手,已經不僅僅來自同一行業,而是任何一個攜帶強大企圖心與創新能力的跨界公司。

因此,除了要在原本的領域中創新,更急需讓自身的IT技術可以快速反應需求,提供創新的服務去吸引客戶。因此,IT技術已經成為企業競爭的核心能力。

另外,在網際網路技術發達的環境下,企業賴以為生的系統,在一個不經意的情況下,極有可能遭受不明的攻擊;輕微的,企業名聲與信用受損,嚴重的,造成無法計算的財產損失。

從基礎設施建設、軟體開發技術、部署流程,乃至於資訊安全的提升,都應該是企業關注,且投入大量資源的目標

因此,應用程式從開發、測試到部署、運維的整個生命週期,皆需重新思考並層層把關,讓應用程式可以快速迭代部署,更要防堵漏洞、提升資訊安全。

這樣的需求之下,一個容易搭建、使用與管理的工具鏈是現代化企業所需的法寶。

VMware Tanzu Application Platform 就是集應用程式開發生命週期中所需之大成,內含Supply Chain Security Tools,可讓開發團隊與運維團隊各司其職,亦可緊密合作,朝向開發運維合一的高效團隊邁進。

快速發展中的Supply Chain Security Tools,除了為安全工具鏈奠定一個具有規範的框架,其可任意抽拔的設計架構,更為未來的擴充套件工作留下伏筆。採用的企業除了可以享受開箱即用的安全應用部署的技術棧,在不久的將來更可以根據自身需求,更換適合的相關工具與套件。

作者:王鈞平

王鈞平是VMware大中華區應用現代化部門的高階解決方案架構師,具有20餘年的應用程式開發經驗,曾經協助電信、金融、製造等產業客戶,進行應用現代化與數字化轉型等工作。近年來更專注於領域驅動設計、測試驅動開發、設計模式等軟體工程技術,並支援企業客戶採用微服務架構與引進容器技術等,對於雲原生相關技術具有豐富經驗。

 

來源|公眾號:VMwareTanzu雲原生

「其他文章」