前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇波動方程范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。
關鍵詞: 瀑布型多重網格方法;矢量有限元;外推;矢量波動方程
中圖分類號:O 24182
文獻標志碼:A文章編號:1672-8513(2011)04-0267-05
A New Cascadic Multi-Grid Method for the Vector Wave Equation
LU Kangmei,LI Chengliang,CAO Yanbin
(School of Mathematics and Computational Science,Guilin University of Electronics Technology,Guilin 541004,China )
Abstract: The vector finite element method,which can effectively avoid the spurious modes,is widely used in the analysis of electromagnetic problems,as is the case in the discrete calculating of the vector wave equation.The finite element extrapolation technique for the eigenvalue problem, which is proposed by Yang Yi-duo,is extended and applied to eigenvalue problems of vector wave equation.In this paper,a new cascadic multi-grid method based on the vector field eigenvalue problem is proposed,based on the extrapolation technique.The numerical results show that the new method is a very accurate and efficient method.
Key words: cascadic multi-grid method;vector finite element;extrapolation;vector wave equation
在微波理論和技術中,諧振腔本征值問題是最基本的問題之一.很多微波部件和系統的分析與最優化設計又往往以該問題的求解為基礎.矢量有限元方法是近10年來在電磁場計算中應用比較廣泛的一種方法.只要選擇了合適的矢量基,所考慮結構的內部和外部邊界都能夠從數學上自然滿足,就能夠很好地解決偽解問題;又因為有限元方法的網格劃分能很好地模擬實際結構,因此我們選擇了矢量有限元對諧振腔進行離散計算.
多重網格方法,對于求解由微分方程離散化得到的方程組來說,是目前最快速高效的方法之一,它的求解的工作量可降為O(n)或O(nlnn).因此它在計算電磁場問題上得到了廣泛的關注,最近一些學者發展了基于棱邊元的多重網格算法[1-6].瀑布型多重網格無需粗網格校正,它比一般的多重網格方法計算量減少了,從而提高了計算效率,然而基于棱邊元上的瀑布型多重網格方法的研究還是比較少的,特別是矢量場的本征問題,目前研究的也較少.
外推算法是由林群, 陳傳淼等[7-8]引入到有限元求解偏微分方程,楊一都在文獻[9]中引進了本征有限元外推的一個新技術, 李永明等[10]將有限元外推應用到了波導本征問題.本文在其基礎上, 將其推廣應用到矢量波動本征問題, 具體的算例表明其可行性和高精度性.
本文結合外推技術,提出了一種基于矢量場本征問題的瀑布型多重網格方法.數值算例結果說明該方法的有效性和實用性.
1 數學基礎
對于一個填充相對介電常數為εr和相對磁導率為μr介質的封閉諧振腔體,對應的矢量波動方程為
其中ε為精度控制參數. 以上迭代過程簡記為(λj,uj)=NC{(j,j)}.
2.3 外推技術
定理1 設剖分是強正規的, 又設λ為對應于波導本征問題的簡單本征值, 相應的規格化本征函數u∈C4(Ω), 則本征值外推估計為:
λ=13(4λh/2-λh)+ο(h4).
詳細證明見文獻[9].
類似的,設某矩形諧振腔在粗矩形剖分單元下計算得到的本征值為λh, 隨后在此粗剖分基礎上加密剖分1次, 再計算得到的本征值為λh/2 ,則根據定理1 ,此矩形諧振腔本征值可由外推λhw=13(4λh/2-λh)(記為λhw=E(λh/2,λh)),得到更精確的解.
2.4 矢量波動本征問題的瀑布型多重網格算法
對于矢量有限元離散產生的一系列本征方程組Aiui=λiBiui(i=0,1,2,…,l), 若要求解最細網格層l層上本征方程Alul=λlBlul, 我們結合外推技術給出如下求解該本征問題的新瀑布型多重網格算法.
由圖2,我們也可以看出隨著網格的加密計算的精度越來越高,從而驗證了算法的快速收斂性,且和一般的瀑布型多重網格方法比較計算精度也提高了很多.
4 結語
從上述的算法公式,以及矩形諧振腔的諧振頻率計算結果的分析可以看到,利用瀑布型多重網格方法大大減少了計算量,將外推推廣應用到諧振腔本征問題求解精度得到了很大的提高,因此在比較少的單元剖分下便可以較大的提高計算精度.計算過程也比較簡單,易于編程,因此該算法在現代數值計算中是一種十分實用、簡單、高效的新方法.
參考文獻:
[1]WATANABE K ,IGARASHI H .Robustness of nested multigrid method for edge-based finite element analysis [J]. IEEE Transactions on Magnetics, 2009,45(3):1088-1091.
[2]TSAI C L ,WANG W S .An improved multigrid tcchnique for quasi-TEM analysis of a microstrip embedded in an inhomogeneous anisotropic medium[J].IEEE Trans. Microwave Theory Tech,1997,45(5): 678-686.
[3]WEISS B ,BIRO O .Edge element multigrid solution of nonlinear magnetostatic problems[J]. Comple,2001,20(2):357-365.
[4]SCHINNERL M ,SHOBERL J ,KALTENBACHER M. Nested multigrid methods for the fast numerical computation of 3D magnetic fields[J]. IEEE Trans Magn,2000,36:1539-1542.
[5]WATANABE K ,IGARASHI H ,HINMA T.Comparison of geometric and algebraic multigrid methods in edge-based finite-element analysis[J]. IEEE Transactions on Magnetics,2005,41(5):1672-1675.
[6]金建銘,王建國,葛德彪.電磁場有限元方法[M].西安:西安電子科技大學出版社,2001:165-186.
[7]陳傳淼,黃云清.有限元高精度理論[M].長沙:湖南科學技術出版社,1995:451-492.
[8]李郴良,陳傳淼,許學軍.基于超收斂和外推方法的一類新的瀑布型多重網格方法[J].計算數學,2007,37(9):1083-1098.
[9]楊一都.本征值有限元外推的一個新技術[J].貴州大學學報:自然科學版,1989,6(3):6-11.
【關鍵詞】鋁箔 加工 排產 優化
鋁箔的生產,在工藝方面和材料的使用方面要求都比較高。需要的工藝流程復雜,要經過焙鑄、熱軋鑄軋、冷軋、箔材軋制、分切等加工工藝和熱處理過程才能對鋁制品進行加工,工序比較長、難度比較大。鋁箔的生產技術不斷的發展使我國在鋁箔方面的消費比例不斷的提高但是鋁箔的生產水平還依然存在很多問題,對于加工方法還有待研究。本文對超薄鋁箔的加工動態集成排產方法進行研究。
1熱軋問題的使用方法
1.1數學規劃方法
在熱軋的問題上,我們早期使用的方法是數學規劃的方法。數學規劃模型的使用是利用動態的規劃方法對離散鋼鐵企業的優化生產問題進行解決的。PVC板生產中的多開工時間調度問題開發出了一種TABU搜索啟發的算法,這種算法的應用很大程度上減弱了開工時間的調度問題。分支界定算法的出現是對無縫鋼管的軋制進行多階段的分批調度問題的解決。而在軋機、加熱爐、能力損耗和制造成本方面的調度目標模塊所使用的是分支界定求解的方法。在國外,這幾種方法得到了廣泛的應用但是應用的時效性受到了限制。
1.2非數學規劃的方法
非數學的規劃方法可以分為兩大類,主要是啟發式方法和人工智能的方法。啟發式方法是通過對計算過程和評價指數的運算在比較短的時間里,有意識的尋找最佳的解決方案。COWLING提出了一種決策系統,這種決策系統是以鋼鐵熱軋過程的多模型為依據,利用TSBU的算法對調度問題進行有效的解決。熱軋調度問題的簡化是PCVRP的模型,同時提出了基于大規模鄰域定義的局部搜索方法。模擬退火算法有時候也被用于求解熱軋調度的相關問題。
1.3數學模型的建立
我國的研究者陳雄創造出了軋制批量計劃問題的數學模型,這種數學模型分為啟發式算法和模擬退火算法。我國在熱軋批量計算問題的約束滿意問題進行了處理,對軋熱問題的PCTSP建模和該模蟻群的蒜放方面做出了研究。針對軋熱問題的CVRP建模還提出了混合免疫算法。
上述的這些方法都是軋制生產中的優化排產的基本理論和方法。由于我國超薄鋁箔的生產不斷的發展,生產要求也隨之提高,在排產計劃和熱處理方面要使生產具有動態性就要根據具體實際進行任務的不斷完善和添加,隨時對排產計劃進行調整,排產的相關實時性要求和方法要快速的計算,增加可靠性和實用性特點。
2代數法建模
2.1符號函數的定義方法
I設置為鋁卷號,I=1,2...,P。J為設備的編號,J=1,2,...,M。工藝路線矩形陣R。R是n*m型矩陣,其中元素R表示鋁卷I在加工工藝路線中設備J所占的順序位。鋁卷號關系表E%表E中每行代表一個鋁卷號的屬性、各列分別表示物料編碼、爐架號、直徑、計劃開始時間、加工時間、設備編號、工藝順序號其中物料編碼、設備編號、工藝順序號、加工時間的數據來源于工藝路線矩陣和加工時間矩陣。圖1所示為爐架和鋁卷的幾何尺寸其中a、b、h分別代表爐架的長、寬、高。條件如下所示:
H=h1+h2+h3
r1>r2>....rk rk+1>rk+2>....>rk2k
上排
h1>r1 h2>r1 u1=r1 u2=r1+r2
下排
H3>rk+1 h2>rk+1
圖1.爐架和鋁卷的幾何參數
2.2第一次排序
第一次排序是對訂單池中的鋁卷進行排序,排序按照重要的程度和緊急的程度進行安排,優化的準則體現在評價指數當中。對調度問題的NP難度性,要選擇計算量不大,計算時間不長的效果優化好的啟發式目標函數作為評判的標準。
兼顧能夠對設備的使用率提高、合同按照完工率和裝爐系數等進行多樣性目標的歸集,評價的指數可以參照鋁卷號和爐架號進行歸類。第一次排序是對任務中的全部鋁卷進行加工,按照從小到大的順序進行排序。
2.3第二次排序
第二次排序是第一次排序的升級,把第一次排序截取的歸屬于統一最佳的鋁卷進行內部的排序,使呂佳能夠安裝更多的鋁卷,這樣能夠節省熱處理電費。這種方法也被稱為爐次計劃,計劃的步驟主要體現在:
首先,在按照排好的序列中從前向后截取鋁卷直徑之和小于或等于2a最好接近2a的鋁卷子序列。
其次,從這種子序列中對鋁卷進行選擇,每隔一個選取一個,按照鋁卷的直徑大小排列,排列順序是由小到大的排列順序。
最后,將該兩段鋁卷分別擺放在支架的上下兩排,對每個鋁卷的位置是否滿足約束條件進行檢查,如果符合則排產成功,進行下一步,如果沒有成功就要對兩端序列進行保留。截取兩端子序列,在四段中選配評價指數最小的又能滿足條件的方案。然后輸出鋁卷的兩次排序方式和爐架上的擺放方式。
2.4狀態賦值
當設備為退火爐時,設定編號為K,設備軋機時設定編號為J。這種情況下設備的變量的計算方式主要有三種,分別表示為:
首先,設備編號為軋制設備時每一個爐架的第一鋁卷開工時間為上一道熱處理時間與本輪最后一個任務完成時間的最大值。每一個爐架非第一個鋁卷軋制工序設備加工最近的鋁卷被上一道工序加工完畢是具有以下公式:
在設備J沒有加工鋁卷時,鋁卷被上一道程序加工時的公式是:
在這里i表示設備k加工的上一道鋁卷,熱處理工序的狀態時間是在當前設備加工的前一個爐架的結束時間和當前鋁卷時間的最大值。
3結語
綜上所述,本文從鋁卷的排產方法、爐架的布置以及生產的調度方面對超薄鋁箔的生產排產方法進行了研究。按照訂單的需求進行先后的排序,在同一個鋁卷在爐架上的合理排放方式進行了分析。超薄鋁箔具有工藝流程復雜性的特點,我們要對對象進行合并、分割、集中的特點運用相應的代數方法進行模型的建立以此促進按時完成訂單和節能減排的一員。
參考文獻:
傳統意義上的世界杯營銷,往往是有實力的大品牌之間的商業博弈行為,更多的中小企業大多數時候只是看客。然而,在今年的南非世界杯期間,我們卻看到了合作營銷的亮點。淘寶商城聯合中央電視手打造的世界杯營銷新模式,在交叉整合雙方資源的基礎上, “實現了品牌廠商、央視和淘寶商城的三方共贏,讓品牌在電子商務平臺上發揮出巨大能量”。淘寶網CFO兼淘寶商城總經理張勇表示。
據悉,在6月11日至7月12日的31天內,淘寶商城的曲美、九陽、七匹狼、歐莎等數十家品牌商在世界杯期間購買央視一套、五套的廣告資源,并與央視共同合作一檔電視節目,在淘寶商城內搭建網上世界杯頻道,同時,將央視“球迷狂歡節”節目中互動游戲“九宮格射門”與淘寶商城網上世界杯頻道的秒殺活動連接起來。電視節目中,現場嘉賓所踢中的九宮格球門中的任一品牌,便會在淘寶零點世界杯頻道的秒殺板塊以1元價格秒殺。這種精準的促銷廣告形式。縮短了消費路徑,直接將央視龐大的觀眾群導入到淘寶商城,傳播效果通過網絡平臺的銷售即刻展現。由此,大品牌可以更好地監控投放效果,把握市場需求;小品牌也“登堂入室”,進入了更多消費者的視野。
創新性的合作營銷模式為淘寶商城在世界杯期間締造了銷售神話。據淘寶數據顯示,在過去的31天,3000多萬人次關注淘寶商城球迷狂歡節,為淘寶帶來2390萬元成交量。淘寶網世界杯相關產品的交易額更是達到了4390萬元,是史上一個月交易額的44倍。當然,此次活動惠及更多的當屬參與活動的淘寶商城的商家們。600%的點擊增長,60%的銷售增長,讓商家們喜不自禁。
在眾多品牌中,增長最驚人的是奧克斯空調,592%的點擊增長令奧克斯的銷售人員都瞠目結舌,“在6月就迎來銷售高峰,我們都很吃驚。”銷售增長獲得215%的曲美也樂觀地表示, “我們覺得,這樣的模式不僅是商家遇到盛事時候的有效營銷模式,以后也可以不斷嘗試,說不定還能在實踐中不斷出新。”
一、FLIC文件格式的概述
FLIC文件事實上是對一個靜止畫面序列的描述,連續顯示這一序列便可在上產生動畫效果。FLIC文件結構簡潔,彈出速度快,雖然每種基色最多只有256級灰度,圖像深度只有8位,但使用起來很方便。
FLIC文件有兩種類型:FLI文件和FLC文件。FLC文是FLI文件的進一步發展,它采用更高效的壓縮技術,且其分辨率也不僅限于320×200。我們在PC上經常使用的FLI文件,因為它和VGA的320×200×256顯示相匹配。
FLIC文件采取的壓縮技術原理就是僅保存前一幀中改變的部分。這樣占的空間小,彈出速度快。FLIC文件的結果可分為3個層次:文件層、幀層和塊層。文件層給出了FLIC文件的基本特征。幀層定義了幀的緩沖和塊中塊的數目。塊層包括塊的大小、類型和實際數據。這樣的層次結構很容易實現,特別是可以增加塊的類型以滿足新的需要,同時無需涉及原定義。
二、各層頭的結構
1.FLI文件格式的結構定義
①文件頭的結構定義
文件頭長度為80H字節,其C語言結構定義如下
/*flifilehedaerstruct*/
typedefstruct{
unsignedlongfli-size;/*00H:文件總長度*/
unsignedintmagic;/*04H:文件格式,FLC=AF12;
FLI=AF11;*/
unsignedintframes-number;/*06H:FLIC的幀數*/
unsignedintscreen-width;/*08H:屏幕寬度*/
unsignedintscreen-height;/*0AH:屏幕高度*/
unsignedintunuserd;/*0CH:保留未用*/
unsignedintflags;/*0EH:標志=0003*/
unsignedintspeed;/*10H:幀間播放速度單位*/
unsignedlongnext;/*12H:置為0*/
unsignedlongfrit;/*16H:置為0*/
unsignedcharfli-expand[102];/*1AH:保留作擴展用=0*/
}FLIHEAD;
②幀頭的結構定義
幀頭長度為10H字節,其C語言結構定義如下:
/*framesheaderstruct*/
typedefstruct{
unsignedlongsize-frame;/*00H:幀大小,包括本幀頭*/
unsignedintmagic;/*04H:幀標識字=0F1FAH*/
unsignedintchunks;/*06H:本幀塊數*/
unsignedcharexpand[8];/*08H:保留未用=0*/
}FRAMESHEAD;
③塊頭的結構定義
塊頭長度為6H字節,其C語言結構定義如下:
/*chunkheaderstruct*/
typedefstruct{
unsignedlongsize-chunk;/*00H:塊大小*/
unsignedtype-chunk;/*04H:塊類型*/
}CHUNKHEAD;
2.FLC文件格式的結構定義
文件頭長度為80H字節,其C語言結構定義如下:
/*flifileheaderstruct*/
typedefstruct{
unsignedlongfli-size;/*00H:文件總長度*/
unsignedintmagic;/*04H:文件格式,FLC=AF12;
FLI=AF11;*/
unsignedintframes-number;/*06H:FLIC的幀數*/
unsignedintscreen-width;/*08H:屏幕寬度*/
unsignedintscreen-height;/*0AH:屏幕高度*/
unsignedintdepth;/*0CH:圖像深度*/
unsignedintflags;/*0EH:標志=0003*/
unsignedintspeed;/*10H:幀間播放速度單位
FLC=1ms,FLI=1/70s*/
unsignedintreserved-1;/*14H:保留未用*/
unsignedlongcreatetime;
unsignedlongcreator;
unsignedlongupdatetime;
unsignedlongupdater;
unsignedintaspectx;/*創建文件時的顯示屏幕像素大小的縱橫比,VGA320×200
unsignedintaspecty;為6∶5*/
unsignedcharreserved-2[0x26];/*保留未用,=0*/
unsignedlongoffsetframel;/*50H:第一幀畫面相對于文件
開始的偏移*/
unsignedlongoffsetframe2;/*54H:第二幀畫面相對于文件
開始的偏移*/
unsignedcharreserved-3[0x28];/*保留未用=0*/
}FLIHEAD;
FLC的幀頭和塊頭的結構定義和FLI文件格式的定義相同。
每塊的數據緊接在FLIC文件頭的后面。對于不同的塊類型有不同的數據含義,下面就不同的塊類型分別介紹,這是設計播放FLIC動畫文件程序的關鍵之所在。
三、塊類型的含義
FLIC格式文件中的塊類型有許多種,每一種類型都有不同的定義,因此我們必須對每一種類型作出準確的分析。由于動畫格式FLIC圖像文件的塊類型具有極強的可擴展性,在此我們只介紹幾種常見的塊類型。
1.類型04H
為每基色256級灰度的彩色調色板信息表FLIC-COLOR,其第一個字為需調色的調色子塊數(一個字),緊接其后的是需調色的相應各塊的數據定義:
字節含義
第一字節:跳色數,在本塊中的需要跳過的顏色數(字節)。
第二字節:調色數,本塊中有多少種顏色需要改變,當調色數為0時指調256色。初始時當前色號為零。
其后的字節:以三字節為一組,是需要改調色的相應的RGB值。
通常FLIC圖像文件的頭一幀的第一塊數據便是該類型(或0BH類塊)。在程序設計中我們定義了一個256色的調色板數組:
charpalette[768];
用于完成調色板的初始化工作。
2.類型07H
該類型數據以字節為基礎,只適用于.FLC文件,處理對第一幀圖像的改變情況較為適用。它含有本幀圖像對于上與幀圖像的改變部分。
這種塊類型是一種最常用的、最復雜的塊類型,一般除了第一幀外后面的各幀通常采用這種塊類型進行行數據壓縮存儲。它的描述如下:
字節含義
(1)第一個字:需要改變的行的數量
(2)第二個字開始:是具體需要改變的數據本身。每一行是進行單獨的壓縮的,這種技術的采用大大壓縮了.FLC文件長度。它的具體定義為:可選字、小塊數及小塊的值。①可選字:
當高位=11時,低位部分為跳行數。該字可以有多個,其跳行數相加。當高位=10時,低位部分內容為當前行的最后一個字節。(作為本行的結束標志)。②小塊數:當高位=00時,此字表示小塊數的值。③小塊:第一個字節:跳列數。第二個字節:小塊類型:當該值為正時:表示要從塊中搬到圖像中的像素(字)個數N,其后就是N個連續的像素數據;當該值為負時:它的絕對值N表示要重復從塊中搬到圖像中的像素(字)的次數,其后就是那個像素的數據
。第三個字節:塊中的圖像數據(字)。
3.類型0BH
與類型04H類似,它與VGA的13H模式相匹配。
4.類型0CH
與類型07H類似,但它以字節為基礎,通常用于.FLI文件
字節含義
(1)第一個字:從屏幕上方開始和上一幀相同的行數即本幀中第一行要改變的行號。例如:如果有一個改變(運動)僅僅只是在屏幕的底部,那么此時該字值為199(VGA320×200)。
(2)第二個字:需要改變的行的數量。
(3)第三個字以后:是具體需要改變的數據本身。每一行是進行單獨的壓縮的,這種技術的采用大大壓縮了.FIC文件長度。它的具體定義為:小塊數及塊的值。
①小塊數:此字表示小塊的個數值,它是本行中含有小塊的個數。當小塊數=0時,說明本行和上一行相同,不用進行重新處理。
②小塊:第一個字節:跳列數。第二個字節:小塊類型:當該值為正時:表示要從塊中搬到圖像中的像素(字節)個數N,其后就是N個連續的像素數據;當該值為負時:它的絕對值N表示要重復從塊中搬到圖像中的像素(字節)的次數,其后就是那個像素的數據。第三個字節:
塊中的圖像數據。
5.類型0DH
該類型沒有數據,該幀的所有像素值都為0。在實際應用中通常它只產生在當用戶使用3DS創建一個新的FLIC文件中的第一幀。
6.類型0FH
該類型用于壓縮圖像,通常只用于第一幀。它采用了Run-Length壓縮方法。該方法與類型07H及0CH中的行數據壓縮方法是相似的。只是在該方法中正負號的定義與類型07H和0CH恰好相反。
字節含義
(1)第一字節本行中小塊數。
(2)第二字節小塊的具體內容。
①第一字節:小塊類型:當該值為負時:它的絕對值表示要搬到圖像中的像素(字節)個數,其后就是數據;當該值為正時,表示要將下一個像素復制到圖像中的次數,該像素(字節)緊隨其后。
②第二個字節:塊中的圖像數據。
7.類型10H
這種類型不進行壓縮,塊中的數據個數一定為圖像的長寬相乘。這種類型在實際應用中一般不用。
下面具體討論播放程序的C語言程序設計方法,本文中的程序是針對.FLI格式的動畫文件而進行的程序設計。讀者如果要播放.FIC格式的動畫文件,只需根據.FIC文件格式的具體定義,并參照下面的程序設計方法即可設計出相應的程序。
四、程序設計
1.第一幀圖像的播放程序
voidFirst-Frame(Video-Mem,fli-fp)
char*Video-Mem;
FILE*fli-fp;
{
intLine-PacketNumber
intSize-Count=0
intScreen-Char;
longSereen-Count=0L;
memset(Video-Mem,0,60000);
do{
Line-PacketNumber=fgetc(fli-fp);
while(Line-PacketNumber--)
{
Size-Count=fgetc(fli-fp);
if((Size-COUNT&0X80)==0X80
{
Size-Count=(256-Size-Count);
while(Size-Count--)
{
Screen-Count++;
Sereen-Char=fgete(fli-fp);
*Video-Mem++=Screen-Char;
}
}
else
{
Sereen-Char=fgete(fli-fp);
while(Size-Count--
{
Screen-Count++;
*Video-Mem++=Sereen-Char;
}
}
}
}while(Screen-Count<64000);
}
2.FLI后續各幀圖像的播放程序
voidOther-Frame(Video-Mem,Fli-fp,Update-LineNumber)
char*Video-Mem;
FILE*Fli-fp;
intUpdate-LineNumber;
{
intSize-Count=0,Skip-Col=0;
intUpdate-LineCount=0;
intScreen-Char;
intNumber-Packet;
char*Video-p;
while(Update-LineCount<Update-LineNumber)
{
Video-p=Video-Mem;
Number-Packet=fgetc(Fli-fp)
Update-LineCount++;
while(Number-Packet--)
{
Skip-Col=fgete(Fli-fp);
Video-Mem=Video-Mem+Skip-Col;
Size-Count=fgetc(Fli-fp);
if((Size-Count&0x80)==0x80)
{
Size-Count=256-Size-Count;
Screen-Char=fgetc(Fli-fp);
while(Size-Count--)*Video-Mem++=Sereen-Char;
}
else
{
while(Size-Count--){
Screen-Char=fgetc(Fli-fp);
*Video-Mem++=Screen-Char;
}
}
}
Video-Mem=Video-p+320;
}
}
3.播放程序的調用及其它幾個子程序
voidTransmit-Fli(Fli-fp)
FILE*Fli-fp;
{
intNUmber-Chunk;
if(fread((unsignedchar*)&header,1,sizeof(FLIHEAD),Fli-fp)
==sizeof(FLIHEAD))
if(header,magie|=0xAF11)
{
printf("NotanFLIfile/n");
exit(0);
}
if(fread((unsignedchar*)*frame-head,1,
sizeof(FRAMESHEAD),Fli-fp)==sizeof(FRAMESHEAD));
if(frame-head,magic=0xF1FA)
{
printf("ReadinganErroeFLIfile\n");
exit(0);
}
if(fread((unsignedchar*)&chunk-head,1,
sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));
if(fread(&NUmber-Chunk,1,sizeof(int),Fli-fp)==sizeof(int));
else{
printf("ErrorreadingFli\n");
exit(0);
}
fgetc(Fli-fp);fgetc(Fli-fp);
if(fread(&palette,1,sizeof(palette),Fli-fp)==768);
else{
printf("ErrorreadingFli\n");
exit(0);
}
if(fread((unsignedchar*)&chunk-head,1,
sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));
else{
printf("ErrorreadingFli\n");
exit(0);
}
ShowFli-Frame(Fli-fp);
fclose(Fli-fp);
}
voidShowFli-Frame(Fli-fp)
FILE*Fli-fp;
{
longFrame-DataAddress;
intFirst-UpdateLine,End-UpdateLine;
intFrame-Number=2,Adjust-Char=0;
init();
setvgapalette(palette);
First-Frame(MK-FP(0x0a000,0x0),Fli-fp);
Frame-DataAddress=ftell(Fli-fp);
while(Frame-Number<=header,frames-number-1)
{
Frame-DataAddress=ftell(Fli-fp);
Adjust-Char=fgetc(Fli-fp);
if(Adjust-Char|=0)fseek(Fli-fp,-1L,SEEK-CUR);
if(fread((unsignedchar*)&frame-head,1,
sizeof(FRAMESHEAD),Fli-fp)==sizeof(FRAMESHEAD));
if(frame-head,magic|=0xFIFA)exit(0);
if(frame-head,chunks|=0)
{
if(fread((unsignedchar*)&chunk-head,1,
sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));
if(fread(&First-UpdateLine,1,sizeof(int),Fli-fp)
==sizeof(int));
else{
printf("ErrorreadingFli/n");
exit(0);
}
if(fread(&End-UpdateLine,1,sizeof(int),Fli-fp)
==sizeof(int));
else{
prinft("ErrorreadingFli/n");
exit(0);
}
Other-Frame(MK-FP(0x0a000,First-UpdateLine*320),Fli-fp,
End-UpdateLine);
}
Frame-Number++;
}
}
voidvideo-init()
{
unionREGSr;
r.x.ax=0x0013;
int86(0x10,&r,&r);
}
voidvideo-text()
{
unionREGSr;
r.x.ax=0x0003;
int86(0x10,&r,&r);
}
setvgapalette(p)
char*p;
{
unionREGSr;
structSREGSsr;
inti;
for(i=0;i<768;++i)*(p+i)=*(p+i)>>1;
r.x.ax=0x1012;
r.x.bx=0;
r.x.cx=256;
r.x.dx=FP-OFF(p);
sr.es=FP-SEG(p);
int86x(0x10,&r,&r,&sr);
【關鍵詞】NGBOSS QTP 關鍵字驅動 自動化測試框架
隨著3G業務的開展,三家運營商的競爭不斷深入,NGBOSS系統作為全業務時代開展新業務的信息支持系統,需要快速的實現更新換代,以盡早滿足快速發展的新業務需求。在多樣化的新產品不斷出現的同時,由于存在大量的在網用戶,在NGBOSS系統建設過程中,原有產品模式需要同步支持,因此NGBOSS系統變的越來越復雜。客戶對移動通信的服務質量提出了更高的要求,而NGBOSS系統的質量在一定程度上取決于系統測試的全面程度,在保證測試質量的前提下,降低測試成本,提高測試效率,改變以往單純靠人工測試的方法,需要在測試方法上進行改進研究。
本文針對NGBOSS工程建設中的問題,重點關注軟件業務測試,并通過自動化測試進行常規業務探測,實現系統故障的及時發現,提高客戶的滿意度。
1 自動化測試實施分析
自動化測試是一種把以人為驅動的測試行為轉化為機器自動執行的方法。在目前的軟件測試項目實施中,項目團隊為了降低測試成本、提高測試效率,一般用自動化測試代替多重驗證測試和手工測試。但是在軟件項目中,項目管理人員對于自動化測試的認識仍存在一些疑問和誤解,例如任何測試項目都可以自動化;用自動化測試取代手工測試;在趕進度的情況下,緊急實施自動化測試。
自動化測試實施是與軟件開發并行的一個軟件項目開發過程,包含需求、設計、編碼、自動化平臺代碼調試測試、上線、上線后運行等完整的軟件生命周期。上線前自動化測試項目處于投入階段,在上線后的運行期進行用例編寫、腳本調試、自動化腳本運行,此時自動化平臺進入效益產出階段。
對于一個完整的定制化的自動化測試平臺工程項目來講,需要項目團隊在實施立項階段考慮自動化開發成本和產出的效益。只有產生的效益大于實施成本和人工測試的成本時,才有實施自動化測試工程的必要。自動化測試實施的成本包括自動化測試團隊人力成本、軟硬件開發成本。
假設成本總計為N,共對x個業務進行自動化測試實施。x個業務進行手工測試需要人力成本為a。創收的計算方法是:假設x個業務不用自動化,進行手工測試需要人力成本為a,那么當這x個業務都用自動化腳本執行后,每執行一次批量自動化,就節省成本a。當重復執行M次后,節省的勞動力成本M*a就是自動化項目的收益,即:M*a>N。因此可通過控制成本,最小化N和增加重復執行次數M,實現自動化測試實施效益的最大化。
在具體實施時,控制成本的方法一般有:在框架方面簡化框架,以穩定為主,能用就好,防止過度開發;在腳本方面,簡潔易開發,同時穩定腳本,盡量減小維護成本。創造的效益取決于執行次數和腳本覆蓋率,因此腳本批量執行的次數越多,腳本覆蓋業務的比例越大,節省的人力成本就越多,創造的效益越大。
通過以上分析,可以總結出適合進行自動化測試的工程項目必須具有的特點包括:一是項目比較成型,測試需求不會頻繁變動,否則腳本維護成本太高;二是項目周期足夠長,可以進行自動化項目開發和實施;三是腳本會被多次復用,執行的次數越多,自動化越有意義,否則,就沒有必要開發自動化。
當一個項目滿足以上特點,成功執行自動化測試后,意義是非常明顯的:一是節省人力成本,提高測試效率;二是自動化測試提供區別于手工測試的另一種驗收標準,通過自動化測試報告用數據說話,并且自動化測試通常能發現手工測試無法發現的BUG;三是做手工測試無法做或者很難做的測試,如模擬測試、危險測試。
NGBOSS作為中國移動的新一代業務支撐系統,前臺業務復雜,涉及個人業務、家庭業務和集團業務等全部業務辦理及計費過程。項目實施時間長,上線后會持續運行3~4年時間,隨著電信行業競爭的加劇,系統版本更新更加頻繁。以廣東為例,一般每年進行12次常規性升級,在每次升級后均需要進行常規業務的驗證,若采用自動化測試實施后,可以采用自動化測試腳本進行常規業務探測,降低系統故障率。通過以上分析,在NGBOSS系統中實施自動化測試,可以實現測試效率的提升和測試成本的下降,因此有必要實施自動化測試平臺的建設。
2 自動化測試構建思路
結合自動化測試實施成本和效益理論的分析,通過對目前常見的自動化測試流程進行研究,提出改進的方案。自動化實現的基本原理均是錄制回放,將錄制出來的腳本進行回放,就實現了自動化執行。本文以QTP(Quick Test Professional)進行腳本錄制和回放。下面以QTP為基礎,研究適合NGBOSS工程建設的自動化建設思路。
傳統的自動化測試流程如圖1所示,是面向過程的線性流程,目前業內最通用。
在這個流程下,業內主要有兩種自動化模式:
(1)錄制回放模式
錄制回放模式的原理是以QTP錄制的VBS腳本為基礎,增加代碼控制邏輯,將修改調試好的VBS腳本返給QTP回放,實現自動化。這種模式,腳本實質上是VBS代碼,優點是可調用VBS多種函數,并能使用控制邏輯如if、else、exit、for等。缺點是維護成本較高,頁面、邏輯、數據的變更都要遍歷整個腳本,對涉及到的變更進行修改。在這種模式下,自動化流程是直線型的一維模式,邏輯、數據全都捆綁在腳本上,導致難以拆分業務,設計用例復雜,最終導致腳本凌亂。
(2)數據驅動模式
數據驅動模式,是在錄制回放模式的基礎上,將數據輸入存儲在獨立的數據文件中,腳本只存放控制信息,測試時輸入直接從文件中讀取,這樣同一腳本可以運行于不同的測試用例中,實現了腳本與數據的分離。這是一種二維模式,腳本和數據可分別設計,業務線條變得清晰。但此種模式仍需通過編寫VBS腳本方式實現測試用例的編寫,在涉及到多業務系統腳本編寫時,腳本重復度高,用例編寫需要專業的自動化測試人員進行。面對NGBOSS業務復雜的情況,重點業務一般有50~60項,全部通過VBS腳本實現,將帶來自動化測試人力成本的快速提高。因此需要考慮通過降低腳本編寫難度,使一般的手工測試人員經過簡單的培訓后,即可進行自動化測試用例編寫工作,并實現測試用例編寫人員和專業測試工具的解耦。
在傳統自動化測試流程基礎上,新建一個分層模型,對自動化過程進行分離、優化(如圖2),自下向上分別為模型層、數據層、控制層和應用層。
(1)模型層是最底層,由測試工具識別的控件對象以及對象的識別腳本構成,模型層負責將控件對象和識別腳本分別組織并以友好的方式提供給數據層的標簽庫模塊使用。
1)對象識別腳本在使用QTP錄制時,QTP自動記錄對象并生成測試腳本。該測試腳本包含了對對象的識別、執行動作和測試數據,使得測試腳本難以重用和維護。本文在測試框架模型層中只保留對對象的識別腳本,而把測試數據放到數據層、執行動作放到控制層管理,從而實現了相互之間的分離。
2)控件對象在測試框架模型層中,通過對界面元素的分析(UI分析)并和QTP對象識別機制相映射來組織控件對象。UI分析是從被測系統界面入手,記錄頁面層次并把該頁面中的對象以要素的形式記錄到數據庫中,以達到結構化。
(2)數據層由標簽庫和測試數據庫構成,標簽庫保存要素名和識別腳本的映射關系,測試數據庫保存具體的測試數據。
1)標簽庫
標簽庫是針對某一個應用建立的,它可以通過學習而擴展,其中包含了圖形用戶界面交互的完整細節,包括界面和對象。本文通過打標的方式來對具體交互細節進行封裝:首先利用QTP錄制待測系統的執行過程,獲取各測試對象的腳本;然后對錄制腳本進行打標,實現要素名和測試對象的對應;最后對打標后的腳本進行分解并提取識別腳本和標簽,生成標簽庫。
2)測試數據庫
測試數據庫提供具體的測試數據,其中測試數據與UI分析得到的測試對象相對應,每個測試對象根據系統需要,有不同的業務規則,如果業務規則比較復雜,則把業務規則分解成最小顆粒。針對每一個最小業務顆粒,測試人員至少要準備2組測試數據,分別為正例和反例:正例是指符合該測試點測試數據;反例是指不符合該測試點的測試數據。執行測試時必須保證正例能通過而反例不能通過,否則就說明該處存在BUG。
(3)控制層為自動化測試框架提供了一個控制入口,測試工程師利用控制層實現具體的測試意圖:測試工程師可以對測試的執行順序根據需要進行調整,使得測試不必按錄制順序回放;可以通過關鍵字設置對象的執行動作,實現各種操作;并可通過要素名匹配測試數據。
(4)應用層通過用例描述原語(ASL)具體實現測試的執行:ASL首先獲取測試案例的某一控制文件,得到該測試邏輯并解析出測試數據標志和標簽;然后通過要素標簽在標簽庫中查找相應腳本,匹配測試數據庫中測試數據,組合生成測試工具QTP可以執行的腳本;最后調用測試工具QTP實施自動化測試。
在這個模型下,主要有以下兩種自動化模式:
(1)關鍵字驅動模式
關鍵字驅動模式是在數據驅動模式基礎上簡化腳本、分離業務。通過關鍵字描述語言,代替VBS代碼語言,將業務邏輯從復雜的代碼行轉化成肉眼可見的一個個關鍵字語言描述行,實現業務、腳本和數據的分離。
(2)增強型關鍵字驅動模式
增強型關鍵字驅動模式是在關鍵字驅動的基礎上開發自動化測試輔助平臺,進一步實現腳本和業務的分離。這種模式是在已經開發關鍵字模式的基礎上進行增量精確開發。
以上四種自動化模式,各有各的優缺點。總的來說,自動化技術和理念越來越先進,自動化開發成本呈遞增趨勢,自動化維護成本呈遞減趨勢。
從業務和自動化開發綜合考慮:業務上,BOSS系統耦合性高、業務復雜,必須要將自動化從復雜的業務中剝離出來;自動化開發需綜合考慮技術成熟度、開發成本、維護成本。
本文采用關鍵字驅動模式,而增強型關鍵字驅動模式,開發成本較高。可以先考慮開發關鍵字驅動模式,后面再視具體項目情況考慮是否開發輔助平臺。下面將重點研究關鍵字驅動模式。
關鍵字驅動模式的實現思想是通過以關鍵字為驅動的腳本來取代QTP的VBS代碼行腳本。下面舉一個百度搜索的例子。
使用QTP錄制一行打開百度的腳本如下:
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\automind","open"
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set "search"
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Click
這是普通模式下的腳本,在關鍵字驅動模式下,是要把這種VBS代碼行腳本轉化為以關鍵字為驅動的直觀的腳本。以目前一種成熟的關鍵字驅動模式為例,上面這些VBS代碼行等價于表1的腳本:
在這種模式下,腳本形式為Excel腳本,上面的腳本,使用Open、With、Type、Click四個關鍵字。這種模式將函數執行封裝成關鍵字,并以Excel的形式編寫腳本。框架將Excel腳本解析成VBS代碼行,返回給QTP執行。
以上舉例展現4個關鍵字。實際使用過程中,一般有四大類型關鍵字:一是操作類,用來實現動作執行,關鍵字一般有Wwith、Call Function、Open、OpenApp、Click、DbClick、Type、TypePath、TypeDate、ClickTable、TreeSelect等;二是控制類,用來實現腳本邏輯控制,關鍵字一般有滿足條件執行腳本、跳轉、循環等,如if、else、for、exit等;三是檢查類,對執行過程中的對象或者產生的數據進行檢查,確保業務流程的正確性,如assertSelected、assertNotSelected、assertChecked、GetTableData等;四是數據類,連接數據庫,執行數據增刪改查,如Run Sql、Run Sql Select等。
通過關鍵字驅動模式進行編寫,可實現如下提升:Excel形式的腳本,通過關鍵字編寫測試用例,一般熟悉測試的人員即可進行自動化測試用例的編寫;Excel腳本中分information、script和data三個工作薄,information為腳本總體信息,script為腳本控制和執行流程,data為數據組合;script和data實現腳本控制和數據的分離;腳本維護變得更簡單;生成Excel時報告對應每一個Excel腳本執行行,報告清晰。
3 自動化對開展工程建設測試的意義
自動化測試的特點,決定了自動化測試無法取代手工測試。自動化測試與手工測試都只是工程測試的一部分。自動化的意義在于:
(1)降低測試成本,提升測試效率
自動化測試可部署在服務器上,定時晚上執行,提升測試效率。假設自動化測試覆蓋600個業務,由10個測試人員來執行,每人每天可執行30個業務,那么執行這600個業務一次,需要20人天的人力,10個人要執行2天。如果讓自動化測試來執行,幾臺服務器晚上并行執行,即可執行完畢。也就是說,10個人執行600個業務1次,可節省10個人力和2天時間。如果自動化覆蓋的業務更多,執行的次數翻倍,節省的人力和時間將成幾何指數上升。
(2)為工程測試提供區別于手工測試的驗收標準
自動化測試與手工測試的出發點不一樣,從效果看,自動化測試經過多次執行,會發現一些手工測試無法發現的缺陷,彌補手工測試的不足。
事實上,發現BUG并非自動化的主要作用,甚至可以說,項目測試發現的BUG越多,自動化測試越難執行下去。一般來講,手工測試能發現70%~80%的BUG,自動化測試能發現15%~30%的BUG。從BUG分布來講,有交叉重疊部分,也有隱藏的都沒有發現的部分。自動化能獨立發現的BUG往往是小概率的,需要重復執行才能出現的隱性BUG。例如,在一次自動化測試執行過程中,發現程序core了一次,根據記錄的日志,最終定位發現,原來是一起內存泄露故障。這種例子非常常見。
(3)回歸測試版本測試
在回歸測試和版本測試中,自動化測試可以得到大量應用,可以完全代替手工測試,從而釋放人力。
參考文獻:
[1] 王磊. 關鍵字驅動的自動化測試框架設計與實現[J]. 電子測試, 2010(8): 87-93.
[2] 接卉,蘭雨晴,駱沛. 一種關鍵字驅動的自動化測試框架[J]. 計算機應用研究, 2009(3).
[3] 李弦,陳恭亮. 基于BOSS系統的業務量分析研究[J]. 移動通信, 2010(12): 92-95.
免责声明:以上文章内容均来源于本站老师原创或网友上传,不代表本站观点,与本站立场无关,仅供学习和参考。本站不是任何杂志的官方网站,直投稿件和出版请联系出版社。
工信部备案:蜀ICP备18023296号-3 川公网安备:51010802001409 出版物经营许可证:新出发蓉零字第CH-B061号 统一信用码:91510108MA6CHFDC3Q © 版权所有:四川好花科技有限公司
免责声明:本站持有《出版物经营许可证》,主要从事期刊杂志零售,不是任何杂志官网,不涉及出版事务,特此申明。