讀書 持續整合軟體質量改進和風險降低之道

2022-04-28 22:48:20 字數 3095 閱讀 8640

經常發生這種事:開發者修改源**,dba修改了表定義 構建部署團隊修改了配置檔案 介面團隊修改了規範。

如何利用持續反饋,測試(單元測試,自動化瀏覽器測試),部署(自動化構建部署),審查(和同事或者架構師經常**審查),資料庫整合來是實現持續整合?

要經常進行整合構建:編譯  重新建立資料庫 執行自動測試發郵件和審查 部署軟體並接收反饋發郵件。

開發的**複雜程度如何?

應用程式是否仍然滿足效能要求?

自動測試覆蓋了多少**?

最後一次變更以後,是否通過了所有的測試?

最近的開發是否存在問題?

持續的構建,持續的反饋,開發周期內得到修正?

連線版本控制系統

構建指令碼(指令碼自動化)

反饋機制(電子郵件)

整合原始碼變更的過程(編譯和單元測試)

自動化【資料庫整合、測試、審查、部署】和反饋

單元測試 元件測試 系統測試 負載效能測試 安全測試

自動化資料庫整合

自動化測試(單元函式,元件,系統,功能)

自動化**審查(靜態分析+動態分析)

自動化部署(解決了人為過程中的瓶頸)

有些過程,人為操作反而會心累又出錯,所以自動化

【對於開發者,要減少假設,假定,想到任何可能出現的情況】

自動化測試的指令碼要構建到版本庫中,整個可持續的整合都要完全自動化

重複**是有風險的,貼上複製存在風險;

累死**副本需要維護的時候,帶來忽略;

硬編碼;

!!!!!!!!!!!!!

哪些是手工的,是否可以自動化?

構建過程中,重建資料庫和測試資料?

每次軟體變更執行自動化回歸測試?功能,整合。負載,效能測試?

哪些**沒有對應測試?是否使用覆蓋率工具?

軟體**重複百分比是多少?設法減少百分比

當前**是否遵守軟體架構?

通知構建版本和部署版本可以接受測試了?

當前的軟體結構圖是怎麼樣?如何跟新來的解釋軟體架構?

【以前我以為測試不重要,因為之前公司一直是人為的功能流程測試。現在看來,開發和自動化測試(單元,功能,效能,負載,整合)一陰一陽;測試驅動開發;】

構建指令碼

——》清理

——》編譯源**

——》整合資料庫

——》執行測試

——》執行審查

——》部署軟體

為了執行構建更加容易,設立整合目錄:

需求目錄

設計目錄

源**目錄

文件目錄

測試目錄

部署目錄

開發-測試-文件編寫共行

構建的觸發機制:

使用者驅動:手工發起

定期執行:定時任務

輪詢變更:從版本庫中簽出變更,ci工具觸發

事件驅動:監測到版本庫更新就檢測,版本庫觸發

使用ci 構建計算機伺服器

軟體資產統一放到版本庫中

整合伺服器-整合按鈕?

構建花費多少時間?是否嘗試減少時間?提高反饋速度?

構建頻率?每週?每晚上?發生變更時?

很多專案使用共享資料庫,開發者對共享資料庫操作極有可能影響其他團隊成員的工作。所以開發者要有自己本地的資料庫沙盒。

要準備資料庫整合自動化指令碼。

利用版本控制庫共享資料庫資產(包含資料庫配置,測試資料,實體關係圖,儲存過程和函式,刪除建立表和檢視的ddl,包括約束條件和觸發器)

在版本庫中專門新建目錄存放資料庫資產(開發目錄和測試目錄都要分開)。

開發和測試一陰一陽,不可分割,同樣重要;測試驅動開發。

自動化測試分為一下標準測試

單元測試:沒有外部依賴關係

系統測試:測試外部介面,web頁面,web服務selenium

功能測試:以客戶的視覺和行為驗收測試

為缺陷編寫測試。

將測試用例限制為乙個斷言。

測試資產要提交到版本庫中持續整合。

源**的可靠取決於測試覆蓋率;

測試價值取決於執行頻率。

降低**複雜度

減少重複**

持續進行設計複查

判斷**覆蓋率

自己小黃鴨除錯方法

靜態**分析,動態**分析

結對程式設計

自動化**審查能解決80%的問題

**的路徑數和缺陷之間存在關係

不穩定性 = 傳出耦合/(傳入耦合+傳出耦合)

1 確定單元測試的執行頻率?偶爾/定期/持續/專案部署前

2 如何檢查單元測試 元件測試 系統測試的覆蓋率?

3 是否監控**的複雜度?是

4 持續的自動化設計複查?工具?

5 **審查自動化? 

6 是否監控**的重複情況

7 是否產生覆蓋率報告?

持續整合的目的就是搞隨時隨地可發布的軟體。

你寫的軟體真的可以隨時隨地可發布麼?

假如外包軟體,在期望時間內最終向使用者提交高品質能工作的軟體,而不是噩夢發行版,失去控制,每個人驚慌失措、失眠、白頭髮…

高效的建立能工作的軟體是專業軟體開發者存在的理由。持續整合使得平時工作可能稍微繁瑣,但是發布的工作量變小而且穩定性提高。

專案持續部署:

1 是否擁有回滾發行版本的能力?

2 構建版本控制庫中的構建版是否打上標籤?

3 候選發行版 是否整套自動化測試和人工測試?

4 團隊如何處理缺陷修復的發布?

5 版本控制標籤和構建版本標籤是否相關?

6 構建是否提供反饋報告

7 是否命令列單條命令部署軟體?

8 能否從版本庫中取出所有軟體資產進行構建部署?

9 能否在乾淨的計算機上正確安裝並執行?

10 是否有缺陷追蹤系統?能否自動生成報告?

一切都在變化,不斷擁抱變化

在正確的時間(每天/每週/問題發生時),以正確的方式(電子郵件/簡訊),講正確的資訊(構建狀態/審查報告/測試結果)傳送給正確的人(構建負責人,技術負責人,專案經理,產品經理,業務分析師,開發者)。

是否有太多的人過於頻繁的收到反饋資訊?

反饋是否及時?

資訊是否適量?

專案團隊在地理位置上是否是分布式的?資訊發射器自動化?

反饋機制有趣麼?

持續反饋裝置cfd,向專案風險承擔者通知構建是否失敗,比如**重複率超過百分比。

持續整合 軟體質量改進和風險降低之道

size medium 粗略翻了一遍jolt大獎書籍 持續整合 軟體質量改進和風險降低之道 發現基本原則和我前面在做的並無差別,不過對方顯然是百試不爽經驗豐富,我在具體操作的過程中卻停下了無數次,按照陽明先生的話來說,不能實踐的知,實在不是真知,結合自己的認識,把讀書後獲得的一點小的總結放到後面,用...

持續整合質量保證方案

需求評審 介面 使用者介面 功能 效能 安全性 單元測試 junit 掃瞄 sonar 依賴檢查 引用包安全性 測試用例評審 實際評審和需求及開發會並行進行 介面測試 postman http介面 自定義測試工具 dubbo jsf http介面 robot framework 功能測試 robot...

如何提高研發質量與持續整合

隨著軟體業的不斷發展,軟體專案的規模越來越大,軟體結構越來越複雜,技術要求越來越高,參與人員越來越多,管理也變得越來越難。在這樣乙個大背景下,如何提高軟體研發質量,相信是所有軟體公司都在關注的話題。但是,如何提供研發質量,這決不僅僅是乙個口號,我們必須有一套行之有效的方法加以管理。然而有效的管理帶來...