技術專家

熊志男
DevOps平臺產品經理 & 研發效能專家
【作者介紹】致力于通過DevOps工具平臺賦能助力業務研發團隊,實現研發效能提升,包括規模化持續集成、代碼掃描和自動化測試等實踐。
從上世紀八九十年開始,計算機輔助軟件工程和基于模型的軟件開發等方法逐漸興起,直到近十年的低代碼軟件開發等,一直在致力于通過工具和技術的手段,來提升軟件的生產效率。
在如今這個“軟件正在吞噬世界”的時代,作為一名軟件工程師,需要實現的需求數量如滾雪球般逐漸增加,超時工作已經成為軟件從業者的常態,不過通過軟件研發流程自動化,可以實現個人和組織的效能提升。
本文將從以下兩個維度,分別闡述下研發流程自動化的應用方法和收益:
• 單項任務的自動化
• 多任務自動化協同
01? 單項任務的自動化
很多企業都是先從自動化發布和運維起步,然后逐步往前推進自動化的。
從下圖可以看到,這個研發生命周期的簡單模型中,按照時間線來看,一個需求從想法轉換為設計、落地到代碼、再生成二進制包、結合環境信息發布到生產,整個過程不確定性是從后往前逐漸增加的。
軟件生命周期,不確定性變化
而不確定性則是實現自動化的一大挑戰,因此目前階段對于具備發散特性的代碼開發過程自動化,雖然已經有很多優秀的學術研究成果和部分的落地實踐,但是仍然沒有在企業中實現大規模的落地和推廣。
按照以上思路,我帶你先從自動部署這個 最常被大家提起的自動化實踐展開探討。
?? 自動部署
微軟公司在2019年時,每天部署超過8萬次,如果每次部署都需要手動執行,可想而知是多么痛苦的一件事情。
雖然一般在小型的軟件公司不會有這么多的部署需求,但是對一名開發人員來說,部署仍然是需要每天面對的,具體來說比如測試環境的部署、準生產環境部署和生產環境部署。
到現在我還記得大概十年以前,當時還是通過腳本部署測試環境時是多么耗費時間,常常是一邊執行部署腳本,一邊查看啟動日志。
如果順利執行完成則會感到非常慶幸,接下來再去執行另外一個腳本,甚至在執行腳本前還需要修改一些部署目錄等參數變量,整個部署過程是不可重復的且不穩定的。
而到現在隨著云原生技術的興起,軟件的部署過程已經完全實現自動化,從過程化腳本、到腳本與配置分離、然后再到Ansible和Puppte等此類自動化配置工具的應用。
如今在基于云的環境下,無論是公有云還是私有云,IAC(基礎設施即代碼)已經廣泛應用,自動部署變得越來越穩定和快速,并且能做到完全的重復執行。
自動部署技術演進
部署流水線進一步增強了編排能力,并且加入了前置的自動化測試等,把多個原子的自動化任務組合起來形成一條流水線,GitOps是一個很好的實踐。
?? 部署流水線
部署流水線進一步增強了編排能力,并且加入了自動化測試和靜態代碼分析等前置任務,把多個原子的自動化任務組合起來形成一條流水線。自動化流水線兩個重要的特性分別是觸發器和編排能力:
-
Webhook觸發器
拿Github代碼倉庫舉例,當一個特性分支要合并到受控分支(Master)時,會發起Pull Request,為了確保受控分支的代碼質量,一般會在此時進行CodeReview(代碼評審)。
而自動化的靜態代碼分析,可以作為人工評審前置操作,提取過濾掉一些低級別的代碼錯誤,如空指針異常等。以下為由Pull Request的Webhook來觸發靜態代碼分析的流程圖:
pull request 觸發靜態代碼掃描
-
流水線編排
由Pull Request擴展開來,可以編排一個包含自動化測試的流水線,其中會包含測試環境部署的步驟。以下為流程圖:
pull request 觸發完整部署流水線
談到支持流水線編排的工具,就不得不提起我們大家都熟悉的Jenkins,該工具至今仍然是被廣泛使用的流水線平臺之一。而隨著GitHubAction、GitLabCI和Argo CD等支持GitOps的工具流行起來,GitOps實踐逐漸成為一種趨勢。
圖源:Argo CD官網-Argo CD的架構圖
?? 自動部署的應用
單獨的自動部署過程屬于單項任務的自動化,而部署流水線則需要多個自動子任務的協同,只不過這是一種簡單的串型執行的協作方式。在實際應用中,自動部署和部署流水線的應用場景卻略有不同。
單項任務的自動化,無論是自動構建、自動部署或自動化靜態代碼分析,現在都被集成到IDE(集成開發環境)中了。這樣做帶來的好處是,作為一名軟件開發人員,不需要切換工具或平臺,就可以在本地的集成開發環境中實現這些操作,帶來個體效率的提升。下圖為阿里云的自動部署插件。
圖源:阿里云官網-Alibaba Cloud Toolkit部署插件
部署流水線這種多任務協同的自動化,仍然需要有個專門的工具或者平臺來支持,不過并不影響通過IDEA插件來觸發執行。
未來可以實現本地插件和云端服務的結合,本地插件負責觸發執行,并能夠展示結果;而云端服務則通過云原生技術,來分布式地高效執行流水線。
本地插件觸發流水線
?? 低代碼平臺
目前業界對于低代碼的看法,仍然存在一些爭議。有人認為低代碼是未來軟件開發的大勢所驅,也有人對其持有負面的意見。
在這里先拋開分歧,從實際應用情況來看,低代碼平臺已經在企業軟件開發領域,逐步開始發揮作用了。特斯拉公司曾經用低代碼片平臺Mendix,快速實現自建ERP系統,各個IT巨頭也紛紛搭建自己的低代碼平臺。
圖源:文章《Low-code development and model-driven
engineering: Two sides of the same coin》
有效使用低代碼平臺,可以極大地提升效率。用免費的建站工具wordpress,最快可以十幾分鐘搭建一個網站出來。
OutSystems和Mendix這樣的低代碼平臺,則可以支持更多類型的應用創建,包含網頁端、移動端和IOT應用等。通過與云原生基礎設施的結合,集成了企業級DevOps工具,從創建一個應用到完成發布實現了無縫銜接。下圖為OutSystems的介紹:
圖源:OutSystems官網文章《Developing with OutSystems》
低代碼平臺提供的功能,除了我們常見的通過拖拽控件方式來生成前端應用外,還有基于DSL語言、流程圖和狀態機等方式,來直接生成應用程序。從模型到可執行的應用,通常有兩條實現路徑:
• 1)通過模型來生成代碼,生產的代碼或字節碼,直接運行在JVM這樣的運行時環境,成為可執行的應用。
• 2)通過執行元數據的方式,模型以元數據的方式保存,然后通過解釋器來直接執行元數據,從而實現應用的功能。
第二種方式執行更加高效,因為其減少了生成代碼的過程,使開發、部署和測試過程更加快速。在實際使用情況下,兩種方式可以分別單獨使用或者結合使用。
02? 多任務協同的自動化
在單點效率的提升方面,如自動部署、自動代碼質量檢測和自動化測試等,目前已經有很多優秀的實踐,并且使單點效率得到了很大的提升。
不過縱觀整個軟件研發生命周期,僅僅提升單點的效率是不夠的,還需要通過提升多任務的協同效率,來減少等待時間和提升整體的效率。
圖中示例可以看出有很多重協同的任務,其總交付時間(lead time)會比處理時間(processing time)要多,是因為這些任務有一些前置準備和等待的時間,因此就會使總交付時間變長。
比如一個任務從設計進入開發,需要一些評審和溝通的時間,從開發完到測試開始之前,又需要一些測試環境準備的時間。
因此可以說,從單點自動化到流程自動化,是提升研發效能的一個必然發展路線。
通過流程自動化來提升多任務協同效率的具體手段,可以從可視化和自動化兩個方面入手:
-
可視化
主要指上下級或上下游任務之間數據的打通,如在需求維度可以查看開發過程的代碼相關信息和測試維度的相關信息,這樣的做法使不同視角均能夠準確且及時獲取更加完整的信息,利于多角色高效協同。需求關聯開發和測試信息如下圖:
需求任務與開發測試數據關聯
如上圖,以需求和任務為主線,關聯了開發過程中的數據包含代碼提交信息、代碼合并請求和代碼分支信息,還有測試過程中的缺陷、用例和提測單數據。
-
自動化
主要是指不同任務的前置和后置任務,能夠根據規則自動化觸發執行、多個任務之間的狀態自動同步等。下圖是使用GitHub時,通過git命令觸發issue的狀態變為關閉的實踐:
以下為通過Jira自動化規則來分配任務的實踐,可以根據提前設定好的規則,自動把任務分配給狀態為空閑的團隊成員。
總結起來,有以下幾種類型的流程自動化工程實踐:
?? 結語
作為一名軟件開發人員,我們的日常工作就是通過技術手段使業務流程自動化,從而提升業務運營的效率。而對軟件研發活動自身來說,目前還有很多低效的和手工的操作,可以說,研發效能提升正是要找到這些效能瓶頸,并通過技術手段來實現改變。
自動化技術正是解決低效工作的最佳手段,我本人也是從自動化測試開始入手,逐步到自動化部署、自動化代碼檢測,到現在致力于通過工具來實現多任務的自動化協同,深刻體會到了自動化帶來的收益。
關于軟件研發流程自動化的更多實踐和觀點,歡迎留言區和我一起探討。
未經允許不得轉載:RPA中國 | RPA全球生態 | 數字化勞動力 | RPA新聞 | 推動中國RPA生態發展 | 流 > 突破效能瓶頸,實現流程自動化
熱門信息
閱讀 (14728)
1 2023第三屆中國RPA+AI開發者大賽圓滿收官&獲獎名單公示閱讀 (13753)
2 《Market Insight:中國RPA市場發展洞察(2022)》報告正式發布 | RPA中國閱讀 (13055)
3 「RPA中國杯 · 第五屆RPA極客挑戰賽」成功舉辦及獲獎名單公示閱讀 (12964)
4 與科技共贏,與產業共進,第四屆ISIG中國產業智能大會成功召開閱讀 (11567)
5 《2022年中國流程挖掘行業研究報告》正式發布 | RPA中國