<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            分布式系統測試的難點(diǎn)與分析

            發(fā)布: 2010-10-02 12:38 | 作者: 帥丹文 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng) | 查看: 251次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

            分布式系統具有軟硬件平臺分布性、高穩定性、高可用性、高可擴展性、高可管理性、高并發(fā)性及數據一致性等多種特性。正是由于這些重要的特性,使得分布式系統的測試過(guò)程變得相對復雜和困難。本文主要從分布式系統測試的四個(gè)重要方面出發(fā),探討分布式系統測試過(guò)程中存在的一些難點(diǎn)問(wèn)題并進(jìn)行適當的分析。

            分布式系統測試環(huán)境

            一般來(lái)說(shuō),分布式系統是由一組服務(wù)器或者網(wǎng)絡(luò )設備組成(如圖1)。我們在部署測試環(huán)境的時(shí)候,所涉及的系統架構也會(huì )是比較復雜的,有以下幾個(gè)方面:

            • 網(wǎng)絡(luò )架構。在圖1中,我們應該如何在本地測試實(shí)驗室環(huán)境中模擬分別位于北京和紐約的兩個(gè)數據中心呢?由于地理原因,北京和紐約之間網(wǎng)絡(luò )的RTT(Round Trip Time)至少不會(huì )低于某個(gè)值。所以,在正式進(jìn)行測試之前,我們需要構建出測試所需要的網(wǎng)絡(luò )環(huán)境,模擬出這樣的固定網(wǎng)絡(luò )延時(shí)。
            • 硬件要求。例如,我們曾經(jīng)測試過(guò)一個(gè)分布式的文件系統,數據服務(wù)器要求運行在裸盤(pán)設備上(數據的存儲格式、尋址方式自定義以提高查找速度),所以,在安裝操作系統時(shí)需要特別考慮這樣的需求。同時(shí),在測試前,我們需要按照系統設計的要求采購硬件設備。例如,硬盤(pán)的規格(SATA硬盤(pán)還是SAS硬盤(pán))、內存的規格等。
            • 配置復雜。分布式系統涉及的軟硬件平臺較多,整個(gè)系統中需要設置的參數項非常多,系統配置過(guò)程會(huì )相應地變得復雜、困難和易錯。例如,在圖1中,我們需要配置的系統配置文件至少有十多個(gè)。

            實(shí)踐-1

            圖1  一個(gè)典型的分布式系統

            如果條件允許的話(huà),分布式系統的測試環(huán)境應該由測試工程師自己來(lái)搭建。系統管理員、網(wǎng)絡(luò )管理員等都沒(méi)有辦法完全代替測試工程師來(lái)進(jìn)行這些工作,因為他們并不清楚在實(shí)際的測試過(guò)程中,測試工程師對軟硬件環(huán)境的具體需求是什么,尤其是不同的測試用例對于環(huán)境的要求可能是不一樣的。

            分布式系統功能測試

            在測試執行過(guò)程中,對測試結果的分析是一個(gè)需要進(jìn)行深入思考的重點(diǎn)問(wèn)題。分布式系統測試的重點(diǎn)在于對后端服務(wù)器集群的測試,而判定系統中是否存在Bug則是我們需要解決的重要問(wèn)題。那么應該如何確定是否存在Bug呢?

            對于測試結果的分析,我們通常觀(guān)察下面幾種情況。

            • 觀(guān)察前端應用的返回結果。這里需要分兩種情況來(lái)考慮:第一,按照前端應用業(yè)務(wù)功能點(diǎn)及流程進(jìn)行操作,觀(guān)察返回結果是否符合業(yè)務(wù)方的需求預期;第二,操作后端的服務(wù)器(通常是重啟、宕機、斷網(wǎng)等操作),觀(guān)察前端應用的返回結果是否符合系統的設計需求。
            • 分析服務(wù)器日志。在功能測試過(guò)程中,當我們在啟動(dòng)服務(wù)器的時(shí)候,需要將日志級別定義為Debug級別(最低級別)。這樣做的主要目的是為了能便于測試工程師來(lái)分析日志和定位問(wèn)題。為了能更好地定位問(wèn)題,常常需要在服務(wù)器程序代碼中進(jìn)行日志打樁,把程序中的一些重要數據通過(guò)日志的方式展現出來(lái)。通常情況下,我們需要對日志的格式進(jìn)行約定,在日志行中增加一些關(guān)鍵字來(lái)進(jìn)行分類(lèi),這將便于測試工程師進(jìn)行日志分析,也有利于開(kāi)展分布式系統的自動(dòng)化測試。另外,值得注意的是,我們盡可能地將打樁代碼放在Debug代碼中,避免影響系統代碼,引入新問(wèn)題。
            • 分析操作系統的一些重要信息。我們測試的分布式系統絕大多數是基于Linux操作系統開(kāi)發(fā)的,在測試的過(guò)程中,除了詳細分析程序日志以外,還需要對操作系統的一些重要數據信息進(jìn)行分析,從而來(lái)診斷服務(wù)器程序是否存在異常。以L(fǎng)inux操作系統為例,我們常常會(huì )使用top命令、netstat命令及sar命令來(lái)查看操作系統的一些數據信息。例如,可以通過(guò)netstat命令檢查服務(wù)器程序是否正確地監聽(tīng)了指定的端口等。
            • 借助其他分析工具。例如,如何判斷服務(wù)器程序是否產(chǎn)生了內存泄漏?通常需要借助于內存檢測工具來(lái)進(jìn)行分析。在Linux環(huán)境下,我們常用Valgrind來(lái)進(jìn)行內存檢測。這是一款非常好用、功能強大的分析工具(官方網(wǎng)站:http://www.valgrind.org/),可以幫助測試或者開(kāi)發(fā)工程師快速發(fā)現很多隱藏的程序Bug,尤其是在內存檢測方面(同時(shí)它還具有很多其他優(yōu)秀的功能,讀者可以自己查看官網(wǎng)中的使用手冊)。

            分布式系統壓力測試性能測試

            對于分布式系統而言,壓力測試和性能測試非常重要。在進(jìn)行壓力測試和性能測試的時(shí)候,可能會(huì )碰到下面一些難點(diǎn)。

            • 數據準備。如何準備海量的測試數據并保證模擬數據的真實(shí)性?以一個(gè)分布式的文件系統為例,預先存入100GB的數據還是存入100TB的數據、存入的文件是大小基本一致差別不大還是各不相同甚至差異很大(例如,從幾十字節至幾十兆字節不等),這些因素對于分布式系統的性能影響是有很大差異的。另外,如果需要預先存入100TB的數據,若按每秒寫(xiě)入100MB數據來(lái)計算,寫(xiě)入100TB數據需要100×1024×1024/100=1048576秒=291.27小時(shí)=12天。我們是否能忍受這么長(cháng)時(shí)間的數據準備工作?為了解決這樣的問(wèn)題,我們需要對系統架構設計進(jìn)行深入分析,設計好測試場(chǎng)景,并提前進(jìn)行測試用例的設計,以盡早開(kāi)始準備測試數據。
            • 性能或壓力測試工具。通常來(lái)說(shuō),分布式系統的測試需要開(kāi)發(fā)一些測試工具來(lái)滿(mǎn)足性能測試的需求。如果可以的話(huà),建議這樣的測試工具最好由測試工程師自己來(lái)實(shí)現,因為測試工程師更清楚自己的測試需求。當需要自己開(kāi)發(fā)測試工具的時(shí)候,有兩個(gè)關(guān)鍵問(wèn)題需要重點(diǎn)關(guān)注:第一,一些關(guān)鍵數據的收集方式與計算將成為性能測試工具的關(guān)鍵,例如,TPS(每秒請求數)、Throughput(吞吐量)計算的準確性;第二,要保證性能測試工具的性能,如果工具本身的性能不好,將無(wú)法給予分布式系統足夠強大的壓力來(lái)進(jìn)行測試。另外,當考慮到多并發(fā)(例如有10萬(wàn)客戶(hù)端同時(shí)并發(fā)連接)時(shí),如果性能測試工具在一臺測試機器上只能運行50個(gè)或者更少的話(huà),那么需要的測試機器數量也將會(huì )很龐大(例如2000臺測試機),這個(gè)成本或許是許多公司不能承受的。因此,性能測試工具本身的性能必須要足夠好才能滿(mǎn)足需求、降低測試成本。

            分布式系統自動(dòng)化測試

            自動(dòng)化測試是測試行業(yè)發(fā)展的必然趨勢,對于分布式系統測試而言也不例外。在實(shí)施分布式系統自動(dòng)化測試的過(guò)程中,我們可能會(huì )碰到下面兩個(gè)難點(diǎn)問(wèn)題。

            • 涉及平臺多且硬件雜,測試流程控制困難。在實(shí)施自動(dòng)化測試的過(guò)程中,測試腳本需要控制的操作系統和應用程序很多,而且存在跨平臺的特性,同時(shí)還有可能需要控制一些網(wǎng)絡(luò )設備。因此,選擇一個(gè)優(yōu)秀的自動(dòng)化測試框架成為了非常重要的工作之一。以我們的實(shí)踐經(jīng)驗來(lái)看,STAF是一個(gè)不錯的選擇(官方網(wǎng)站:http://staf.sourceforge.net/),它的平臺(Windows及Linux各版本)支持及開(kāi)發(fā)語(yǔ)言的支持都很全面。
            • 測試結果驗證復雜。對于分布式系統的自動(dòng)化測試來(lái)說(shuō),我們需要通過(guò)測試腳本來(lái)收集各種測試結果數據以驗證測試結果的正確性。在實(shí)施自動(dòng)化測試的過(guò)程中,我們可以將測試結果數據收集部分模塊化,通過(guò)各子模塊來(lái)檢測各項數據是否正確。例如,我們會(huì )設計一個(gè)日志分析模塊,主要負責從服務(wù)器應用程序的日志中收集相應數據進(jìn)行對比驗證(本文前面提到的在打樁日志中增加關(guān)鍵字部分就顯得格外重要)。

            隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,大型分布式系統也越來(lái)越多、越來(lái)越復雜、越來(lái)越重要。如何有效地保證大型分布式系統7×24小時(shí)全天候持續穩定地運行也就成為了一個(gè)重要課題。本文希望通過(guò)對分布式系統測試過(guò)程中碰到的一些難點(diǎn)問(wèn)題的分析給予讀者一定的啟發(fā)。

            作者簡(jiǎn)介:

            帥丹文,測試技術(shù)專(zhuān)家,近十年測試與開(kāi)發(fā)工作經(jīng)驗,目前負責淘寶基礎應用測試團隊,對測試架構以及自動(dòng)化測試、接口測試、分布式系統測試有深入的研究。

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>