本發(fā)明涉及互聯(lián)網(wǎng)領域,尤其涉及一種場景運行時間測試方法及裝置。
背景技術:
在移動終端的應用特別是游戲應用開發(fā)過程中,特定場景的運行時間,例如,玩家登陸游戲花費的時間、切換場景花費的時間、界面打開消耗的時間,已經(jīng)成為一個非常影響用戶體驗的因素。如果這些特定場景的運行時間過長,就可能降低玩家的游戲體驗,從而導致玩家的流失。
對于這類問題,提供準確的測量數(shù)據(jù)是非常必要的。傳統(tǒng)的場景運行時間測量方案主要有兩種,一種是通過在應用中增加代碼打印log信息進行查看;另外一種是通過對應用進行錄屏、分析錄屏視頻來測量時間消耗。對于第一種方法,其實現(xiàn)步驟為,在測試場景的起始幀和結(jié)束幀設置log信息記錄,然后通過獲取兩次打印log信息的時間差獲取場景的運行時間;對于第二種方法,其實現(xiàn)步驟為:在場景運行過程中進行錄屏獲得視頻,然后對獲取的視頻進行逐幀分析,從而獲取起始幀和結(jié)束幀的時間差,得到場景的運行時間。
技術實現(xiàn)要素:
對于第一種方法,其與應用本身的耦合性太高,需要程序?qū)iT加代碼實現(xiàn),而且不同項目需要不同的代碼進行實現(xiàn),因此無法復用,不適合測試人員進行測試。此外,由于是直接使用程序的log信息,而在安卓系統(tǒng)層面渲染幀數(shù)據(jù)并顯示到硬件屏幕上是無法通過log獲取到的,因此這部分時間無法獲取,導致測量的時間與實際的運行時間存在一定的誤差。對于第二種方法,其實現(xiàn)過程較為繁瑣,需要先進行錄屏,然后分析獲取的視頻的幀數(shù)據(jù)。部分安卓機型由于性能問題,導致系統(tǒng)提供的錄屏方案經(jīng)常會終止或者截屏畫面被截斷的問題。而且,由于一般的安卓錄屏獲取的視頻每秒一般30幀,如果畫面沒有變化每秒會達到幾幀,部分機型甚至更低,導致在對幀進行匹配的時候,會有接近0.5秒左右的誤差,不適合一些對運行時間比較敏感的場景,不是很適合。此外,第二種方法錄屏和視頻分析分開來處理,考慮的機型問題過多,無法形成自動化測試。
針對上述問題,本發(fā)明提供了一種場景運行時間測試方法及裝置,可實現(xiàn)準確、方便且可復用的場景運行時間測試。
本發(fā)明提供了一種場景運行時間測試方法,包括如下步驟:
根據(jù)啟動指令運行待測試場景,并記錄生成所述啟動指令的第一時間;
獲取所述待測試場景的當前畫面的像素信息;其中,所述像素信息包括組成所述當前畫面的每個像素點的坐標及顏色值;
根據(jù)所述像素信息提取出所述當前畫面的位于預設的監(jiān)測坐標的像素點的顏色值;
將提取的所述顏色值與目標顏色值進行匹配;其中,所述目標顏色值為目標畫面的位于所述監(jiān)測坐標的像素點的顏色值;
獲取成功匹配時的第二時間,并根據(jù)所述第二時間及所述第一時間生成所述待測試場景的運行時間。
優(yōu)選地,所述目標畫面為所述待測試場景的最后一幀畫面或者為所述待測試場景的下一個場景的第一幀畫面。
優(yōu)選地,所述獲取所述待測試場景的當前畫面的像素信息具體包括:
獲取所述待測試場景的正在顯示的當前畫面的圖像數(shù)據(jù);
讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息獲得所述當前畫面的像素信息。
優(yōu)選地,在根據(jù)啟動指令運行待測試場景,并記錄生成所述啟動指令的第一時間之前,還包括:
創(chuàng)建與測試服務端的端口映射,建立與所述測試服務端的socket連接;
通過所述socket連接接收所述測試服務端生成的啟動事件,并根據(jù)所述啟動事件生成啟動所述待測試場景的啟動指令。
優(yōu)選地,在將提取的所述顏色值與目標顏色值進行匹配之前,還包括:
獲取目標畫面的圖像數(shù)據(jù),讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息,獲得所述目標畫面的像素信息;
獲取預設的監(jiān)測坐標;
根據(jù)所述像素信息讀取所述目標畫面的位于所述監(jiān)測坐標的像素點的顏色值,得到目標顏色值。
優(yōu)選地,所述獲取預設的監(jiān)測坐標,包括:
向所述測試服務端傳輸目標畫面的截圖,以使所述測試服務端顯示所述截圖;
接收所述測試服務端返回的用戶在所述截圖上的點擊坐標,并根據(jù)所述點擊坐標生成監(jiān)測坐標;或,
向所述測試服務端發(fā)送監(jiān)測坐標獲取請求;
接收所述測試服務端返回的響應信息,所述響應信息包括:由用戶輸入的監(jiān)測坐標;或,
從本地存儲空間中讀取預設的監(jiān)測坐標。
本發(fā)明還提供一種場景運行時間測試裝置,包括:
啟動單元,用于根據(jù)啟動指令運行待測試場景,并記錄生成所述啟動指令的第一時間;
像素信息獲取單元,用于獲取所述待測試場景的當前畫面的像素信息;其中,所述像素信息包括組成所述當前畫面的每個像素點的坐標及顏色值;
顏色值提取單元,用于根據(jù)所述像素信息提取出所述當前畫面的位于預設的監(jiān)測坐標的像素點的顏色值;
匹配單元,用于將提取的所述顏色值與目標顏色值進行匹配;其中,所述目標顏色值為目標畫面的位于所述監(jiān)測坐標的像素點的顏色值;
運行時間計算單元,用于獲取成功匹配時的第二時間,并根據(jù)所述第二時間及所述第一時間生成所述待測試場景的運行時間。
優(yōu)選地,所述目標畫面為所述待測試場景的最后一幀畫面或者為所述待測試場景的下一個場景的第一幀畫面。
優(yōu)選地,所述像素信息獲取單元具體包括:
圖像數(shù)據(jù)獲取模塊,用于獲取所述待測試場景的正在顯示的當前畫面的圖像數(shù)據(jù);
像素信息獲取模塊,用于讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息,獲得所述當前畫面的像素信息。
優(yōu)選地,還包括:
端口映射單元,用于創(chuàng)建與測試服務端的端口映射,建立與所述測試服務端的socket連接;
啟動指令生成單元,用于通過所述socket連接接收所述測試服務端生成的啟動事件,并根據(jù)所述啟動事件生成啟動所述待測試場景的啟動指令。
優(yōu)選地,還包括:
目標像素信息獲取單元,用于獲取目標畫面的圖像數(shù)據(jù),讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息,獲得所述目標畫面的像素信息;
監(jiān)測坐標獲取單元,用于獲取預設的監(jiān)測坐標;
目標顏色值讀取單元,用于根據(jù)所述像素信息讀取所述目標畫面的位于所述監(jiān)測坐標的像素點的顏色值,得到目標顏色值。
優(yōu)選地,所述監(jiān)測坐標獲取單元包括:
截圖傳輸模塊,用于向所述測試服務端傳輸目標畫面的截圖,以使所述測試服務端顯示所述截圖;
監(jiān)測坐標生成模塊,用于接收所述測試服務端返回的用戶在所述截圖上的點擊坐標,并根據(jù)所述點擊坐標生成監(jiān)測坐標;
或所述監(jiān)測坐標獲取單元包括:
監(jiān)測坐標請求模塊,用于向所述測試服務端發(fā)送監(jiān)測坐標獲取請求;
響應信息接收模塊,用于接收所述測試服務端返回的響應信息,所述響應信息包括:由用戶輸入的監(jiān)測坐標;
或所述監(jiān)測坐標獲取單元具體用于,從本地存儲空間中讀取預設的監(jiān)測坐標。
本發(fā)明提供的場景運行時間測試方法及裝置,通過設置目標畫面的監(jiān)測坐標,并將目標畫面的位于監(jiān)測坐標的目標顏色值作為匹配模型,將該匹配模型與屏幕的當前畫面的位于監(jiān)測坐標的顏色值進行匹配,獲取匹配成功的第二時間,從而根據(jù)啟動運行的第一時間與所述第二時間得到待測試場景的運行時長。本發(fā)明與現(xiàn)有技術相比,一方面,以顏色值作為匹配模型進行匹配,把與應用的耦合性降到了最低,從而可以復用到不同的應用,提升了測試的效率并簡化了測試的操作;另一方面,使用了系統(tǒng)內(nèi)實時獲取當前屏幕的畫面信息的接口,誤差在毫秒以內(nèi),測試的結(jié)果更加準確。
附圖說明
為了更清楚地說明本發(fā)明的技術方案,下面將對實施方式中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施方式,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例提供的場景運行時間測試方法的流程示意圖。
圖2是本發(fā)明實施例提供的一種監(jiān)測坐標的示意圖。
圖3是本發(fā)明實施例提供的場景運行時間測試裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參閱圖1,本發(fā)明提供一種場景運行時間測試方法,包括如下步驟:
S101,根據(jù)啟動指令運行待測試場景,并記錄生成所述啟動指令的第一時間。
在本發(fā)明實施例中,在運行待測試場景前,需先啟動所述待測試場景。本發(fā)明實施例提供三種啟動待測試場景的方法。
第一種:直接在移動終端上點擊啟動控件來生成啟動指令,以啟動待測試場景。
具體地,待測試場景本身提供啟動控件,因此可直接在移動終端上點擊所述啟動控件來生成啟動指令,啟動待測試場景。
第二種:創(chuàng)建與測試服務端的端口映射,建立與所述測試服務端的socket連接,并通過所述socket連接接收所述測試服務端生成的啟動事件,根據(jù)所述啟動事件生成啟動所述待測試場景的啟動指令。
在本發(fā)明實施例中,為了方便測試,可通過將移動終端連接至測試服務端,從而通過測試服務端控制移動終端的運行。其好處是操作方便,且可同時管理多個移動終端。
本發(fā)明實施例可基于STF框架的minitouch工具實現(xiàn)移動終端與測試服務端的連接,并對移動終端進行控制。其中,minitouch經(jīng)Android NDK編譯后運行在移動終端上,minitouch提供了所述移動終端的各種觸控操作的接口,包括按下、抬起、滑動等,因此可通過minitouch模擬點擊手機事件。具體地,首先將minitouch文件自動push到移動終端上,然后通過adb foreword命令實現(xiàn)端口映射,從而建立測試服務端與移動終端的端口的socket連接。在建立所述連接后,所述測試服務端可發(fā)送啟動事件(如在監(jiān)聽到用戶點擊啟動按鍵后生成所述啟動事件)至所述移動終端,所述移動終端在收到所述啟動事件后,即生成啟動指令。
第三種:在第二種方法的基礎上,首先將移動終端的實時畫面的截圖傳輸給測試服務端,然后當所述測試服務端通過minitouch監(jiān)聽到點擊顯示在所述截圖中的啟動控件時,生成啟動事件(包含點擊點的坐標),移動終端根據(jù)啟動事件執(zhí)行啟動所述啟動控件的操作,從而生成啟動指令。
在本發(fā)明實施例中,可使用minicap或者ADB工具包對所述移動終端的當前畫面進行截圖。以minicap為例,minicap經(jīng)Android NDK編譯后運行在所述移動終端上。minicap的主要功能是利用移動終端的系統(tǒng)的預定的應用程序編程接口(Application Programming Interface,API)進行實時截圖,并對截圖數(shù)據(jù)利用libjpeg-turbo庫進行壓縮后傳送給所述測試服務端,由于minicap的數(shù)據(jù)傳輸效率非常高,因此能保證畫面的實時傳輸和顯示。
在本發(fā)明實施例中,顯示于測試服務端的截圖上的點與顯示在移動終端上的點具有一一對應的關系,因而用戶通過鼠標點擊截圖上的啟動控件后,這個啟動事件(點擊坐標)會傳輸給移動終端,由minitouch解析后生成在對應的所述啟動控件上的觸控事件,進而生成啟動指令。
S102,獲取所述待測試場景的當前畫面的像素信息;其中,所述像素信息包括組成所述當前畫面的每個像素點的坐標及顏色值。
具體地,可通過獲取正在顯示的當前畫面的圖像數(shù)據(jù),并讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息來獲得所述當前畫面的像素信息。
以運行在安卓系統(tǒng)下的移動終端為例,安卓的ImageReader類允許應用程序直接訪問呈現(xiàn)在界面上的當前畫面的圖像數(shù)據(jù),安卓通過獲取當前畫面的surface對象組合后,進行渲染生成顯示在顯示屏上的當前畫面。ImageReader類可以獲得渲染后的圖像數(shù)據(jù),其主要有兩個比較重要的方法:acquireLatestImage()和acquireNextImage(),其中前者是獲取最新的圖像信息,后者是獲取圖像隊列里面的圖像信息,因此在此可通過acquireNextImage()獲取當前畫面的圖像數(shù)據(jù),并讀取所述圖像數(shù)據(jù)中每個像素點的顏色值(RGB)和坐標,獲得當前畫面的像素信息。
當然,需要說明的是,對于不同系統(tǒng),可采用對應系統(tǒng)的相應的方法或類來獲取當前畫面的像素信息,這些方案都在本發(fā)明的保護范圍之內(nèi),在此不做贅述。
S103,根據(jù)所述像素信息提取出所述當前畫面的位于預設的監(jiān)測坐標的像素點的顏色值。
S104,將提取的所述顏色值與目標顏色值進行匹配;其中,所述目標顏色值為目標畫面的位于所述監(jiān)測坐標的像素點的顏色值。
在本發(fā)明實施中,在獲得所述像素信息后,即可根據(jù)所述像素信息提取出所述當前畫面的位于預設的監(jiān)測坐標的像素點的顏色值。其中,所述的監(jiān)測坐標預先給定。在獲得當前畫面的像素信息后,根據(jù)所述監(jiān)測坐標提取所述當前畫面的位于所述監(jiān)測坐標的像素點的顏色值,然后與對應的目標顏色值進行一一匹配。其中,所述監(jiān)測坐標可為一個,也可為多個,本發(fā)明不做具體限定。
在本發(fā)明實施例中,所述目標畫面可為所述待測試場景的最后一幀畫面或者為所述待測試場景的下一個場景的第一幀畫面。
對于一般情況,目標畫面選取為待測試場景的最后一幀畫面。但考慮到有些情況,待測試場景的起始幀和結(jié)束幀的畫面相差不大,容易出現(xiàn)誤判斷,因此,也可選取待測試場景的下一個場景的第一幀畫面作為目標畫面。
S105,獲取成功匹配時的第二時間,并根據(jù)所述第二時間及所述第一時間生成所述待測試場景的運行時間。
在本發(fā)明實施例中,若匹配成功,則表示當前畫面即為目標畫面,由于目標畫面是待測試場景的最后一幀畫面或者為所述待測試場景的下一個場景的第一幀畫面,因此說明此時待測試場景已完成運行。因此,使用當前時間(第二時間)減去所述第一時間,就可以獲得所述待測試場景的運行時間。
綜上所述,本發(fā)明實施例提供的場景運行時間測試方法,通過設置目標畫面的監(jiān)測坐標,并將目標畫面的位于監(jiān)測坐標的顏色值作為匹配模型,將該匹配模型與屏幕的當前畫面的位于監(jiān)測坐標的顏色值進行匹配,獲取匹配成功的第二時間,從而根據(jù)啟動運行的第一時間與所述第二時間得到待測試場景的運行時長。本發(fā)明與現(xiàn)有技術相比,一方面,以顏色值作為匹配模型進行匹配,把與應用的耦合性降到了最低,從而可以復用到不同的應用,提升了測試的效率并簡化了測試的操作;另一方面,使用了系統(tǒng)內(nèi)實時獲取當前屏幕的畫面信息的接口,誤差在毫秒以內(nèi),測試的結(jié)果更加準確。
優(yōu)選地,在S104之前,還包括:
S1041,獲取目標畫面的圖像數(shù)據(jù),讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息,獲得所述目標畫面的像素信息。
在本優(yōu)選實施例中,對于安卓系統(tǒng),同樣可通過ImageReader類的acquireNextImage()來獲取所述目標畫面的像素信息。
S1042,獲取預設的監(jiān)測坐標。
本優(yōu)選實施例提供如下三種方法來獲取監(jiān)測坐標:
第一種方法:
向所述測試服務端傳輸目標畫面的截圖,以使所述測試服務端顯示所述截圖。
接收所述測試服務端返回的用戶在所述截圖上的點擊坐標,并根據(jù)所述點擊坐標生成監(jiān)測坐標。
本優(yōu)選實施例提供的監(jiān)測坐標的獲取方法,首先向所述測試服務端傳輸目標畫面的截圖(通過minicap或者ADB工具包),以使所述測試服務端顯示所述截圖。所述測試服務端可根據(jù)用戶可在所述截圖上的點擊生成的點擊坐標,其中,移動終端接收到所述點擊坐標后,會轉(zhuǎn)換成在移動終端自身坐標系下的目標坐標,然后根據(jù)所述目標坐標生成監(jiān)測坐標。這里的監(jiān)測坐標可以是目標坐標自身,也可以是目標坐標及與目標坐標對應的目標像素點相鄰的若干個像素點的坐標。如圖2所示,圖中的監(jiān)測坐標包括了目標坐標及與目標坐標對應的目標像素點相鄰的4個像素點的坐標,通過選取多個坐標進行匹配,可以提高匹配的正確率,防止出現(xiàn)勿匹配的現(xiàn)象。
此外,在選取點擊坐標時,應選取目標畫面的穩(wěn)定區(qū)域的坐標,即顏色值不易發(fā)生變化的區(qū)域的坐標。
本優(yōu)選實施例提供的監(jiān)測坐標的選取方法,無需使用其他工具,也無需進行數(shù)據(jù)的手動輸入即可獲得監(jiān)測位置,操作簡單,準確率高。
第二種方法:
向所述測試服務端發(fā)送監(jiān)測坐標獲取請求;
接收所述測試服務端返回的響應信息,所述響應信息包括:由用戶輸入的監(jiān)測坐標。
本優(yōu)選實施例中,監(jiān)測坐標可以由用戶在測試服務端上手動輸入,并傳輸給所述移動終端,其中,用戶在測試服務端上輸入的監(jiān)測坐標可以是一個,也可以是多個,本發(fā)明不做具體限定。
本優(yōu)選實施例提供的監(jiān)測坐標的選取方法,操作方便,用戶體驗佳。
第三種方法:
從本地存儲空間中讀取預設的監(jiān)測坐標。
本優(yōu)選實施例中,監(jiān)測坐標可預先存儲于本地存儲空間,所述移動終端可根據(jù)預設的路徑讀取所述監(jiān)測坐標。
S1043,根據(jù)所述像素信息讀取所述目標畫面的位于所述監(jiān)測坐標的像素點的顏色值,得到目標顏色值。
請參閱圖3,本發(fā)明實施例還提供了一種場景運行時間測試裝置100,包括:
啟動單元10,用于根據(jù)啟動指令運行待測試場景,并記錄生成所述啟動指令的第一時間;
像素信息獲取單元20,用于獲取所述待測試場景的當前畫面的像素信息;其中,所述像素信息包括組成所述當前畫面的每個像素點的坐標及顏色值;
顏色值提取單元30,用于根據(jù)所述像素信息提取出所述當前畫面的位于預設的監(jiān)測坐標的像素點的顏色值;
匹配單元40,用于將提取的所述顏色值與目標顏色值進行匹配;其中,所述目標顏色值為目標畫面的位于所述監(jiān)測坐標的像素點的顏色值;
運行時間計算單元50,用于獲取成功匹配時的第二時間,并根據(jù)所述第二時間及所述第一時間生成所述待測試場景的運行時間。
本發(fā)明實施例提供的場景運行時間測試裝置100,通過設置目標畫面的監(jiān)測坐標,并將目標畫面的位于監(jiān)測坐標的顏色值作為匹配模型,將該匹配模型與屏幕的當前畫面的位于監(jiān)測坐標的顏色值進行匹配,獲取匹配成功的第二時間,從而根據(jù)啟動運行的第一時間與所述第二時間得到待測試場景的運行時長。本發(fā)明與現(xiàn)有技術相比,一方面,以顏色值作為匹配模型進行匹配,把與應用的耦合性降到了最低,從而可以復用到不同的應用,提升了測試的效率并簡化了測試的操作;另一方面,使用了系統(tǒng)內(nèi)實時獲取當前屏幕的畫面信息的接口,誤差在毫秒以內(nèi),測試的結(jié)果更加準確。
優(yōu)選地,所述目標畫面為所述待測試場景的最后一幀畫面或者為所述待測試場景的下一個場景的第一幀畫面。
優(yōu)選地,所述像素信息獲取單元20具體包括:
圖像數(shù)據(jù)獲取模塊,用于獲取所述待測試場景的正在顯示的當前畫面的圖像數(shù)據(jù);
像素信息獲取模塊,用于讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息,獲得所述當前畫面的像素信息。
優(yōu)選地,所述場景運行時間測試裝置100還包括:
端口映射單元,用于創(chuàng)建與測試服務端的端口映射,建立與所述測試服務端的socket連接;
啟動指令生成單元,用于通過所述socket連接接收所述測試服務端生成的啟動事件,并根據(jù)所述啟動事件生成啟動所述待測試場景的啟動指令。
優(yōu)選地,所述場景運行時間測試裝置100還包括:
目標像素信息獲取單元,用于獲取目標畫面的圖像數(shù)據(jù),讀取所述圖像數(shù)據(jù)中的每個像素點的位置及顏色值的緩存信息,獲得所述目標畫面的像素信息;
監(jiān)測坐標獲取單元,用于獲取預設的監(jiān)測坐標;
目標顏色值讀取單元,用于根據(jù)所述像素信息讀取所述目標畫面的位于所述監(jiān)測坐標的像素點的顏色值,得到目標顏色值。
優(yōu)選地,所述監(jiān)測坐標獲取單元包括:
截圖傳輸模塊,用于向所述測試服務端傳輸目標畫面的截圖,以使所述測試服務端顯示所述截圖;
監(jiān)測坐標生成模塊,用于接收所述測試服務端返回的用戶在所述截圖上的點擊坐標,并根據(jù)所述點擊坐標生成監(jiān)測坐標;
優(yōu)選地,所述監(jiān)測坐標獲取單元包括:
監(jiān)測坐標請求模塊,用于向所述測試服務端發(fā)送監(jiān)測坐標獲取請求;
響應信息接收模塊,用于接收所述測試服務端返回的響應信息,所述響應信息包括:由用戶輸入的監(jiān)測坐標;
優(yōu)選地,所述監(jiān)測坐標獲取單元具體用于,從本地存儲空間中讀取預設的監(jiān)測坐標。
以上所揭露的僅為本發(fā)明一種較佳實施例而已,當然不能以此來限定本發(fā)明之權利范圍,本領域普通技術人員可以理解實現(xiàn)上述實施例的全部或部分流程,并依本發(fā)明權利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。