降低實(shí)現(xiàn)科學(xué)計(jì)算算法的風(fēng)險(xiǎn)
算法開發(fā)工作流程
在傳統(tǒng)的手工編碼工作流程中,會(huì)用C代碼重寫原始科學(xué)計(jì)算算法和測(cè)試框架,并且必須對(duì)C代碼進(jìn)行測(cè)試和調(diào)試。在新的工作流程中,C代碼會(huì)從技術(shù)計(jì)算軟件中自動(dòng)生成,從而節(jié)約了時(shí)間并可防止編碼錯(cuò)誤(圖3)。
圖3.傳統(tǒng)的手工編碼工作流程(左)和新的自動(dòng)代碼生成工作流程(右)
在一個(gè)典型的情景中,自動(dòng)代碼生成工作流程可將開發(fā)和測(cè)試最終產(chǎn)品中實(shí)現(xiàn)的算法的總時(shí)間縮短近40%(圖4)。
圖4.各個(gè)流程階段花費(fèi)時(shí)間百分比
對(duì)于這個(gè)特定的項(xiàng)目,新的工作流程的開始是工程團(tuán)隊(duì)在科學(xué)計(jì)算軟件中快速探索新創(chuàng)意。在確定最佳方法后,他們使用同一款軟件來(lái)建立一個(gè)通用序列估算算法的原型。然后進(jìn)一步擴(kuò)展該算法,以用于MWD系統(tǒng)的地面PC上。在進(jìn)行到下一個(gè)階段之前,工程部門使用已納入同一軟件中的測(cè)試框架內(nèi)的多種測(cè)試案例來(lái)測(cè)試算法,以驗(yàn)證它是否符合要求和規(guī)范。
通過(guò)自動(dòng)代碼生成來(lái)實(shí)現(xiàn)
傳統(tǒng)手工編碼流程的許多缺點(diǎn)迫使工程團(tuán)隊(duì)去尋找一種替代流程來(lái)開發(fā)序列預(yù)測(cè)算法。首先,手工編碼非常耗時(shí),并且在緊張的截止日期臨近時(shí),為了留出時(shí)間給重要而又耗時(shí)的集成測(cè)試,團(tuán)隊(duì)需要將開發(fā)時(shí)間縮短大約30%。其次,程序員可能會(huì)在原始科學(xué)計(jì)算算法細(xì)節(jié)上出現(xiàn)解讀錯(cuò)誤,從而將缺陷引入手寫的C代碼,造成需要額外的時(shí)間來(lái)進(jìn)行調(diào)試和修復(fù)。
在新的工作流程中,通過(guò)自動(dòng)代碼生成可以消除這些缺點(diǎn)。在科學(xué)計(jì)算軟件中,工程師們的工作側(cè)重于在較高層次上開發(fā)和微調(diào)算法,不用過(guò)多地困在較低層次的實(shí)現(xiàn)細(xì)節(jié)上。然后,該團(tuán)隊(duì)只需一鍵點(diǎn)擊就可以從原始設(shè)計(jì)自動(dòng)生成C代碼。由于該流程是自動(dòng)執(zhí)行的,因此在將算法轉(zhuǎn)換為C代碼時(shí)不會(huì)出現(xiàn)解析錯(cuò)誤的情況。為了生成代碼,需要花些時(shí)間來(lái)微調(diào)原始科學(xué)計(jì)算算法,但這屬于一次性任務(wù),如果在開發(fā)設(shè)計(jì)的開始階段就考慮到代碼生成,則可以進(jìn)一步簡(jiǎn)化這項(xiàng)任務(wù)。
維護(hù)和測(cè)試算法
在傳統(tǒng)的工作流程中,在開發(fā)后期對(duì)需求進(jìn)行更改會(huì)影響原始設(shè)計(jì)及其實(shí)現(xiàn)。對(duì)算法的更新必須反映在C代碼中,使用兩種語(yǔ)言和環(huán)境維護(hù)并測(cè)試同一個(gè)算法及測(cè)試框架的成本會(huì)迅速成為阻礙因素。在開發(fā)周期的后期發(fā)現(xiàn)缺陷時(shí),開發(fā)人員需要更新該算法的原始科學(xué)計(jì)算代碼和C代碼版本兩者,還需要?jiǎng)?chuàng)建兩套測(cè)試方案來(lái)驗(yàn)證缺陷是否已經(jīng)解決。當(dāng)然,還存在兩個(gè)代碼庫(kù)產(chǎn)生差異的風(fēng)險(xiǎn)。時(shí)間限制經(jīng)常會(huì)促使團(tuán)隊(duì)僅更新C代碼。出現(xiàn)這種情況時(shí),團(tuán)隊(duì)會(huì)再次受困于用C代碼手工編碼的所有缺陷,直到兩個(gè)代碼庫(kù)一致。
使用自動(dòng)代碼生成,工程團(tuán)隊(duì)則可避免這些潛在的錯(cuò)誤。當(dāng)需求發(fā)生變化時(shí),工程師只需要更新原始科學(xué)計(jì)算代碼,然后重新生成C代碼,將新變化反映到實(shí)現(xiàn)中。具體來(lái)說(shuō),團(tuán)隊(duì)無(wú)需對(duì)生成的C代碼進(jìn)行任何更改,因?yàn)樵谥匦律纱a時(shí)這些更改會(huì)被覆蓋。此外,工程團(tuán)隊(duì)也不再需要開發(fā)第二個(gè)測(cè)試框架,因此節(jié)約了額外的時(shí)間。用于測(cè)試科學(xué)計(jì)算代碼的原始測(cè)試框架可以重用來(lái)測(cè)試C代碼。
將算法集成到地面系統(tǒng)
C代碼單元測(cè)試一結(jié)束,團(tuán)隊(duì)便將C代碼編譯到一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL)。然后,將DLL集成到地面解碼軟件。最后,小組在公司的基于C代碼的測(cè)試基礎(chǔ)架構(gòu)中執(zhí)行整個(gè)地面解碼算法的系統(tǒng)測(cè)試。
在測(cè)試期間如果發(fā)現(xiàn)缺陷,小組發(fā)現(xiàn)很容易查明錯(cuò)誤的源頭。由于工程師將序列預(yù)測(cè)算法隔離到一個(gè)DLL中,因此很容易確定缺陷是集成問(wèn)題的結(jié)果還是算法本身所導(dǎo)致。此外,C代碼會(huì)映射回原始科學(xué)計(jì)算代碼,并為您提供了在C代碼中嵌入技術(shù)計(jì)算代碼作為備注的選項(xiàng),進(jìn)一步加強(qiáng)了原始科學(xué)計(jì)算算法與最終實(shí)現(xiàn)之間的可追溯性。
結(jié)果
● 缺陷數(shù)量減少:該項(xiàng)目計(jì)劃分配了三周時(shí)間來(lái)修復(fù)十個(gè)缺陷,而在生成的C代碼中僅找到四個(gè)缺陷。因此,團(tuán)隊(duì)能夠?qū)⒍喑龅臅r(shí)間分配給項(xiàng)目的其他環(huán)節(jié),例如整個(gè)地面系統(tǒng)的系統(tǒng)測(cè)試。
● 修復(fù)缺陷所需的時(shí)間縮短:由于整個(gè)功能測(cè)試框架在科學(xué)計(jì)算軟件中可用,因此與傳統(tǒng)的手工編碼相比,團(tuán)隊(duì)能夠更快地找到缺陷并予以解決??茖W(xué)計(jì)算軟件中提供的分析和調(diào)試工具加速了此流程。這些工具中有許多也用于測(cè)試和調(diào)試C代碼。
● 代碼和流程可以在未來(lái)的項(xiàng)目中重用:序列預(yù)測(cè)算法可以在未來(lái)的項(xiàng)目中重用。該算法可以以現(xiàn)有的形式隨時(shí)現(xiàn)用,也可以在通過(guò)代碼生成采用C代碼重新實(shí)現(xiàn)之前,在科學(xué)計(jì)算軟件中進(jìn)行快速更新以用于其他應(yīng)用情形。
結(jié)論
通過(guò)使用自動(dòng)代碼生成,工程師成功采用了一種新的工作流程。這種流程可以避免耗時(shí)且容易出問(wèn)題的手工編碼。地面解碼軟件(包括序列預(yù)測(cè)算法)接近最終版。在項(xiàng)目上實(shí)現(xiàn)的時(shí)間和成本節(jié)約使公司可以探索更多的機(jī)會(huì),將自動(dòng)代碼生成工作流程應(yīng)用到廣泛的未來(lái)項(xiàng)目中。
評(píng)論