在软件工程中,软体可移植性,又译为移植性、可携性,是指使用高阶语言写成的软件,在不同环境下,是否具备可以被重复使用的性质。一般来说,软件是否具备可移植性的衡量标准,在于进行软件移植时,需要付出多少工时为代价。具备高可移植性的软件,在移植到不同系统平台时,并不需要做太多事情,因此能够减少软件开发及布署时的成本。为了使软件具备高度可移植性,程序员需要使应用程序界面抽象化以及模组化。以低阶语言,例如汇编语言,写成的软件,一般来说,其可移植性都较低。
简介软体可移植性,也称软件可移植性,是指一个软件从一种计算机转移到其他机器上的能力。也称软件自动搬家。软件可移植性的重要标志是:这类软件有标准文体; 独立于具体的计算机。软件独立于具体的计算机从严格意义上讲是既独立于计算机硬件环境又独立于计算机软件环境。高级标准化软件其功能与计算机系统结构无关。一个软件从一种计算机向另一种计算机移植时,首先要考虑移植软件的宿主计算机的硬件接口和操作系统接口。接口的改造容易与否,是衡量一个软件可移植性好坏的主要标志之一。
背景软件可移植性的提出是以软件应用环境的多样化为背景的。软件的应用环境包括编译器、操作系统、辅助软件运行的支持库和运行软件的计算机系统及外围设备等。软件可移植性的概念有广义和狭义之分。广义的可移植性涉及软件在规定环境下的安装、运行及与相关标准的匹配等不同方面,可分解为适应性、易安装性、兼容性和可(易)替换性。
适应性是指软件能否适应不同的目标环境。
易安装性是指在规定环境下安装软件的难易程度。
兼容性是指软件是否符合与可移植性相关的标准或约定。
可(易)替换性是指软件能否在规定环境下替换其它软件以及替换的难易程度。
狭义的可移植性即指软件对目标环境的适应性,可分解为两个层次:源代码级和可执行代码级。前者要求软件源代码在目标环境下重新编译,而后者则是在目标环境下直接运行软件的可执行代码。本文主要讨论狭义的软件可移植性。对软件可移植性的认识是有争议的。一种观点认为可移植性对软件质量而言是不必要的,甚至会起到负面作用。理由是充分使用目标环境提供的服务能够在相当程度上提高软件的质量,而可移植软件在这方面会受到限制;而且为实现可移植而在代码中频繁使用##ifdef∧#elseif∧∧#endif等结构破坏了源代码的可读性,增加了维护的难度。这一观点反映了可移植性与效率、性能之间可能发生的冲突。因此,如何权衡可移植性与其它质量要素之间的关系是软件可移植性研究面对的一个难点1。
可移植性设计在概要设计阶段,应基于层次化的设计思路,把软件分解为两部分:与目标环境无关的主体层和与目标环境相关的适配层。前者是软件实现自身功能的主体部分,后者则是软件主体与目标环境的接口。与目标环境接口的适配层是可移植性设计的关键所在。它是由与不同应用环境相对应的n个适配单元组成的,主要任务是屏蔽不同目标环境之间的差异,为主体层访问目标环境提供一致的接口,从而使与目标环境相关的部分得以从软件主体中分离出来。这样,主体层的实现就不会依赖于某一具体的目标环境;同时,软件移植的过程也不会影响主体层,而只针对适配层。在详细设计阶段,应根据软件应用的不同特点细化适配层,即确定哪些模块是与目标环境相关的。适配层设计的内容主要面向操作系统,包括进程管理、进程间通信、定时、内存管理等。
软件移植的分类软件移植不同于新的软件开发,它源代码是有的,所以对于软件的移植,有一些另外的原则需要遵守。首先移植必须忠实于原版软件,不能任意增加或删除原版软件的任何功能,不能改变原版软件的设计风格,要使熟悉原版软件的少户对新版软件无陌生感,不需重新培训即可使用。其次,移植后的软件必须完整反映原版软件的所有特性,即达到内涵上的等同。再次,移植后的软件要不拘泥于原版原件,对不同机型、不同软件平台灵活采用有效的编程技术,从而充分发挥新的软硬件平台的优点。
软件移植的主要类型通常是二进制移植移植可执行文件和源代码移植移植源语言表达式。二进制移植是人们所期望的,但仅可能在极其相似的环境之间实现。源代码移植的前提是源代码是可获得的,但它提供了修改一个软件一单元使其适应各种环境的可能性。大多数移植研究的是源代码的移植。
本词条内容贡献者为:
王慧维 - 副研究员 - 西南大学