可移植性是实际测试过程中需要重点关注,而常常容易被忽视或者遗忘的质量特性。测试人员都知道可移植性测试,却往往不知道该从哪些方面考虑可移植性测试。
可移植性测试通常和软件移植到某个特定的运行环境中的难易程度相关,包括第一次建立或从现有环境上移植到另一个环境上。
系统的可移植性并不是在系统开发的后期才开始考虑的,在整个软件开发生命周期都必须要考虑系统的可移植性,尤其是在早期的需求分析和设计阶段。在需求分析阶段,最好能够明确的定义可移植性需求。例如:虽然当前软件版本仅仅支持运行在Windows平台上,但是需要考虑将来移植到Linux上的需求。
一个大型的软件可能包括多个不同级别的设计。设计阶段要重点关注外部接口,例如:文件访问接口、内存管理和用户界面等。这些接口是最容易发生可移植性问题的地方。业界有很多针对这些接口的标准,软件产品如果能够符合这些标准,将会大大的提高软件自身的可移植性。例如:针对字符集的ASCII,针对操作系统接口的POSIX等。
从测试层面而言,可移植性测试应该重点关注在测试对象的不同接口上面。具体而言,可移植性测试至少需要考虑可安装性测试、共存性/兼容性测试、适应性测试和可替换性测试。
1)可安装性测试
可安装性测试是针对那些用于在目标环境安装软件的安装程序所进行的测试。它可以包括安装操作系统的软件或在客户个人电脑上安装软件产品的安装向导软件。典型的可安装性测试应完成下列目标:
● 使用安装向导或遵照安装手册的步骤(包括执行必需的安装脚本),验证是否可以成功地进行软件安装。其中包括选择相应的选项针对不同的软硬件配置进行安装,以及进行不同程度地安装(如完全安装或部分安装);
● 测试安装软件是否能够正确处理安装过程中所出现的失败(例如:无法安装某些DLL)现象,而不致于使系统处于某个不确定的状态(如软件只安装了一部分或造成错误的系统配置);
● 测试部分(不完全的)安装/卸载能否完成;
● 测试安装向导是否可以成功地识别无效的硬件平台或操作系统配置;
● 衡量是否能够在一定时间内或在一定步骤内完成整个安装过程;
● 验证是否可以成功地进行软件降级或卸载;
通常,可安装性测试在检查是否存在安装方面的问题(例如:配置错误、功能缺失)之后,才进行功能测试。易用性测试一般和安装测试同时进行(例如:验证在安装过程中软件是否能够向用户提供明确的指导、反馈或出错提示)。
2)共存性/兼容性测试
如果不存在相互依赖关系的计算机系统可以在同一环境(例如:同一个硬件平台)中运行,而不影响彼此的行为(如资源冲突),则称之为是兼容的。例如:当新的或升级之后的软件被大量装入已经安装了应用程序的环境(例如:服务器)时,需要执行兼容性测试。
假如系统上没有安装其他应用程序,则可能无法检测出软件的兼容性问题。假如将系统部署到另一个安装了其他应用程序的环境(例如:产品环境),则可能会出现兼容性的问题。
典型的兼容性测试的目标包括:
● 评估在运行环境中加载其他应用程序所导致的功能上的负面影响(例如:当服务器上运行多个应用程序时的资源分配冲突);
● 评估因修复或升级操作系统给应用程序带来的影响;
3)适应性测试
适应性测试就是测试一个应用程序是否能够在所有特定的目标环境(硬件、软件、中间件、操作系统等)中正确地运行。在针对适应性进行测试时,需要明确各种指定的目标环境并完成配置,供测试团队使用。针对这些运行环境及环境中存在的各种组件,可选择一组功能测试用例完成测试。
适应性还涉及通过完成一个预定过程将软件移植到各种特定运行环境的能力。测试可以对该过程进行评估。适应性测试还可以与可安装性测试共同进行,然后辅以功能测试,以检验软件在其他运行环境中是否会出现问题。
4)可替换性测试
可替换性所关注的是系统中软件组件能够被替换的能力,尤其对于那些以商业现货软件(COTS)为特定组件的软件系统。
在集成过程中会有一些可替换的组件集成构成一个完整的系统,因而可替换性测试可以与功能集成测试并行进行。可以通过技术评审和检查评估系统的可替换性,其关键点在于可被替换组件的接口是否定义得非常清楚。