




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2023/10/181軟件工程(SoftwareEngineering)第七章實現2023/10/182編碼和測試編碼就為是用編程(程序)語言把軟件表達翻譯為計算機可以理解的形式—用某種程序設計語言書寫的程序。2023/10/183前一頁測試
軟件測試非常重要,它對軟件可靠性產生直接影響。測試的目的是在軟件投入生產運行之前,盡可能多地發現軟件中的錯誤。目前軟件測試仍然是保證軟件質量的關鍵步驟,它是對軟件規格說明、設計和編碼的最后復審。軟件測試由兩個階段組成,分別是單元測試和集成測試。2023/10/184測試
軟件測試的工作量往往占軟件開發總工作量的40%以上,在極端情況,測試那種關系生命安全的軟件所花費的成本,可能相當于軟件工程其他開發步驟總成本的3—5倍。
測試的目的是發現錯誤,但軟件生產的最終目的是開發出高質量的完全符合用戶需要的軟件。2023/10/185本章主要內容編碼測試基礎單元測試集成測試確認測試白盒測試技術黑盒測試技術調試軟件可靠性前一頁2023/10/186編碼編碼之前的一項重要工作是選擇適當的程序設計語言適當的編程語言可以減少需要的程序測試量,可以得出更易閱讀和更易維護的程序匯編語言和高級語言相比,使用高級語言寫的程序更易閱讀、測試、調試和維護2023/10/187編碼在進行高級語言的選擇時,應該有標準參照系統用戶的要求可以使用的編譯程序可以得到的軟件工具工程規模程序員的知識軟件可移植性要求軟件的應用領域2023/10/188編碼風格設計出易讀易懂程序的規則:程序內部的文檔標識符:含義鮮明的名字注解:幫助理解程序程序的視覺組織:程序清單的布局2023/10/189編碼風格數據說明:數據說明的次序應該標準化,提高效率按字母順序排列變量使用注解說明復雜的數據結構2023/10/1810編碼風格語句構造:每個語句都應該簡單而直接
可以使用一些規則使語句構造簡單,如:盡量避免復雜的條件測試,不要為了節省空間而把多個語句寫在同一行等。2023/10/1811編碼風格輸入輸出在設計和編寫程序時應考慮輸入和輸出風格的規則。2023/10/1812編碼風格效率:處理機時間和存儲器容量三條基本原則:效率是性能要求,需求分析階段確定效率是靠好設計來提高的程序的效率和程序的簡單程度是一致的2023/10/1813編碼風格效率程序運行時間:寫程序的風格對執行速度有影響存儲器效率:提供存儲器效率輸入輸出的效率:提高人機通信的效率2023/10/1814軟件測試基礎前一頁
軟件測試階段的根本目標是盡可能多地發現并排除軟件中潛藏的錯誤,最終把一個高質量的軟件系統交給用戶使用。2023/10/1815基本概念軟件測試的目標
軟件測試準則測試方法測試步驟測試階段的信息流
前一頁2023/10/1816前一頁基本概念軟件測試的目標
(1)測試是為了發現程序中的錯誤而執行程序的過程。
(2)好的測試方案是極可能發現迄今為止尚未發現的錯誤的測試方案。
(3)成功的測試是發現了至今為止尚未發現的錯誤的測試。2023/10/1817軟件測試的定義測試的正確定義:為了發現程序中的錯誤而執行程序的過程錯誤觀念:測試是為了表明程序是正確的測試應由專門的測試小組來完成測試只能查找程序中的錯誤,不能證明程序中沒有錯誤2023/10/1818軟件測試準則所有測試都能追溯到用戶需求應該盡早開始測試計劃的制定應用Pareto原理定位錯誤測試應該有“小”到“大”窮舉測試不可能應該由獨立的第三方從事測試工作2023/10/1819前一頁測試方法
黑盒測試是在程序接口進行的測試,它只檢查程序功能是否能按照規格說明書的規定正常使用,程序是否能適當地接收輸入數據產生正確的輸出信息,并且保持外部信息(如:數據庫或文件)的完整性。黑盒測試又稱為功能測試。測試任何產品都有兩種方法:黑盒測試和白盒測試2023/10/1820基本概念前一頁白盒測試
白盒測試法是可以把程序看成裝在一個透明的白盒子里,了解程序的結構和處理過程。這種方法按照程序內部的邏輯測試程序,檢驗程序中的每條通路是否能按預定要求正確工作。白盒測試又稱為結構測試。2023/10/1821前一頁測試步驟
大型軟件系統通常由若干個子系統組成,每個子系統又由許多模塊組成。因此,大型軟件的測試基本上由下述幾個步驟組成:1、模塊測試2、子系統測試3、系統測試4、驗收測試5、平行運行
2023/10/1822軟件測試的步驟前一頁模塊測試
模塊測試的目的是保證每個模塊作為一個單元能正確運行,所以模塊測試通常又稱為單元測試。在這個測試步驟中所發現的往往是編碼和詳細設計的錯誤。
2023/10/1823前一頁子系統測試
子系統測試是把經過單元測試的模塊放在一起形成一個子系統來測試。模塊相互間的協調和通信是這個測試過程中的主要問題。這個步驟著重測試模塊的接口。
軟件測試的步驟2023/10/1824前一頁系統測試
系統測試是把經過測試的子系統裝配成一個完整的系統來測試。在這個過程中不僅應該發現設計和編碼的錯誤,還應該驗證系統確實能提供需求說明書中指定的功能,而且系統的動態特性也要符合預定要求。在這個測試步驟中發現的往往是軟件設計中的錯誤,也可能發現需求說明中的錯誤。軟件測試的步驟2023/10/1825前一頁驗收測試
驗收測試把軟件系統作為單一的實體進行測試,測試內容與系統測試基本類似,但是它是在用戶積極參與下進行的,而且可能主要使用實際數據進行測試。驗收測試的目的是驗證系統確實能夠滿足用戶的需要,在這個測試步驟中發現的往往是系統需求說明書中的錯誤。軟件測試的步驟2023/10/1826前一頁平行測試
所謂平行運行就是同時運行新開發出來的系統和舊系統,以便比較新舊兩個系統的處理結果,其優點是:
(1)可以在準生產環境中運行新系統而又不冒風險;(2)用戶能有一段熟悉新系統的時間;(3)可以驗證用戶指南和使用手冊之類的文檔;(4)能夠以準生產模式對新系統進行全負荷測試,可以用測試結果驗證性能指標。
軟件測試的步驟2023/10/1827測試階段的信息流輸入軟件配置:需求說明書、設計說明書和程序清單測試配置:測試計劃和測試方案調試測試發現錯誤之后排除錯誤的過程,由程序編者負責可靠性模型使用錯誤率數據估計未來出現錯誤的情況2023/10/1828前一頁測試階段的信息流2023/10/1829前一頁單元測試測試重點代碼審查計算機測試
主要內容2023/10/1830前一頁單元測試測試重點
模塊接口局部數據結構重要的執行通路出錯處理通路邊界條件2023/10/1831前一頁單元測試的考慮模塊接口
首先應該對通過模塊接口的數據流進行測試。如果數據不能適當地進出,所有其他測試都是不切實際的。在對接口進行測試時主要檢查下述各點:
(1)參數數目和調用的變元的數目是否相等;(2)參數的屬性和變元的屬性是否匹配;(3)參數和變元的單位系統是否匹配;(4)傳送給被調用模塊的變元的數目是否等于那個模塊的參數的數目。
2023/10/1832前一頁模塊接口
(5)傳送給被調用模塊的變元屬性和參數的屬性是否一致?(6)傳送給被調用的變元的單位系統和該模塊參數的單位系統是否一致?(7)傳送給內部函數的變元屬性、數目和次序是否正確?(8)是否修改了只做輸入用的變元?(9)全程變量的定義和用法在各個模塊中是否一致?
單元測試的考慮2023/10/1833前一頁
對于一個模塊而言,局部數據結構是常見的錯誤來源。應該仔細設計測試方案,以便發現局部數據說明、初始化、默認值等方面的錯誤。局部數據結構單元測試的考慮2023/10/1834前一頁重要的執行通路
由于通常不可能進行窮盡測試,因此,在單元測試期間選擇最有代表性、最可能發現錯誤的執行通路進行測試就是十分關鍵的。應該設計測試方案用來發現由于錯誤的計算、不正確的比較或不適當的控制流而造成的錯誤。在計算中比較常見的錯誤是:
(1)計算次序不對或誤解了運算符的優先次序;(2)混合運算(運算對象的類型彼此不相容);(3)變量初始值不正確;(4)精度不夠;(5)表達式的符號表示錯誤。
單元測試的考慮2023/10/1835前一頁出錯處理通路
好的設計應該能預見出現錯誤的條件,并且設置適當的處理錯誤的通路,以便在真的出現錯誤時執行相應的出錯處理通路或干凈地結束處理。不僅應該在程序中包含出錯處理通路,而且應該認真測試這種通路。單元測試的考慮2023/10/1836前一頁出錯處理通路
當評價出錯處理通路時,應該著重測試下述一些可能發生的錯誤:
(1)對錯誤的描述是難于理解的;(2)記下的錯誤與實際遇到的錯誤不同;(3)在對錯誤進行處理之前,錯誤條件已經引起系統干預;(4)對錯誤的處理不正確;(5)描述錯誤的信息不足以幫助確定造成錯誤的位置。單元測試的考慮2023/10/1837前一頁邊界條件
邊界測試是單元測試中最后的也可能是最重要的任務。軟件常常在它的邊界上失效,例如,處理n元數組的第n個元素時,或做到i次循環中的第i次重復時,往往會發生錯誤。使用剛好小于、剛好等于和剛好大于最大值或最小值的數據結構、控制量和數據值的測試方案,非常可能發現軟件中的錯誤。單元測試的考慮2023/10/1838前一頁代碼審查
人工測試源程序可以由編寫者本人非正式地進行。后者稱為代碼審查,它是一種非常有效的程序驗證技術,對于典型的程序來說,可以查處30%--70%的邏輯設計錯誤和編碼錯誤。單元測試過程2023/10/1839代碼審查過程:審查之前,由設計者簡要介紹設計說明書和對程序的設計審查會上程序的編寫者解釋怎樣實現設計對照程序錯誤清單,分析審查程序2023/10/1840代碼審查代碼審查的優勢:一次審查會上可以發現許多錯誤,同時可以減少系統驗證的工作量人工測試和計算機測試相互補充,相輔相成2023/10/1841前一頁計算機測試
模塊并不是一個獨立的程序,因此必須為每個單元測試開發驅動軟件和(成)存根軟件。通常驅動程序也就是一個“主程序”,它接收測試數據,把這些數據傳送給被測試的模塊,并打印出有關的結果。單元測試過程2023/10/1842前一頁本小節結束2023/10/1843前一頁集成測試
由模塊組裝成程序時有兩種方法。一種是先分別測試每個模塊,再把所有模塊按設計要求放在一起結合成所要的程序。這種方法稱為非漸增式測試方法。另一種方法是把下一個要測試的模塊同已經測試好的那些模塊結合起來進行測試,測試完以后再把下一個應該測試的模塊結合進來測試。這種每次增加一個模塊的方法稱為漸增式測試。
2023/10/1844集成測試
自頂向下結合自底向上結合不同集成測試策略的比較
主要內容前一頁2023/10/1845前一頁集成測試自頂向下結合
自頂向下的結合方法是從主控制模塊開始,沿著軟件的控制層次向下移動,從而逐漸把各個模塊結合起來。或者使用深度優先的策略,或者使用寬度優先的策略
第一步對主控制模塊進行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊。
第二步根據選定的結合策略(深度優先或寬度優先),每次用一個實際模塊代換一個存根程序。
第三步在結合進一步模塊的同時進行測試。
第四步為了保證加入模塊沒有引進新的錯誤,可能需要進行回歸測試(即,全部或部分的重復以前做過的測試)。2023/10/1846前一頁自頂向下結合2023/10/1847自底向上結合集成測試前一頁
自底向上測試從“原子”模塊(即在軟件結構最底層的模塊)開始組裝和測試。因為是從底部向上結合模塊,總能得到需要的下層模塊處理功能,所以不需要存根程序。
2023/10/1848自底向上結合前一頁2023/10/1849不同集成測試策略的比較集成測試前一頁
自頂向下測試方法的主要優點是不需要測試驅動程序,能夠在測試階段的早期實現并驗證系統的主要功能,而且能在早期發現上層模塊的接口錯誤。自頂向下測試方法的主要缺點是需要存根程序,可能遇到與此相聯系的測試困難,低層關鍵模塊中的錯誤發現較晚,而且用這種方法在早期不能充分展開人力。自頂向上測試方法的優缺點與上述自頂向下測試方法的優缺點剛好相反。混合法:對軟件結構中較上層,使用的是自頂向下方法;對軟件結構中較下層,使用的是自底向下方法,兩者相結合。
2023/10/1850驗收測試驗收測試的范圍軟件配置復查
主要內容前一頁2023/10/1851驗收測試軟件有效性:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。驗收測試又稱為確認測試,目標是驗證軟件的有效性。2023/10/1852驗收測試前一頁驗收測試的范圍
(1)某些已經測試過的純粹技術性的特點可能不需要再次測試;
(2)對用戶特別感興趣的功能或性能,可能需要增加一些測試;
(3)通常主要使用生產中的實際數據進行測試;
(4)可能需要設計并執行一些與用戶使用步驟有關的測試。
2023/10/1853驗收測試前一頁驗收測試的范圍
驗收測試一般使用黑盒測試法.應該仔細設計測試計劃和測試過程,測試計劃包括要進行的測試的種類和進度安排,測試過程規定用來檢驗軟件是否與需要一致的測試方案。通過測試要保證軟件能滿足所有功能,能達到每個性能要求,文檔資料是準確而完整的。此外,還應該保證軟件能滿足其他預定的要求(例如:可移植性、兼容性、可靠性、安全性和可維護性等等)。
2023/10/1854驗收測試前一頁驗收測試的范圍驗收測試有兩種可能的結果:
(1)功能和性能與用戶要求一致,軟件是可以接受的。(2)功能或性能與用戶的要求有差距。2023/10/1855驗收測試前一頁軟件配置復查
驗收測試的一個重要內容是復查軟件配置。復查的目的是保證軟件配置的所有成分都齊全,各方面的質量都符合要求,文檔與程序一致。在驗收測試的過程中應該嚴格遵守用戶指南以及其他操作程序,以便檢驗這些使用手冊的完整性和正確性。必須仔細記錄發現的遺漏或錯誤,并且適當地補充和改正。2023/10/1856設計測試方案前一頁
設計測試方案的基本目標是確定一組最可能發現某個錯誤或某類錯誤的測試數據。
2023/10/1857設計測試方案邏輯覆蓋
等價劃分
邊界值分析
錯誤推測
實用測試策略
前一頁主要內容2023/10/1858設計測試方案前一頁邏輯覆蓋
所謂邏輯覆蓋是對一系列測試過程的總稱,這組測試過程逐漸進行越來越完整的通路測試。大致有以下一些不同的覆蓋標準:
1、語句覆蓋2、判定覆蓋3、條件覆蓋4、判定/條件覆蓋5、條件組合覆蓋6、點覆蓋7、邊覆蓋8、路徑覆蓋2023/10/1859設計測試方案前一頁邏輯覆蓋1.語句覆蓋為了暴露程序中的錯誤,至少每個語句應該執行一次。語句覆蓋的含義是,選擇足夠多的測試數據,使被測試程序中的每個語句至少執行一次。2.判定覆蓋判定覆蓋又叫分支覆蓋,它的含義是,不僅每個語句必須至少執行一次,而且每個判定的每種可能的餓結果都應該至少執行一次,也就是每個判定的每個分支都至少執行一次。2023/10/1860設計測試方案前一頁邏輯覆蓋3.條件覆蓋條件覆蓋的含義是,不僅每個語句至少執行一次,而且使判定表達式中的每個條件都取到各種可能的結果。
4.判定/條件覆蓋它的含義是,選取足夠多的測試數據,使得判定表達式中的每個條件都取到各種可能值,而且每個判定表達式也都取到各種可能的結果。2023/10/1861設計測試方案前一頁邏輯覆蓋5.條件組合覆蓋條件組合覆蓋是更強的邏輯覆蓋標準,它要求選取足夠多的測試數據,使得每個判定表達式中條件的各種可能組合至少出現一次。6.點覆蓋在正常情況下程序圖是連通的有向圖,圖中每個節點相當于程序流程圖的一個框滿足點覆蓋標準要求選取足夠多的測試數據,使得程序執行路徑至少經過程序圖中每個節點一次。顯然,點覆蓋標準和語句覆蓋標準是相同的。2023/10/1862設計測試方案前一頁邏輯覆蓋7.邊覆蓋為了滿足邊覆蓋的測試標準,要求選取足夠多測試數據,使得程序執行路徑至少經過程序圖中每條邊一次。2023/10/1863設計測試方案前一頁邏輯覆蓋8.路徑覆蓋
路徑覆蓋的含義是,選取足夠多測試數據,使程序的每條可能路徑至少執行一次。路徑覆蓋是相當強的邏輯覆蓋標準,它保證程序中每條可能的路徑都至少執行一次,因此這樣的測試數據更有代表性,暴露錯誤的能力也比較強。2023/10/1864控制結構測試根據程序的控制結構進行測試用例的選擇基本路徑測試條件測試循環測試2023/10/1865控制結構測試基本思路:計算程序的環形復雜度,根據該復雜度定義執行路徑的基本集合,從該集合導出的測試用例。可以保證程序中的每條語句至少執行一次,而且每個條件在執行時都將分別取真、假兩種值。基本路徑測試2023/10/1866控制結構測試步驟:根據過程設計結果畫出流圖計算流圖的環形復雜度確定線性獨立路徑的基本集合設計可強制執行基本集合中每條路徑的測試用例基本路徑測試2023/10/1867基本路徑測試流圖:“退化了的”程序流程圖,只描繪程序的控制流程,數據的具體操作及分支或循環的條件無須畫出。流圖畫法:一個圓(即結點)表示一條或多條語句,將程序流程圖中的處理框或菱形框映射為結點;箭頭線(即邊)表示控制流;點和邊圍成的面積稱為域。步驟詳細分析2023/10/1868procedure:sortdowhilerecordsremainreadrecord;ifrecordfield1=0thenprocessrecord;storeinbuffer;incrementcounter;elseifrecordfield2=0thenresetcounter;elseprocessrecord;storeinfile;7a.endifendif7b.enddo8.end程序流程圖轉化為流圖舉例2023/10/18691236458711910例:程序流程圖2023/10/187012,39784,561011流圖2023/10/1871基本路徑測試圖7.6將PDL描述的程序轉換為流圖下面進入第二步:計算環形復雜度V(G)V=流圖中的域數V=E–N+2(E:邊數,N:結點數)V=P+1(P:判定結點數)
任何一種方法求得的V均為62023/10/1872123456879101211132023/10/1873基本路徑測試第三步:根據V確定獨立路徑的集合獨立路徑:至少包含一條在定義該路徑之前不曾用過的邊獨立路徑的集合中的路徑條數=V2023/10/1874基本路徑測試第四步:設計測試用例根據判定結點的條件進行設計2023/10/1875黑盒測試技術黑盒測試技術與白盒測試技術互為補充力圖發現錯誤的類型:功能不正確或遺漏了功能界面錯誤數據結構錯誤或外部數據庫訪問錯誤性能錯誤初始化和終止錯誤2023/10/1876前一頁等價劃分
選取少量最有代表性的輸入數據作為測試數據,以期用較小的代價暴露出較多的程序錯誤。等價劃分便是把程序的輸入域劃分為若干個數據類,從每個類中選出測試用例。如果把所有可能的輸入數據(有效的和無效的)劃分成若干個等價類,則可以合理地做出下述假定:每類中的一個典型值在測試中的作用與這一類中所有其他值的作用相同。因此,可以從每個等價類中只取一組數據作為測試數據。這樣選取的測試數據最有代表性,最可能發現程序中的錯誤。
2023/10/1877等價劃分劃分的規則:如果規定了輸入值的范圍,則可劃分出一個有效的等價類和兩個無效的等價類如果規定了輸入數據的類型,也可劃分出相應的有效等價類如果處理的對象是表格,則應該使用空表,以及含一項或多項的表……2023/10/1878等價劃分應該使每個測試方案只覆蓋一個無效的等價類舉例把數字串轉換成整數的函數劃分的一個有效等價類為:1~6個數字字符組成的數字串(高位不為0)最高位數字是零的數字串最高位數字左鄰是負號的數字串2023/10/1879前一頁邊界值分析
經驗表明,處理邊界情況時程序最容易發生錯誤。例如,許多程序錯誤出現在下標、純量、數據結構和循環等等的邊界附近。因此,設計使程序運行在邊界情況附近的測試方案,暴露出程序錯誤的可能性更大一些。選取的測試數據應該剛好等于、剛剛小于和剛剛大于等價類的邊界。2023/10/1880設計測試方案前一頁錯誤推測
錯誤推測法在很大程度上靠直覺和經驗進行。基本思想是列舉出程序中可能有的錯誤和容易發生的特殊情況,并且根據它們選擇測試方案。經驗表明,在一段程序中已經發現的錯誤數目往往和尚未發現的錯誤數成正比。因此著重測試已發現錯誤的程序段。2023/10/1881錯誤推測等價劃分和邊界值分析只考慮各個輸入數據的測試功效,沒有考慮多個輸入數據的組合效應。選擇輸入組合的一種方法是利用判定表或判定樹,判定表的每一列至少設計一個測試用例。另一種有效方法是把計算機測試和人工檢查代碼結合起來。2023/10/1882前一頁調試
問題的外部現象稱為錯誤,問題的內在原因稱為故障調試就是把癥狀和原因聯系起來的智力過程。2023/10/1883調試調試過程
調試途徑
主要內容前一頁2023/10/1884調試過程圖7.8反映了調式的過程調式的過程很艱辛錯誤的后果越嚴重,查找錯誤原因的壓力就越大壓力會導致軟件開發人員在改
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年心理治療師資格考試真題及答案
- 2025年特殊心理輔導師考試試題及答案解析
- 2025年通信工程技術人員考試試卷及答案
- 2025年文化產業與政策研究專項考試試卷及答案
- 2025年社區經濟發展實務考試題及答案
- 2025年企業管理案例分析能力考試試卷及答案
- 2025年臨床醫學專業統考試題及答案解析
- 2025年國際關系與外交考試卷及答案
- 2025年航空服務專業技能考核試卷及答案
- AI賦能防災減災與生態環境保護的策略及實施路徑
- 2025年心理咨詢師考試試題及答案詳解
- 2025年河北省公需課《深入學習貫徹關于網絡安全的重要論述全面加強網絡安全保障體系和能力建設》答案
- 貴州國企招聘2024貴州貴安發展集團有限公司招聘68人筆試參考題庫附帶答案詳解
- GB/T 45576-2025網絡安全技術網絡安全保險應用指南
- 2025年特種設備安全操作人員安全操作規范試題庫
- 2025年項目管理軟件應用試題及答案
- 2025至2030年中國24小時動態心電分析系統行業投資前景及策略咨詢報告
- 天津2025年中國醫學科學院放射醫學研究所第一批招聘筆試歷年參考題庫附帶答案詳解
- 國開2024春管理會計#形考作業1-4
- 醫學微生物學試題庫含答案(附解析)
- 2025年黃山旅游發展股份有限公司春季招聘75人筆試參考題庫附帶答案詳解
評論
0/150
提交評論