葛 興,李云飛,何小虎,陰國(guó)富
(渭南師范學(xué)院 計(jì)算機(jī)學(xué)院,陜西 渭南 714099)
安卓操作系統(tǒng)最初由Andy Rubin開(kāi)發(fā),2005年8月由Google收購(gòu)注資。2007年11月,Google以Apache開(kāi)源許可證的授權(quán)方式,發(fā)布了安卓操作系統(tǒng)的源代碼。第一部安卓智能手機(jī)T-Mobile G1發(fā)布于2008年10月。2021年6月,安卓12 Beta版正式發(fā)布。經(jīng)過(guò)10余年的發(fā)展,目前安卓操作系統(tǒng)已經(jīng)在移動(dòng)平臺(tái)得到了廣泛應(yīng)用,2019年市場(chǎng)占有率已經(jīng)達(dá)到87%。
隨著安卓應(yīng)用軟件(APP,Application)的規(guī)模愈加擴(kuò)大,邏輯愈加復(fù)雜,其可靠性也愈加難以保證。市場(chǎng)上的安卓應(yīng)用軟件多有可靠性低、安全性低、程序優(yōu)化差、程序越權(quán)等缺點(diǎn)。在市場(chǎng)快速擴(kuò)張的時(shí)代,客戶對(duì)軟件可靠性的需求不明確,開(kāi)發(fā)者在可靠性方面投入不足,往往只注重開(kāi)發(fā)速度、交付速度、程序正確性和用戶界面(UI,User Interface)的友好性等,忽略了安卓應(yīng)用軟件的可靠性。開(kāi)發(fā)者大量使用開(kāi)源代碼和公用模塊,缺陷率普遍偏高,可被利用的已知和未知缺陷較多,軟件運(yùn)行不穩(wěn)定,使用壽命短,安全性差,占用資源多,難以升級(jí)和更新?lián)Q代。有調(diào)查顯示,普通軟件公司開(kāi)發(fā)的軟件缺陷(bug)密度為4~40個(gè)缺陷/千行代碼,高水平軟件公司開(kāi)發(fā)的軟件缺陷密度為2~4個(gè)缺陷/千行代碼,美國(guó)NASA開(kāi)發(fā)的軟件缺陷密度為0.1個(gè)缺陷/千行代碼。[1]安卓軟件作為直接提供用戶服務(wù),與用戶交互最多的環(huán)節(jié),其可靠性對(duì)用戶體驗(yàn)的影響非常大,甚至?xí)哂诎沧肯到y(tǒng)對(duì)用戶造成的影響。不過(guò),安卓軟件正在逐漸從初期的“野蠻生長(zhǎng)”慢慢走向規(guī)范化、模塊化、正規(guī)化。由于各個(gè)應(yīng)用軟件之間競(jìng)爭(zhēng)激烈,在各方均實(shí)現(xiàn)了基本功能后,哪家公司的產(chǎn)品能在可靠性、安全性上展現(xiàn)出優(yōu)勢(shì),其產(chǎn)品就會(huì)在市場(chǎng)競(jìng)爭(zhēng)中獲得消費(fèi)者的青睞。政府、軍隊(duì)、大學(xué)、國(guó)防科研部門的對(duì)外采購(gòu)尤其重視可靠性和安全性。國(guó)家的監(jiān)管也日趨嚴(yán)格和規(guī)范,要求企業(yè)開(kāi)展數(shù)據(jù)活動(dòng)必須履行數(shù)據(jù)安全保護(hù)義務(wù)、承擔(dān)社會(huì)責(zé)任。因此,安卓可靠性是今后安卓軟件開(kāi)發(fā)技術(shù)的一個(gè)重要研究方向,為了提高安卓可靠性,需要從技術(shù)和管理的角度共同制定解決方案。
現(xiàn)階段安卓軟件高可靠性設(shè)計(jì)處于一個(gè)快速發(fā)展的階段。有很多高可靠性設(shè)計(jì)的“點(diǎn)”,例如采用某個(gè)函數(shù)、某個(gè)技術(shù)可以避免某種缺陷;也有一些高可靠性設(shè)計(jì)的“線”,例如在需求分析中考慮到高可靠性需求,但整個(gè)高可靠性設(shè)計(jì)并沒(méi)有一個(gè)從頭到尾、從需求分析到運(yùn)行維護(hù)、從技術(shù)到管理皆包含的“面”。本文的目標(biāo)是,分析研究高可靠性設(shè)計(jì)一個(gè)個(gè)孤立的技術(shù)點(diǎn),歸納總結(jié)高可靠性設(shè)計(jì)的多種技術(shù)路線,最終提出完整的高可靠性軟件開(kāi)發(fā)模型,形成一個(gè)“面”。這是一個(gè)技術(shù)和管理相融合的軟件工程模型,真正將高可靠性設(shè)計(jì)融入安卓軟件開(kāi)發(fā)中的每一步與每一個(gè)細(xì)節(jié),注重軟件可靠性設(shè)計(jì),強(qiáng)調(diào)量化風(fēng)險(xiǎn)控制,更加科學(xué)、專業(yè)和規(guī)范。
LYVAS等[2]討論了安卓劫持攻擊,該類攻擊會(huì)對(duì)用戶的數(shù)據(jù)機(jī)密性產(chǎn)生很大威脅,提出了一種操作系統(tǒng)級(jí)防御機(jī)制,該機(jī)制會(huì)監(jiān)控安卓應(yīng)用程序活動(dòng)時(shí)訪問(wèn)的資源,并在其內(nèi)置數(shù)字簽名,以對(duì)用戶和開(kāi)發(fā)人員透明。MERL等[3]討論了安卓應(yīng)用程序重新打包的問(wèn)題。通過(guò)重新打包,攻擊者可以誘使移動(dòng)用戶安裝重新打包的(可能是惡意的)應(yīng)用程序,用以替換原始應(yīng)用程序。HAMDI等[4]研究了移動(dòng)應(yīng)用程序開(kāi)發(fā)中重構(gòu)對(duì)代碼異味(code smell)的影響,通過(guò)分析5個(gè)開(kāi)源 Android 應(yīng)用程序的652個(gè)版本和9 600次重構(gòu)操作,發(fā)現(xiàn)一般的重構(gòu)并不能有效地消除代碼異味。WANG等[5]使用機(jī)器學(xué)習(xí)算法檢測(cè)安卓惡意軟件,使用了一個(gè)多維、基于內(nèi)核特征的框架和基于特征權(quán)重的檢測(cè)方法,旨在對(duì)安卓惡意軟件和良性應(yīng)用程序的特征進(jìn)行分類和理解。GARG等[6]提出了一個(gè)全面而合理的分類法來(lái)回顧安卓安全中使用的最先進(jìn)方法。強(qiáng)調(diào)了不同分析方法的趨勢(shì)和模式,確定了目標(biāo)、分析方法的關(guān)鍵技術(shù)、代碼表示、使用工具和框架,并展望了未來(lái)工作的研究領(lǐng)域。GAVIRIA DE LA PUERTA等[7]創(chuàng)建了一種方法來(lái)分析任何類型的移動(dòng)應(yīng)用程序發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包,以驗(yàn)證其行為。為了解決這個(gè)問(wèn)題,使用監(jiān)督學(xué)習(xí)系統(tǒng)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的通信模式進(jìn)行建模。DA COSTA等[8]探索使用靜態(tài)分析和動(dòng)態(tài)分析來(lái)提高挖掘沙箱法(mine sandboxes)識(shí)別安卓惡意軟件的性能。FRANKE等[9]提出了一種移動(dòng)軟件質(zhì)量模型(Mobile Software Quality Model),該模型主要從軟件的兼容性(Flexibility)、可擴(kuò)展性(Extensibility)、適應(yīng)性(Adaptability)、便攜性(Portability)、可用性(Usability)和運(yùn)行效率(Efficiency)來(lái)考察移動(dòng)軟件的質(zhì)量。LI等[10]基于軟件功能模塊重用可靠性分析,提出了一種新的軟件可靠性早期預(yù)測(cè)方法。該方法將不同模塊的重用分為不同的權(quán)重,并基于權(quán)重進(jìn)行加權(quán)分析。SUN等[11]使用復(fù)雜網(wǎng)絡(luò)理論(complex network theory)研究了安卓操作系統(tǒng)內(nèi)核與功能組件之間的交互關(guān)系,通過(guò)將操作系統(tǒng)建模為復(fù)雜網(wǎng)絡(luò)來(lái)研究安卓操作系統(tǒng)內(nèi)核的交互問(wèn)題。STAVROU[12]闡述了安卓編程技術(shù)以及如何高效安全地實(shí)現(xiàn)安卓編程。RUBINOV等[13]討論了安卓應(yīng)用程序測(cè)試中動(dòng)態(tài)實(shí)例組件仍然被現(xiàn)有技術(shù)所忽視。何鳳軍等[14]將軟件可靠性設(shè)計(jì)分為軟件體系架構(gòu)設(shè)計(jì)、冗余設(shè)計(jì)、健壯性設(shè)計(jì)、容錯(cuò)設(shè)計(jì)、避錯(cuò)設(shè)計(jì)、錯(cuò)誤恢復(fù)設(shè)計(jì)及重用設(shè)計(jì)等。馬振宇等[15]圍繞測(cè)試運(yùn)行方式以及驗(yàn)證指標(biāo)類型對(duì)軟件可靠性驗(yàn)證測(cè)試方法的基本原理進(jìn)行分析,歸納總結(jié)出各驗(yàn)證測(cè)試方法的適用特點(diǎn)。王金勇等[16]對(duì)開(kāi)源軟件可靠性模型參數(shù)估計(jì)、可靠性和評(píng)測(cè)標(biāo)準(zhǔn)進(jìn)行了論述。張威[17]分析了軟件可靠性評(píng)估的現(xiàn)狀和問(wèn)題,并介紹了極值統(tǒng)計(jì)模型、基于BootStrap重抽樣技術(shù)的軟件可靠性模型和基于故障注入技術(shù)和加速壽命試驗(yàn)原理的軟件可靠性評(píng)估模型。劉洋等[18]提出了以系統(tǒng)危險(xiǎn)為基礎(chǔ)的軟件安全性與可靠性分析策略,并結(jié)合實(shí)例對(duì)這一策略的實(shí)際應(yīng)用進(jìn)行了深入探討。閆永權(quán)等[19]梳理了軟件老化問(wèn)題并進(jìn)行了軟件抗衰研究。
在軟件安全設(shè)計(jì)領(lǐng)域,主要采用4種模型進(jìn)行軟件安全設(shè)計(jì),第一種是微軟的軟件安全開(kāi)發(fā)生命周期模型(Security Development Lifecycle,SDL)[20],第二種是MCGRAW GRAY提出的軟件內(nèi)建安全開(kāi)發(fā)模型[21],第三種是NIST的軟件內(nèi)建安全開(kāi)發(fā)模型[22],第四種是OWASP的軟件安全開(kāi)發(fā)模型[23]。
長(zhǎng)期以來(lái),軟件可靠性(Software Reliability)作為衡量軟件的重要特性受到特別重視。GB/T 11457—2006《信息技術(shù) 軟件工程術(shù)語(yǔ)》將軟件可靠性定義為:(1)在規(guī)定條件下,在規(guī)定的時(shí)間內(nèi)軟件不引起系統(tǒng)失效的概率。該概率是系統(tǒng)輸入和系統(tǒng)使用的函數(shù),也是軟件中存在缺陷的函數(shù)。系統(tǒng)輸入將確定是否會(huì)遇到已存在的缺陷(如果缺陷存在的話)。(2)在規(guī)定的時(shí)間周期內(nèi)所述條件下程序執(zhí)行所要求的功能的能力。[24]
軟件可靠性最重要的度量指標(biāo)有3個(gè),分別為軟件可靠度、軟件失效強(qiáng)度和軟件平均失效時(shí)間。[17]
(1)軟件可靠度。軟件可靠度是指,軟件在特定條件下,在時(shí)間t內(nèi)不間斷完成某設(shè)定功能的概率。用變量t表示發(fā)生失效的時(shí)刻,f(t)為失效概率密度函數(shù),F(xiàn)(t)為分布函數(shù),R(t)為可靠度函數(shù),P(0≤t≤T)表示從開(kāi)始時(shí)刻到T時(shí)刻軟件發(fā)生失效的概率,則有
(1)
(2)
(2)軟件失效強(qiáng)度。軟件失效強(qiáng)度是指,已工作到時(shí)刻t但尚未失效的軟件,在時(shí)刻t后發(fā)生失效的概率,記作λ(t)。失效強(qiáng)度函數(shù)與失效概率密度函數(shù)、可靠度函數(shù)之間的關(guān)系為
(3)
(3)軟件平均失效時(shí)間(Mean Time to Failure,MTTF)。設(shè)N0個(gè)不可恢復(fù)的系統(tǒng)在同樣的條件下進(jìn)行試驗(yàn),測(cè)得其全部失效時(shí)間為t1,t2,…,tN0,其MTTF為
(4)
當(dāng)N0趨向于無(wú)窮時(shí),MTTF為系統(tǒng)失效時(shí)間的數(shù)學(xué)期望,則有
(5)
安卓軟件存在風(fēng)險(xiǎn)有其必然性,首先,計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)決定了軟件漏洞是不可避免的。其次,軟件趨向大型化,第三方擴(kuò)展增多,軟件使用面臨更多威脅。再次,新技術(shù)、新應(yīng)用產(chǎn)生之初缺乏可靠性、安全性考慮。最后,現(xiàn)階段對(duì)開(kāi)發(fā)者軟件可靠性重視不夠,軟件開(kāi)發(fā)者不具備實(shí)現(xiàn)可靠性的知識(shí)和能力。
安卓軟件可靠性設(shè)計(jì)的一般原則可分為業(yè)務(wù)功能的可靠性設(shè)計(jì)、數(shù)據(jù)源的可靠性設(shè)計(jì)和占用資源的可靠性設(shè)計(jì)。業(yè)務(wù)功能的可靠性設(shè)計(jì)包括:合理分配執(zhí)行任務(wù);設(shè)計(jì)任務(wù)同步與并發(fā);任務(wù)負(fù)載的均衡,多個(gè)業(yè)務(wù)執(zhí)行流有序執(zhí)行;生命周期的閉合;良好的用戶交互和提示。數(shù)據(jù)源的可靠性設(shè)計(jì)包括:核心的數(shù)據(jù)和文件應(yīng)有備份和容錯(cuò)設(shè)計(jì);外部輸入數(shù)據(jù)的合法性判斷;向外發(fā)起的服務(wù)請(qǐng)求,要有超時(shí)和有限重試設(shè)計(jì);對(duì)外部發(fā)起的攻擊性請(qǐng)求,例如通知、廣播,要有防護(hù)設(shè)計(jì)。占用資源的可靠性設(shè)計(jì)包括:分配的資源必須在確定的地方釋放;使用資源必須有明確的上界,包括內(nèi)存、磁盤(pán)、文件、線程等。
在整個(gè)安卓軟件開(kāi)發(fā)流程中,漏洞是會(huì)積累和傳遞的,軟件運(yùn)維過(guò)程中出現(xiàn)的一些“先天性問(wèn)題”就是這種漏洞積累和傳遞的體現(xiàn),所以在設(shè)計(jì)之初就要盡量把漏洞消除在前期階段。軟件產(chǎn)生漏洞的方式可以歸納為兩種:一是程序代碼引入漏洞,二是開(kāi)發(fā)過(guò)程引入漏洞。程序代碼具有長(zhǎng)度、算法和語(yǔ)句結(jié)構(gòu)等特性,程序的代碼越長(zhǎng),數(shù)據(jù)結(jié)構(gòu)越復(fù)雜,函數(shù)越多,可靠性越難保證。
微軟推出的安全開(kāi)發(fā)生命周期(SDL)是一套針對(duì)軟件開(kāi)發(fā)過(guò)程進(jìn)行安全保障的方案,旨在盡量減少設(shè)計(jì)、代碼和文檔中安全相關(guān)漏洞的數(shù)量。微軟的實(shí)踐證明,從需求分析階段就開(kāi)始考慮安全問(wèn)題,可以大大減少軟件產(chǎn)品漏洞的數(shù)量,雖然會(huì)在一定程度上增加成本,但整體上能夠提高它的性價(jià)比。[25]
安卓軟件工程受限于嚴(yán)格的成本控制和有限的開(kāi)發(fā)時(shí)間,往往需要在可用性、經(jīng)濟(jì)性、時(shí)效性、可靠性等性能之間做出一定的取舍,而可靠性經(jīng)常是被犧牲的,主要有以下兩個(gè)方面的原因:(1)安卓軟件編程人員沒(méi)有經(jīng)過(guò)專門的可靠性開(kāi)發(fā)培訓(xùn),缺乏可靠性編程意識(shí)和能力。(2)在現(xiàn)有的安卓軟件產(chǎn)品開(kāi)發(fā)中,通常在開(kāi)發(fā)流程后期才進(jìn)行測(cè)試,以消除編碼中的錯(cuò)誤或缺陷。這種方式對(duì)于減少軟件產(chǎn)品中的漏洞數(shù)量有一定的作用,但對(duì)于用戶需求、系統(tǒng)架構(gòu)上存在的缺陷和錯(cuò)誤是無(wú)能為力的,而這些前期需求和設(shè)計(jì)階段的缺陷往往會(huì)大幅度增加軟件發(fā)布后的維護(hù)成本,給開(kāi)發(fā)商和用戶都帶來(lái)巨大風(fēng)險(xiǎn)。
因此,為了提高安卓軟件的可靠性,應(yīng)將安卓可靠性的思想融入安卓軟件瀑布開(kāi)發(fā)法中的每一步中,即為了開(kāi)發(fā)高可靠的安卓軟件,把可靠性加固活動(dòng)融入安卓軟件生命周期的各個(gè)階段中去。
軟件瀑布開(kāi)發(fā)法是最典型的軟件開(kāi)發(fā)方法,也稱為線性模型,結(jié)合瀑布開(kāi)發(fā)法和SDL開(kāi)發(fā)流程,再融入高可靠性開(kāi)發(fā)的思維,最終形成了本文的安卓軟件高可靠性開(kāi)發(fā)模型。共分為7個(gè)階段,每個(gè)階段都有其對(duì)應(yīng)的高可靠性活動(dòng),如圖1所示。
圖1 基于SDL的安卓軟件高可靠性開(kāi)發(fā)模型
在安卓軟件開(kāi)發(fā)的初始階段,應(yīng)針對(duì)團(tuán)隊(duì)成員進(jìn)行高可靠性意識(shí)和能力培訓(xùn),使之了解基礎(chǔ)知識(shí)和最新趨勢(shì),提升團(tuán)隊(duì)能力,保障軟件開(kāi)發(fā),讓管理者、設(shè)計(jì)者、開(kāi)發(fā)者、測(cè)試者、運(yùn)維者從始至終將“高可靠”貫穿在整個(gè)開(kāi)發(fā)周期之中,所有人都有較強(qiáng)的可靠性觀念?;九嘤?xùn)應(yīng)涵蓋的基礎(chǔ)內(nèi)容包括:(1)高可靠性設(shè)計(jì)培訓(xùn)。其主題為減少攻擊面、縱深防御、最小權(quán)限原則和默認(rèn)安全配置。(2)威脅建模培訓(xùn)。其主題為威脅建模概述、威脅建模的設(shè)計(jì)意義和基于威脅建模的編碼約束。(3)高可靠性編碼培訓(xùn)。其主題為緩沖區(qū)溢出、整數(shù)溢出、SQL注入等漏洞。(4)弱加密安全測(cè)試培訓(xùn)。其主題為高可靠性測(cè)試與功能測(cè)試的區(qū)別、風(fēng)險(xiǎn)評(píng)估和測(cè)試方法。(5)隱私保護(hù)培訓(xùn)。其主題為隱私敏感數(shù)據(jù)的類型、隱私設(shè)計(jì)最佳實(shí)踐、風(fēng)險(xiǎn)評(píng)估、隱私開(kāi)發(fā)最佳實(shí)踐和隱私測(cè)試最佳實(shí)踐。(6)高級(jí)概念培訓(xùn)。其主題為高級(jí)安全設(shè)計(jì)和體系結(jié)構(gòu)、可信用戶界面設(shè)計(jì)、安全漏洞細(xì)節(jié)以及威脅緩解。
除了對(duì)開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行培訓(xùn)以外,還要對(duì)管理進(jìn)行改進(jìn)。管理者應(yīng)當(dāng)認(rèn)識(shí)到,在未來(lái)的軟件市場(chǎng)競(jìng)爭(zhēng)中,對(duì)員工進(jìn)行高可靠性培訓(xùn),對(duì)軟件進(jìn)行高可靠性設(shè)計(jì),在前期雖然投入了更多成本,但最終會(huì)是“利大于弊”的。高可靠性并非僅僅錦上添花的附加賣點(diǎn),而是和業(yè)務(wù)功能密不可分的基礎(chǔ)要求。因此,管理者要提供足夠的時(shí)間和資源來(lái)保證高可靠性培訓(xùn)的貫徹落實(shí)。
在高可靠性需求分析階段,開(kāi)發(fā)團(tuán)隊(duì)確定安卓軟件的相關(guān)標(biāo)準(zhǔn)和要求,建立可靠、安全和隱私的最低采用標(biāo)準(zhǔn)。開(kāi)發(fā)團(tuán)隊(duì)通過(guò)判斷缺陷等級(jí)來(lái)設(shè)定可靠性的最低采用標(biāo)準(zhǔn)。在項(xiàng)目開(kāi)始時(shí)定義這些標(biāo)準(zhǔn)可加強(qiáng)對(duì)可靠性問(wèn)題相關(guān)風(fēng)險(xiǎn)的理解,并有助于團(tuán)隊(duì)在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)和修復(fù)可靠性缺陷。項(xiàng)目團(tuán)隊(duì)必須協(xié)商確定每個(gè)開(kāi)發(fā)階段的質(zhì)量門(例如,必須在嵌入代碼之前審查并修復(fù)所有的編譯器警告),隨后將質(zhì)量門交由可靠性顧問(wèn)審批,可靠性顧問(wèn)可以根據(jù)需要添加特定于項(xiàng)目的說(shuō)明及更加嚴(yán)格的可靠性要求。
軟件高可靠性分析的目的是描述為了實(shí)現(xiàn)信息安全目標(biāo),軟件系統(tǒng)應(yīng)該做什么才能有效地提高軟件產(chǎn)品的可靠性,減少軟件可靠性漏洞。一個(gè)缺少高可靠性需求分析的軟件開(kāi)發(fā)項(xiàng)目,將威脅到信息的保密性、完整性和可用性以及一些其他重要的安全屬性。
軟件的可靠性需求主要分為外部可靠性需求和內(nèi)部可靠性需求。外部可靠性需求通常是指法律、法規(guī)等遵從性要求,包括國(guó)家和地區(qū)相關(guān)技術(shù)與管理的法規(guī)、標(biāo)準(zhǔn)及要求等。這些法律法規(guī)往往是已有可靠性威脅的經(jīng)驗(yàn)性對(duì)策總結(jié),因而遵循這些要求既是法規(guī)制度上的要求,也是軟件可靠性保障的要求。內(nèi)部可靠性需求通常包括兩個(gè)方面:一是開(kāi)發(fā)團(tuán)隊(duì)內(nèi)部的政策、標(biāo)準(zhǔn)、指南和實(shí)踐模式,二是與軟件業(yè)務(wù)功能相關(guān)的可靠性需求。
軟件業(yè)務(wù)功能相關(guān)的可靠性需求獲取的相關(guān)方包括業(yè)務(wù)負(fù)責(zé)人、最終用戶、客戶、可靠性需求分析人員和安全技術(shù)支持等。業(yè)務(wù)負(fù)責(zé)人、最終用戶和客戶在安全需求確定時(shí)應(yīng)發(fā)揮重要作用,應(yīng)當(dāng)積極參與安全需求的采集和分析過(guò)程。業(yè)務(wù)負(fù)責(zé)人是業(yè)務(wù)風(fēng)險(xiǎn)的最終責(zé)任人,負(fù)責(zé)確定可接受的風(fēng)險(xiǎn)閾值,明確哪些風(fēng)險(xiǎn)是可以接受的,因此他們應(yīng)當(dāng)了解軟件的可靠性漏洞,協(xié)助可靠性需求分析人員和軟件開(kāi)發(fā)團(tuán)隊(duì)考慮風(fēng)險(xiǎn)的優(yōu)先順序,權(quán)衡決定哪些風(fēng)險(xiǎn)是重要的。可靠性需求分析人員要負(fù)責(zé)軟件可靠性需求的收集和分析,并幫助軟件開(kāi)發(fā)團(tuán)隊(duì)將安全需求轉(zhuǎn)化為功能說(shuō)明。為了保證可靠性需求活動(dòng)的有效展開(kāi),相關(guān)方面人員必須進(jìn)行充分的溝通與合作,特別是在相關(guān)方是非技術(shù)人員的情況下。一些常見(jiàn)的可靠性需求獲取方法包括頭腦風(fēng)暴、問(wèn)卷調(diào)查和訪談、策略分解、數(shù)據(jù)分析、主/客體關(guān)系矩陣、使用用例和濫用用例建模,以及軟件可靠性需求跟蹤矩陣。
在高可靠性設(shè)計(jì)階段,從可靠性和安全性的角度定義軟件的總體結(jié)構(gòu)。通過(guò)分析攻擊面,設(shè)計(jì)相應(yīng)的功能和策略,降低并減少不必要的安全風(fēng)險(xiǎn),同時(shí)通過(guò)威脅建模,分析軟件或系統(tǒng)安全威脅,提出緩解措施。在進(jìn)行高可靠性設(shè)計(jì)時(shí),應(yīng)當(dāng)遵循8條設(shè)計(jì)原則,如圖2所示。
圖2 高可靠性設(shè)計(jì)的8條原則
軟件受攻擊面原則是指用戶、程序或潛在的攻擊者都能夠訪問(wèn)到的所有功能和代碼的總和,它是一個(gè)混合體,不僅包括代碼、接口和服務(wù),也包括對(duì)所有用戶提供服務(wù)的協(xié)議,尤其是那些未被驗(yàn)證的或遠(yuǎn)程用戶都可以訪問(wèn)到的協(xié)議。一個(gè)軟件的攻擊面越大,其可靠性風(fēng)險(xiǎn)就越大。減少軟件受攻擊面就是移除、禁止一切不需要使用的模塊、協(xié)議和服務(wù),其目的是減少攻擊者可以利用的漏洞。
最小權(quán)限原則是指系統(tǒng)僅授予主體(用戶、管理員、進(jìn)程等)完成規(guī)定任務(wù)所必需的最小權(quán)限,并且該權(quán)限的持續(xù)時(shí)間也剛好夠用。最小權(quán)限原則可使惡意的或過(guò)失的特權(quán)不正當(dāng)使用的可能性降到最低,從而確保系統(tǒng)安全。如果沒(méi)有很高的權(quán)限,那么很多程序是無(wú)法實(shí)現(xiàn)其破壞功能的。不僅要防止程序被攻擊,還要盡可能地防止程序被攻擊之后的后續(xù)破壞行為的實(shí)施,將損失盡可能降到最低。
縱深防御原則是指在軟件設(shè)計(jì)中加入層次化的安全控制和風(fēng)險(xiǎn)防御方案??v深防御原則有助于減少系統(tǒng)的單一失效點(diǎn)。它強(qiáng)調(diào)不依賴單一的高可靠性解決方案,而是采用多種互相保障的可靠性功能,即使一個(gè)點(diǎn)失效,也不會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰??v深防御原則還可以威懾試探性的攻擊者,當(dāng)他們遇到一層又一層的阻滯時(shí),可能會(huì)知難而退,放棄攻擊。
默認(rèn)高可靠配置原則是指為系統(tǒng)提供默認(rèn)的高可靠性措施,包括默認(rèn)權(quán)限、默認(rèn)策略等,盡可能讓用戶不需要額外配置就可以安全地使用。默認(rèn)高可靠配置原則也是保持系統(tǒng)簡(jiǎn)單化的重要方式。
保護(hù)最弱一環(huán)原則是指保護(hù)系統(tǒng)中最弱的組件。類似于“木桶原理”,攻擊者通常會(huì)嘗試攻擊系統(tǒng)中最薄弱的環(huán)節(jié),這些薄弱的環(huán)節(jié)可能是代碼、服務(wù)、接口,甚至是人,比如使用社會(huì)工程學(xué)技巧攻擊管理員。
可靠性性價(jià)比原則是指以合適的開(kāi)發(fā)成本生產(chǎn)具有較高可靠性的軟件產(chǎn)品??煽啃孕詢r(jià)比原則并不是要求壓縮在可靠性上的投入。因?yàn)楦呖煽啃栽O(shè)計(jì)并不是業(yè)務(wù)功能之外的華而不實(shí)的功能,而是業(yè)務(wù)功能之內(nèi)的系統(tǒng)基本保障。微軟SDL實(shí)踐也表明,軟件安全開(kāi)發(fā)方法并不會(huì)增加成本,相反因?yàn)闇p少了用戶的損失和后期的運(yùn)行維護(hù)費(fèi)用而降低了總成本。
可靠性心理可接受原則是指可靠性機(jī)制要設(shè)置得簡(jiǎn)單、易用,盡可能讓可靠性機(jī)制對(duì)用戶“透明”,不給用戶使用帶來(lái)不便和麻煩,用戶才會(huì)認(rèn)同和使用高可靠機(jī)制。
完全控制原則是指要求每一次訪問(wèn)受保護(hù)對(duì)象的行為都應(yīng)當(dāng)盡可能地進(jìn)行細(xì)粒度的檢查。
在高可靠性實(shí)施階段,按照設(shè)計(jì)要求,對(duì)軟件進(jìn)行編碼和集成,實(shí)現(xiàn)相應(yīng)的安全功能、策略及緩解措施。在該階段通過(guò)安全編碼和禁用不安全的API,可以減少編程時(shí)導(dǎo)致的安全問(wèn)題和由編碼引入的安全漏洞,并通過(guò)靜態(tài)代碼分析等措施來(lái)確保安全編碼規(guī)范的實(shí)施。具體措施有:(1)使用統(tǒng)一標(biāo)準(zhǔn)的開(kāi)發(fā)工具——所有開(kāi)發(fā)者只能使用統(tǒng)一標(biāo)準(zhǔn)的開(kāi)發(fā)工具及其關(guān)聯(lián)的安全檢查表,如編譯器、鏈接器的警告。此列表應(yīng)由團(tuán)隊(duì)的可靠性顧問(wèn)進(jìn)行批準(zhǔn)。一般情況下,開(kāi)發(fā)者應(yīng)盡量使用穩(wěn)定版本的開(kāi)發(fā)工具,使用開(kāi)發(fā)工具的安全分析功能和保護(hù)措施。(2)放棄使用不可靠的函數(shù)——一些編程中常用的函數(shù)與API(應(yīng)用編程接口)并不可靠。開(kāi)發(fā)者應(yīng)當(dāng)分析安卓軟件編碼過(guò)程中使用的所有函數(shù)和API,對(duì)函數(shù)和API進(jìn)行可靠性識(shí)別,禁用不可靠的函數(shù)和API,并使用最新最可靠的函數(shù)和API作為替代。(3)靜態(tài)代碼分析——開(kāi)發(fā)者應(yīng)對(duì)源代碼執(zhí)行靜態(tài)分析。靜態(tài)代碼分析本身通常不足以替代人工代碼分析,開(kāi)發(fā)者應(yīng)了解靜態(tài)分析工具的工作模式、優(yōu)點(diǎn)和缺點(diǎn),并輔以人工代碼分析,平衡工作效率和代碼覆蓋率。
在高可靠性驗(yàn)證階段,通過(guò)動(dòng)態(tài)分析和測(cè)試手段,檢測(cè)軟件的安全漏洞,全面核查攻擊面,檢查各個(gè)關(guān)鍵因素上的威脅緩解措施是否得以正確實(shí)現(xiàn)。(1)動(dòng)態(tài)程序分析。此驗(yàn)證任務(wù)采用動(dòng)態(tài)分析工具,監(jiān)控應(yīng)用安卓軟件在運(yùn)行時(shí)是否存在內(nèi)存泄漏、程序越權(quán)等可靠性問(wèn)題。(2)模糊測(cè)試。模糊測(cè)試是一種專門形式的動(dòng)態(tài)分析,它通過(guò)故意向應(yīng)用程序引入不良格式或隨機(jī)數(shù)據(jù)而誘發(fā)程序故障。模糊測(cè)試策略的制定以應(yīng)用程序的預(yù)期用途、功能和設(shè)計(jì)規(guī)范為基礎(chǔ)??煽啃灶檰?wèn)可以要求進(jìn)行額外的模糊測(cè)試,或擴(kuò)大模糊測(cè)試的范圍并增加持續(xù)時(shí)間。(3)威脅模型和攻擊面評(píng)析。實(shí)際完成的安卓應(yīng)用程序可能會(huì)與軟件開(kāi)發(fā)項(xiàng)目需求階段和設(shè)計(jì)階段所設(shè)定的功能和結(jié)構(gòu)不完全一致。因此,在高可靠性實(shí)施后,分析軟件的攻擊面評(píng)估,對(duì)軟件進(jìn)行威脅模型演練評(píng)估是非常有必要的。威脅建模的一般流程如圖3所示。
圖3 威脅建模過(guò)程
一般的高可靠性驗(yàn)證框架為:(1)制定高可靠性驗(yàn)證策略。明確軟件驗(yàn)證的目標(biāo)、范圍、標(biāo)準(zhǔn)、風(fēng)險(xiǎn)控制要素、驗(yàn)證資源、成本與效益、驗(yàn)證人員、驗(yàn)證時(shí)間,制定軟件高可靠性驗(yàn)證基本原則,特別是對(duì)于第三方驗(yàn)證,明確驗(yàn)證的約束條件、知道驗(yàn)證的邊界是非常重要的。驗(yàn)證策略也可以用于驗(yàn)證軟件產(chǎn)品的可接受程度。(2)規(guī)范化的高可靠性需求。軟件可靠性需求是驗(yàn)證的主要內(nèi)容,通過(guò)分析驗(yàn)證對(duì)象的可靠性特點(diǎn),生成測(cè)試用例。(3)軟件結(jié)構(gòu)風(fēng)險(xiǎn)分析。在成本約束下,將驗(yàn)證適當(dāng)聚焦于可靠性領(lǐng)域問(wèn)題。(4)執(zhí)行軟件可靠性驗(yàn)證。使用黑盒測(cè)試、白盒測(cè)試等方法,對(duì)軟件可靠性功能進(jìn)行驗(yàn)證。(5)環(huán)境管理。設(shè)置穩(wěn)定、可控的驗(yàn)證環(huán)境,保證每一個(gè)被提交的漏洞都能準(zhǔn)確重現(xiàn)。如果是在用戶環(huán)境下進(jìn)行滲透測(cè)試,那么在滲透測(cè)試結(jié)束之后需要對(duì)現(xiàn)場(chǎng)進(jìn)行復(fù)原,保證系統(tǒng)恢復(fù)測(cè)試前的狀態(tài)。(6)驗(yàn)證數(shù)據(jù)管理。軟件可靠性測(cè)試用例、驗(yàn)證結(jié)果和驗(yàn)證報(bào)告等都需要進(jìn)行電子歸檔,以保證測(cè)試能夠有效地幫助發(fā)現(xiàn)軟件存在的可靠性問(wèn)題,并不斷改進(jìn)。
在高可靠性發(fā)布階段,對(duì)軟件進(jìn)行最終可靠性核查。該階段將每個(gè)開(kāi)發(fā)階段的文件、過(guò)程和數(shù)據(jù)都進(jìn)行歸檔,準(zhǔn)備進(jìn)行發(fā)布與維護(hù)。這些文件、過(guò)程和數(shù)據(jù)包括所有的法律法規(guī)、行業(yè)標(biāo)準(zhǔn)、軟件需求文檔、概要設(shè)計(jì)文檔、詳細(xì)設(shè)計(jì)文檔、軟件源代碼、注釋、二進(jìn)制文件、專用符號(hào)等。
在安卓軟件發(fā)布之前,最后一件事是進(jìn)行最終可靠性核查。最終可靠性核查是指在即將發(fā)布前全面檢查軟件的所有可靠性功能。最終可靠性核查由專業(yè)的可靠性顧問(wèn)在開(kāi)發(fā)人員的協(xié)助下執(zhí)行,這并不是“查找與修補(bǔ)”的活動(dòng),而是對(duì)需求和設(shè)計(jì)階段提出的可靠性需求進(jìn)行最終檢查。最終可靠性核查有3種結(jié)果:一是通過(guò),這證明所有的可靠性需求和設(shè)計(jì)都已經(jīng)被正常實(shí)現(xiàn);二是通過(guò)但有異常,這證明主要的可靠性需求和設(shè)計(jì)都已經(jīng)被正常實(shí)現(xiàn),但仍有部分可靠性需求和設(shè)計(jì)并未被正確實(shí)現(xiàn),不過(guò)這種問(wèn)題可以在后續(xù)版本更新中盡快修復(fù);三是未通過(guò),即軟件的關(guān)鍵可靠性需求和設(shè)計(jì)未被實(shí)現(xiàn)且難以在短時(shí)間內(nèi)修復(fù),這種狀況下軟件不能被批準(zhǔn),不能按時(shí)發(fā)布。軟件必須返工重修,或上報(bào)高級(jí)管理層進(jìn)行抉擇。
在高可靠性響應(yīng)階段,響應(yīng)安全事件與漏洞報(bào)告,實(shí)施漏洞修復(fù)和應(yīng)急響應(yīng)。同時(shí)發(fā)現(xiàn)新的問(wèn)題與安全問(wèn)題模式,并將它們用于安卓軟件可靠性的持續(xù)改進(jìn)中。即使在發(fā)布時(shí)軟件不包含任何已知的漏洞,也并不意味著軟件就絕對(duì)安全可靠,仍會(huì)面臨日后出現(xiàn)的新威脅。
高可靠性響應(yīng)計(jì)劃應(yīng)包括以下方面:(1)組建專業(yè)的運(yùn)維團(tuán)隊(duì)。如果開(kāi)發(fā)團(tuán)隊(duì)太小以至于沒(méi)有專門的運(yùn)維團(tuán)隊(duì),那么也應(yīng)制定緊急運(yùn)維團(tuán)隊(duì)預(yù)案,開(kāi)發(fā)者、市場(chǎng)營(yíng)銷、管理人員應(yīng)充當(dāng)緊急運(yùn)維團(tuán)隊(duì)成員。(2)對(duì)于不同類型的事件,要做好分類和分級(jí),確保響應(yīng)及時(shí)有效,能夠處理緊急事件。(3)做好軟件的回滾、重新部署、增量更新等預(yù)案。(4)做好如何處理第三方代碼的預(yù)案。
為了驗(yàn)證本文所提出的安卓軟件高可靠開(kāi)發(fā)模型,設(shè)計(jì)對(duì)照實(shí)驗(yàn),由兩組學(xué)生分別使用安卓軟件瀑布開(kāi)發(fā)模型和本文提出的安卓軟件高可靠性開(kāi)發(fā)模型,分別開(kāi)發(fā)同一個(gè)安卓項(xiàng)目——手機(jī)安全衛(wèi)士。開(kāi)發(fā)參考資料為《Android項(xiàng)目實(shí)戰(zhàn)——手機(jī)安全衛(wèi)士》[26]。開(kāi)發(fā)小組1使用典型的安卓軟件瀑布開(kāi)發(fā)模型,項(xiàng)目命名為MPSG_FALL。開(kāi)發(fā)小組2使用安卓軟件高可靠開(kāi)發(fā)模型,項(xiàng)目命名為MPSG_HRD。
開(kāi)發(fā)小組2,按照安卓軟件高可靠開(kāi)發(fā)模型的流程,即按照高可靠性培訓(xùn)、高可靠性需求分析、高可靠性設(shè)計(jì)、高可靠性實(shí)施、高可靠性驗(yàn)證、高可靠性發(fā)布、高可靠性響應(yīng)的流程進(jìn)行開(kāi)發(fā)。
3.1.1 高可靠性培訓(xùn)
在進(jìn)行MPSG_HRD開(kāi)發(fā)之前,先對(duì)參與開(kāi)發(fā)的所有人員進(jìn)行培訓(xùn)。首先將本文提出的安卓軟件高可靠開(kāi)發(fā)模型講授給開(kāi)發(fā)人員,讓開(kāi)發(fā)人員從始至終將“高可靠”思想貫穿在整個(gè)開(kāi)發(fā)周期之中。
用2周時(shí)間,共計(jì)20個(gè)課時(shí)對(duì)開(kāi)發(fā)小組2進(jìn)行培訓(xùn),培訓(xùn)內(nèi)容為高可靠性設(shè)計(jì)培訓(xùn)、威脅建模培訓(xùn)、高可靠性編碼培訓(xùn)、弱加密安全測(cè)試培訓(xùn)、隱私保護(hù)培訓(xùn)、高級(jí)概念培訓(xùn)。
3.1.2 高可靠性需求分析
隨著安卓系統(tǒng)的普及,用戶需要保護(hù)自己的隱私、知曉自己的手機(jī)流量的詳細(xì)使用情況以及如何攔截騷擾電話,以便在享受手機(jī)帶來(lái)的方便的同時(shí)盡可能減少損失。
為了解決手機(jī)的安全隱患,設(shè)計(jì)開(kāi)發(fā)一款手機(jī)安全衛(wèi)士軟件,該軟件可以管理手機(jī)中安裝的軟件、保護(hù)用戶隱私、攔截騷擾電話、清理垃圾、查殺病毒、監(jiān)控流量與網(wǎng)速等。便捷的操作、友好的用戶體驗(yàn)以及極強(qiáng)的實(shí)用性是手機(jī)安全衛(wèi)士軟件必備的。極高的可靠性和手機(jī)安全衛(wèi)士本身的安全性更是需求中的重中之重。軟件應(yīng)符合GB/T 18336—2015標(biāo)準(zhǔn),必須在嵌入代碼之前審查并修復(fù)所有的編譯器警告(0 error,0 warning)。
3.1.3 高可靠性設(shè)計(jì)
MPSG_HRD主要設(shè)計(jì)有7大功能,分別為手機(jī)清理、騷擾攔截、病毒查殺、軟件管理、程序鎖、網(wǎng)速測(cè)試、流量監(jiān)控。具體功能模塊設(shè)計(jì)如圖4所示。
圖4 MPSG_HRD功能模塊設(shè)計(jì)
手機(jī)清理模塊包含掃描垃圾和清理垃圾功能。騷擾攔截模塊包含騷擾攔截列表、黑名單列表和聯(lián)系人列表功能。病毒查殺模塊主要實(shí)現(xiàn)病毒查殺信息顯示與病毒查殺進(jìn)度顯示功能。軟件管理模塊的功能是對(duì)手機(jī)中的各類軟件進(jìn)行啟動(dòng)、卸載、設(shè)置權(quán)限。程序鎖模塊的目的是設(shè)置密碼和輸入密碼進(jìn)行解鎖。網(wǎng)速測(cè)試模塊用來(lái)測(cè)試上傳和下載文件的網(wǎng)速以及顯示測(cè)試報(bào)告界面。流量監(jiān)控模塊包括流量監(jiān)控信息、套餐流量設(shè)置和本月流量詳細(xì)報(bào)告功能。
3.1.4 高可靠性實(shí)施
MPSG_HRD開(kāi)發(fā)時(shí)間為4周,JDK版本為8.0,開(kāi)發(fā)環(huán)境和調(diào)試環(huán)境分別為Android Studio 3.2和Android 8.0操作系統(tǒng)榮耀手機(jī),使用SQLite數(shù)據(jù)庫(kù),API版本為27,使用基于Java的Android語(yǔ)言實(shí)現(xiàn)程序編碼。MPSG_HRD代碼結(jié)構(gòu)如圖5所示,其中HomeAdapter.java是主界面的布局填充器,用于填充界面中的所有功能圖標(biāo)與文字信息。VersionEntity.java是封裝版本信息的實(shí)體類,主要包含字段versioncode、description、apkurl。DownLoadUtils.java是用于從服務(wù)器下載APK的工具類。MyUtils.java用于獲取應(yīng)用程序的版本信息,并實(shí)現(xiàn)新版本APK的安裝。VersionUpdateUtils.java是用于進(jìn)行版本更新的工具類。SplashActivity.java用于展示歡迎界面以及版本信息。HomeActivity.java用于展示程序主界面以及實(shí)現(xiàn)各個(gè)功能圖標(biāo)的點(diǎn)擊事件。
圖5 MPSG_HRD代碼結(jié)構(gòu)
3.1.5 高可靠性驗(yàn)證
高可靠性驗(yàn)證主要針對(duì)保密性、完整性、可用性、可認(rèn)證性、可審計(jì)性進(jìn)行驗(yàn)證。驗(yàn)證流程為:先完成每個(gè)單元模塊的測(cè)試,再進(jìn)行集成功能測(cè)試。對(duì)于保密性,主要檢查數(shù)據(jù)驗(yàn)證算法和數(shù)據(jù)加密函數(shù)。對(duì)于完整性,主要檢查數(shù)據(jù)完整性和系統(tǒng)完整性。對(duì)于可用性,主要檢查手機(jī)安全衛(wèi)士的有效性、效率和用戶滿意度。對(duì)于可認(rèn)證性,主要檢查用戶賬戶的命名規(guī)范、密鑰的儲(chǔ)存和認(rèn)證憑證的管理。對(duì)于可審計(jì)性,則聚焦于軟件性能監(jiān)控、事件監(jiān)控和日志分析。
經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)并修改如下錯(cuò)誤:(1)MPSG_HRD在應(yīng)用進(jìn)程退出時(shí),高頻率注冊(cè)時(shí)長(zhǎng)1 s的定時(shí)器,定時(shí)器到時(shí)立即啟動(dòng)該應(yīng)用及關(guān)聯(lián)應(yīng)用。如果系統(tǒng)反復(fù)清理該應(yīng)用,該應(yīng)用會(huì)反復(fù)自啟動(dòng),導(dǎo)致操作系統(tǒng)嚴(yán)重卡頓。(2)由于編程錯(cuò)誤,MPSG_HRD反復(fù)注冊(cè)了數(shù)百個(gè)應(yīng)用管理權(quán)限管理的AppOps Listener,在執(zhí)行callback的時(shí)候直接導(dǎo)致system_server進(jìn)程global reference table overflow,即溢出錯(cuò)誤,造成系統(tǒng)錯(cuò)誤重啟。(3)MPSG_HRD收到消息通知之前,需要獲取通話狀態(tài)。如果短時(shí)間內(nèi)收到通知消息特別多,會(huì)將system_server的binder線程全部占滿,致使其他應(yīng)用和服務(wù)無(wú)法與system_server通信,導(dǎo)致系統(tǒng)重啟。(4)兼容性問(wèn)題,如果使用更高版本的Android操作系統(tǒng),那么MPSG_HRD會(huì)頻繁閃退,無(wú)法使用。
3.1.6 高可靠性發(fā)布
最終發(fā)布前,對(duì)MPSG_HRD的所有需求分析文檔、設(shè)計(jì)文檔、軟件代碼、測(cè)試用例、Bug集合、中間代碼等所有項(xiàng)目相關(guān)的文件和數(shù)據(jù)都進(jìn)行集中歸檔,并進(jìn)行代碼混淆、項(xiàng)目打包、項(xiàng)目加固。進(jìn)行最終可靠性核查,所有的可靠性需求和設(shè)計(jì)都已經(jīng)被正常實(shí)現(xiàn),通過(guò)核查。將MPSG_HRD發(fā)布到手機(jī)應(yīng)用市場(chǎng),如小米應(yīng)用商店、華為應(yīng)用商店、360應(yīng)用商店等,通過(guò)審核后,MPSG_HRD就可在應(yīng)用商店供用戶下載使用。發(fā)布的MPSG_HRD 軟件界面如圖6所示。
3.1.7 高可靠性響應(yīng)
組建運(yùn)維團(tuán)隊(duì),制定應(yīng)急響應(yīng)預(yù)案,項(xiàng)目主持人、指導(dǎo)教師、參與的學(xué)生均為緊急運(yùn)維團(tuán)隊(duì)成員。應(yīng)急響應(yīng)預(yù)案流程如圖7所示。
圖7 應(yīng)急響應(yīng)預(yù)案流程圖
當(dāng)系統(tǒng)發(fā)生故障后,運(yùn)維人員立即響應(yīng),并向相關(guān)人員了解系統(tǒng)故障情況。接下來(lái),運(yùn)維人員根據(jù)了解到的系統(tǒng)故障情況進(jìn)行分析,判定是軟件故障還是硬件故障,以確定采用哪種處理方式。如果是軟件故障,則通過(guò)查看系統(tǒng)日志、應(yīng)用日志等方式找出軟件出錯(cuò)原因;如果是硬件故障,則通過(guò)硬件錯(cuò)誤信息提示找出錯(cuò)誤原因。之后由運(yùn)維人員根據(jù)現(xiàn)場(chǎng)的實(shí)際情況,在與用戶協(xié)調(diào)后,進(jìn)行故障解決。故障解決后,運(yùn)維人員需要書(shū)寫(xiě)詳細(xì)的故障報(bào)告歸檔總結(jié),以不斷迭代提高運(yùn)維水平。
使用安卓軟件高可靠性開(kāi)發(fā)模型與安卓軟件瀑布開(kāi)發(fā)模型開(kāi)發(fā)相同的手機(jī)安全衛(wèi)士項(xiàng)目,分別命名為MPSG_HRD和MPSG_FALL,其性能參數(shù)對(duì)比如表1所示。
表1 MPSG_HRD與MPSG_FALL性能參數(shù)對(duì)比
經(jīng)過(guò)實(shí)驗(yàn)測(cè)試對(duì)比,MPSG_HRD在可靠性、缺陷/千行代碼、平均失效時(shí)間等參數(shù)性能上顯著優(yōu)于MPSG_FALL。
MPSG_HRD通過(guò)了模糊測(cè)試和滲透測(cè)試,而MPSG_FALL則未通過(guò)。雖然所占用內(nèi)存稍大、所消耗電量稍高,但幾乎不存在內(nèi)容泄露問(wèn)題,不會(huì)出現(xiàn)安卓軟件長(zhǎng)時(shí)間使用后出現(xiàn)的卡頓和死機(jī)問(wèn)題。另外,MPSG_HRD在服務(wù)器端進(jìn)行了二級(jí)容災(zāi)備份,并且有專門的應(yīng)急響應(yīng)預(yù)案,當(dāng)數(shù)據(jù)信息由于各種原因丟失時(shí),MPSG_HRD可以快速啟動(dòng)應(yīng)急響應(yīng),恢復(fù)數(shù)據(jù)信息。綜上所述,MPSG_HRD在綜合性能,特別是可靠性上明顯優(yōu)于MPSG_FALL,驗(yàn)證了基于SDL的安卓軟件高可靠性開(kāi)發(fā)模型的有效性。
本文分析了當(dāng)前安卓軟件可靠性的背景、研究現(xiàn)狀和相關(guān)工作,研究了軟件可靠性度量指標(biāo)、影響因素和常見(jiàn)的可靠性故障及其原因分析,論證了安卓軟件可靠性的重要性、緊迫性和經(jīng)濟(jì)性。之后,基于微軟SDL軟件安全開(kāi)發(fā)生命周期模型提出了一種新型高可靠安卓軟件開(kāi)發(fā)模型,該模型的核心思想是將“高可靠性”設(shè)計(jì)思想融入安卓軟件設(shè)計(jì)開(kāi)發(fā)的每一個(gè)步驟中,在安卓軟件設(shè)計(jì)的7個(gè)步驟——培訓(xùn)、分析、設(shè)計(jì)、實(shí)施、驗(yàn)證、發(fā)布、響應(yīng)中,均融入高可靠性思想,從技術(shù)、管理和經(jīng)濟(jì)等多個(gè)方面對(duì)模型進(jìn)行了說(shuō)明和論證,為安卓軟件可靠開(kāi)發(fā)提出了一個(gè)具備可行性的全過(guò)程開(kāi)發(fā)模型。該模型需要在可靠性方向投入較多資源,因此更適合于有著充足資源的大型企業(yè)和大型軟件開(kāi)發(fā)團(tuán)隊(duì),其可靠性收益可以顯著超過(guò)可靠性成本。對(duì)于大型企業(yè)和大型軟件開(kāi)發(fā)團(tuán)隊(duì)有較好的推廣應(yīng)用價(jià)值。該高可靠性軟件開(kāi)發(fā)模型也對(duì)其他強(qiáng)調(diào)可靠性、安全性的高可靠性軟件開(kāi)發(fā)模型有一定的借鑒和參考意義。
在未來(lái),應(yīng)針對(duì)開(kāi)發(fā)周期短、資金投入少、開(kāi)發(fā)者技術(shù)相對(duì)較低的小微企業(yè)和小微軟件開(kāi)發(fā)團(tuán)隊(duì),設(shè)計(jì)性價(jià)比高、可行性高的安卓高可靠性軟件開(kāi)發(fā)模型。進(jìn)一步研究軟件高可靠性設(shè)計(jì)和軟件高可靠性實(shí)施,提高模型的實(shí)用性和經(jīng)濟(jì)性。同時(shí),助力高校和企業(yè)科研項(xiàng)目,讓高可靠性軟件開(kāi)發(fā)模型在安卓軟件開(kāi)發(fā)中得到切實(shí)應(yīng)用與實(shí)踐反饋,不斷地修改和完善。