對于多數(shù)現(xiàn)代軟件團隊來說,軟件交付是一個持續(xù)的過程。
軟件交付不再是開發(fā)結(jié)束時的明確階段,而是每天開發(fā)過程中的持續(xù)過程,每天甚至每小時進行一次部署。目前,ML(機器學(xué)習(xí))流程更多地應(yīng)用于軟件部署,以節(jié)約時間并優(yōu)化流程,以便軟件公司可以繼續(xù)有效地開發(fā)和部署。
ML是指開發(fā)算法以識別模式并基于數(shù)據(jù)集開發(fā)模型的過程。這些分析可以提供對可能隱藏的數(shù)據(jù)的見解。除此以外,這些ML工具還可以根據(jù)其生成的預(yù)測自動執(zhí)行操作。
在ML中,特別強大的功能是能夠?qū)崟r或接近實時處理大數(shù)據(jù)。這在軟件交付中非常有價值,在該世界中,在任何給定時間,成千上萬的用戶可能同時使用軟件。向這些用戶推出更新對于確保無論使用何種設(shè)備或平臺,都可以通過錯誤修復(fù)和新功能向所有用戶提供更新至關(guān)重要。ML可以通過分析數(shù)據(jù)日志,檢測錯誤以及在錯誤傳給全球數(shù)百萬用戶之前做出決定,來輔助軟件交付過程。
持續(xù)測試和持續(xù)集成已成為軟件開發(fā)中的核心理念。這種快節(jié)奏的開發(fā)風(fēng)格打破了軟件開發(fā)的傳統(tǒng)階段。相反,軟件沒有被視為明確的計劃,開發(fā)和測試階段,而是被視為不斷測試和開發(fā)的實際產(chǎn)品。
ML已在軟件交付的很多不同領(lǐng)域中變得非常有用。在提倡CI/CD方法論的環(huán)境中工作的開發(fā)人員可以快速提供軟件更新,因此,為他們提供所需的工具以使其提交安全,按預(yù)期工作并且不會迅速產(chǎn)生無關(guān)的錯誤,這是十分必要的。ML過程可以通過多種方式幫助實現(xiàn)這一目標(biāo)。
持續(xù)測試在開發(fā)過程必不可少,而不是在開發(fā)周期結(jié)束時作為離散階段進行測試。在這種情況下,將在計劃,原型,開發(fā)和部署代碼的每個階段對產(chǎn)品進行測試。
這些測試采用很多不同的形式。單元測試,API測試,UI測試等等都屬于持續(xù)測試的范圍。但是,盡管大部分測試可以自動化,但它們并非同時提供所有結(jié)果。比如,與單元測試相比,執(zhí)行UI測試通常需要更長的時間,并且部分UI測試套件可能涉及手動測試。這會導(dǎo)致開發(fā)人員提交代碼和獲得反饋所需的時間有所延遲。
開發(fā)人員習(xí)慣于編譯器優(yōu)化代碼,但是這種實踐不必局限于編譯。隨著軟件變得越來越復(fù)雜,其部署環(huán)境變得難以預(yù)測?;谠频姆?wù)通常在開發(fā)團隊未直接維護的虛擬服務(wù)器上運行。一種解決方案是使用容器化的應(yīng)用程序來提供一致性,但是可以使用ML過程來根據(jù)其部署環(huán)境來優(yōu)化應(yīng)用程序設(shè)置和環(huán)境配置。這可以幫助最大化產(chǎn)品性能并協(xié)調(diào)跨平臺和環(huán)境的開發(fā)。
ML也可以通過培訓(xùn)來實施編碼準(zhǔn)則。隨著時間的流逝,大型和成熟的軟件產(chǎn)品可能會變得非常笨拙,因為數(shù)百名開發(fā)人員會不斷使用它們。保持代碼的清潔和標(biāo)準(zhǔn)化可以使開發(fā)人員清楚地知道哪些代碼單元可以執(zhí)行,而無需花費時間進行研究或?qū)W習(xí)。ML過程可以檢測提交中與編碼準(zhǔn)則的差異,并在將提交添加到代碼庫之前創(chuàng)建重寫的建議,從而使代碼庫保持整潔并強制執(zhí)行準(zhǔn)則,而無需進行人工檢查。
加快軟件交付
ML有助于自動化開發(fā)和測試流程。測試的關(guān)鍵部分是測試維護,這是使測試與軟件保持同步的必要條件。對于頻繁更改的區(qū)域(比如UI測試),這可能特別耗時。ML過程不僅可以幫助減少維護時間的自我修復(fù)測試,而且還可以突出顯示最需要測試的代碼區(qū)域。
這增加了測試套件中測試的價值。ML過程可以提供有助于優(yōu)化測試和測試范圍的見解。ML不是分散測試所有內(nèi)容的方法,而是為開發(fā)人員提供了數(shù)據(jù)驅(qū)動的見解,以了解在決策過程中測試最有價值的地方。
ML和軟件開發(fā)的未來
ML是軟件開發(fā)中相對較新且快速創(chuàng)新的內(nèi)容。所使用的模型及其應(yīng)用正在不斷變化和改進,尤其是隨著它們變得越來越廣泛地使用和嵌入各種不同的過程中。隨著越來越多的軟件開發(fā)流程實現(xiàn)自動化,這些ML工具將被賦予更大的決策權(quán)。
當(dāng)前,ML過程主要用于輔助決策過程。他們可以標(biāo)記出可疑的錯誤,預(yù)測潛在的錯誤并提供有價值的見解,但是如何處理此信息的決定通常仍由人決定。這部分是信任問題,部分是傳統(tǒng)問題。軟件開發(fā)和部署中的很多過程都依賴人工干預(yù),因為這一直都是如此。
展望ML和軟件開發(fā)的未來,為ML過程提供動力的算法只會變得更加完善,并且基于更多的數(shù)據(jù)和更精細(xì)的分析,生成的模型將進一步得到改善。
有一天,開發(fā)人員可能不需要為其創(chuàng)建的代碼進行測試。相反,將在編寫代碼時自動生成測試,并且預(yù)測分析將通知開發(fā)人員,甚至在提交代碼之前,編寫的代碼是否會對代碼庫產(chǎn)生預(yù)期的效果。