版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、xxx系統(tǒng)性能測(cè)試報(bào)告姓名:班級(jí):學(xué)號(hào):目 錄 TOC o 1-3 h z u HYPERLINK l _Toc160358941 1 前言 PAGEREF _Toc160358941 h 3 HYPERLINK l _Toc160358942 2 被測(cè)系統(tǒng)定義 PAGEREF _Toc160358942 h 3 HYPERLINK l _Toc160358943 2.1 功能簡(jiǎn)介 PAGEREF _Toc160358943 h 3 HYPERLINK l _Toc160358944 2.2 性能測(cè)試指標(biāo) PAGEREF _Toc160358944 h 4 HYPERLINK l _Toc16
2、0358945 3 系統(tǒng)結(jié)構(gòu)及流程 PAGEREF _Toc160358945 h 4 HYPERLINK l _Toc160358946 3.1 系統(tǒng)總體結(jié)構(gòu) PAGEREF _Toc160358946 h 4 HYPERLINK l _Toc160358947 3.2 功能模塊 PAGEREF _Toc160358947 h 4 HYPERLINK l _Toc160358948 3.3 業(yè)務(wù)流程 PAGEREF _Toc160358948 h 5 HYPERLINK l _Toc160358949 3.4 關(guān)鍵點(diǎn)描述 PAGEREF _Toc160358949 h 6 HYPERLINK
3、 l _Toc160358950 3.5 性能測(cè)試環(huán)境 PAGEREF _Toc160358950 h 6 HYPERLINK l _Toc160358951 4 性能測(cè)試 PAGEREF _Toc160358951 h 6 HYPERLINK l _Toc160358952 4.1 性能測(cè)試概述 PAGEREF _Toc160358952 h 7 HYPERLINK l _Toc160358953 4.2 測(cè)試目的 PAGEREF _Toc160358953 h 7 HYPERLINK l _Toc160358954 4.3 測(cè)試方法及測(cè)試用例 PAGEREF _Toc160358954 h
4、 7 HYPERLINK l _Toc160358955 4.4 測(cè)試指標(biāo)及期望 PAGEREF _Toc160358955 h 8 HYPERLINK l _Toc160358956 4.5 測(cè)試數(shù)據(jù)準(zhǔn)備 PAGEREF _Toc160358956 h 10 HYPERLINK l _Toc160358957 4.6 運(yùn)行狀況記錄 PAGEREF _Toc160358957 h 10 HYPERLINK l _Toc160358958 5 測(cè)試過程及結(jié)果描述 PAGEREF _Toc160358958 h 10 HYPERLINK l _Toc160358959 5.1 測(cè)試描述 PAGER
5、EF _Toc160358959 h 11 HYPERLINK l _Toc160358960 5.2 測(cè)試場(chǎng)景 PAGEREF _Toc160358960 h 11 HYPERLINK l _Toc160358961 5.3 測(cè)試結(jié)果 PAGEREF _Toc160358961 h 11 HYPERLINK l _Toc160358962 6測(cè)試分析和結(jié)論 PAGEREF _Toc160358962 h 16前言目前,隨著Web Tours訂票系統(tǒng)在生產(chǎn)狀態(tài)下日趨穩(wěn)定、成熟,系統(tǒng)的性能問題也逐步成為了我們關(guān)注的焦點(diǎn):隨著訂票過程中大數(shù)據(jù)量的“沖擊”,在客戶信息信息進(jìn)入時(shí),系統(tǒng)能穩(wěn)定在什么樣的
6、性能水平,面臨公司業(yè)務(wù)沖刺時(shí),系統(tǒng)能否經(jīng)受住“考驗(yàn)”,這些問題需要通過一個(gè)完整的性能測(cè)試來給出答案。本報(bào)告前部分即是基于上述考慮,參考科學(xué)的性能測(cè)試方法而撰寫的,用以指導(dǎo)即將進(jìn)行的Web Tours訂票系統(tǒng)的性能測(cè)試。HP Web Tours 系統(tǒng)定義HP Web Tours 訂票系統(tǒng)作為本次測(cè)試的被測(cè)系統(tǒng),該業(yè)務(wù)系統(tǒng)的主要功能包括:搜索航班,預(yù)訂機(jī)票并查看航班路線。在本次測(cè)試中,將針對(duì)上述的功能進(jìn)行壓力測(cè)試,檢查并評(píng)估在模擬環(huán)境中,系統(tǒng)對(duì)負(fù)載的承受能力,在不同的用戶連接情況下,系統(tǒng)地吞吐能力和響應(yīng)能力,以及在預(yù)計(jì)的數(shù)據(jù)容量中,系統(tǒng)能夠容忍的最大用戶數(shù)。功能簡(jiǎn)介HP Web Tours 主要功
7、能如下:用戶注冊(cè)登錄查詢航班性能測(cè)試指標(biāo)本次測(cè)試是針對(duì)HP Web Tours 訂票系統(tǒng)的性能特征和系統(tǒng)的性能調(diào)優(yōu)而進(jìn)行的,主要需要獲得如下的測(cè)試指標(biāo)。1、系統(tǒng)的響應(yīng)能力:即在各種負(fù)載壓力情況下,系統(tǒng)的響應(yīng)時(shí)間,也就是從客戶端交易發(fā)起,到服務(wù)器端交易應(yīng)答返回所需要的時(shí)間,包括網(wǎng)絡(luò)傳輸時(shí)間和服務(wù)器處理時(shí)間。2、應(yīng)用系統(tǒng)的吞吐率:即應(yīng)用系統(tǒng)在單位時(shí)間內(nèi)完成的交易量,也就是在單位時(shí)間內(nèi),應(yīng)用系統(tǒng)針對(duì)不同的負(fù)載壓力,所能完成的交易數(shù)量。3、應(yīng)用系統(tǒng)的負(fù)載能力:即系統(tǒng)所能容忍的最大用戶數(shù)量,也就是在正常的響應(yīng)時(shí)間中,系統(tǒng)能夠支持的最多的客戶端的數(shù)量。系統(tǒng)結(jié)構(gòu)及流程HP Web Tours 訂票系統(tǒng)在實(shí)際
8、生產(chǎn)中的體系結(jié)構(gòu)跟本次性能測(cè)試所采用的體系結(jié)構(gòu)是一樣的,交易流程也完全一致的。不過,由于硬件條件的限制,本次性能測(cè)試的硬件平臺(tái)跟實(shí)際生產(chǎn)環(huán)境略有不同。系統(tǒng)總體結(jié)構(gòu)HP Web Tours 訂票系統(tǒng)系統(tǒng)由用戶注冊(cè)、登錄、查詢航班等這些功能構(gòu)成。 功能模塊本次性能測(cè)試中各類交易都是由若干功能模塊組成的,每個(gè)交易都根據(jù)其執(zhí)行特點(diǎn)分成了若干操作步驟,每個(gè)步驟就是一個(gè)功能點(diǎn)(即功能模塊),在HP Web Tours 訂票系統(tǒng)中,各種交易及其包含的功能模塊關(guān)系如下:注冊(cè)登錄查詢航班本次壓力測(cè)試主要設(shè)計(jì)的功能模塊以及所屬的路徑如下表名稱所屬交易路徑業(yè)務(wù)流程本次性能測(cè)試中,選擇的各類交易的業(yè)務(wù)流程如下:注冊(cè)登
9、錄查詢航班查詢交易的業(yè)務(wù)流程只是單一步驟的,即:輸入查詢條件后獲取查詢結(jié)果,因此在本次性能測(cè)試中只作為一個(gè)事務(wù)處理,交易流程圖略。關(guān)鍵點(diǎn)描述本次性能測(cè)試的關(guān)鍵點(diǎn),就是查看HP Web Tours 訂票系統(tǒng)在并發(fā)壓力下的表現(xiàn),即:支持的并發(fā)用戶數(shù)目和并發(fā)用戶發(fā)送頻率,以及在較大壓力下,系統(tǒng)的交易處理能力,并找出各類交易的性能瓶頸。 性能測(cè)試環(huán)境本次性能測(cè)試環(huán)境與真實(shí)運(yùn)行環(huán)境基本一致,都運(yùn)行在同樣的硬件和網(wǎng)絡(luò)環(huán)境中,數(shù)據(jù)庫是真實(shí)環(huán)境數(shù)據(jù)庫的一個(gè)復(fù)制(或縮小),本系統(tǒng)采用標(biāo)準(zhǔn)的CS結(jié)構(gòu),客戶端都是通過瀏覽器訪問應(yīng)用系統(tǒng)。 其中具體的硬件和網(wǎng)絡(luò)環(huán)境如下:服務(wù)器設(shè)備:IBM 570(DBserver),
10、 IBM 690(APserver)操作系統(tǒng): Windows 2003網(wǎng)絡(luò)環(huán)境: LAN(10M)數(shù)據(jù)庫:MYSQL客戶端: PC (Windows )網(wǎng)絡(luò)拓?fù)浜徒Y(jié)構(gòu)圖如下:性能測(cè)試從廣泛意義上講性能測(cè)試包括:壓力測(cè)試、穩(wěn)定性測(cè)試、負(fù)載能力測(cè)試和可擴(kuò)展性測(cè)試等。在不同應(yīng)用系統(tǒng)的性能測(cè)試中,需要根據(jù)應(yīng)用系統(tǒng)的特點(diǎn)和測(cè)試目的的不同來選擇具體的測(cè)試方案,本次HP Web Tours 訂票系統(tǒng)的性能測(cè)試主要是采用通常的壓力測(cè)試模式來執(zhí)行的,即:逐步增加壓力,查看應(yīng)用系統(tǒng)在各種壓力狀況小的性能表現(xiàn)。在性能測(cè)試中,壓力測(cè)試主要是為了獲取系統(tǒng)在較大壓力狀況下的性能表現(xiàn)而設(shè)計(jì)并實(shí)現(xiàn)的,壓力測(cè)試主要是獲取系統(tǒng)
11、的性能瓶頸和系統(tǒng)的最大吞吐率。性能測(cè)試概述本次壓力測(cè)試是指針對(duì)現(xiàn)行的HP Web Tours 訂票業(yè)務(wù)系統(tǒng)的聯(lián)機(jī)交易處理能力的測(cè)試,檢驗(yàn)系統(tǒng)的吞吐率。本系統(tǒng)的壓力測(cè)試主要是針對(duì)HP Web Tours 訂票系統(tǒng),檢查在日間交易高峰時(shí)期,并發(fā)用戶數(shù)較多的時(shí)候的處理能力等等。測(cè)試目的壓力測(cè)試的目的就是檢驗(yàn)系統(tǒng)的最大吞吐量,檢驗(yàn)現(xiàn)行的HP Web Tours 訂票系統(tǒng)在各種壓力交易量下的運(yùn)行狀況,檢驗(yàn)系統(tǒng)地運(yùn)行瓶頸,獲取系統(tǒng)的處理能力等等。本次針對(duì)HP Web Tours 訂票業(yè)務(wù)系統(tǒng)所進(jìn)行的壓力測(cè)試的測(cè)試目的為:給出HP Web Tours 訂票系統(tǒng)當(dāng)前的性能狀況定位新業(yè)務(wù)系統(tǒng)性能瓶頸或潛在性能瓶
12、頸總結(jié)一套合理的、可操作的、適合公司現(xiàn)實(shí)情況的性能測(cè)試方案,為后續(xù)的性能測(cè)試工作提供基本思路。測(cè)試方法及測(cè)試用例使用性能測(cè)試軟件LoadRunner,對(duì)現(xiàn)行的HP Web Tours 訂票系統(tǒng)進(jìn)行腳本錄制、測(cè)試回放、逐步加壓和跟蹤記錄。測(cè)試過程中,由LoadRunner的管理平臺(tái)調(diào)用各臺(tái)測(cè)試前臺(tái),發(fā)起各種組合的交易請(qǐng)求,并跟蹤記錄服務(wù)器端的運(yùn)行情況和返回給客戶端的運(yùn)行結(jié)果。本次測(cè)試將依照如下場(chǎng)景進(jìn)行測(cè)試: 用戶數(shù)功能模塊業(yè)務(wù)操作2004007001000注冊(cè)注冊(cè)登錄登錄業(yè)務(wù)查詢航班針對(duì)每個(gè)測(cè)試案例,都將采用逐步加壓和瞬間加壓兩種客戶端連接方式進(jìn)行,查看服務(wù)器端在客戶端的連接數(shù)量變化過程中對(duì)應(yīng)的
13、處理能力,測(cè)試運(yùn)行安排如下:每隔2秒增加1個(gè)用戶連接,最多增加到200個(gè)用戶,查看并記錄運(yùn)行情況每隔2秒增加2個(gè)用戶連接,最多增加到200個(gè)用戶,查看并記錄運(yùn)行情況一次性連接10個(gè)用戶,查看記錄運(yùn)行情況一次性連接100個(gè)用戶,查看記錄運(yùn)行情況測(cè)試指標(biāo)及期望在本次性能測(cè)試中,各類測(cè)試指標(biāo)包括測(cè)試中應(yīng)該達(dá)到的某些性能指標(biāo),這些性能指標(biāo)均是來自應(yīng)用系統(tǒng)設(shè)計(jì)開發(fā)時(shí)遵循的業(yè)務(wù)需求,當(dāng)某個(gè)測(cè)試的某一類指標(biāo)已經(jīng)超出了業(yè)務(wù)需求的要求范圍,則測(cè)試已經(jīng)達(dá)到目的,即可終止壓力測(cè)試。應(yīng)用軟件級(jí)別的測(cè)試指標(biāo):1) 聯(lián)機(jī)交易類的執(zhí)行情況交易的平均響應(yīng)時(shí)間(期望值:15s)交易的最大響應(yīng)時(shí)間(期望值:95%)不同并發(fā)用戶數(shù)
14、的狀況下的上述記錄值2)測(cè)試結(jié)果分析情況單筆記錄的處理時(shí)間(期望值:10個(gè))某個(gè)時(shí)間段內(nèi)的交易處理數(shù)量 單筆能處理的最大數(shù)據(jù)量在每個(gè)交易處理中最大(最耗時(shí))的模塊在不同數(shù)量的測(cè)試數(shù)據(jù)基礎(chǔ)上的上述記錄值網(wǎng)絡(luò)級(jí)別的測(cè)試指標(biāo):吞吐量:?jiǎn)挝粫r(shí)間內(nèi)網(wǎng)絡(luò)傳輸數(shù)據(jù)量沖突率:在以太網(wǎng)上監(jiān)測(cè)到的每秒沖突數(shù)操作系統(tǒng)級(jí)別的測(cè)試指標(biāo):進(jìn)程/線程交換率:進(jìn)程和線程之間每秒交換次數(shù) CPU利用率:即CPU占用率()系統(tǒng)CPU利用率:系統(tǒng)的CPU占用率() 用戶CPU利用率:用戶模式下的CPU占用率() 磁盤交換率:磁盤交換速率 中斷速率:CPU每秒處理的中斷數(shù) 讀入內(nèi)存頁速率:物理內(nèi)存中每秒讀入內(nèi)存頁的數(shù)目 寫出內(nèi)存頁速
15、率:每秒從物理內(nèi)存中寫到頁文件中的內(nèi)存頁數(shù)目或者從物理內(nèi)存中刪掉的內(nèi)存頁數(shù)目 內(nèi)存頁交換速率:每秒寫入內(nèi)存頁和從物理內(nèi)存中讀出頁的個(gè)數(shù) 進(jìn)程入交換率:交換區(qū)輸入的進(jìn)程數(shù)目 進(jìn)程出交換率:交換區(qū)輸出的進(jìn)程數(shù)目 數(shù)據(jù)庫級(jí)別的測(cè)試指標(biāo):數(shù)據(jù)庫的并發(fā)連接數(shù):客戶端的最大連接數(shù)數(shù)據(jù)庫鎖資源的使用數(shù)量測(cè)試數(shù)據(jù)準(zhǔn)備前期準(zhǔn)備工作包括:錄制好一段完整的腳本,包括(注冊(cè),登錄,查詢航班)進(jìn)行相關(guān)的設(shè)置運(yùn)行狀況記錄記錄可擴(kuò)展性測(cè)試中的測(cè)試結(jié)果及其系統(tǒng)的運(yùn)行狀況。除了記錄測(cè)試指標(biāo)以外,應(yīng)該結(jié)合測(cè)試實(shí)時(shí)記錄系統(tǒng)各個(gè)層次的資源和參數(shù)。主要包括:硬件環(huán)境資源服務(wù)器操作系統(tǒng)參數(shù)網(wǎng)絡(luò)相關(guān)參數(shù)數(shù)據(jù)庫相關(guān)參數(shù):具體數(shù)據(jù)庫參數(shù)有所不
16、同,結(jié)合各個(gè)數(shù)據(jù)庫獨(dú)有的特點(diǎn)記錄測(cè)試過程及結(jié)果描述HP Web Tours 訂票系統(tǒng)的性能測(cè)試共計(jì)執(zhí)行了2次,兩次執(zhí)行的腳本流程作了調(diào)整,其他的環(huán)境和數(shù)據(jù)都一樣。在測(cè)試數(shù)據(jù)準(zhǔn)備完備以后,第一次測(cè)試中,操作流程為每次交易都執(zhí)行用戶登錄操作,第二次測(cè)試中,操作流程為先進(jìn)行用戶登錄,然后每次交易都不再執(zhí)行用戶登錄。測(cè)試描述兩次測(cè)試都是在12月22日凌晨進(jìn)行的。第一次測(cè)試執(zhí)行了30分鐘左右,執(zhí)行腳本都是采用每次交易都執(zhí)行登錄操作,測(cè)試過程中,交易的執(zhí)行速度隨著測(cè)試的進(jìn)行,越來越慢,交易的響應(yīng)時(shí)間越來越長,交易出錯(cuò)(超時(shí))情況也越來越嚴(yán)重,交易在執(zhí)行到30分鐘左右,用戶登錄交易開始大量失?。ǔ瑫r(shí))并導(dǎo)致
17、后續(xù)的交易都無法完成,于是終止本次測(cè)試。第二次測(cè)試執(zhí)行了50分鐘左右,在第一次測(cè)試的基礎(chǔ)上,調(diào)整交易流程,讓每次交易都只登錄一次,然后順序執(zhí)行交易邏輯。測(cè)試開始初期,交易的響應(yīng)時(shí)間隨著交易并發(fā)量的增加而快速增加,在測(cè)試執(zhí)行了10分鐘左右,所有的用戶登錄操作都基本完成,此后交易響應(yīng)時(shí)間開始減少,并比較平穩(wěn)的執(zhí)行,絕大部分交易執(zhí)行比較平穩(wěn)成功率也很高,除了兩個(gè)交易:xxx(Audit_Transaction)和 xxx(ClaimRegister_Transaction),這兩個(gè)交易的執(zhí)行速度特別慢,交易相應(yīng)時(shí)間一直都維持在190秒左右和160秒左右,這兩個(gè)交易超時(shí)現(xiàn)象嚴(yán)重,交易成功率很低,很多交
18、易都因?yàn)槌瑫r(shí)而失敗。測(cè)試場(chǎng)景測(cè)試中,使用逐步加壓的模式,采用:每隔2秒啟動(dòng)1個(gè)并發(fā)用戶(Vuser)的方式,即:每隔1秒,啟動(dòng)1個(gè)Vuser,在7分鐘左右啟動(dòng)所有的Vuser(200個(gè)),執(zhí)行登錄,并根據(jù)設(shè)置的時(shí)間間隔發(fā)起交易。這次測(cè)試都部署在如下的場(chǎng)景中。運(yùn)行的腳本部署在3臺(tái)PC機(jī),主要目的就是檢查在較大壓力的情況下,xxxxx心業(yè)務(wù)系統(tǒng)的性能表現(xiàn)。選擇了2臺(tái)PC,每臺(tái)PC機(jī)部署了70個(gè)左右并發(fā)用戶,選擇1臺(tái)PC,部署60個(gè)左右的并發(fā)用戶,并運(yùn)行LoadRunner的控制器(Controller)測(cè)試結(jié)果兩次測(cè)試AP服務(wù)器主機(jī)上的CPU利用率如下:可以看出在兩次測(cè)試執(zhí)行中第一次(1:52 2
19、:20)測(cè)試過程中CPU的利用率都幾乎達(dá)到了100%,第二次測(cè)試中(2:45- 4:00)CPU的利用率也達(dá)到了95%以上。兩次測(cè)試在數(shù)據(jù)庫(Oracle)服務(wù)器上主機(jī)上的CPU利用率如下:可以看出兩次測(cè)試執(zhí)行中第一次(1:52 2:20)測(cè)試過程中CPU的利用率很低,第二次測(cè)試中(2:45- 4:00)CPU的利用率較高也達(dá)到了75%以上,但兩次測(cè)試的CPU的IO等待時(shí)間卻都比較高,IO和CPU利用率對(duì)照表如下:可以看出兩次測(cè)試執(zhí)行中第一次(1:52 2:20)測(cè)試過程中CPU的IO等待率較低,因?yàn)榇蠖鄶?shù)的交易都是用戶登錄,都?jí)涸贏P服務(wù)器上了,第二次測(cè)試中(2:45- 4:00)CPU的I
20、O 第一次測(cè)試第一次測(cè)試使用了200個(gè)并發(fā)用戶,并發(fā)用戶的啟動(dòng)信息如下:各類交易的交易相應(yīng)時(shí)間 (秒)ColorScale交易名稱最小平均最大1AutoUW_Transaction0.023.73387.8711Confirm_Transaction210.203210.203210.2031CTDetail_Transaction105.878151.032199.4771EdorNoscanAppInput_Transaction60.704153.425259.2341GeneralQuery_Transaction0.06713.62339.0941IndividualQuery_Tr
21、ansaction0.78128.04264.9841Issue_Transaction5.14530.660.2218.531109.639210.74611.2818.55315.47410.09319.46959.271各類交易的平均響應(yīng)時(shí)間圖:可以看出隨著測(cè)試的進(jìn)行,交易相應(yīng)時(shí)間逐漸增大,最終導(dǎo)致交易超時(shí)而失敗。第二次測(cè)試第二次測(cè)試調(diào)整了交易處理邏輯,大大減少了用戶登錄的操作數(shù)目,每個(gè)用戶只執(zhí)行一次用戶登錄,然后執(zhí)行對(duì)應(yīng)的交易處理,交易過程中不再執(zhí)行用戶登錄操作。運(yùn)行的并發(fā)用戶數(shù)目如下圖:在用戶登錄過程中,交易的平均響應(yīng)時(shí)間如下圖:從圖中可以看出,隨著并發(fā)用戶數(shù)量的不斷增加,所有的交易
22、的平均響應(yīng)時(shí)間都在加大,直到并發(fā)用戶數(shù)不再增加,這時(shí)候所有的交易相應(yīng)時(shí)間下降到一定的數(shù)值,并一直穩(wěn)定在這個(gè)數(shù)值左右。在第二次測(cè)試中,各類交易的平均響應(yīng)時(shí)間如下表:(單位:秒)ColorScale交易最小平均最大1Audit_Transaction19.481162.12207.6271AutoUW_Transaction0.013.00149.4941ClaimRegister_Transaction75.599143.641163.9781Confirm_Transaction1.13151.42794.5851CTDetail_Transaction37.25765.967148.3341
23、EdorNoscanAppInput_Transaction16.50479.919169.2391EndCase_Transaction11.8846.54685.6581GeneralQuery_Transaction0.15211.01735.321交易相應(yīng)時(shí)間時(shí)序圖如?。簣D中最上方的兩條曲線(即交易相應(yīng)時(shí)間最慢的)分別是:xxx (Audit_Transaction) 和 xxx(ClaimRegister_Transaction),除了這兩類交易,其他各類交易都是在測(cè)試初期執(zhí)行較慢,隨著用戶登錄完成以后,各類交易的平均響應(yīng)時(shí)間都穩(wěn)定在對(duì)應(yīng)的數(shù)值上,并都保持在90秒以內(nèi)。途中,從20分
24、鐘開始到35分鐘,點(diǎn)擊率下降的原因是部分查詢交易循環(huán)600次已經(jīng)成功結(jié)束,在35分鐘左右重新啟動(dòng),所有出現(xiàn)了途中點(diǎn)擊率下滑的現(xiàn)象。6測(cè)試分析和結(jié)論(根據(jù)具體的測(cè)試過程和結(jié)果,結(jié)合測(cè)試目標(biāo),進(jìn)行相應(yīng)的分析,給出結(jié)論和建議)在xxxxx核心業(yè)務(wù)系統(tǒng)的性能測(cè)試過程中,將分別撰寫測(cè)試計(jì)劃和性能測(cè)試報(bào)告,其中測(cè)試計(jì)劃將在測(cè)試開始之前完成,用以指導(dǎo)測(cè)試、并做好各個(gè)階段的計(jì)劃和任務(wù)分配工作,在測(cè)試結(jié)束之后,根據(jù)測(cè)試結(jié)果,將生成測(cè)試報(bào)告。附錄資料:不需要的可以自行刪除C語言編譯器的設(shè)計(jì)與實(shí)現(xiàn) 我們?cè)O(shè)計(jì)的編譯程序涉及到編譯五個(gè)階段中的三個(gè),即詞法分析器、語法分析器和中間代碼生成器。編譯程序的輸出結(jié)果包括詞法分析
25、后的二元式序列、變量名表、狀態(tài)棧分析過程顯示及四元式序列程序,整個(gè)編譯程序分為三部分:(1) 詞法分析部分(2) 語法分析處理及四元式生成部分 (3) 輸出顯示部分一詞法分析器設(shè)計(jì) 由于我們規(guī)定的程序語句中涉及單詞較少,故在詞法分析階段忽略了單詞輸入錯(cuò)誤的檢查,而將編譯程序的重點(diǎn)放在中間代碼生成階段。詞法分析器的功能是輸入源程序,輸出單詞符號(hào)。我們規(guī)定輸出的單詞符號(hào)格式為如下的二元式: (單詞種別,單詞自身的值)#define ACC -2#define syl_if 0#define syl_else 1#define syl_while 2#define syl_begin 3#defin
26、e syl_end 4#define a 5#define semicolon 6#define e 7#define jinghao 8#define s 9#define L 10#define tempsy 11#define EA 12#define EO 13#define plus 14#define times 15#define becomes 16#define op_and 17#define op_or 18#define op_not 19#define rop 20#define lparent 21#define rparent 22#define ident 23
27、#define intconst 24函數(shù)說明 讀取函數(shù) readline( )、readch( )詞法分析包含從源文件讀取字符的操作,但頻繁的讀文件操作會(huì)影響程序執(zhí)行效率,故實(shí)際上是從源程序文件” source.dat ”中讀取一行到輸入緩沖區(qū),而詞法分析過程中每次讀取一個(gè)字符時(shí)則是通過執(zhí)行 readch( )從輸入緩沖區(qū)獲得的;若緩沖區(qū)已被讀空,則再執(zhí)行readline( )從 source.dat 中讀取下一行至輸入緩沖區(qū)。掃描函數(shù) scan( ) 掃描函數(shù) scan( )的功能是濾除多余空格并對(duì)主要單詞進(jìn)行分析處理,將分析得到的二元式存入二元式結(jié)果緩沖區(qū)。變量處理 find( )變量處
28、理中首先把以字母開頭的字母數(shù)字串存到 spelling 數(shù)組中,然后進(jìn)行識(shí)別。識(shí)別過程是先讓它與保留關(guān)鍵字表中的所有關(guān)鍵字進(jìn)行匹配,若獲得成功則說明它為保留關(guān)鍵字,即將其內(nèi)碼值寫入二元式結(jié)果緩沖區(qū);否則說明其為變量,這時(shí)讓它與變量名表中的變量進(jìn)行匹配( 變量匹配函數(shù) find( ) ),如果成功,則說明該變量已存在并在二元式結(jié)果緩沖區(qū)中標(biāo)記為此變量( 值填為該變量在變量名表中的位置),否則將該變量登記到變量名表中,再將這個(gè)新變量存入二元式緩存數(shù)組中。數(shù)字識(shí)別 number( ) 數(shù)字識(shí)別將識(shí)別出的數(shù)字填入二元式結(jié)果緩存數(shù)組。顯示函數(shù) 顯示函數(shù)的功能在屏幕上輸出詞法分析的結(jié)果( 即二元式序列程序
29、),同時(shí)給出二元式個(gè)數(shù)及源程序行數(shù)統(tǒng)計(jì)。二語法分析器設(shè)計(jì) 語法分析器的核心是三張 SLR 分析表以及針對(duì)這三張 SLR 分析表進(jìn)行語義加工的語義動(dòng)作。編譯程序中語法分析處理及四元式生成部分主要是以二元式作為輸入,并通過 SLR 分析表對(duì)語法分析處理過程進(jìn)行控制,使四元式翻譯的工作有條不紊的進(jìn)行,同時(shí)識(shí)別語法分析中的語法錯(cuò)誤。在處理 if 和 while 語句時(shí),需要進(jìn)行真值或假值的拉鏈和返填工作,以便轉(zhuǎn)移目標(biāo)的正確填入。1. 控制語句的 SLR 分析表1 設(shè)計(jì)過程如下: 將擴(kuò)展文法GS S1)S if e S else S2)S while e S3)S L 4)S a;5)L S6)L SL
30、用_CLOSURE方法構(gòu)造LR(0)項(xiàng)目規(guī)范簇為:I0: S SS if e S else SS while e S S L S a ;I1: S SI2: S ife S else SI3: S while e SI4: S L L S L SL S if e S else SS while e S S L S a ; I5: S a; I6: S if e S else S S if e S else SS while e S S L S a ; I7: S while e S S if e S else SS while e S S L S a ; I8: S L I9: L S L S
31、L L SL L S S if e S else SS while e S S L S a ; I10: S a ; I11: S if e S else SI12: S while e S I13: S L I14: S SL I15: S if e S else S S if e S else SS while e S S L S a ; I16: S if e S else S 構(gòu)造文法G中非終結(jié)符的FOLLOW集如下:FOLLOW(S) = # S if e S else S得FOLLOW(S) = else S L 得FOLLOW(L) = 3) S S 得FOLLOW(S) = e
32、lse , # L S 因?yàn)镕IRST(S) = ,所以FOLLOW(S) = else , #, 在()項(xiàng)目規(guī)范簇中,只有9有“移進(jìn)歸約”沖突,L SL SL因?yàn)镕OLLOW(L) FIRST(L) = 所以可以用方法解決以上沖突,最后我們得到的分析表如下:ACTIONGOTO ifElsewhilea;e#SL0S2S3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R213R3R3R314R615S2S3S4S51616R1R1R1static int acti
33、on2011=/* 0 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 1, -1,/* 1 */ -1, -1, -1, -1, -1, -1, -1, -1,ACC, -1, -1,/* 2 */ -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1,/* 3 */ -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1,/* 4 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 9, 8,/* 5 */ -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1,
34、/* 6 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 11, -1,/* 7 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 12, -1,/* 8 */ -1, -1, -1, -1, 13, -1, -1, -1, -1, -1, -1,/* 9 */ 2, -1, 3, 4,105, 5, -1, -1, -1, 9, 14,/* 10*/ -1,104, -1, -1,104, -1, -1, -1,104, -1, -1,/* 11*/ -1, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 12*/
35、 -1,102, -1, -1,102, -1, -1, -1,102, -1, -1,/* 13*/ -1,103, -1, -1,103, -1, -1, -1,103, -1, -1,/* 14*/ -1, -1, -1, -1,106, -1, -1, -1, -1, -1, -1,/* 15*/ 2, -1, 3, 4, -1, 5, -1, -1, -1, 16, -1,/* 16*/ -1,101, -1, -1,101, -1, -1, -1,101, -1, -1;其中,前 9 列為 action 值,后 2 列為 goto 值;016 表示 17 個(gè)移進(jìn)狀態(tài)( 即 Si);
36、-1表示出錯(cuò);ACC 表示分析成功;而 100106 對(duì)應(yīng) 7 個(gè)歸約產(chǎn)生式:S SS if e S else SS while e SS L S a;L SL SL2. 算術(shù)表達(dá)式的 LR 分析表 2 設(shè)計(jì)如下:S EE E+EE E*EE (E)E i (過程略)ACTIONGOTOI+*()#E0S3S211S4S5ACC2S3S263R4R4R4R44S3S275S3S286S4S5S97R1R5R1R18R2R2R2R29R3R3R3R3static int action1107=/* 0 */ 3, -1, -1, 2, -1, -1, 1,/* 1 */ -1, 4, 5, -1
37、, -1,ACC, -1,/* 2 */ 3, -1, -1, 2, -1, -1, 6,/* 3 */ -1,104,104, -1,104,104, -1,/* 4 */ 3, -1, -1, 2, -1, -1, 7,/* 5 */ 3, -1, -1, 2, -1, -1, 8,/* 6 */ -1, 4, 5, -1, 9, -1, -1,/* 7 */ -1,101, 5, -1,101,101, -1,/* 8 */ -1,102,102, -1,102,102, -1,/* 9 */ -1,103,103, -1,103,103, -1;3.布爾表達(dá)式的 SLR 分析表3 設(shè)計(jì)
38、如下:(過程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int action21611=/* 0 */ 1, -1, 4, -1, 5, -1, -1, -1, 13, 7, 8,/
39、* 1 */ 1, 2, -1,101, -1,101,101,101, -1, -1, -1,/* 2 */ 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 3 */ -1, -1, -1,102, -1,102,102,102, -1, -1, -1,/* 4 */ 1, -1, 4, -1, 5, -1, -1, -1, 11, 7, 8,/* 5 */ 1, -1, 4, -1, 5, -1, -1, -1, 6, 7, 8,/* 6 */ -1, -1, -1,104, -1, 9, 10,104, -1, -1, -1,/* 7 */ 1,
40、 -1, 4, -1, 5, -1, -1, -1, 14, 7, 8,/* 8 */ 1, -1, 4, -1, 5, -1, -1, -1, 15, 7, 8,/* 9 */ 105, -1,105, -1,105, -1, -1, -1, -1, -1, -1,/*10 */ 107, -1,107, -1,107, -1, -1, -1, -1, -1, -1,/*11 */ -1, -1, -1, 12, -1, 9, 10, -1, -1, -1, -1,/*12 */ -1, -1, -1,103, -1,103,103,103, -1, -1, -1,/*13 */ -1, -
41、1, -1, -1, -1, 9, 10,ACC, -1, -1, -1,/*14 */ -1, -1, -1,106, -1, 9, 10,106, -1, -1, -1,/*15 */ -1, -1, -1,108, -1, 9, 10,108, -1, -1, -1;LR 分析表控制語義加工的實(shí)現(xiàn):當(dāng)掃描 LR 分析表的當(dāng)前狀態(tài)為歸約狀態(tài)時(shí),則在調(diào)用與該狀態(tài)對(duì)應(yīng)的產(chǎn)生式進(jìn)行歸約的同時(shí),調(diào)用相應(yīng)的語義子程序進(jìn)行有關(guān)的翻譯工作?,F(xiàn)在對(duì) LR 分析器的分析棧加以擴(kuò)充,使得每個(gè)文法符號(hào)之后都跟著它的語義值。為了清晰起見,我們把這個(gè)棧的每一項(xiàng)看成由三部分組成:狀態(tài) state ,文法符號(hào) syl
42、和語義值 val。編譯程序?qū)崿F(xiàn)算術(shù)表達(dá)式、布爾表達(dá)式及程序語句的語義加工時(shí),都是按這種狀態(tài)棧加工方式進(jìn)行的。例如:( 5 + 3 ) * 6的分析過程序號(hào)STATEValsylinput10-#( 5 + 3 ) * 6 #202-#(5 + 3 ) * 6 #3023#(5+ 3 ) * 6 #4026-5#(E+ 3 ) * 6 #50264-5-#(E+3 ) * 6 #602643-5-#(E+3 ) * 6 #702647-5-3#(E+E) * 6 #8026-8#(E) * 6 #90269-8-#(E)* 6 #1001-8#E* 6 #11015-8-#E* 6 #12015
43、3-8-#E*6#130158-8-6#E*E#1401-48#E#15ACC在分析過程中,第(3)步操作后的狀態(tài)棧為 023,根據(jù)棧頂狀態(tài)“ 3”和現(xiàn)行輸入符號(hào)“ +”( input 欄字符串的第一個(gè)字符)查分析表 ACTION3,+=R4,即按第(4)個(gè)產(chǎn)生式 En 來進(jìn)行歸約;由于產(chǎn)生式右部?jī)H含一項(xiàng),故去掉狀態(tài)棧棧頂“3”;此時(shí) 2 變?yōu)樾碌臈m敔顟B(tài),再查( 2,E)的下一狀態(tài) s:GOTO2,E=6,即將狀態(tài) 6 和文法符號(hào) E 壓棧,最后得到第( 4)步的狀態(tài)。第( 7)步操作后也是如此,當(dāng)前狀態(tài)棧為 02647,根據(jù)棧頂狀態(tài) 7 和現(xiàn)行輸入符號(hào)“ )”查分析表 ACTION7,)=
44、R1,即按第(1)個(gè)產(chǎn)生式 EE1+E2進(jìn)行歸約;由于產(chǎn)生式右部有三項(xiàng),故去掉狀態(tài)棧棧頂?shù)?647 三項(xiàng);此時(shí) 2 變?yōu)樾碌臈m敔顟B(tài),再查( 2,E)的下一狀態(tài) s:GOTO2,E=6,即將狀態(tài) 6 和文法符號(hào) E 壓棧,最后得到第(8)步的狀態(tài)。三中間代碼生成器設(shè)計(jì):布爾表達(dá)式 布爾表達(dá)式在程序語言中有兩個(gè)基本作用:一是用作控制語句( 如 if -else 或 while語句)的條件式;二是用于邏輯演算,計(jì)算邏輯值。布爾表達(dá)式是由布爾算符( &、| 、?。┳饔糜诓紶栕兞浚?或常數(shù))或關(guān)系表達(dá)式而形成的。關(guān)系表達(dá)式的形式是 E1 rop E2,其中 rop 是關(guān)系符( 如或),E1和 E2是算
45、術(shù)式。在這里,我們只考慮前面給定文法所產(chǎn)生的布爾表達(dá)式:BB &B | B | B | ! B | (B) | i rop i | i遵照我們的約定,布爾算符的優(yōu)先順序( 從高到低)為:!、&、|,并假定&和|都服從左結(jié)合規(guī)則。所有關(guān)系符的優(yōu)先級(jí)都是相同的,而且高于任何布爾算符,低于任何算術(shù)算符,關(guān)系算符不得結(jié)合。表達(dá)式的真、假出口的確定:考慮表達(dá)式 B1 | B2 ,若 B1為真,則立即知道 B 也為真;因此,B1的真出口也就是整個(gè) B 的真出口。若 B1?為假,則 B2必須被計(jì)值,B2的第一個(gè)四元式就是 B1的假出口。當(dāng)然,B2的真、假出口也就是整個(gè) B的真、假出口。類似的考慮適用于對(duì) B
46、1 & B2的翻譯,我們將 B1 | B2和 B1 & B2 的翻譯用下圖表示,在自下而上的分析過程中,一個(gè)布爾式的真假出口往往不能在產(chǎn)生四元式的同時(shí)就填上。我們只好把這種未完成的四元式的地址( 編號(hào))作為 B 的語義值暫存起來,待到整個(gè)表達(dá)式的四元式產(chǎn)生完畢之后再來回填這個(gè)未填入的轉(zhuǎn)移目標(biāo)。條件語句對(duì)條件語句 if e S1 else S2 中的布爾表達(dá)式 e,其作用僅在于控制對(duì) S1和 S2的選擇。因此,作為轉(zhuǎn)移條件的布爾式e,我們可以賦予它兩種“ 出口”:一是“ 真”出T口,出向 S1;一是“ 假”出口,出向 S2。于是,e的代碼F條件語句可以翻譯成如圖的一般形式。非終結(jié)符 e 具有兩項(xiàng)
47、語義值 e _TC 和e_FC,它們分別指出了尚待回填真、S2的代碼假出口的四元式串。e 的“ 真”出口只有在往回掃描到if時(shí)才能知道,而它圖 3-2 條件語句的代碼結(jié)構(gòu) 的“ 假”出口則需到處理過 S1并且到達(dá) else 才能明確。這就是說,必須把 e_FC 的值傳下去,以便到達(dá)相應(yīng)的 else時(shí)才進(jìn)行回填。另外,當(dāng) S1語句執(zhí)行完時(shí)意味著整個(gè) if-else 語句也已執(zhí)行完畢;因此,在 S1的編碼之后應(yīng)產(chǎn)生一條無條件轉(zhuǎn)移指令。這條轉(zhuǎn)移指令將導(dǎo)致程序控制離開整個(gè) if-else 語句。但是,在完成 S2的翻譯之前,這條無條件轉(zhuǎn)移指令的轉(zhuǎn)移目標(biāo)是不知道的。甚至,在翻譯完 S2之后,這條轉(zhuǎn)移指令
48、的轉(zhuǎn)移目標(biāo)仍無法確定。這種情形是由于語句的嵌套性所引起的。例如下面的語句:if e1 if e2 S1 else S2 else S3 在 S1的代碼之后的那條無條件轉(zhuǎn)移指令不僅應(yīng)跨越 S2而且應(yīng)跨越 S3。這也就是說,轉(zhuǎn)移目標(biāo)的確定和語句所處的環(huán)境密切相關(guān)。條件循環(huán)語句條件循環(huán)語句 while e S 通常被翻譯成圖的代碼結(jié)構(gòu)。布爾式 e 的“ 真”出口出向 S 代碼段的第一個(gè)四元式。緊接 S 代碼段之后應(yīng)產(chǎn)生一條轉(zhuǎn)向測(cè)試 e 的無條件轉(zhuǎn)移指令。e 的“ 假”出口將導(dǎo)致程序控制離開整個(gè) while 語句。e 的“ 假”出口目標(biāo)即使在整個(gè) while 語句翻譯完之后也未必明確。例如: if e
49、1 while e2 S1 else S2這種情況仍是由于語句的嵌套性引起的。所以,我們只好把它作為語句的語義值 SCHAIN 暫留下來,以便在處理外層語句時(shí)再伺機(jī)回填。語法翻譯實(shí)現(xiàn)方法 將上述語法翻譯付諸實(shí)現(xiàn)過程中,我們僅保留了算術(shù)表達(dá)式和布爾表達(dá)式翻譯的文法和語義動(dòng)作;面對(duì)程序語句的翻譯,由于改造后含有較多的非終結(jié)符且語義動(dòng)作又相對(duì)簡(jiǎn)單,故仍恢復(fù)為改造之前的程序語句文法。由于總體上構(gòu)造一個(gè) SLR 分析表來實(shí)現(xiàn)語法分析及語義加工將使得所構(gòu)造的 SLR 分析表過大,所以將其分為下面三部分處理:對(duì)算術(shù)表達(dá)式單獨(dú)處理,即為算術(shù)表達(dá)式構(gòu)造一個(gè) SLR 分析表,并將賦值語句A=E 與算術(shù)表達(dá)式歸為一
50、類處理,處理之后的賦值語句僅看作為程序語句文法中的一個(gè)終結(jié)符 a。對(duì)布爾表達(dá)式也單獨(dú)處理,并為其構(gòu)造一個(gè) SLR 分析表,經(jīng) SLR 分析表處理后的布爾表達(dá)式看作為程序語句文法中的一個(gè)終結(jié)符 e。程序語句文法此時(shí)變?yōu)椋篠 if e S else S | while e S | L | a;L SL | S此時(shí)為程序語句構(gòu)造相應(yīng)的 SLR 分析表就簡(jiǎn)單多了。前面的程序語句文法中所添加的非終結(jié)符是為了能及時(shí)回填有關(guān)四元式轉(zhuǎn)移目標(biāo)而引入的,在取消了這些非終結(jié)符后又如何解決及時(shí)回填轉(zhuǎn)移目標(biāo)的問題呢?我們采取的解決方法是增加兩個(gè)數(shù)組 labelmark 和 labeltemp 來分別記錄語句嵌套中每一層
51、布爾表達(dá)式( 如果有的話)e 的首地址以及每一層else( 如果有的話)之前的四元式地址( 即無條件轉(zhuǎn)出此層 if 語句的四元式)。也即,對(duì)程序語句的翻譯來說:在處理完布爾表達(dá)式 e 后,回填 if 或 while 語句的真值鏈;在歸約完每一個(gè)語句 S 之后檢查符號(hào)棧,看在 S 之前的文法符號(hào)是否 if 或 while,若是則回填假值鏈( 假值入口為語句 S 所對(duì)應(yīng)的四元式序列之后;對(duì) if 語句,此時(shí)已在該序列之后加入了一條無條件轉(zhuǎn)移的四元式);在 if 語句中,else 前面要加入一個(gè)無條件轉(zhuǎn)移的四元式轉(zhuǎn)向 if 語句末尾;在 while語句尾要有一個(gè)無條件轉(zhuǎn)移四元式轉(zhuǎn)向 while 語句開頭。四數(shù)據(jù)結(jié)構(gòu)說明 編譯程序中涉及到的數(shù)據(jù)結(jié)構(gòu)說明如下:char ch=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化創(chuàng)意產(chǎn)業(yè)用房買賣合同范本
- 音樂節(jié)小吃攤租賃協(xié)議
- 臨時(shí)展覽攤位租賃協(xié)議
- 鍋爐酸洗合同范例
- 建房免房租合同范例
- 高檔酒店客房租賃合同三篇
- 鉆石及珠寶運(yùn)輸合同三篇
- 土耳其 定期 合同 類型
- 工業(yè)園區(qū) 保險(xiǎn)合作協(xié)議書
- 集體合同履約報(bào)告
- 醫(yī)院患者診療信息安全風(fēng)險(xiǎn)評(píng)估和應(yīng)急工作機(jī)制制定應(yīng)急預(yù)案XX醫(yī)院患者診療信息安全風(fēng)險(xiǎn)應(yīng)急預(yù)案
- 科技論文寫作PPTPPT通用課件
- 漆洪波教授解讀美國婦產(chǎn)科醫(yī)師學(xué)會(huì)“妊娠高血壓疾病指南2013版”
- 《劉姥姥進(jìn)大觀園》課本劇劇本3篇
- 標(biāo)準(zhǔn)OBD-II故障碼
- 連鑄機(jī)維護(hù)及維修標(biāo)準(zhǔn)
- 低壓配電室安全操作規(guī)程
- 廣東省醫(yī)療機(jī)構(gòu)應(yīng)用傳統(tǒng)工藝配制中藥制劑首次備案工作指南
- 大學(xué)英語議論文寫作模板
- 安川機(jī)器人遠(yuǎn)程控制總結(jié) 機(jī)器人端
- 良性陣發(fā)性位置性眩暈診療和治療
評(píng)論
0/150
提交評(píng)論