在軟件開發(fā)中實(shí)施AI與敏捷管理的九點(diǎn)建議
譯文【51CTO.com快譯】 眾所周知,自1956年誕生以來,人工智能(AI)已經(jīng)徹底改變了許多企業(yè)的業(yè)務(wù)決策,以及資源部署等方式。
在過去的幾十年間,無論是汽車制造廠里的機(jī)器人,還是能夠預(yù)測貨幣與庫存變化的智能交易系統(tǒng),人工智能通過讓各個領(lǐng)域的業(yè)務(wù)得以蓬勃發(fā)展,不但證明了其自身的價(jià)值,也融入并影響了我們的日常工作與生活。
本文將與您一起來探究,AI如何能夠通過敏捷管理來加速軟件的開發(fā)。
AI在軟件開發(fā)中的應(yīng)用
AI已經(jīng)改變了大部分企業(yè)的業(yè)務(wù)模式。因此,對于軟件開發(fā)企業(yè)來說也不例外。許多研發(fā)團(tuán)隊(duì)正在運(yùn)用機(jī)器學(xué)習(xí)(ML)來提速并縮短著他們的軟件開發(fā)生命周期。與此同時,他們也通過采用AI來重新定義了開發(fā)人員應(yīng)當(dāng)如何構(gòu)建其不同的軟件產(chǎn)品。
對于軟件開發(fā)而言,通常情況下,項(xiàng)目團(tuán)隊(duì)需要在構(gòu)建系統(tǒng)之前,就要事先指定好系統(tǒng)將要實(shí)現(xiàn)的各項(xiàng)功能。這一點(diǎn),我們會在后面詳細(xì)介紹。
因此,對于一些過于復(fù)雜的判斷步驟,我們不能一律用死板的方法,讓軟件采取某種單純的是非判定。例如,開發(fā)人員會通過一整套算法的訓(xùn)練,來教會軟件系統(tǒng)如何識別,在一張照片中是否包含有消防栓這一元素。
那么,針對上述判斷含有消防栓照片的例子,我們就需要考慮包括:天氣、距離、角度、以及清晰度差異等因素在內(nèi)的不同排列組合??梢?,讓軟件程序簡單地通過枚舉的方式,去判定所有的排列組合顯然是低效且不可能的。下面,讓我們看看究竟如何在敏捷開發(fā)過程中實(shí)現(xiàn)高效的AI。
在敏捷開發(fā)中引入機(jī)器學(xué)習(xí)技術(shù)的九種實(shí)用方法
盡管已經(jīng)習(xí)慣了使用傳統(tǒng)且熟悉的軟件開發(fā)方式,我們?nèi)詰?yīng)該去大膽地嘗試使用機(jī)器學(xué)習(xí),來加速手頭的軟件開發(fā)過程。
我們在實(shí)踐中發(fā)現(xiàn):事實(shí)上,對于各種軟件接口和數(shù)據(jù)管理之類的主要應(yīng)用組件而言,我們完全可以沿用既有的常規(guī)軟件,而只需要將機(jī)器學(xué)習(xí)技術(shù)引入到SDLC(軟件開發(fā)生命周期)中便可。具體步驟如下所示:
1.代碼助手:通常,開發(fā)人員的大部分時間都花費(fèi)在了調(diào)試代碼和閱讀文檔上。如果使用基于ML實(shí)現(xiàn)的智能化代碼助手,那么開發(fā)人員便可以根據(jù)既有的代碼庫,快速地獲得各種反饋與建議,從而節(jié)省大量的摸索時間。該領(lǐng)域的工具包括:Java的Codota(譯者注:一種捜索和推薦代碼的工具,可用于AI領(lǐng)域)和Python的Kite(譯者注:一款為Python開發(fā)人員提供實(shí)時代碼片段的工具)。
2.自動代碼重構(gòu):有過開發(fā)經(jīng)驗(yàn)的讀者都知道:擁有整潔的程序代碼對于降低軟件的運(yùn)維難度,特別是后期的團(tuán)隊(duì)協(xié)作與變更,都是非常重要的。不過,客觀事實(shí)卻是:無論業(yè)務(wù)在什么時候發(fā)生擴(kuò)容,對于代碼的重構(gòu)都是一個必經(jīng)的痛苦過程。然而,如果能夠成功地引入ML,通過識別代碼中的潛在重構(gòu)區(qū)域,那么我們就能輕松地分析各種既有代碼,進(jìn)而優(yōu)化其性能。
3.制定戰(zhàn)略決策:另外一個耗費(fèi)開發(fā)人員大量時間的方面是:在產(chǎn)品的實(shí)現(xiàn)過程中,針對服務(wù)與功能優(yōu)先級的討論。通過將過往開發(fā)項(xiàng)目中的數(shù)據(jù)運(yùn)用到針對AI模型的訓(xùn)練中,我們可以評估當(dāng)前應(yīng)用的執(zhí)行情況,進(jìn)而協(xié)助業(yè)務(wù)負(fù)責(zé)人乃至整個工程團(tuán)隊(duì),來識別出那些能夠最小化風(fēng)險(xiǎn),并產(chǎn)生較好效果的方法。
4.提供精確的估算:我們都知道,整個軟件開發(fā)行業(yè)常以超出預(yù)算和時間表而著稱。因此,為了做出好的估算,開發(fā)團(tuán)隊(duì)需要深入了解整個項(xiàng)目工程的方方面面。同樣,您可以使用過往項(xiàng)目(如各種用戶故事,成本估算和功能定義)中的數(shù)據(jù)來訓(xùn)練不同的ML模型。我的經(jīng)驗(yàn)證明:這些因素在預(yù)測項(xiàng)目的工作量與費(fèi)用方面都是非常實(shí)用的。
5.錯誤分析與處置:基于ML的代碼助手,既能夠識別出歷史數(shù)據(jù)中的各種潛在模式,又可以識別到那些常見的錯誤。因此,如果程序員們在開發(fā)的過程中頻頻出現(xiàn)某類錯誤,那么代碼助手就會標(biāo)記出來。與此同時,在軟件被部署之后,ML還可以被用于分析各類日志,進(jìn)而識別到那些可以被修復(fù)的錯誤。現(xiàn)如今,軟件開發(fā)人員雖然還需要借助ML來主動地解決代碼中的錯誤,但是在不久的未來,ML會進(jìn)一步智能化,能夠在無需人工干預(yù)的情況下,去自動地糾正軟件中的潛在錯誤。
6.快速原型:過去,為了將某種業(yè)務(wù)需求轉(zhuǎn)換為技術(shù)實(shí)現(xiàn),我們往往需要花上數(shù)月、乃至數(shù)年的時間。如今,我們不再苛求開發(fā)人員有廣博的知識與技能,ML憑借著各種模型與經(jīng)驗(yàn),就能縮短開發(fā)周期,實(shí)現(xiàn)快速原型。
7.將AI用于項(xiàng)目規(guī)劃:人類大腦的神奇之處在于:沒有兩個項(xiàng)目經(jīng)理會對同一個項(xiàng)目持有完全相同的看法與觀點(diǎn)。而對于模擬人類智力的ML來說,它完全可以針對各種情況,創(chuàng)建出類似于人類大腦的因果事件序列。
8.風(fēng)險(xiǎn)評估:在軟件開發(fā)中,人們針對特定風(fēng)險(xiǎn)所做出的評估與決策,是一個復(fù)雜的過程,而且往往會受到預(yù)算、計(jì)劃、資源等方面的制約。隨著項(xiàng)目的發(fā)展,各種外部環(huán)境以及其他項(xiàng)目之間的相互依賴性,時常會改變我們的推進(jìn)方向,進(jìn)而產(chǎn)生一些新的風(fēng)險(xiǎn)。與此同時,我們?nèi)祟愑謺艿綄^往信息的記憶和重現(xiàn)能力的限制。而ML則允許我們按需檢索并獲取參數(shù)化的信息。我們可以使用過往的項(xiàng)目在開始與結(jié)束時不同的狀態(tài)數(shù)據(jù),來訓(xùn)練AI的模型,進(jìn)而獲悉當(dāng)前開發(fā)項(xiàng)目的實(shí)際時間表與風(fēng)險(xiǎn)特征。
9.項(xiàng)目資源管理:有著豐富實(shí)施經(jīng)驗(yàn)的人可能會告訴您:軟件產(chǎn)品的交付質(zhì)量,取決于是否有合適的人員參與到了項(xiàng)目之中。通過深入地研究過往的項(xiàng)目歷史數(shù)據(jù),AI能夠?qū)崟r地為您提供參與其他項(xiàng)目的開發(fā)人員信息。籍此,您可以輕松了解到有哪些開發(fā)人員已經(jīng)為部署做好了準(zhǔn)備。另外,ML還能夠幫您預(yù)見到,在項(xiàng)目的哪些領(lǐng)域需要增加或減少開發(fā)人員的數(shù)量。
同時根據(jù)當(dāng)前項(xiàng)目的特征,AI能夠在啟動階段,通過為開發(fā)人員提供具有針對性的培訓(xùn)材料,來提高他們的技能和知識,進(jìn)而快速地讓各種角色達(dá)到項(xiàng)目所需技術(shù)要求,并加速項(xiàng)目的交付。
另一方面,AI還能為項(xiàng)目組成員分配工作負(fù)載,以保證他們能夠各司其職、且全情投入。而有了AI去自動化地執(zhí)行各種重復(fù)性任務(wù),您還會有更多時間去考慮那些關(guān)鍵性的項(xiàng)目決策問題。
那么問題來了:我們又該如何通過人工智能,來改變我們的軟件構(gòu)建方式呢?
未來我們將如何構(gòu)建軟件?
在AI環(huán)境中,軟件工程師們將不再需要向計(jì)算機(jī)提供做出決定或采取措施的具體步驟。他們只需要將特定范疇的數(shù)據(jù)輸入到各種學(xué)習(xí)算法中便可。因此,重要的是算法模型能夠識別出數(shù)據(jù)中的特征,進(jìn)而做出決策。通常情況下,ML會將給定的測試數(shù)據(jù),與其數(shù)據(jù)庫里的既有數(shù)據(jù)作比較,從而調(diào)整算法并做出決定。
因此,以Google公司的Pete Warden為首專家已開始大膽地預(yù)測:在未來十年內(nèi),大多數(shù)軟件開發(fā)工作將不再涉及到編程。同時,OpenAI的前研究科學(xué)家、現(xiàn)任Tesla AI總監(jiān)Andrej Karpathy也認(rèn)為:未來的程序員將不再需要去維護(hù)復(fù)雜的存儲庫,分析各種運(yùn)行環(huán)境,以及創(chuàng)建錯綜的程序。他們的主要工作只是:將收集、過濾、標(biāo)記、分析、以及可視化的數(shù)據(jù)輸送到神經(jīng)網(wǎng)絡(luò)中便可。
傳統(tǒng)的開發(fā)過程與機(jī)器學(xué)習(xí)的開發(fā)模型
過去傳統(tǒng)的軟件構(gòu)建方法大致如下:
1.開發(fā)人員首先開展需求分析與定義。
2.然后進(jìn)行軟件相關(guān)設(shè)計(jì)。
3.在后續(xù)的開發(fā)階段,他們使用Java或C++等編程語言,通過程序代碼為計(jì)算機(jī)提供明確的執(zhí)行步驟。
4.在軟件完成構(gòu)建之后,他們通過運(yùn)行各種測試,以確保軟件能否達(dá)到預(yù)期的效果。
5.在實(shí)現(xiàn)了質(zhì)量保證之后,軟件代碼才能夠被部署到生產(chǎn)環(huán)境中。
6.工程師們還必須不斷地維護(hù)軟件的相關(guān)代碼。
在敏捷開發(fā)的過程中,為了加快軟件的開發(fā)進(jìn)程,團(tuán)隊(duì)成員通常會選擇較小功能或功能組,集中精力進(jìn)行2到4周的sprints(譯者注:單次迭代的開發(fā)內(nèi)容)。因此,就基礎(chǔ)層面而言,敏捷和瀑布開發(fā)有著相似之處。
然而,在ML的軟件開發(fā)模型中,開發(fā)人員只需要定義問題,并列出他們想要實(shí)現(xiàn)的目標(biāo)。后續(xù)的工作就只涉及到收集數(shù)據(jù),準(zhǔn)備數(shù)據(jù),將數(shù)據(jù)提供給學(xué)習(xí)算法,接下去便是部署、集成和管理模型。
結(jié)論
毫無疑問,AI的實(shí)施給軟件項(xiàng)目的敏捷開發(fā)帶來了巨大的“紅利”。通過自動化各種繁瑣的任務(wù),以及智能化各類算法模型,開發(fā)團(tuán)隊(duì)會擁有更可靠的預(yù)算編制,更高效的人員利用率,更快捷的錯誤檢測,更切實(shí)的代碼重構(gòu)建議,并能獲得更多項(xiàng)目收益。
原文標(biāo)題:9 Ways To Implement Artificial Intelligence and Agile-Powered Management in Software Development ,作者:Chandresh Patel
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】