第1章 軟件性能測試
當今,計算機和軟件工程發展越來越快,新的概念名詞和技術手段層出不窮,可謂日新月異。在軟件性能測試范疇內就有很多,諸如并發測試、壓力測試、基準測試、測試場景等概念和名詞,這讓剛接觸性能測試的新手眼花繚亂,目不暇接。但我們如果能深入軟件性能測試的本質,從哲學的角度看問題,找出其內在聯系,比如因果關系、形式內容關系,甚至重疊關系等,理清思路之后,那么做軟件性能測試就會如庖丁解牛,游刃有余。
1.1 什么是軟件的性能
1.1.1 軟件
計算機軟件作為人類邏輯智慧的結晶,它可以模擬并替代人類的一些活動,替人“發號施令”。在計算機軟件發展的短短幾十年內,計算機軟件以非??斓乃俣葷B透到了人類社會的各個角落,比如現在我們在家上網,出門坐公交車刷卡,在工作中發電子郵件等,這些生活的背后都有大量的軟件系統運行支持。
同時,有關軟件的概念和名詞也呈爆炸性增長,從google中搜索“軟件”關鍵詞,就有135 000 000條記錄;軟件的方向和領域也在不斷細化,比如軟件架構和平臺、軟件工程、軟件應用,還有軟件開發測試等,因此我們可以判斷軟件的發展趨勢是系統化、復雜化,這個趨勢使軟件能夠提供越來越強大的功能,但同時也為我們理解和把握軟件帶來困難。
但我們做事的原則應該是要把復雜的事情變簡單,而不是更復雜,更難理解。當我們試圖理解和分析一個復雜的事物的時候,最常用的方法是分而治之,就是要用一個或多個簡單的概念去解釋或描述這個復雜的事物,這符合我們人類的認知規律,人們對簡單的概念能夠理解,那么對簡單進行綜合和歸納,就形成了對復雜的認知。比如,我們想要讓一個沒有上過網的人明白什么是“電子郵件”,那就可以告訴他“通過網絡發送的郵件”,當然他很有可能對“網絡”也一頭霧水,那么你可以繼續向他解釋“打魚的網”。但在軟件領域中,我們卻經常搞不明白這個道理,一個剛入門有志于軟件性能測試的菜鳥小心翼翼地向一個前輩高人請教什么是性能測試,前輩首先以威嚴的口氣告訴他“性能測試是很復雜的”,然后徐徐道來“性能測試分為負載測試、壓力測試、容量測試等”。到這里,我相信可憐的菜同學對性能測試已經更加糊涂了,他在請教問題之前,恐怕還能知道性能測試是測試軟件性能的,在得到高手回答之后,他開始勤奮地請教google,沒想到google回答他的是更多的名詞概念(網上文章都是前輩仙人寫的)。隨著時間推移,菜同學升級成牛同學,他對性能測試名詞概念爛熟于心(google功底深厚),并且牛同學又牢牢堅持與時俱進的思想,獨立創新了N個性能測試概念,并開始向一群小菜粉絲們講經布道,于是上一幕的畫面和對白又開始回放,只是演員變了……這只是一個假想的故事,故事的結局就是通過“學習”,性能測試不僅沒有簡單,反而越來越復雜了。我們要真正掌握性能測試,那就要避免這樣的事情發生,從本質上認識軟件性能和軟件性能測試。
辯證唯物主義哲學認為,時間和空間是運動著的世間萬物的存在形式。大到社會形態,小到個人的活動,都是在一定的空間和時間內進行的。
因此,我們在試圖把一件事情表述清楚時,通常要抓住事情的幾個關鍵要素:時間、空間(地點)、人物(主體)、事件。比如“旅行者的一次長途旅行在兩個月內從北京到西藏”,這句話中包含了關鍵要素,其時間是兩個月,空間是北京到西藏,人物是旅行者,發生的事件是旅行者在兩個月時間范圍內發生空間中的轉移;又如“一場足球賽”,這個名詞看起來簡單,但仍清楚地隱含了三個要素,即:時間,通常是90分鐘(如果沒有加時賽和傷停補時);空間,足球場內;人物,足球運動員,事件就是在足球規則下可能發生的事情,如進球等。
計算機的出現是人類歷史上一次偉大的革命,在哲學“物質”這個名詞的外延中又多了一個新型事物——計算機軟件。如果我們認識到計算機軟件也是萬物之一,分析其作為“物質”的性質也逃脫不了自然法則的“緊箍咒”,那么我們同樣可以把軟件作如下簡單的理解:
主體:程序,是人類邏輯思維的物化,表現形式為一系列指令代碼。
時間:即使計算機速度再快,任何軟件程序每一段代碼的運行都是需要時間的,例如從用戶的感受來講,就是程序將運行結果響應給用戶的速度。
空間:軟件運行的環境,以資源的方式存在,通常是軟件以間接或直接的方式占用并使用硬件資源和其他軟件資源。
硬件資源主要指運行該軟件的硬件平臺,有CPU、內存和存儲系統等,如果軟件是基于網絡架構的,那么硬件還有網絡硬件,如交換機、路由器等。
軟件資源包括操作系統、開發平臺、中間件和數據庫等,它們以庫文件和API的方式提供給應用軟件使用。
事件:軟件按照用戶的要求運行,運行的同時必然要占用時間資源和空間資源。
由于軟件代碼是人的邏輯思想的表現,所以軟件在設計思想和實現方法上也有很大差異。另外,隨著軟件的發展,產生了各種應用領域的軟件,它們之間存在著千絲萬縷的關系。從層次上看,有系統軟件,應用軟件和介于兩者之間的中間件。因此一個軟件的運行牽涉的因素很多,需要從各個方面分析。
1.1.2 軟件性能的產生
用戶能夠看到的是軟件越來越通用,功能越來越龐大,從哲學角度上看待軟件本身,其發展是一個從簡單到復雜,從低級到高級,從無序到有序的過程。
在計算機發展的初期,計算機軟件對硬件有很強的依賴性,而且還沒有廣泛的通用性,只有少數的個人或機構才使用軟件這個“奢侈品”,當時用戶也沒有軟件性能的概念,通常為了實現軟件的功能而不計一切代價。比如,1946年2月15日,世界上第一臺通用電子數字計算機“埃尼阿克”(ENIAC)在美國研制成功。它當時由1.8萬個電子管組成,是一臺又大又笨重的機器,體重達30多噸,占地有兩三間教室般大。它當時的運算速度僅為每秒5000次加法運算,在現在看來,它占用如此多的資源,又運行得如此慢,在當時卻是相當了不起的成就,因為它已經實現了功能——能夠做加法運算??梢姵跗诘能浖呛唵蔚?,當時用戶的要求用現在的眼光來看真有點可憐巴巴,對軟件的要求不高,只要能工作就OK了。
原文轉自:http://www.anti-gravitydesign.com