如何創(chuàng)建出沒有缺陷代碼的區(qū)塊鏈應(yīng)用程序
雖然所有開發(fā)人員都在努力尋找無漏洞代碼,但在區(qū)塊鏈部署中,在交換敏感數(shù)據(jù)或其他機(jī)密信息(如醫(yī)療保健或金融領(lǐng)域)時(shí),這一點(diǎn)尤其重要。然而,一些企業(yè)以慘痛的代價(jià)吸取了這一教訓(xùn)。最近,加密貨幣交易所Binance最近披露了一個(gè)毀滅性的安全漏洞,造成了超過4000萬美元的損失。雖然這是個(gè)大數(shù)目,但對(duì)于那些丟失私人信息、機(jī)密合同等的公司來說,安全漏洞的代價(jià)可能更大。
組織不應(yīng)該把時(shí)間花在重建(和重新獲得客戶信任)上。更好的方法是公司領(lǐng)導(dǎo)層從一開始就強(qiáng)制實(shí)行區(qū)塊鏈測試自動(dòng)化策略。
雖然大多數(shù)軟件測試人員都熟悉測試網(wǎng)絡(luò)應(yīng)用程序,但他們可能不確定如何處理區(qū)塊鏈測試。好消息是,web測試的一些相同的焦點(diǎn)領(lǐng)域也適用于區(qū)塊鏈測試(功能、性能和安全性)。然而,區(qū)塊鏈涉及更多的測試、工作和焦點(diǎn)領(lǐng)域,例如基礎(chǔ)結(jié)構(gòu)編排、在分布式環(huán)境中執(zhí)行和模擬場景,這需要更高水平的專業(yè)知識(shí)。
因?yàn)橛辛诉@些添加,在區(qū)塊鏈應(yīng)用中修復(fù)漏洞需要幾個(gè)額外的步驟,因此比修復(fù)其他應(yīng)用程序中的漏洞花費(fèi)更多的時(shí)間和成本。例如,要復(fù)制錯(cuò)誤或驗(yàn)證代碼,開發(fā)人員應(yīng)該多次執(zhí)行以下步驟:
形成一個(gè)新的端點(diǎn)。
將新代碼部署到新端點(diǎn)。
將當(dāng)前數(shù)據(jù)遷移到新的后端。
將舊的后端掛起。
將所有前端更新到當(dāng)前版本。
之后,驗(yàn)證由測試人員或持續(xù)集成(CI)工具執(zhí)行的漏洞修復(fù)將再次需要這些步驟。這種復(fù)雜性使得發(fā)布無漏洞的區(qū)塊鏈應(yīng)用程序很困難,但這樣做會(huì)使組織及其客戶面臨財(cái)務(wù)損失的風(fēng)險(xiǎn)。由于部署區(qū)塊鏈應(yīng)用程序的高風(fēng)險(xiǎn)性,將測試包含在管理遠(yuǎn)景和策略中至關(guān)重要。
要發(fā)布沒有缺陷代碼的區(qū)塊鏈應(yīng)用程序,企業(yè)應(yīng)該遵循以下準(zhǔn)則:
測試自動(dòng)化可以減輕測試人員手工執(zhí)行數(shù)千個(gè)編排測試的負(fù)擔(dān),這既困難又低效。一個(gè)好的系統(tǒng)架構(gòu)應(yīng)該是可伸縮的、可維護(hù)的和可測試的,這樣團(tuán)隊(duì)就可以獨(dú)立地測試組件和模擬組件。如果一個(gè)測試需要一個(gè)不同的環(huán)境或基礎(chǔ)設(shè)施,那么作為代碼的基礎(chǔ)設(shè)施(IaC,如Puppet、Chef、Ansible和AWS)在設(shè)置適當(dāng)?shù)臏y試環(huán)境時(shí)非常有用。該策略的另一個(gè)關(guān)鍵部分是為基礎(chǔ)設(shè)施提供聲明性定義,并允許開發(fā)人員實(shí)現(xiàn)支持測試自動(dòng)化的代碼。
運(yùn)行單元和集成測試以覆蓋后端和前端代碼
區(qū)塊鏈應(yīng)用程序至少包含一個(gè)后端(一組在區(qū)塊鏈上運(yùn)行的智能契約或鏈碼)和一個(gè)前端(用戶可以在前端與存儲(chǔ)在區(qū)塊鏈中的數(shù)據(jù)交互)。執(zhí)行單元測試將涵蓋后端和前端代碼,并且,由于其對(duì)區(qū)塊鏈應(yīng)用程序的關(guān)鍵作用,其主要焦點(diǎn)應(yīng)該是鏈碼。但是,集成測試應(yīng)該涵蓋各種類型的oracle和前端應(yīng)用程序。通過驗(yàn)證UI和鏈碼之間的集成,執(zhí)行額外的測試將消除任何可能威脅后端的漏洞。
在本地基礎(chǔ)架構(gòu)中執(zhí)行測試
雖然公共區(qū)塊鏈(如比特幣或以太坊)有多個(gè)測試網(wǎng),但最好是在本地基礎(chǔ)設(shè)施中執(zhí)行測試。對(duì)于單元測試和集成測試來說,本地基礎(chǔ)設(shè)施是輕量級(jí)的、更快的和更穩(wěn)定的。例如,在一個(gè)Ganache本地基礎(chǔ)架構(gòu)中,可以在5個(gè)以太坊智能契約上運(yùn)行1000多個(gè)單元測試,一個(gè)小時(shí)內(nèi)部署大約3000個(gè)。
持續(xù)更新安全系統(tǒng)測試套件
區(qū)塊鏈?zhǔn)且粋€(gè)多方基礎(chǔ)設(shè)施,在某些情況下,它是一個(gè)公共網(wǎng)絡(luò)。因此,這些應(yīng)用程序?qū)τ谠S多利益相關(guān)者來說都是可見的,甚至可以向全世界開放源代碼。這種程度的透明度意味著黑客能夠研究程序,并根據(jù)特定的系統(tǒng)來計(jì)劃攻擊。持續(xù)更新安全系統(tǒng)測試套件將確保應(yīng)用程序受到保護(hù),免受所有常見安全漏洞的影響。
為開發(fā)過程的每個(gè)階段最小化連續(xù)測試管道
在本地基礎(chǔ)結(jié)構(gòu)中的分層集成和單元測試通過對(duì)安全系統(tǒng)測試套件的持續(xù)更新創(chuàng)建一個(gè)連續(xù)的測試管道,這對(duì)于高質(zhì)量的塊鏈代碼來說是必不可少的。在本地塊鏈和測試網(wǎng)等多種環(huán)境中持續(xù)驗(yàn)證代碼更改,確保將高質(zhì)量的代碼交付給生產(chǎn)區(qū)塊鏈。但是,這些測試可以為每個(gè)代碼更改持續(xù)幾個(gè)小時(shí)或幾天,因此對(duì)于團(tuán)隊(duì)來說,最大限度地減少和創(chuàng)建精益管道非常重要,這些管道關(guān)注測試階段、測試類型和測試環(huán)境,并在開發(fā)過程的每個(gè)階段開發(fā)多個(gè)代碼管道。
構(gòu)建定制的測試套件以消除潛在的欺騙漏洞
測試團(tuán)隊(duì)還需要定制管道中的測試套件,以涵蓋功能測試和安全性測試。涵蓋安全性案例是很重要的,但是單元測試模塊也應(yīng)該執(zhí)行智能契約單元的潛在安全威脅,例如溢出和重入,以盡可能多地消除潛在的欺騙漏洞。
由于底層基礎(chǔ)結(jié)構(gòu)的去中心化和編排的特性,為區(qū)塊鏈應(yīng)用程序開發(fā)無缺陷代碼比其他應(yīng)用程序帶來了更多的挑戰(zhàn)。通過從傳統(tǒng)軟件測試,特別是測試自動(dòng)化中汲取最佳實(shí)踐,并將它們定制為區(qū)塊鏈開發(fā),企業(yè)可以實(shí)現(xiàn)無錯(cuò)誤的區(qū)塊鏈編碼,并保護(hù)他們最脆弱的應(yīng)用程序。