根据Wikipedia,软件兼容性指某个软件在不同CPU架构、不同OS上的适应能力,这个解读相对古老,自从CS、BS、Cloud、MSP之后,这个概念涉及到的并不仅仅是CPU和OS,而是涉及到数据库、中间件、应用中间件、资源调度器、服务框架、总线等各个方面 — 一个软件需要依赖的环境。国际质量标准ISO9126定义了软件产品功能、可靠性、可用性、有效性、可维护性和可移植性5个维度的质量指标。虽然没有定义兼容性这个单独的分类,但可以归类到Portability、Functionality这2个大类中。
首先是Portability/可移植性。这个词来描述一个产品可以在不同系统/环境上部署的能力。包括了适应性、可安装性、共存性、可替代性、合规性5个方面,其中前4个是主要的内容,覆盖的范围多少有些重叠,可以看做是不同的维度:适应性(本软件适应环境的能力);可安装性(在特定用户环境的安装)、共存性(与其他软件共享环境的能力)、可替代性(在某个环境替换其他软件的能力)。其次是功能性中的互操作性(Interoperability),这个特性描述了本软件与周边软件在数据和命令方面的接入难度,这个特性和前面的可替代性关系比较密切,差别是可替代性主要关注的是数据。所有这些能力都可以量化为指标,一般来说分成3个场景:内部预测、外部度量。看上去,外部度量重要性更大一些,但是需要有一个端到端的体系才可以保证度量指标的定义、收集、改进可以实现闭环。
图1:软件质量指标体系
图2:部分可移植性指标,多数是基于事件的度量,对管理、信息一致性要求很高
商用软件的兼容性是其生命力所在,越是成功的软件,与周边的软件兼容性越强;越是生命力长久的软件,上下版本之间的兼容性越强。当然这也是会变化的,我们可以看看Oracle 19c,目前支持Linux、IA64、AIX、SPARC,但是12c则还支持Windows、Solaris/x86+x64和Z。同时,Oracle在发布的时候也支持Docker镜像方式
还可以看看微软的PowerBI,我认识或者不认识的数据库和数据源都能支持,这么强的兼容性/互操作性,对用户是非常友好的
专注于项目交付或者集成的业务,虽然开发了很多软件,但是这些软件的标准化程度不容易提高,一般都会随着客户的需求而改变。如何管理这些个性化的需求,而形成的标准化产品需要开展很多的工作。
首先要管理需求。需要从各个客户处收集需求,分析其合理性、共性和差异、排期规划,然后按照统一的标准(术语等)分门别类,再返回去与客户沟通,最终达成对目标的共识,这个过程是相当有难度的,在自身实力不强的情况下,需要投入巨大的人力资源。在立项的时候,就要根据需求设计版本规划,考虑好一个软件的前后向兼容问题,并用兼容性表格的当时加以可视化,其中要开展一些取舍:即放弃有些组件之间的兼容性,而将精力投放到主要版本上。
其次要管理架构。在复杂软件的所有相关的组件中,要遵循相同的架构和技术选型,特别是目前开源软件使用量很大,需要尽可能让多个团队使用同样的技术和版本,在后期集成和部署方面会有很大的作用,也就提升了兼容性。同时,要让这个架构可以适应多个客户的需求,即将共性的部分变成产品,而将不同的部分变成项目部分,采用内置插件、系统配置、外部调用、界面配置满足多方需求。同时,要保证架构的延续性,避免出现架构频繁调整,这会造成后续难以归并版本。同时还有一个值得注意的环节是数据兼容(可操作性、可替代性),如果前后不兼容,就无法原地升级,而是要迁移,这会带来系统升级时间长、出错风险高的困难!
再次要管理变更。在多个项目管理过程中,如果交付时间大于3个月,需求多数情况下会发生变化,这样就会打乱前期的计划并且造成架构的变化,这个就危险了,很可能会造成分支版本,这种情况,我经常用的说法是,“先处理投诉、还是后处理投诉”。
接下来就是最精彩的填坑环节了,需要把现网散乱的版本逐步归并到少数几个版本,减少后续的服务成本。比如护网行动,一旦现网的每个系统都要采用不同的方法来升级或者打补丁,那就困难了,需要写N个升级手册才能解决问题。这个填坑环节没有固定的方法,但是无外乎需要开展功能级别的分析,然后深入到架构、数据,深入到代码。每升级一处,基本上就是新交付一次,想想,这是一个多么大的工作量?因此,我们几乎可以断定,现在成功的商用软件背后,一定都经历了巨大的填坑过程。而且,这些成功企业也一定经历了重大的取舍!
然而,现在迎来的云计算时代,忽然之间,传统的软件企业都不太灵光了,一些新生的企业开始从OS、存储、数据库等系统逐步走向PaaS、SaaS,这个变化,让兼容性的问题得到了一些缓解,至少,不用服务商四处奔波上客户门去升级软件了!但是兼容性依然是一个难题,特别是当系统的规模达到100百万以上服务器的时候,哪怕是一个API的变化都是至关重要的,都可能对已有的系统造成改变!
P.S. Wikipedia也要找代理才能访问了!
相关信息:
- https://en.wikipedia.org/wiki/Computer_compatibility#Software_compatibility
- Benjamin Zeiss∗‡, Diana Vega∗∗ ‡‡, Ina Schieferdecker‡‡,”Applying the ISO 9126 Quality Model to Test Specifications“
- ISO/IEC FDIS 9126-1: Quality model
- ISO/IEC JTC1 /SC7 N2419R: Software engineering –Product quality – Part 2: External metrics
- ISO/IEC JTC1 /SC7 N2416R: Software engineering –Product quality – Part 3: Internal metrics
- P. Botella, X. Burgués, J.P. Carvallo, X. Franch, G. Grau, J. Marco, C. Quer, “ISO/IEC 9126 in practice: what do we need to know?”
- https://blogs.oracle.com/oracle-database/oracle-database-19c-available-on-github
- https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
- https://docs.microsoft.com/zh-cn/power-bi/service-get-started#step-1-get-data