《腾讯iOS测试实践》一一3.3 机型兼容

简介:

本节书摘来自华章计算机《腾讯iOS测试实践》一书中的第3章,第3.3节,作者:丁如敏 王琳 等著
  更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 机型兼容

机型的问题跟硬件有关,比如随着一代代的iPhone发布,屏幕越来越大,分辨率越来越高,处理器指令集从ARMv6、ARMv7、ARMv7s到ARMv64,从指纹识别到3D Touch的手机新特性应用。
3.3.1 新增功能
系统更新会带来新功能,机型的升级也会带来新功能,例如从iPhone 5S开始有了指纹识别,从iPhone 6s开始有了3D Touch等。如果机型上的新功能不涉及被测产品(例如手机照相机的更新),就可以忽略;如果涉及,就要进行适配。
两点测试保证:一是保证有该特性的机型能够正常使用;二是保证低端机型不会误触发这个逻辑。
过往的缺陷中,机型上新增功能有关系的案例也不少。举例来说,iPhone 6s(Plus)开始引入3D Touch特性,在iPhone 6s(Plus)上验证该功能,就曾发生过重按不显示菜单栏的问题。对这种与机型强相关的测试,最好能单独列出一个list来记录,避免在研发过程中几个版本迭代后对机型差异敏感度下降后误触发一些问题。
3.3.2 屏幕变化
iPhone自发布以来,屏幕尺寸和分辨率越来越大。表3-3是不同机型的屏幕尺寸和设备分辨率,测试时需要关注不同设备的资源配置是否有遗漏或者错配。
image
image

对于屏幕尺寸大小的不同,出现的兼容性问题也多。经常出现的问题是网页显示或弹框显示。例如,做一个手机QQ新闻打开的红包新弹框,在iPhone 4上就出现右上角的关闭按钮被完全遮挡,下面也被遮挡了很大一部分。image
图3-6就属于屏幕差异引起的兼容问题。
3.3.3 处理器差异
到目前为止,所有iOS设备都使用ARM结构处理器,它与台式机上的x86和PowerPC有些不同。ARM64是ARM处理器的一个指令集,目前iPhone设备的指令集种类如表3-4所示。
image

从Xcode 4.5开始不再支持ARMv6指令集。实际上,用户使用的基本上都是iPhone 4以后的机型了,所以我们编译生成的二进制包所支持的指令集只要支持ARMv7以上就可以。苹果公司规定,从2015年2月开始上架App Store的应用必须支持ARM64的编译,所以产品都应完成对ARM64的适配。
设备对指令集的支持可向前兼容,只是会影响运行效率。因此现在编译的版本一个包有两个架构,分别支持ARMv7指令集和ARMv64指令集的架构。选择ARMv7是为了支持iPhone 4~iPhone 5C之间的设备,而编译ARMv64的二进制包一方面是因为苹果公司的规定,另外一方面是为了让高级机型能够更好地运行,提高运行效率。
适配工作的重点在于对参数类型的调整,适配最新版的如目前的ARMv64的指令集。Bug大多集中于参数类型在ARMv64设备上出现的异常。
模拟器并不运行ARM代码,软件会被编译成 x86 可以运行的指令,因此适配不能在模拟器上进行验证。
回顾历史版本,在硬件的兼容上,iPhone一般都做得很好。印象最深的还是32位机升为64位机后做的适配测试,当时要求iOS的32位工程转为64位工程。我们来看一下深层次的原理。
“32位的iOS系统和64位的iOS系统的差别主要有两个:一个是数据类型的差别,一个是过程调用方法的差别。 在数据类型上,主要的变化是指针类型(Pointer)和长整数类型(Long)的长度变化和内存对齐方式的变化,同时也导致了更高级别数据类型的变化,如NSInteger的长度也有变化。在过程调用方法上,因为ARMv8和ARMv7具有不同数量的寄存器与不同的过程调用约定,所以32位系统和64位系统在汇编层级是不同的。”
实际测试中遇到过新版64位安装包在各功能模块上发生闪退、显示混乱、数据错误、性能差等问题。额外强调的一点是,要关注的问题为数据的传输,因为用户会通过网络交换数据,用户保存的数据也可能通过备份等方式在32位系统和64位系统之间切换,所以应用在保存和发送流数据的时候一定要考虑充分,例如32位机保存的书签在64位机上是否能够正确显示和使用

相关文章
|
18天前
|
安全 Linux 测试技术
提升龙蜥内核测试能力!探究持续性模糊测试优化实践
清华大学软件学院对Anolis OS使用靶向模糊测试方法将测试工作引向修改的代码,进而提高对业务代码的测试能力。
|
1月前
|
SQL 搜索推荐 测试技术
【Havenask实践篇】完整的性能测试
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。性能测试的目的在于评估搜索引擎在各种负载和条件下的响应速度、稳定性。通过模拟不同的用户行为和查询模式,我们可以揭示潜在的瓶颈、优化索引策略、调整系统配置,并确保Havenask在用户数量激增或数据量剧增时仍能保持稳定运行。本文举例对Havenask进行召回性能测试的一个简单场景,在搭建好Havenask服务并写入数据后,使用wrk对Havenask进行压测,查看QPS和查询耗时等性能指标。
65364 6
|
2月前
|
安全 测试技术
测试团队的一次复盘实践
测试团队的一次复盘实践
142 0
|
3月前
|
安全 jenkins 测试技术
自动化测试与持续集成/持续交付(CI/CD)的实践与应用
自动化测试是现代软件开发不可或缺的环节,它可以有效地提高测试效率、降低测试成本。而持续集成/持续交付(CI/CD)则是一种基于自动化的软件开发流程,能够将代码的开发、构建、测试和部署等过程无缝连接起来,从而实现快速迭代和部署。本文将结合实际案例,介绍自动化测试和CI/CD的实践与应用。
144 2
|
25天前
|
传感器 监控 算法
【软件设计师备考 专题 】模块测试的方法和实践
【软件设计师备考 专题 】模块测试的方法和实践
68 0
|
27天前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
11 0
|
27天前
|
敏捷开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计理念与实践
随着敏捷开发和持续集成的理念深入人心,自动化测试在软件开发周期中扮演着越来越重要的角色。Selenium作为一个广泛使用的自动化测试工具,其设计理念和实践对于提高测试效率和质量具有指导意义。本文将深入探讨Selenium的核心设计原则、架构以及最佳实践,旨在帮助读者构建更稳定、高效的自动化测试系统。
|
27天前
|
jenkins 测试技术 持续交付
深入理解自动化测试框架设计原则与实践
本文旨在探讨自动化测试框架的设计原则及其在实际项目中的应用。通过对自动化测试框架的系统剖析,我们揭示了有效构建和维持测试框架的核心要素,并提供了一套实用的指导方案来帮助读者实现高效、可靠的自动化测试流程。文章不仅聚焦于框架的技术细节,也强调了灵活性、可维护性和可扩展性在设计时的重要性,同时结合实际案例分析,展示了如何在不同测试环境中定制化和优化测试框架。
|
29天前
|
机器学习/深度学习 敏捷开发 人工智能
深入探索软件自动化测试:框架与实践
【2月更文挑战第30天】 在快速迭代的软件开发周期中,自动化测试已成为确保产品质量和加快交付速度的关键因素。本文将深入探讨自动化测试的核心概念、常用框架以及在实际项目中的应用实践。我们将分析自动化测试的优势,并讨论其在不同开发阶段的作用,同时提出构建高效自动化测试流程的策略。通过实际案例分析,本文旨在为读者提供一套系统的自动化测试解决方案,以应对日益复杂的软件测试挑战。
|
1月前
|
消息中间件 Kafka Linux
Kafka【付诸实践 03】Offset Explorer Kafka 的终极 UI 工具安装+简单上手+关键特性测试(一篇学会使用 Offset Explorer)
【2月更文挑战第21天】Kafka【付诸实践 03】Offset Explorer Kafka 的终极 UI 工具安装+简单上手+关键特性测试(一篇学会使用 Offset Explorer)
158 2