馮素梅,王少華,陳日罡,張志良
(中國核電工程有限公司,北京 100840)
核電站數字化儀表與控制(instrument and control,I&C)系統是核電站的重要組成部分,是核電機組安全、可靠、經濟運行的關鍵。但是,基于計算機軟件的儀控系統的很多功能由軟件實現,如果軟件失效可能會引起系統級失效,進而影響功能安全系統性能。因此,必須對核電數字化I&C系統按照核電相關標準執行驗證和確認(verification and validation,V&V)活動,尤其是安全級軟件。I&C系統軟件包括操作系統軟件和應用軟件。應用軟件一般由工程設計人員依據具體的工程配置數據對基本功能庫進行配置和編譯,運行于I&C系統的主處理模塊。因此,基本功能塊是組成應用軟件的基本單元,其軟件質量直接決定I&C系統的系統性能力。基本功能庫一般由分布式控制系統(distributed control system,DCS)平臺供貨方提供,使用應用軟件開發工具軟件提供的面向應用的語言(如圖形化組態語言)進行開發。對于不能完成的功能,由通用語言開發,DCS平臺供貨方應該對其執行軟件V&V活動。
目前,國際和國內已有標準為安全級軟件的V&V提供指導,如文獻[1]~文獻[7]。但是由于標準本身存在差異,所采用的核電技術也存在差異,對于軟件的V&V方法和技術尚未統一。此外,標準主要針對新開發的系統軟件和應用軟件建立V&V要求,并無專門針對基本功能庫開發的軟件V&V方法指導。鑒于軟件功能庫開發的方式不同,對其執行V&V活動的方法存在差異。因此,基于以上問題,本文針對基本功能庫,結合標準要求,以及實際工程經驗,討論了V&V方法,以及V&V過程中應重點關注的方面。
基于DCS平臺實現的基于計算機的核電廠安全儀控系統,其軟件主要包括操作系統軟件(如通信、I/O管理、自監視等)與應用軟件(如連鎖邏輯、控制回路、報警邏輯等)[7-9]。應用軟件一般是專門針對某個項目,由電廠設計人員利用應用軟件開發工具,使用電廠工程數據對DCS平臺提供的平臺產品和基本功能庫進行配置,以實現基于計算機的儀控系統分配給軟件的安全功能。因此,對于一個使用設備族部件進行開發的典型I&C系統來說,基本軟件功能庫是作為預開發軟件部件使用的,可供應用軟件開發人員進行配置,并形成組態文件。組態文件經代碼生成器轉換以及編譯器編譯生成可執行文件,最終裝載在目標系統執行在線運行任務。其功能和性能直接影響到系統的安全。因此,基本軟件功能庫的質量至關重要。作為實現I&C系統應用軟件的基本單元,在對應用軟件執行V&V活動的過程,必須包含對其使用到的軟件功能塊的鑒定。
一般基于計算機的安全級DCS平臺軟件包括平臺產品單元軟件(操作系統軟件)、基本功能庫和用于應用軟件開發的軟件工具(以下簡稱軟件工具)。面向應用的基本功能庫需求來源于典型核電安全系統實現安全功能的軟件部分,常用基本功能單元需要具備安全、可靠、復用性好的特性。因此,DCS平臺以一種經封裝、界面友好、易于理解和易于操作的方式,為工程設計人員提供基本的功能庫。在應用軟件的開發過程中,基本功能塊經組態、編譯并下裝到目標系統,直接執行在線運行時的安全功能。因此,作為安全級DCS平臺的供貨方,應該對基本功能庫執行V&V活動,確保軟件的質量。典型DCS平臺和儀控系統軟件架構如圖1所示。

圖1 典型DCS平臺和儀控系統軟件架構圖
基本功能庫的開發活動如圖2所示。

圖2 基本功能庫軟件開發活動
基本功能庫的開發活動與通常的基于計算機的軟件開發生命周期[10]有所區別。基本功能庫的開發活動在平臺層面并不存在系統集成和系統確認的過程。只有在被用戶經組態下裝到目標系統之后的應用軟件,才存在軟硬件集成和系統集成的活動。因此,在平臺開發的過程中,對基本功能庫的開發和V&V都需要特殊處理。
基本功能庫一般有兩種開發方式:①使用帶自動代碼生成的面向應用的語言開發;②使用通用語言開發。通常,面向應用語言不能實現的功能或部分功能應作為獨立的模塊使用通用語言開發。這兩種開發活動在實現階段存在差別,但是最終代碼需滿足的質量要求是一致的。對IEC 60880關于軟件安全生命周期的開發活動進行裁剪。
根據IEEE 1012—2004的要求,應對基本功能庫預期用途所在領域作環境分析[4],結合軟件完整性等級確定的方法,為基本功能庫指定一個完整性等級,以確定需要執行的最小V&V任務集。
安全級平臺系統所提供的功能庫主要是針對安全級I&C系統開發的,基本功能塊經算法組態、代碼轉換和編譯,下裝到目標系統執行安全功能。一旦發生軟件失效,將直接導致系統安全性問題。根據IEEE 1012—2004,對于安全完整性的確定方法,結合基本功能塊失效導致的后果和出現這種后果的運行情況,以及功能塊在應用環境下的使用情況,應指定軟件完整性等級為4級。安全完整性等級為4級的軟件,其最低限度的開發V&V任務包括文檔評估、關鍵性分析、可追蹤性分析、接口分析、安全保密分析、危險分析、風險分析以及測試。每個階段需要執行的任務詳見IEEE 1012—2004 的第5章。以上分析活動在本文中統稱為“基本分析任務”。
由于功能庫的開發活動與標準的軟件開發存在差異,它的軟件需求不是來源于某個確定的系統,不特別針對某個安全功能。因此,對于功能庫的驗證,應結合已有的典型安全系統及其工程算法邏輯涉及到的功能塊要求,根據IEEE 1012—2012[5]的要求,對功能庫執行復用性分析,以驗證功能庫與核電領域安全級I&C系統模型和架構是否一致。
為I&C系統工程算法開發的功能庫,包含大量的算法、方程和數學公式。在V&V過程中,應驗證系統和軟件需求的算法、方程和公式是否正確,確認是否能夠滿足解決方案,確認由算法和方程導致的約束或限制條件是否正確,以及其是否能夠滿足工程應用要求。因此,功能庫的V&V活動應包含算法分析。
功能庫多為面向應用的語言開發的軟件。其擁有系統、直觀的圖形化組態邏輯,即采用通用語言開發的功能塊。為了便于工程人員組態,一般封裝為圖形的形式,方便在調試環境下進行仿真驗證。另外,在平臺層面不存在軟硬件集成過程,對于功能庫的關鍵性能以及軟件對異常響應的驗證宜采用仿真方法。因此,功能庫在實現V&V階段增加仿真分析。
另外,功能庫作為一個可以復用的軟件庫,其并不存在軟硬件集成的過程。因此,在對功能庫的確認測試應基于標準的硬件環境,如DCS平臺本身提供的硬件環境[11]。
基于以上分析,基本功能庫軟件V&V生命周期任務如圖3所示。

圖3 功能庫軟件V&V生命周期任務
根據IEC 60880和IEEE 1012—2004對于軟件驗證的要求,基本功能庫V&V的總體目標應包括以下方面:充分驗證軟件需求規格書覆蓋典型系統設計和工程算法需求中對基本功能庫的要求;軟件驗證活動應充分驗證基本功能庫設計,以滿足軟件的需求;應驗證代碼與軟件設計規格書一致;應確認最終源代碼和可執行代碼滿足需求的功能和性能。
每個階段的V&V目標、應該執行的V&V任務,以及需要重點驗證的內容如下。
2.2.1 需求V&V
此階段主要輸出文件是需求規格書,針對需求規格書主要執行評估、基本分析任務、算法分析和復用性分析,以確保需求的正確性、完備性、準確性、可測試性和一致性。此階段應重點注意以下方面的驗證。
①結合平臺所支持的、已有的安全系統,及其工程算法、預期的應用,識別出功能庫通用的功能、性能和特性的要求,驗證這些方面是否被軟件需求覆蓋。
②確保每個需求沒有包含設計的內容,從而限制軟件的可復用性。
③分析軟件需求是否充分考慮了平臺的約束,如數據類型、質量位定義、機器碼表示方式等。
④評價功能塊的安全保密性,確保功能塊具有足夠的防御措施,以防止非授權用戶的惡意篡改。
針對不同的實現方式,應采取適當的驗證手段。 功能庫開發和V&V活動如圖4所示。

圖4 功能庫軟件開發和V&V活動
2.2.2 設計V&V
設計階段包括軟件結構設計和詳細設計。由于功能庫的開發方式不同,在此階段的輸出文件表現形式可能不同。如面向應用的語言開發的軟件塊的設計一般是圖形化的方式,但是對于設計的要求是一致的。針對設計輸出文件,執行評估、基本分析、算法分析和復用性分析等任務,以確保設計師軟件需求的正確、準確和完備轉化,而且沒有引入非預期的特征。在此階段,應注意以下方面的驗證。
①評價所選擇的程序語言是否是安全的,包括通用語言、面向應用的語言,以及經代碼轉換生成的高級語言。驗證是否有文件對該語言的屬性進行分析,包括可靠性、魯棒性、可追蹤性、維護性和可讀性等方面的分析,可參考文獻[12]中的語言要求;是否有文件描述編碼規則,及其是否符合安全級軟件編碼規則的要求,可依據IEC 60880和IEC 61508-7。
②評價選擇的軟件開發工具的適用性,是否滿足軟件工程要求,是否有足夠的證據證明其可信,尤其是代碼生成器和編譯器。
③評價每個功能塊的接口的約束,驗證設計的合理性,包括數據類型、范圍、越界處理,以及參數設置的合理性、參數缺省值、輸入錯誤的參數值是否有適當的措施予以提示或者報錯等。
④分析所選擇的算法和方程是否能夠解決實際工程問題。如比例積分微分(propertional integral differential,PID)控制器初始化階段輸出質量位和輸出值的處理,輸入信號無效時輸出值與質量位的處理,手自動切換時刻的處理等。
⑤對于重要的算法和方程,應根據基本的工程原則和數學理論進行推導,驗證其正確性。如傳遞函數的推導、數值計算算法的正確性驗證。
⑥分析所選用的算法和方程,以及其導致的約束條件或限制條件是否滿足工程需求,如舍去誤差、截斷誤差、表達式簡化、估計誤差、數值解等;分析所產生的約束是否滿足工程要求,注意是否在安全手冊(或者用戶手冊)里聲明這些約束。
⑦分析面向應用的語言的約束對于功能塊設計的影響,如變量類型、溢出、除零問題。
⑧分析算法設計及相關的數據要素是否引入危險。如分析所有影響質量位改變的情況,應避免非預期改變導致的誤動作。
⑨分析程序設計的確定性,包括存儲確定性和時間確定性。
2.2.3 實現V&V
實現階段主要驗證代碼是否正確、準確、完備地轉化了設計。由于實現方式不同,此階段的輸出文件也不同,V&V方式如下。
(1)采用通用語言實現的軟件驗證。
利用此實現方式,輸出文件主要有源代碼和可執行代碼。執行V&V任務有:基本分析、復用性分析、算法分析、仿真分析、源代碼走查和單元測試。對于功能塊簡單且與其他模塊不存在耦合的功能塊,執行單元測試即可;對于復雜的或者存在調用其他功能塊的情況,補充執行集成測試。
(2)面向應用的語言實現的軟件驗證。
首先,利用圖形編輯器,編輯組態邏輯,生成圖形化的組態文件;然后,經代碼生成器轉化為由高級語言表示的源代碼,再經編譯器生成可執行代碼。因此,V&V的對象文件有圖形化的組態文件、源代碼以及可執行代碼。
如果所使用的代碼生成器和編譯器是經過驗證的可信工具、有足夠的證據保證代碼轉換過程、保持了語義的一致性、生成的代碼滿足標準的要求且未引入不安全的因素,則可以僅針對輸入文件,即圖形化的設計文件,執行基本分析任務、復用性分析、算法分析和仿真分析。
事實上,并不存在完全被證明了的代碼生成器和編譯器。為確保功能塊的正確性和安全性,應對源代碼和可執行代碼作進一步驗證。由于經代碼生成器生成的代碼,其生成框架的固定性,導致可讀性較差,因此只執行測試任務。
實現階段的V&V應注意以下方面。
①驗證每個功能塊是否正確實現了設計。
②分析每個功能塊對所有輸入和參數處理的正確性,包括參數值和輸入的所有取值。
③與時間相關的功能塊,重點驗證輸出隨輸入變化的同步性是否與需求一致。
④重點驗證邊界值的正確性。
⑤針對特殊情況進行驗證,如溢出、計數復位、除零、中間計算溢出或者越界時計算結果和質量位的處理,對輸出變量計算結果越界情況下輸出值和質量位的處理等。
2.2.4 測試V&V
此階段主要針對源代碼和可執行代碼的執行確認測試,以確保實現滿足軟件需求。一般是將可執行代碼下裝在目標真實環境下進行測試。測試應滿足如下要求。
①全面覆蓋邏輯。
②覆蓋所有的輸入信號范圍以及參數范圍。
③確保精度與最大執行時間得到證實,確保對所有的異常及組合采取正確的響應。
④重點針對直接影響反應堆安全的功能塊(例如表決)進行驗證與測試。對于表決功能塊,重點驗證對信號有效性的判斷。
⑤驗證與應用有關的功能塊實際實現的功能是否滿足電廠運行的需求。
本文探討了安全級平臺功能庫不同的角色及其重要性,對IEC 60880軟件安全生命周期的框架進行裁剪,明確功能庫開發生命周期;在符合核電相關標準的框架下,確定軟件完整性等級及需要執行的最小V&V任務集。為進一步驗證功能庫質量,本文提出,除了執行V&V最小任務集之外,還應在不同階段選擇可選的V&V任務,包括可復用性分析、算法分析和仿真分析,并進一步明確每個V&V階段的目標、手段以及需要重點驗證的方面。本文所提供的方法為功能庫的V&V活動提供實際的應用指導,有重要的工程應用價值。