劉務(wù), 楊春暉, 吳蕾,林軍,徐巍
(1.工業(yè)和信息化部電子第五研究所,廣東 廣州 511370;2.工業(yè)軟件工程化與應(yīng)用技術(shù)工信部重點實驗室,廣東 廣州 511370)
工業(yè)軟件是工業(yè)技術(shù)/知識、流程的程序化封裝與復用,能夠在數(shù)字空間和物理空間定義工業(yè)產(chǎn)品和生產(chǎn)設(shè)備的形狀、結(jié)構(gòu),控制其運動狀態(tài),預(yù)測其變化規(guī)律,優(yōu)化制造和管理流程,變革生產(chǎn)方式,提升全要素生產(chǎn)率,是現(xiàn)代工業(yè)的“靈魂”[1-2]。工業(yè)軟件作為現(xiàn)代工業(yè)技術(shù)和信息技術(shù)結(jié)合的高端成果,對于推動工業(yè)產(chǎn)品創(chuàng)新發(fā)展、確保產(chǎn)業(yè)安全、提升國家整體技術(shù)和綜合實力,起著至關(guān)重要的作用。
工業(yè)軟件來源于工業(yè)產(chǎn)品研制過程中的應(yīng)用需求,并服務(wù)于工業(yè)產(chǎn)品研制的全生命周期,因此,按照工業(yè)產(chǎn)品研制的全生命周期流程,工業(yè)軟件可分為研發(fā)設(shè)計軟件、生產(chǎn)制造軟件、服務(wù)保障軟件和經(jīng)營管理軟件等4個類別。其中,研發(fā)設(shè)計軟件主要包含MBSE、CAD、CAE和PDM等,服務(wù)于工業(yè)產(chǎn)品的方案、設(shè)計和仿真分析;生產(chǎn)制造軟件主要包含CAPP/CAM、MES、DCS和SCADA等,服務(wù)于工業(yè)產(chǎn)品的生產(chǎn)和制造;服務(wù)保障軟件主要包含PHM、MRO等,服務(wù)于工業(yè)產(chǎn)品的維修和保障;經(jīng)營管理軟件主要包含PM、ERP和CRM等,服務(wù)于工業(yè)產(chǎn)品研制全生命周期涉及的項目管理、供應(yīng)鏈管理和客戶關(guān)系管理等。
工業(yè)軟件在虛擬世界中對工業(yè)產(chǎn)品進行設(shè)計和驗證,能夠大幅度地節(jié)約研發(fā)成本,支撐產(chǎn)品的正向設(shè)計。工業(yè)軟件的質(zhì)量直接影響工業(yè)產(chǎn)品的研發(fā)效率和創(chuàng)新,特別是在高端制造領(lǐng)域,對其功能、性能效率、可靠性、安全性和兼容性等質(zhì)量特性有著極高的要求,合格的工業(yè)軟件產(chǎn)品應(yīng)具備功能正確、性能效率高、可靠性強、數(shù)據(jù)互聯(lián)互通和安全性高等特點。工業(yè)軟件屬于軟件產(chǎn)品,為保障工業(yè)軟件的產(chǎn)品質(zhì)量,其研發(fā)流程亦可遵循軟件工程的開發(fā)方法,而測試驗證屬于工業(yè)軟件研發(fā)流程中的重要環(huán)節(jié),對于提高工業(yè)軟件產(chǎn)品的質(zhì)量具有非常重要的作用。
按照軟件工程開發(fā)方法,在工業(yè)軟件的研發(fā)過程中需要進行“單元測試” “集成測試”和“系統(tǒng)測試”,從不同的維度對工業(yè)軟件的功能、性能效率、可靠性、兼容性和安全性等質(zhì)量特性進行測試,驗證各個階段成果是否符合階段研制需求,減少軟件故障、安全漏洞等軟件缺陷。此外,工業(yè)軟件來源于工業(yè)應(yīng)用需求, “工業(yè)屬性”亦是其最重要的屬性,因此還需進行“工程應(yīng)用驗證”,即在實際的工業(yè)應(yīng)用場景中對工業(yè)軟件的功能、性能效率和可靠性等進行系統(tǒng)性的測試,從而驗證工業(yè)軟件是否符合用戶需求,確保工業(yè)軟件產(chǎn)品可用、好用[2]。因此,為了研發(fā)合格的工業(yè)軟件產(chǎn)品,需要針對工業(yè)軟件研制全生命周期構(gòu)建測試驗證體系,對保證工業(yè)軟件產(chǎn)品的質(zhì)量具有重要的意義。
在20世紀80年代后期,Paul Rook[3]首次提出了V模型,如圖1所示,從圖1中可以看出,軟件研發(fā)全生命周期主要包含需求分析、概要設(shè)計、詳細設(shè)計、編碼、單元測試、集成測試和系統(tǒng)測試等階段。
圖1 通用軟件開發(fā)模型
a)需求分析
根據(jù)客戶需求分析出軟件需求,即軟件所具備的功能、硬件環(huán)境等,并保證軟件功能需求覆蓋用戶需求。
b)概要設(shè)計
根據(jù)需求規(guī)格說明,對軟件架構(gòu)進行進一步的設(shè)計,并編制軟件概要設(shè)計說明書。
c)詳細設(shè)計
對概要設(shè)計中表述的各個模塊,以及模塊間的組合進行深入的分析,編制軟件詳細設(shè)計說明書,該階段應(yīng)達到偽代碼級別。
d)軟件編碼
按照詳細設(shè)計說明書,開發(fā)者編寫代碼。
e)單元測試
按照設(shè)定好的最小單元進行測試,目的是確保各個單元模塊被正確地編譯。單元的具體劃分可以是模塊,也可以具體到類、函數(shù)等。
f)集成測試
該階段主要測試各個模塊組合后的功能實現(xiàn)情況,以及模塊接口連接的正確性、數(shù)據(jù)傳遞的正確性等。
g)系統(tǒng)測試
該階段按照軟件需求規(guī)格說明書的要求,測試軟件系統(tǒng)的功能、性能等是否滿足用戶的需求等。
目前將通用的軟件測試方法劃分為靜態(tài)方法和動態(tài)方法[4-7]兩大類。靜態(tài)方法是通過分析源程序來發(fā)現(xiàn)錯誤;動態(tài)方法則需要執(zhí)行程序,通過設(shè)計測試數(shù)據(jù)和使用測試工具,檢測程序運行的正確性并發(fā)現(xiàn)錯誤。動態(tài)方法和靜態(tài)方法都有各自的特點,測試中可以起到互補的作用。
靜態(tài)測試方法主要包含代碼審查、代碼走查和靜態(tài)分析等,代碼審查的目的是檢查代碼與設(shè)計的一致性、相關(guān)標準規(guī)范的執(zhí)行情況、代碼邏輯表達的正確性和代碼結(jié)構(gòu)的合理性等。代碼走查的檢查內(nèi)容與代碼審查的內(nèi)容基本一致,但操作方法卻不相同。代碼審查是通過審查人員仔細閱讀代碼及相關(guān)材料,對照審查單,記錄問題和明顯的缺陷;而代碼走查是走查小組人員提出一系列代表性的測試實例,其他人員對測試實例用人腦來執(zhí)行程序,并記錄發(fā)現(xiàn)的問題。靜態(tài)分析的目的是發(fā)現(xiàn)編碼規(guī)范問題和編碼邏輯錯誤。靜態(tài)分析一般包括代碼的控制流分析、數(shù)據(jù)流分析、接口分析和表達式分析等。其中,控制流分析是使用控制流程圖系統(tǒng)地檢查被測程序的控制結(jié)構(gòu)的工作;數(shù)據(jù)流分析是用控制流程圖來分析數(shù)據(jù)發(fā)生的異常情況;接口分析主要用在程序靜態(tài)分析和設(shè)計分析中,涉及模塊之間的一致性分析,以及模塊與外部數(shù)據(jù)庫之間的一致性分析;表達式分析主要用于分析表達式的錯誤[8]。
靜態(tài)分析有如下優(yōu)點:1)可以更早地檢測出缺陷,在軟件開發(fā)早期占據(jù)主導地位;2)靜態(tài)分析不需要產(chǎn)生額外的測試用例,針對不同的路徑,它能對缺陷進行有效的試驗;3)靜態(tài)分析技術(shù)不僅自動化程度高而且效率也高。
動態(tài)測試指的是實際運行被測程序,輸入相應(yīng)的測試數(shù)據(jù),檢查實際輸出結(jié)果和預(yù)期結(jié)果是否相符的過程。根據(jù)對被測對象內(nèi)部情況的了解與否,分為黑盒測試和白盒測試,其中,黑盒測試[9-11]又被稱為功能測試或數(shù)據(jù)驅(qū)動測試,是指不知道軟件內(nèi)部構(gòu)造和設(shè)計,只按照軟件的需求規(guī)格說明書對軟件進行的測試;白盒測試又被稱為結(jié)構(gòu)測試或邏輯測試,需要了解軟件內(nèi)部的構(gòu)造和設(shè)計,這種測試方法需要根據(jù)程序的邏輯結(jié)構(gòu),其有效性依賴于程序本身設(shè)計的正確性,無法發(fā)現(xiàn)由數(shù)據(jù)錯誤引起的程序錯誤。
ISO 25000.10定義軟件質(zhì)量模型如圖2所示,主要包含功能、性能效率、兼容性、可靠性、信息安全性、維護性、易用性和可移植性等質(zhì)量特性。
圖2 系統(tǒng)/軟件產(chǎn)品質(zhì)量模型
工業(yè)軟件也屬于軟件,圖2描述的質(zhì)量模型也適合工業(yè)軟件,同時通用軟件的測試方法也適合于工業(yè)軟件的測試。然而,工業(yè)軟件是工業(yè)技術(shù)知識和軟件融合的產(chǎn)物,屬于高端的工業(yè)品,軟件是工業(yè)軟件的外在表現(xiàn)形式,其內(nèi)在核心是工業(yè)知識,所以工業(yè)軟件既具有工業(yè)屬性,又具有軟件屬性,如圖3所示;而工業(yè)屬性是工業(yè)軟件的核心屬性,正是因為工業(yè)屬性的存在,使得工業(yè)軟件的測試方法和研發(fā)流程與通用軟件的測試方法和研發(fā)流程稍有不同。
圖3 工業(yè)軟件屬性
工業(yè)軟件也屬于軟件,發(fā)展工業(yè)軟件亦要遵循軟件開發(fā)的客觀規(guī)律。然而,工業(yè)軟件除了具有軟件屬性,其本質(zhì)是工業(yè)屬性,如MBSE、CAD、CAE、EDA、CAPP和MES等軟件,其核心是領(lǐng)域機理模型庫、生產(chǎn)制造流程等,正因如此,其研發(fā)流程與傳統(tǒng)V模型有一定的區(qū)別。
工業(yè)軟件開發(fā)全生命周期模型如圖4所示。
①蓋帽:作用是密封和固定支撐板(A和B),同時,蓋帽外形設(shè)計美觀大方,上臺面可以放置洗漱用品等雜物。如圖1所示。
圖4 工業(yè)軟件開發(fā)全生命周期模型
從圖4中可以看出,工業(yè)軟件的研發(fā)全生命周期主要包含需求分析、物理問題分析、建模、概要設(shè)計、詳細設(shè)計、編碼實現(xiàn)、單元測試、集成測試、系統(tǒng)測試、應(yīng)用驗證和發(fā)布試用等階段。
與傳統(tǒng)的通用軟件的V模型相比,工業(yè)軟件的研發(fā)模型在傳統(tǒng)V模型的左邊增加了物理問題分析和建模兩個階段,在V模型的右邊增加了應(yīng)用驗證和發(fā)布試用兩個階段,如圖4虛框所示。
a)問題分析
該階段是指算法工程師根據(jù)需求對所涉及的物理問題進行分析,以結(jié)構(gòu)CAE分析軟件為例,算法工程師需根據(jù)特定的應(yīng)用場景,結(jié)合用戶需求,分析需求涉及到的物理問題,如線性靜力、模態(tài)和屈曲等。
b)建模
建模是指針對具體的物理問題,構(gòu)建對應(yīng)的數(shù)學模型,以結(jié)構(gòu)CAE分析軟件為例,建模就是針對具體的物理問題來構(gòu)建對應(yīng)的微分方程組,經(jīng)過評審后,軟件工程師再進入后續(xù)的軟件設(shè)計階段。
大量的實踐經(jīng)驗表明,工業(yè)軟件由于其特殊性,在企業(yè)內(nèi)部完成傳統(tǒng)的“系統(tǒng)測試”之后,仍然存在大量的缺陷。工業(yè)軟件是用出來的,因此工業(yè)軟件研發(fā)全生命周期還應(yīng)包含“應(yīng)用驗證”和“發(fā)布試用”階段。
a)應(yīng)用驗證
b)發(fā)布試用
工業(yè)軟件經(jīng)過應(yīng)用驗證后,能解決大部分的缺陷。為了進一步地完善產(chǎn)品質(zhì)量,此時的軟件版本應(yīng)該在更大的用戶范圍內(nèi)發(fā)布試用,使得缺陷得到進一步的暴露,大量的實踐表明,通過發(fā)布試用能較大程度地提升工業(yè)軟件的產(chǎn)品質(zhì)量,可達到“好用”程度。
工業(yè)軟件具有與工業(yè)應(yīng)用場景結(jié)合緊密、多學科融合和結(jié)果精度要求高等特點,不僅需要對工業(yè)軟件的功能、性能效率、可靠性和兼容性等進行測試驗證,還需要對工程化應(yīng)用場景下的軟件能力、結(jié)果真值標定等進行驗證與確認(V&V),而傳統(tǒng)的軟件測試方法不能完全滿足工業(yè)軟件的測試需求。
工業(yè)軟件測試方法主要劃分為實驗室測試方法和場景測試方法兩大類,其中,實驗室測試方法主要包含標準案例庫測試方法和比對測試方法;而場景測試方法主要包含工程化應(yīng)用測試和大規(guī)模試用驗證。工程化應(yīng)用測試和大規(guī)模試用驗證是指由用戶主導參與,在實際的應(yīng)用場景下應(yīng)用工業(yè)軟件,對其功能、性能效率、兼容性、可靠性和易用性等指標進行驗證。下面分別對這兩類方法進行詳細的介紹。
2.2.1 實驗室測試
在實驗室場景下,工業(yè)軟件測試方法包含標準測試案例庫測試方法和比對測試方法。
a)標準案例庫測試
標準案例庫測試是指測試人員在實驗室研發(fā)環(huán)境下,利用標準的測試案例庫對工業(yè)軟件進行測試,屬于工業(yè)軟件測試中最常用的一種測試方法。
標準測試案例的收集途徑主要包含:具備解析解的案例庫、用主流軟件生成的案例庫和實際場景下試驗產(chǎn)生的案例等,對于具有開源社區(qū)的軟件,還存在有開源社區(qū)的案例。
標準案例庫的測試流程如圖5所示,計算案例庫標準輸出與被測軟件的輸出結(jié)果之間的誤差,并與設(shè)定的閾值進行比較,若誤差小于設(shè)定的閾值,則測試通過;若誤差大于閾值,則測試不通過。
圖5 標準案例庫測試方法
b)比對測試
比對測試是指應(yīng)用業(yè)界認可度高的商用工業(yè)軟件作為比對“基準”,對工業(yè)軟件進行測試的方法。當標準測試案例庫中的案例不足時,可以采用比對測試方法。本質(zhì)上,比對測試方法也屬于標準案例庫測試方法,只不過標準案例庫是通過操作業(yè)界認可度高的商用工業(yè)軟件生成的。其操作流程圖如圖6所示。
圖6 工業(yè)軟件比對測試方法
以三維CAD軟件為例,在標準測試案例庫中的案例不足的情況下,可以選取CATIA、PTC和NX等成熟的商業(yè)三維CAD軟件作為基準,在被測CAD軟件和一款或多款成熟商業(yè)軟件上進行同樣的建模操作,在結(jié)果模型中選取重要的參數(shù)進行比對,如面積、體積、質(zhì)量和重心等指標,若誤差小于設(shè)定的閾值,則測試通過;反之,則測試不通過。
對標測試需要對多款具備同樣功能的軟件進行操作,測試任務(wù)較大;在具體的實施過程中,可以借助于測試工具,減少實施成本。如三維CAD軟件的對標測試可以借助于測試工具,測試工具應(yīng)具備和多款CAD軟件適配的功能。
2.2.2 場景測試
場景測試是在真實的應(yīng)用場景下使用工業(yè)軟件,從而發(fā)現(xiàn)工業(yè)軟件的缺陷。場景測試主要包含工程化應(yīng)用測試和大規(guī)模試用驗證,兩種方法也分別與工業(yè)軟件研制全生命周期的應(yīng)用驗證階段和發(fā)布試用階段相對應(yīng)。
a)工程化應(yīng)用測試
工程化應(yīng)用測試是指小范圍特定用戶在實裝環(huán)境中應(yīng)用工業(yè)軟件,并對工業(yè)軟件的功能性、性能效率、兼容性、可靠性和易用性等質(zhì)量特性進行全面測試,這些用戶返回有關(guān)錯誤信息給開發(fā)者。工業(yè)軟件的工程化應(yīng)用驗證測試類似于β測試。
應(yīng)用驗證測試是十分關(guān)鍵的。例如:中國航空工業(yè)第一飛機設(shè)計研究院是世界上第一家在實際工程中使用CATIA V5軟件的用戶,通過在飛機研制過程中實際應(yīng)用CATIA V5軟件,陸續(xù)地發(fā)現(xiàn)了成百上千個問題,極大地幫助了該軟件的成熟,被達索公司認為是最重要的戰(zhàn)略伙伴之一。由此可見,工程化應(yīng)用測試對工業(yè)軟件研制方有重要的意義。
開展應(yīng)用測試必須是實際項目,由用戶主導,選擇實際產(chǎn)品在真實的環(huán)境中應(yīng)用。工程化應(yīng)用測試工作的結(jié)果是給出以下報告和產(chǎn)品:
1)工程化應(yīng)用測試過程和應(yīng)用測試結(jié)論的報告;
2)與當前主流相應(yīng)系統(tǒng)的優(yōu)缺點比較的報告;
3)對軟件系統(tǒng)的改進建議;
4)工程化應(yīng)用測試生成的產(chǎn)品,如零部件的設(shè)計和加工的產(chǎn)品,數(shù)字樣機等。
b)大規(guī)模試用驗證
如Linux定律所述, “只要足夠多的眼球關(guān)注,就可讓所有的軟件缺陷浮現(xiàn)”[12]。在軟件產(chǎn)品的測試過程中,軟件產(chǎn)品管理者希望能夠快速地獲得大量的反饋,以盡快地修復軟件產(chǎn)品缺陷并改進軟件產(chǎn)品質(zhì)量。然而,招募/訓練測試人員的巨大成本往往使得召集大量的專業(yè)測試人員變得困難。因此,如何快速地獲得測試反饋,特別是大量真實用戶的反饋以幫助產(chǎn)品的改進,同時以較低的成本高效地完成測試任務(wù),是當前軟件測試領(lǐng)域的困難之一[12]。
針對這個難題,目前一種有效的解決方法是眾包技術(shù),是互聯(lián)網(wǎng)帶來的一種分布式問題解決和生產(chǎn)組織模式,通過整合互聯(lián)網(wǎng)上的未知大眾和機器來解決機器難問題[13],即大量的在線測試人員參與完成測試任務(wù),可以提供對真實應(yīng)用場景和真實用戶表現(xiàn)的良好模擬,測試周期短且測試成本相對較低[14]。這些優(yōu)點使得眾包測試技術(shù)得到了學術(shù)界和工業(yè)界的廣泛關(guān)注,廣大研究人員密切關(guān)注眾包軟件測試的理論和方法。
當工業(yè)軟件經(jīng)過工程應(yīng)用測試后,小范圍的特定用戶會從自身使用的角度來提出問題,并反饋給開發(fā)者,經(jīng)過應(yīng)用測試后的工業(yè)軟件產(chǎn)品能解決大部分問題,但仍然存在少數(shù)缺陷,仍需做進一步的優(yōu)化處理。此時,工業(yè)軟件企業(yè)可以根據(jù)工業(yè)軟件的應(yīng)用領(lǐng)域有條件地對外開放,在更大范圍內(nèi)有限制地發(fā)布試用,即大規(guī)模試用驗證,以結(jié)構(gòu)CAE軟件為例,限定Licence時長,可在汽車、航天、航空和船舶等領(lǐng)域進行發(fā)布試用,使得工業(yè)軟件產(chǎn)品在更大的用戶范圍內(nèi)使用,發(fā)現(xiàn)問題并反饋給開發(fā)者,進而使得工業(yè)軟件產(chǎn)品進一步地完善。
經(jīng)過大規(guī)模試用驗證的工業(yè)軟件產(chǎn)品,此時已經(jīng)相當成熟,只需在個別地方再做進一步的優(yōu)化處理即可上市發(fā)行。
總的來說,本文提出的針對工業(yè)軟件的測試驗證方法彌補了通用軟件測試方法的不足,作為工業(yè)軟件生態(tài)建設(shè)的重要內(nèi)容,能夠保障產(chǎn)品的質(zhì)量水平,提升產(chǎn)品的成熟度。對于供給側(cè),工業(yè)軟件廠商在工業(yè)軟件研制過程中通過軟件測試提高產(chǎn)品質(zhì)量,實現(xiàn)“以測促研”;對于需求側(cè),工業(yè)軟件用戶通過軟件測試確認需求,驗證實現(xiàn),確保工業(yè)軟件的有效應(yīng)用,實現(xiàn)“以測促用”。因此,工業(yè)軟件測試驗證對于工業(yè)軟件生態(tài)體系建設(shè)具有重大的意義。