可移植性是實際測試過程中需要重點關注,而常常容易被忽視或者遺忘的質量特性。測試人員都知道可移植性測試,卻往往不知道該從哪些方面考慮可移植性測試。
可移植性測試通常和軟件移植到某個特定的運行環境中的難易程度相關,包括第一次建立或從現有環境上移植到另一個環境上。
系統的可移植性并不是在系統開發的后期才開始考慮的,在整個軟件開發生命周期都必須要考慮系統的可移植性,尤其是在早期的需求分析和設計階段。在需求分析階段,最好能夠明確的定義可移植性需求。例如:雖然當前軟件版本僅僅支持運行在Windows平臺上,但是需要考慮將來移植到Linux上的需求。
一個大型的軟件可能包括多個不同級別的設計。設計階段要重點關注外部接口,例如:文件訪問接口、內存管理和用戶界面等。這些接口是最容易發生可移植性問題的地方。業界有很多針對這些接口的標準,軟件產品如果能夠符合這些標準,將會大大的提高軟件自身的可移植性。例如:針對字符集的ASCII,針對操作系統接口的POSIX等。
從測試層面而言,可移植性測試應該重點關注在測試對象的不同接口上面。具體而言,可移植性測試至少需要考慮可安裝性測試、共存性/兼容性測試、適應性測試和可替換性測試。
1)可安裝性測試
可安裝性測試是針對那些用于在目標環境安裝軟件的安裝程序所進行的測試。它可以包括安裝操作系統的軟件或在客戶個人電腦上安裝軟件產品的安裝向導軟件。典型的可安裝性測試應完成下列目標:
● 使用安裝向導或遵照安裝手冊的步驟(包括執行必需的安裝腳本),驗證是否可以成功地進行軟件安裝。其中包括選擇相應的選項針對不同的軟硬件配置進行安裝,以及進行不同程度地安裝(如完全安裝或部分安裝);
● 測試安裝軟件是否能夠正確處理安裝過程中所出現的失敗(例如:無法安裝某些DLL)現象,而不致于使系統處于某個不確定的狀態(如軟件只安裝了一部分或造成錯誤的系統配置);
● 測試部分(不完全的)安裝/卸載能否完成;
● 測試安裝向導是否可以成功地識別無效的硬件平臺或操作系統配置;
● 衡量是否能夠在一定時間內或在一定步驟內完成整個安裝過程;
● 驗證是否可以成功地進行軟件降級或卸載;
通常,可安裝性測試在檢查是否存在安裝方面的問題(例如:配置錯誤、功能缺失)之后,才進行功能測試。易用性測試一般和安裝測試同時進行(例如:驗證在安裝過程中軟件是否能夠向用戶提供明確的指導、反饋或出錯提示)。
2)共存性/兼容性測試
如果不存在相互依賴關系的計算機系統可以在同一環境(例如:同一個硬件平臺)中運行,而不影響彼此的行為(如資源沖突),則稱之為是兼容的。例如:當新的或升級之后的軟件被大量裝入已經安裝了應用程序的環境(例如:服務器)時,需要執行兼容性測試。
假如系統上沒有安裝其他應用程序,則可能無法檢測出軟件的兼容性問題。假如將系統部署到另一個安裝了其他應用程序的環境(例如:產品環境),則可能會出現兼容性的問題。
典型的兼容性測試的目標包括:
● 評估在運行環境中加載其他應用程序所導致的功能上的負面影響(例如:當服務器上運行多個應用程序時的資源分配沖突);
● 評估因修復或升級操作系統給應用程序帶來的影響;
3)適應性測試
適應性測試就是測試一個應用程序是否能夠在所有特定的目標環境(硬件、軟件、中間件、操作系統等)中正確地運行。在針對適應性進行測試時,需要明確各種指定的目標環境并完成配置,供測試團隊使用。針對這些運行環境及環境中存在的各種組件,可選擇一組功能測試用例完成測試。
適應性還涉及通過完成一個預定過程將軟件移植到各種特定運行環境的能力。測試可以對該過程進行評估。適應性測試還可以與可安裝性測試共同進行,然后輔以功能測試,以檢驗軟件在其他運行環境中是否會出現問題。
4)可替換性測試
可替換性所關注的是系統中軟件組件能夠被替換的能力,尤其對于那些以商業現貨軟件(COTS)為特定組件的軟件系統。
在集成過程中會有一些可替換的組件集成構成一個完整的系統,因而可替換性測試可以與功能集成測試并行進行。可以通過技術評審和檢查評估系統的可替換性,其關鍵點在于可被替換組件的接口是否定義得非常清楚。