黃小波
(中國電子科技集團(tuán)公司第三十八研究所,安徽 合肥230088)
固件軟件工程化管理應(yīng)用探討
黃小波
(中國電子科技集團(tuán)公司第三十八研究所,安徽 合肥230088)
隨著技術(shù)的不斷發(fā)展,固件軟件的修改和升級日益變得簡單。固件的更新升級在為用戶帶來多樣化的功能滿足同時,也帶來了開發(fā)過程和質(zhì)量不可控的風(fēng)險。本文在引入固件的定義和特點(diǎn)后,借鑒GJB2786A《軍用軟件開發(fā)通用要求》標(biāo)準(zhǔn)中對軟件工程化管理規(guī)定,提出了固件軟件開發(fā)過程的管理要求。從提高軟件質(zhì)量角度出發(fā),提出了固件軟件可靠性設(shè)計(jì)的相關(guān)要求。最后,將固件軟件的工程化管理應(yīng)用于某型項(xiàng)目中,經(jīng)過實(shí)際運(yùn)行,表明固件軟件工程化管理切實(shí)可行。
固件;軟件工程化;開發(fā)過程;軟件質(zhì)量;可靠性設(shè)計(jì)
固件就是 “固化的軟件”,它是指固化在集成電路內(nèi)部的程序代碼,負(fù)責(zé)控制和協(xié)調(diào)集成電路的功能。有時也理解具有程序代碼的硬件裝置。在硬件設(shè)備中,固件就是硬件設(shè)備的靈魂,因?yàn)橐恍┯布O(shè)備除了固件以外沒有其它軟件組成,因此固件也就決定著硬件設(shè)備的功能及性能。雖然以“固件”為名,但還是應(yīng)當(dāng)被我們理解為軟件。固件既然是軟件,就有大小之分。大的可有幾百兆,小的也許只有幾K,甚至不足1K。固件常用的開發(fā)的語言一般包括有:匯編語言、C語言、AHDL語言、VHDL語言、Verilog語言等。
隨著技術(shù)的不斷發(fā)展,修改固件以適應(yīng)不斷更新的硬件環(huán)境成了用戶們的迫切要求,升級固件也變得越來越簡單,越來越?jīng)]有危險,固件程序與我們通常所說的程序的區(qū)別已經(jīng)越來越小。由于設(shè)計(jì)師可以隨意迅速修改設(shè)計(jì)、進(jìn)行硬件設(shè)計(jì),從而忽略了良好的設(shè)計(jì)流程;隨著集成電路規(guī)模越來越大,設(shè)計(jì)、驗(yàn)證、封裝和測試的經(jīng)費(fèi)需求也越大。
如同軟件產(chǎn)業(yè)引起軟件工程化管理的必要性所示,固件軟件開發(fā)存在著與常用軟件同樣問題:團(tuán)隊(duì)溝通困難,軟件重用率低下,開發(fā)人員各自為政,代碼冗余度高,文檔不健全等;結(jié)果造成數(shù)據(jù)丟失,開發(fā)周期漫長,產(chǎn)品可靠性差,質(zhì)量低劣,軟件維護(hù)困難,用戶抱怨使用不便,項(xiàng)目風(fēng)險增加等。隨著固件軟件易于修改的靈活性和應(yīng)用的持續(xù)增長,暴露的問題也逐漸增多,必須用標(biāo)準(zhǔn)的設(shè)計(jì)方法和開發(fā)過程約束。
固件軟件工程化是引用軟件工程化的理論、概念和技術(shù)以提高固件設(shè)計(jì)的質(zhì)量和數(shù)量,降低開發(fā)和維護(hù)成本,提高軟件質(zhì)量,加快和控制開發(fā)進(jìn)度,實(shí)現(xiàn)開發(fā)過程受控。
我國軟件工程標(biāo)準(zhǔn)化工作從上世紀(jì)80年代初才開始起步,經(jīng)過近30年努力發(fā)展,取得了喜人成果,現(xiàn)已頒布國標(biāo)50多項(xiàng)、國軍標(biāo)約15項(xiàng),另外,航空、航天、電子、機(jī)械等部門也基于自身管理需要分別制定了若干標(biāo)準(zhǔn)。自1983年軍用標(biāo)準(zhǔn)化工作實(shí)行統(tǒng)一管理以后,軟件工程標(biāo)準(zhǔn)化工作受到各有關(guān)方面的重視和研究[1-2],取得了可喜成績,迄今已頒布的15多項(xiàng)國軍標(biāo)中的大多數(shù)標(biāo)準(zhǔn)已被軍內(nèi)外廣泛應(yīng)用,對一些大型信息系統(tǒng)工程及重點(diǎn)武器型號的研制、生產(chǎn)及使用起到了積極的促進(jìn)作用。形成的主要標(biāo)準(zhǔn)如:GJB2786A《軍用軟件開發(fā)通用要求》、GJB438B《軍用軟件開發(fā)文檔通用要求》、GJB1268A《軍用軟件驗(yàn)收要求》、GJB5000A《軍用軟件研制能力成熟度模型》和GJB/Z102《軟件可靠性和安全性設(shè)計(jì)規(guī)則》等。
軟件工程化帶來的好處是顯而易見的,比如:提高軟件的可靠性和可移植性、軟件人員的技術(shù)水平、提高軟件人員間的溝通效率,減少差錯和誤解,降低軟件產(chǎn)品開發(fā)和運(yùn)行維護(hù)成本、縮短軟件開發(fā)周期等。
軟件工程化發(fā)揮的巨大引領(lǐng)作用,可以從載人航天工程中得以體現(xiàn)[3]。在神舟六號質(zhì)量問題匯總中,軟件質(zhì)量問題占全部質(zhì)量問題的比例僅為7.69%,而在三年前的神舟三號中,這個問題的比例高達(dá)31.25%。
GJB2786A《軍用軟件開發(fā)通用要求》第一章節(jié)“1.范圍”中明確描述了”本標(biāo)準(zhǔn)適用與需方和開發(fā)方獲取、開發(fā)及維護(hù)軍用軟件(含固件中的軟件)?!避浖_發(fā)的基本活動主要包括:系統(tǒng)需求分析、系統(tǒng)設(shè)計(jì)、軟件需求分析、軟件設(shè)計(jì)、軟件實(shí)現(xiàn)和單元測試、單元集成和測試、CSCI合規(guī)性測試、CSCI/HWCI集成和測試、系統(tǒng)合規(guī)性測試、軟件使用準(zhǔn)備、軟件移交準(zhǔn)備、軟件驗(yàn)收;在實(shí)際軟件開發(fā)過程中,可根據(jù)軟件的關(guān)鍵等級和項(xiàng)目的應(yīng)用場合,對上述開發(fā)活動進(jìn)行裁剪。同時,GJB 2786A又從軟件開發(fā)管理、軟件工程、正式合格性測試、軟件產(chǎn)品評價、軟件配置管理、軟件保障階段等6個方面對上述活動提出了具體要求。
參考GJB 2786A《軍用軟件開發(fā)通用要求》,根據(jù)固件自身的設(shè)計(jì)特點(diǎn),固件軟件的開發(fā)流程階段一般劃分為六個階段:任務(wù)分析階段、需求分析階段、設(shè)計(jì)階段、實(shí)現(xiàn)階段、驗(yàn)證階段、運(yùn)行維護(hù)階段。其開發(fā)模式也可以采用如“瀑布模型”、“螺旋模型”、“敏捷模型”等。其開發(fā)流程及對應(yīng)形成的主要文檔如下圖所示:
圖1 固件軟件開發(fā)流程圖
各階段形成的一般文檔資料如表1所示:
表1 軟件研制過程文檔
任務(wù)分析階段主要分析所使用的固件軟件是否滿足任務(wù)要求。描述的關(guān)鍵點(diǎn)主要包括:
1)固件軟件的軟硬件運(yùn)行環(huán)境;
2)設(shè)計(jì)約束:包括綜合方式、時鐘要求、速度要求、時序參數(shù)和管腳分配;
3)技術(shù)要求:包括功能指標(biāo)、性能指標(biāo)及用到的協(xié)議和算法;所實(shí)現(xiàn)功能的框圖、數(shù)據(jù)流和控制流等;
4)接口信號狀態(tài):包括接口信號、電平、輸入/輸出關(guān)系;
5)功能驗(yàn)證要求;
6)安全性可靠性設(shè)計(jì)要求。
需求分析階段主要是對任務(wù)書內(nèi)容的細(xì)化,使得固件產(chǎn)品設(shè)計(jì)師和編碼人員能夠根據(jù)需求規(guī)格說明完成設(shè)計(jì)和編碼工作。描述的關(guān)鍵點(diǎn)主要包括:
1)功能性能需求描述;
2)內(nèi)/外部接口需求描述;
3)時序關(guān)系需求描述;
4)安全性可靠性需求描述。
設(shè)計(jì)階段主要是進(jìn)行功能分解和模塊劃分。描述的關(guān)鍵點(diǎn)主要包括:
1)軟件結(jié)構(gòu)的使用;
2)狀態(tài)和模式的轉(zhuǎn)換關(guān)系;
3)模塊的功能、接口和相互關(guān)系;
4)地址空間劃分;
5)性能實(shí)現(xiàn)方式。
軟件實(shí)現(xiàn)階段,主要根據(jù)需求文檔和設(shè)計(jì)文檔,依據(jù)相關(guān)行業(yè)標(biāo)準(zhǔn)和編程規(guī)范,進(jìn)行代碼編寫和時序驗(yàn)證工作。
驗(yàn)證階段是軟件測試生命周期中的一個階段,在驗(yàn)證活動中發(fā)現(xiàn)盡可能多的缺陷。驗(yàn)證階段應(yīng)和需求規(guī)格說明同步開展工作,開發(fā)軟硬件驗(yàn)證平臺、腳本、定義需要開發(fā)的總線接口模型、編寫驗(yàn)證用例及其對應(yīng)的驗(yàn)證通過依據(jù)。驗(yàn)證的手段主要包括:文檔審查、代碼規(guī)則檢查、功能驗(yàn)證、時序驗(yàn)證、設(shè)計(jì)確認(rèn)。
運(yùn)行維護(hù)階段主要是對固件軟件開發(fā)過程和產(chǎn)品本身進(jìn)行正式驗(yàn)收,經(jīng)過驗(yàn)收后的軟件交付給用戶使用,在使用過程中維護(hù)軟件的正常運(yùn)行、不斷改進(jìn)軟件的性能和質(zhì)量。通過編制軟件質(zhì)量履歷書,形成固件軟件產(chǎn)品從單機(jī)驗(yàn)證、測試記錄、系統(tǒng)聯(lián)調(diào)記錄、交接記錄、使用記錄、檢查記錄等相關(guān)使用維護(hù)信息。
軟件可靠性(software reliability)是軟件產(chǎn)品在規(guī)定的條件下和規(guī)定的時間區(qū)間完成規(guī)定功能的能力。軟件可靠性不但與軟件存在的缺陷和(或)差錯有關(guān),而且與系統(tǒng)輸入和系統(tǒng)使用有關(guān)。由于固件軟件設(shè)計(jì)與器件緊密相連,因此,影響固件軟件可靠性設(shè)計(jì)的因素很多。
固件軟件可靠性設(shè)計(jì)一般需考慮如下幾方面因素:
1)建立時間和保持時間:數(shù)據(jù)的穩(wěn)定傳輸必須滿足建立和保持時間的要求;
2)競爭和冒險:競爭和冒險會影響邏輯電路的穩(wěn)定性。時鐘端口、清零和置位端口對毛刺信號十分敏感,任何一點(diǎn)毛刺都可能引起系統(tǒng)出錯;
3)時鐘信號:可靠的時鐘信號對固件軟件是非常關(guān)鍵的。一般都要求將時鐘信號綜合到全局網(wǎng)絡(luò)進(jìn)行考慮,對跨時鐘域信號進(jìn)行同步化處理;
4)組合邏輯設(shè)計(jì):由于組合邏輯的輸出易產(chǎn)生毛刺,因此,在系統(tǒng)要滿足高可靠性要求時,盡量避免大量使用組合邏輯電路設(shè)計(jì);
5)多余調(diào)試端口設(shè)計(jì):由于多余調(diào)試端口在懸空狀態(tài)下可能會引入外部觸發(fā)信號,從而觸發(fā)固件軟件內(nèi)部工作邏輯,從而產(chǎn)生異常;因此,不用的調(diào)試端口或多余管教盡量進(jìn)行下拉接地處理;
6)觸發(fā)器亞穩(wěn)定處理:由于亞穩(wěn)態(tài)無法避免的,因此設(shè)計(jì)電路要減少亞穩(wěn)態(tài)導(dǎo)致錯誤的發(fā)生,其次要使系統(tǒng)對產(chǎn)生的錯誤不敏感;
7)脈沖計(jì)數(shù)突跳處理:脈沖計(jì)數(shù)的突跳會導(dǎo)致采樣出差,一般采用格雷碼計(jì)數(shù)器設(shè)計(jì)避免;
8)上電和掉電對輸入和輸出管腳影響考慮:在上電和掉電這一過渡階段中,管腳的邏輯電平是不確定的,從而會程序運(yùn)行不正常。一般考慮在上電時增加延時、確保各個管腳電平穩(wěn)定后開始工作;通過設(shè)計(jì)硬件電路檢測電壓降低來處理掉電對程序可能的影響[4];
9)其它還需要考慮的因素包括:看門狗電路失效性處理、總線切換中時序沖突處理、對復(fù)位信號的去毛刺、上/下拉抗干擾考慮等等。
影響固件軟件可靠性設(shè)計(jì)因素是多方面的,這需要從開發(fā)起始階段就要將可靠性設(shè)計(jì)納入整個開發(fā)過程。
以某項(xiàng)目產(chǎn)品研制過程為例,整個項(xiàng)目包含六個固件軟件。按照軟件關(guān)鍵等級定義,六個固件軟件關(guān)鍵等級定義為重要級別。按照產(chǎn)品研制大綱要求,六個固件軟件都需進(jìn)行軟件第三方評測,并最終交付使用。
參考GJB 2786A《軍用軟件開發(fā)通用要求》,產(chǎn)品開發(fā)流程劃分為六個階段,開發(fā)模式采用“瀑布模型”,每個固件軟件在研制過程中最終形成如下文檔:
10)軟件研制任務(wù)書;
11)軟件需求文檔;
12)軟件設(shè)計(jì)文檔;
13)軟件安裝手冊;
14)軟件源代碼和可執(zhí)行程序;
15)軟件版本說明;
16)軟件仿真分析報告;
17)軟件測試需求文檔;
18)軟件測試報告。
軟件在每個階段形成的文檔經(jīng)過會議評審,形成評審結(jié)論。同時,軟件所有文檔資料按照三庫(開發(fā)庫、配置庫和產(chǎn)品庫)方式進(jìn)行管理。對經(jīng)過第三方測評后進(jìn)行的軟件修改,形成軟件更改影響域分析報告,并進(jìn)行回歸測試。軟件最終經(jīng)過驗(yàn)收,交付用戶使用。
在固件開發(fā)過程中引入軟件工程化管理的目的是為了實(shí)現(xiàn)開發(fā)過程受控、提高固件軟件設(shè)計(jì)的質(zhì)量、降低開發(fā)和維護(hù)成本。本文在引入固件軟件的定義和特點(diǎn)后,按照GJB 2786A《軍用軟件開發(fā)通用要求》,將固件軟件開發(fā)流程劃分為六個階段,并給出各研制階段對應(yīng)形成的過程數(shù)據(jù)包資料。同時,為提高固件軟件質(zhì)量,本文給出了固件軟件可靠性設(shè)計(jì)過程中需要考慮的相關(guān)因素。結(jié)合項(xiàng)目實(shí)際管理結(jié)果,表明固件軟件工程化管理在開發(fā)過程中的應(yīng)用是切實(shí)可行。
[1]耿聰.軟件工程化管理方法在武器裝備軟件研制中的應(yīng)用研究[D].西北大學(xué),2007.
[2]王楊玲,王英浩,顛遷貴,等.航天型號軟件過程改進(jìn)實(shí)踐[J].航天標(biāo)準(zhǔn)化,2011(3):18-22.
[3]張強(qiáng).扛起航天軟件工程化旗幟[N].科技日報,2013-01-15.
[4]王小平.解決系統(tǒng)上電和掉電可靠性的一種處理方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2001(7):356-357.
The Application of the Software Engineering Management to Firmware
HUANG Xiao-bo
(China Electronics Technology Group Corporation No.38 Research Institute,Hefei Anhui 230088,China)
With the development of technology,firmware-software modification and upgrade becomes more simple.Although firmware update brings diverse functions for the user,but also brings uncontrollable risk of development process and sofeware quality.After the definition and characteristics of the firmware introduced,the paper proposed the management requirements to firmware’s development,referring to the GJB2786 standard.From the perspective of improving software quality,some rules of software reliability design are given.Finally,with the application to a project,the software management to firmware is feasible.
Firmware;Software engineering;Development process;software quality;Reliability design
黃小波(1975—),男,安徽合肥人,碩士,中國電子科技集團(tuán)公司第三十八研究所,高級工程師,研究方向?yàn)楦】掌骱蚐AR測控系統(tǒng)設(shè)計(jì)。
丁艷]