馮素梅,王少華,陳日罡,張志良
(中國核電工程有限公司,北京 100840)
核電站數(shù)字化儀表與控制(instrument and control,I&C)系統(tǒng)是核電站的重要組成部分,是核電機組安全、可靠、經(jīng)濟運行的關(guān)鍵。但是,基于計算機軟件的儀控系統(tǒng)的很多功能由軟件實現(xiàn),如果軟件失效可能會引起系統(tǒng)級失效,進而影響功能安全系統(tǒng)性能。因此,必須對核電數(shù)字化I&C系統(tǒng)按照核電相關(guān)標準執(zhí)行驗證和確認(verification and validation,V&V)活動,尤其是安全級軟件。I&C系統(tǒng)軟件包括操作系統(tǒng)軟件和應用軟件。應用軟件一般由工程設(shè)計人員依據(jù)具體的工程配置數(shù)據(jù)對基本功能庫進行配置和編譯,運行于I&C系統(tǒng)的主處理模塊。因此,基本功能塊是組成應用軟件的基本單元,其軟件質(zhì)量直接決定I&C系統(tǒng)的系統(tǒng)性能力?;竟δ軒煲话阌煞植际娇刂葡到y(tǒng)(distributed control system,DCS)平臺供貨方提供,使用應用軟件開發(fā)工具軟件提供的面向應用的語言(如圖形化組態(tài)語言)進行開發(fā)。對于不能完成的功能,由通用語言開發(fā),DCS平臺供貨方應該對其執(zhí)行軟件V&V活動。
目前,國際和國內(nèi)已有標準為安全級軟件的V&V提供指導,如文獻[1]~文獻[7]。但是由于標準本身存在差異,所采用的核電技術(shù)也存在差異,對于軟件的V&V方法和技術(shù)尚未統(tǒng)一。此外,標準主要針對新開發(fā)的系統(tǒng)軟件和應用軟件建立V&V要求,并無專門針對基本功能庫開發(fā)的軟件V&V方法指導。鑒于軟件功能庫開發(fā)的方式不同,對其執(zhí)行V&V活動的方法存在差異。因此,基于以上問題,本文針對基本功能庫,結(jié)合標準要求,以及實際工程經(jīng)驗,討論了V&V方法,以及V&V過程中應重點關(guān)注的方面。
基于DCS平臺實現(xiàn)的基于計算機的核電廠安全儀控系統(tǒng),其軟件主要包括操作系統(tǒng)軟件(如通信、I/O管理、自監(jiān)視等)與應用軟件(如連鎖邏輯、控制回路、報警邏輯等)[7-9]。應用軟件一般是專門針對某個項目,由電廠設(shè)計人員利用應用軟件開發(fā)工具,使用電廠工程數(shù)據(jù)對DCS平臺提供的平臺產(chǎn)品和基本功能庫進行配置,以實現(xiàn)基于計算機的儀控系統(tǒng)分配給軟件的安全功能。因此,對于一個使用設(shè)備族部件進行開發(fā)的典型I&C系統(tǒng)來說,基本軟件功能庫是作為預開發(fā)軟件部件使用的,可供應用軟件開發(fā)人員進行配置,并形成組態(tài)文件。組態(tài)文件經(jīng)代碼生成器轉(zhuǎn)換以及編譯器編譯生成可執(zhí)行文件,最終裝載在目標系統(tǒng)執(zhí)行在線運行任務。其功能和性能直接影響到系統(tǒng)的安全。因此,基本軟件功能庫的質(zhì)量至關(guān)重要。作為實現(xiàn)I&C系統(tǒng)應用軟件的基本單元,在對應用軟件執(zhí)行V&V活動的過程,必須包含對其使用到的軟件功能塊的鑒定。
一般基于計算機的安全級DCS平臺軟件包括平臺產(chǎn)品單元軟件(操作系統(tǒng)軟件)、基本功能庫和用于應用軟件開發(fā)的軟件工具(以下簡稱軟件工具)。面向應用的基本功能庫需求來源于典型核電安全系統(tǒng)實現(xiàn)安全功能的軟件部分,常用基本功能單元需要具備安全、可靠、復用性好的特性。因此,DCS平臺以一種經(jīng)封裝、界面友好、易于理解和易于操作的方式,為工程設(shè)計人員提供基本的功能庫。在應用軟件的開發(fā)過程中,基本功能塊經(jīng)組態(tài)、編譯并下裝到目標系統(tǒng),直接執(zhí)行在線運行時的安全功能。因此,作為安全級DCS平臺的供貨方,應該對基本功能庫執(zhí)行V&V活動,確保軟件的質(zhì)量。典型DCS平臺和儀控系統(tǒng)軟件架構(gòu)如圖1所示。
圖1 典型DCS平臺和儀控系統(tǒng)軟件架構(gòu)圖
基本功能庫的開發(fā)活動如圖2所示。
圖2 基本功能庫軟件開發(fā)活動
基本功能庫的開發(fā)活動與通常的基于計算機的軟件開發(fā)生命周期[10]有所區(qū)別?;竟δ軒斓拈_發(fā)活動在平臺層面并不存在系統(tǒng)集成和系統(tǒng)確認的過程。只有在被用戶經(jīng)組態(tài)下裝到目標系統(tǒng)之后的應用軟件,才存在軟硬件集成和系統(tǒng)集成的活動。因此,在平臺開發(fā)的過程中,對基本功能庫的開發(fā)和V&V都需要特殊處理。
基本功能庫一般有兩種開發(fā)方式:①使用帶自動代碼生成的面向應用的語言開發(fā);②使用通用語言開發(fā)。通常,面向應用語言不能實現(xiàn)的功能或部分功能應作為獨立的模塊使用通用語言開發(fā)。這兩種開發(fā)活動在實現(xiàn)階段存在差別,但是最終代碼需滿足的質(zhì)量要求是一致的。對IEC 60880關(guān)于軟件安全生命周期的開發(fā)活動進行裁剪。
根據(jù)IEEE 1012—2004的要求,應對基本功能庫預期用途所在領(lǐng)域作環(huán)境分析[4],結(jié)合軟件完整性等級確定的方法,為基本功能庫指定一個完整性等級,以確定需要執(zhí)行的最小V&V任務集。
安全級平臺系統(tǒng)所提供的功能庫主要是針對安全級I&C系統(tǒng)開發(fā)的,基本功能塊經(jīng)算法組態(tài)、代碼轉(zhuǎn)換和編譯,下裝到目標系統(tǒng)執(zhí)行安全功能。一旦發(fā)生軟件失效,將直接導致系統(tǒng)安全性問題。根據(jù)IEEE 1012—2004,對于安全完整性的確定方法,結(jié)合基本功能塊失效導致的后果和出現(xiàn)這種后果的運行情況,以及功能塊在應用環(huán)境下的使用情況,應指定軟件完整性等級為4級。安全完整性等級為4級的軟件,其最低限度的開發(fā)V&V任務包括文檔評估、關(guān)鍵性分析、可追蹤性分析、接口分析、安全保密分析、危險分析、風險分析以及測試。每個階段需要執(zhí)行的任務詳見IEEE 1012—2004 的第5章。以上分析活動在本文中統(tǒng)稱為“基本分析任務”。
由于功能庫的開發(fā)活動與標準的軟件開發(fā)存在差異,它的軟件需求不是來源于某個確定的系統(tǒng),不特別針對某個安全功能。因此,對于功能庫的驗證,應結(jié)合已有的典型安全系統(tǒng)及其工程算法邏輯涉及到的功能塊要求,根據(jù)IEEE 1012—2012[5]的要求,對功能庫執(zhí)行復用性分析,以驗證功能庫與核電領(lǐng)域安全級I&C系統(tǒng)模型和架構(gòu)是否一致。
為I&C系統(tǒng)工程算法開發(fā)的功能庫,包含大量的算法、方程和數(shù)學公式。在V&V過程中,應驗證系統(tǒng)和軟件需求的算法、方程和公式是否正確,確認是否能夠滿足解決方案,確認由算法和方程導致的約束或限制條件是否正確,以及其是否能夠滿足工程應用要求。因此,功能庫的V&V活動應包含算法分析。
功能庫多為面向應用的語言開發(fā)的軟件。其擁有系統(tǒng)、直觀的圖形化組態(tài)邏輯,即采用通用語言開發(fā)的功能塊。為了便于工程人員組態(tài),一般封裝為圖形的形式,方便在調(diào)試環(huán)境下進行仿真驗證。另外,在平臺層面不存在軟硬件集成過程,對于功能庫的關(guān)鍵性能以及軟件對異常響應的驗證宜采用仿真方法。因此,功能庫在實現(xiàn)V&V階段增加仿真分析。
另外,功能庫作為一個可以復用的軟件庫,其并不存在軟硬件集成的過程。因此,在對功能庫的確認測試應基于標準的硬件環(huán)境,如DCS平臺本身提供的硬件環(huán)境[11]。
基于以上分析,基本功能庫軟件V&V生命周期任務如圖3所示。
圖3 功能庫軟件V&V生命周期任務
根據(jù)IEC 60880和IEEE 1012—2004對于軟件驗證的要求,基本功能庫V&V的總體目標應包括以下方面:充分驗證軟件需求規(guī)格書覆蓋典型系統(tǒng)設(shè)計和工程算法需求中對基本功能庫的要求;軟件驗證活動應充分驗證基本功能庫設(shè)計,以滿足軟件的需求;應驗證代碼與軟件設(shè)計規(guī)格書一致;應確認最終源代碼和可執(zhí)行代碼滿足需求的功能和性能。
每個階段的V&V目標、應該執(zhí)行的V&V任務,以及需要重點驗證的內(nèi)容如下。
2.2.1 需求V&V
此階段主要輸出文件是需求規(guī)格書,針對需求規(guī)格書主要執(zhí)行評估、基本分析任務、算法分析和復用性分析,以確保需求的正確性、完備性、準確性、可測試性和一致性。此階段應重點注意以下方面的驗證。
①結(jié)合平臺所支持的、已有的安全系統(tǒng),及其工程算法、預期的應用,識別出功能庫通用的功能、性能和特性的要求,驗證這些方面是否被軟件需求覆蓋。
②確保每個需求沒有包含設(shè)計的內(nèi)容,從而限制軟件的可復用性。
③分析軟件需求是否充分考慮了平臺的約束,如數(shù)據(jù)類型、質(zhì)量位定義、機器碼表示方式等。
④評價功能塊的安全保密性,確保功能塊具有足夠的防御措施,以防止非授權(quán)用戶的惡意篡改。
針對不同的實現(xiàn)方式,應采取適當?shù)尿炞C手段。 功能庫開發(fā)和V&V活動如圖4所示。
圖4 功能庫軟件開發(fā)和V&V活動
2.2.2 設(shè)計V&V
設(shè)計階段包括軟件結(jié)構(gòu)設(shè)計和詳細設(shè)計。由于功能庫的開發(fā)方式不同,在此階段的輸出文件表現(xiàn)形式可能不同。如面向應用的語言開發(fā)的軟件塊的設(shè)計一般是圖形化的方式,但是對于設(shè)計的要求是一致的。針對設(shè)計輸出文件,執(zhí)行評估、基本分析、算法分析和復用性分析等任務,以確保設(shè)計師軟件需求的正確、準確和完備轉(zhuǎn)化,而且沒有引入非預期的特征。在此階段,應注意以下方面的驗證。
①評價所選擇的程序語言是否是安全的,包括通用語言、面向應用的語言,以及經(jīng)代碼轉(zhuǎn)換生成的高級語言。驗證是否有文件對該語言的屬性進行分析,包括可靠性、魯棒性、可追蹤性、維護性和可讀性等方面的分析,可參考文獻[12]中的語言要求;是否有文件描述編碼規(guī)則,及其是否符合安全級軟件編碼規(guī)則的要求,可依據(jù)IEC 60880和IEC 61508-7。
②評價選擇的軟件開發(fā)工具的適用性,是否滿足軟件工程要求,是否有足夠的證據(jù)證明其可信,尤其是代碼生成器和編譯器。
③評價每個功能塊的接口的約束,驗證設(shè)計的合理性,包括數(shù)據(jù)類型、范圍、越界處理,以及參數(shù)設(shè)置的合理性、參數(shù)缺省值、輸入錯誤的參數(shù)值是否有適當?shù)拇胧┯枰蕴崾净蛘邎箦e等。
④分析所選擇的算法和方程是否能夠解決實際工程問題。如比例積分微分(propertional integral differential,PID)控制器初始化階段輸出質(zhì)量位和輸出值的處理,輸入信號無效時輸出值與質(zhì)量位的處理,手自動切換時刻的處理等。
⑤對于重要的算法和方程,應根據(jù)基本的工程原則和數(shù)學理論進行推導,驗證其正確性。如傳遞函數(shù)的推導、數(shù)值計算算法的正確性驗證。
⑥分析所選用的算法和方程,以及其導致的約束條件或限制條件是否滿足工程需求,如舍去誤差、截斷誤差、表達式簡化、估計誤差、數(shù)值解等;分析所產(chǎn)生的約束是否滿足工程要求,注意是否在安全手冊(或者用戶手冊)里聲明這些約束。
⑦分析面向應用的語言的約束對于功能塊設(shè)計的影響,如變量類型、溢出、除零問題。
⑧分析算法設(shè)計及相關(guān)的數(shù)據(jù)要素是否引入危險。如分析所有影響質(zhì)量位改變的情況,應避免非預期改變導致的誤動作。
⑨分析程序設(shè)計的確定性,包括存儲確定性和時間確定性。
2.2.3 實現(xiàn)V&V
實現(xiàn)階段主要驗證代碼是否正確、準確、完備地轉(zhuǎn)化了設(shè)計。由于實現(xiàn)方式不同,此階段的輸出文件也不同,V&V方式如下。
(1)采用通用語言實現(xiàn)的軟件驗證。
利用此實現(xiàn)方式,輸出文件主要有源代碼和可執(zhí)行代碼。執(zhí)行V&V任務有:基本分析、復用性分析、算法分析、仿真分析、源代碼走查和單元測試。對于功能塊簡單且與其他模塊不存在耦合的功能塊,執(zhí)行單元測試即可;對于復雜的或者存在調(diào)用其他功能塊的情況,補充執(zhí)行集成測試。
(2)面向應用的語言實現(xiàn)的軟件驗證。
首先,利用圖形編輯器,編輯組態(tài)邏輯,生成圖形化的組態(tài)文件;然后,經(jīng)代碼生成器轉(zhuǎn)化為由高級語言表示的源代碼,再經(jīng)編譯器生成可執(zhí)行代碼。因此,V&V的對象文件有圖形化的組態(tài)文件、源代碼以及可執(zhí)行代碼。
如果所使用的代碼生成器和編譯器是經(jīng)過驗證的可信工具、有足夠的證據(jù)保證代碼轉(zhuǎn)換過程、保持了語義的一致性、生成的代碼滿足標準的要求且未引入不安全的因素,則可以僅針對輸入文件,即圖形化的設(shè)計文件,執(zhí)行基本分析任務、復用性分析、算法分析和仿真分析。
事實上,并不存在完全被證明了的代碼生成器和編譯器。為確保功能塊的正確性和安全性,應對源代碼和可執(zhí)行代碼作進一步驗證。由于經(jīng)代碼生成器生成的代碼,其生成框架的固定性,導致可讀性較差,因此只執(zhí)行測試任務。
實現(xiàn)階段的V&V應注意以下方面。
①驗證每個功能塊是否正確實現(xiàn)了設(shè)計。
②分析每個功能塊對所有輸入和參數(shù)處理的正確性,包括參數(shù)值和輸入的所有取值。
③與時間相關(guān)的功能塊,重點驗證輸出隨輸入變化的同步性是否與需求一致。
④重點驗證邊界值的正確性。
⑤針對特殊情況進行驗證,如溢出、計數(shù)復位、除零、中間計算溢出或者越界時計算結(jié)果和質(zhì)量位的處理,對輸出變量計算結(jié)果越界情況下輸出值和質(zhì)量位的處理等。
2.2.4 測試V&V
此階段主要針對源代碼和可執(zhí)行代碼的執(zhí)行確認測試,以確保實現(xiàn)滿足軟件需求。一般是將可執(zhí)行代碼下裝在目標真實環(huán)境下進行測試。測試應滿足如下要求。
①全面覆蓋邏輯。
②覆蓋所有的輸入信號范圍以及參數(shù)范圍。
③確保精度與最大執(zhí)行時間得到證實,確保對所有的異常及組合采取正確的響應。
④重點針對直接影響反應堆安全的功能塊(例如表決)進行驗證與測試。對于表決功能塊,重點驗證對信號有效性的判斷。
⑤驗證與應用有關(guān)的功能塊實際實現(xiàn)的功能是否滿足電廠運行的需求。
本文探討了安全級平臺功能庫不同的角色及其重要性,對IEC 60880軟件安全生命周期的框架進行裁剪,明確功能庫開發(fā)生命周期;在符合核電相關(guān)標準的框架下,確定軟件完整性等級及需要執(zhí)行的最小V&V任務集。為進一步驗證功能庫質(zhì)量,本文提出,除了執(zhí)行V&V最小任務集之外,還應在不同階段選擇可選的V&V任務,包括可復用性分析、算法分析和仿真分析,并進一步明確每個V&V階段的目標、手段以及需要重點驗證的方面。本文所提供的方法為功能庫的V&V活動提供實際的應用指導,有重要的工程應用價值。