在 Metro 风格应用程序的世界里,应用程序是整个体验的重中之重。为了使这种体验能给您的用户带来愉悦,您希望确保您的应用程序经过行之有效的测试,并且表现出一流的品质。Metro 风格应用程序的生产分为以下四个主要阶段:设计、开发、测试和最终交付。
前面发布的几篇博客着重探讨了 Metro 风格应用程序的设计和开发两个方面。在本篇博文中,我们将介绍有关应用程序测试的几个高级验证环节。
测试这个术语使用频繁,对于不同的人,它有着不同的含义,尤其是在软件开发生命周期环境下。它还涉及一系列可能要在软件开发的不同阶段实施的各种活动。这些活动包括设备测试、功能测试、可用性测试、场景测试和其他一些测试。任何一个这样的活动仅代表一项测试任务,并不涵盖完成应用所必需的、确保应用高质量的所有验证。在本博文中,我们不区分具体验证类型之间的异同,而将介绍一系列丰富的高级验证环节和操作,帮助您确保应用拥有高品质。除了这些验证环节,您还可以在开发过程中使用调试和测试用 Visual Studio 和 Visual Studio 设备测试工具验证应用的功能性。在未来几周内,我们准备继续发布其他博客,更深层次地讨论 Metro 风格应用测试的细节。
正如我们从管理应用程序生命周期博文中了解的那样,Metro 风格应用可以在不同运行时状态间转换。根据这种应用生命周期,我们需要考虑以下几个关键的验证环节:
- 已激活:通过几种激活方式验证应用
- 正在运行:验证运行时中的应用
- 已挂起:验证应用能否正常挂起
- 已恢复:验证应用能否正常恢复
- 已终止:验证应用终止
- 未运行:验证应用在未运行时的行为
接下来,让我们更深入地探讨一下上述每一个验证过程中的关键验证环节。
验证应用的激活行为
要测试激活,我们需要仔细了解用户可以启动您的应用的各种不同环境。对您的应用支持的各个激活场景进行验证非常重要。下面是用户可以激活您的应用的常见环境:
- 磁贴:通过磁贴启动应用很有可能是用得最多的用户与应用之间的交互方式。验证您的应用是否遵循相应的应用程序启动设计模式。
- Toast 通知:如果您的应用支持 Toast 通知,请验证在您单击原本就应该由您的应用处理的传入通知时,您的应用是否能够按预期激活功能。
- 搜索:如果您的应用支持搜索,请验证您应用的激活情况以及您能否在应用中完成搜索。如果您的应用支持显示搜索建议,请验证该功能是否能够按预期运行。
- 共享目标:如果您的应用支持成为共享目标,请验证您的应用能否激活并发布从另外一个应用共享的内容,使其成为支持的内容类型。
- 协议:如果您的应用注册了协议,请验证您能否通过启动与该协议相对应的不同 URL 类型来激活您的应用。
- 文件关联:如果您的应用注册为用来处理文件类型,请验证您能否通过启动相对应文件类型的文件激活您的应用。
- 文件选取器/联系人选择器:如果您的应用被注册为一个文件打开/保存选择器或者联系人选择器,请验证您能否在这些环境下激活您的应用。
验证应用的运行时行为
对 Metro 风格应用的功能性进行验证包括两个部分:验证适用于所有应用程序的常见特征;验证应用的特有功能性。除了我们接下来要谈到的关键验证场景,您必须还要验证应用的特有功能性。这包括理解您的应用设定的关键场景以及验证这些场景能否按预期运行。
磁贴
应用磁贴是应用的核心部分,并可能是应用的最常见部分。验证磁贴行为的以下方面非常重要:
- 如果您的应用支持动态磁贴,请在应用运行过程中验证其行为。验证磁贴的更新是否与应用中所显示的状态一致。例如,照片应用的磁贴是否可以显示最近添加相册中的照片。
- 如果您的应用支持次级磁贴,请验证这些磁贴是否可以显示所需的信息。例如,天气应用能否支持将特定城市固定为次级磁贴。您还需要验证通过单击应用中的次级磁贴能否启动应用以及能否打开应用中的预期环境。
- 如果您的应用支持磁贴中的通知锁屏提醒,请验证所有锁屏提醒更新是否按预期显示,以及这种更新是否与应用中显示的状态一致。例如,与邮件应用中的未读邮件数量相关的锁屏提醒必须在应用运行时清零,以便让用户知道他们不再有任何未读邮件。
Toast 通知
如果您的应用支持 toast 通知,请验证 Toast 能否正常触发和显示。还要验证通过单击 toast 通知能否启动应用以及能否打开应用中的预期环境。
合约和扩展
在验证应用的激活行为的过程中,我们提前了解了一些合约。我们来看一些与验证运行时合约相关的其他环节:
- 共享来源:如果您的应用支持成为共享来源,请验证您能否使用“共���”超级按钮将来自您的应用(支持的内容类型)的内容与计算机上的其他目标应用共享。
- 播放到:如果您的应用支持“播放到”合约,请验证您能否使用“设备”超级按钮从您的应用程序在远程设备上播放媒体。
- 设置:如果您的应用支持“设置”合约,请验证您能否查看和修改您应用的特定设置。另外,还要验证应用能否在终止/重新启动后继续使用修改的设置。
Windows 应用认证工具包
Windows 应用认证工具包可让您验证您的应用是否符合 Windows 应用商店的提交条件。此验证包包括用于验证受支持 API 使用情况的自动化测试、对崩溃/挂起的测试、对应用部件清单的验证以及启动/挂起时间性能。我们建议您尽早并定期运行此包。我们多次遇到如下情况:因为应用所有者直到最后关头才针对其应用运行认证包,导致应用无法在最终日期前提交到应用商店。如果您提前并且定期运行验证包,您就可以及时发现并解决应用的任何问题,并将您的应用提交到应用商店。Windows 应用认证工具包文档详细介绍了该认证包可以执行的测试类型以及其他有关设置运行此验证包的配置的技巧。
贴靠和填充视图
用户可以在各种视图状态下运行您的 Metro 风格应用。除了全屏视图,用户还可以在贴靠和填充视图中使用应用。验证您的应用能否正确地处理这些视图状态转换非常重要。
- 验证您的应用是否支持贴靠和填充视图。验证您的应用在内容变成贴靠或非贴靠状态时能否保持内容不变。
- 验证贴靠和非贴靠是否会影响用户的工作或状态。
- 验证在贴靠状态下,用户能否与应用交互。
旋转
用户可以旋转和翻转他们的平板电脑和显示器。如果您的应用不但支持横向方向,还支持纵向方向,请验证您的应用能否处理方向转换。您可以使用适用于 Metro 风格应用的 Visual Studio 模拟器测试这两种模式下的应用。所以,不一定非得要有平板电脑设备才能测试这一场景。
触控
Windows 8 为应用带来了数不清的全新触控体验。您可以使用适用于 Metro 风格应用的 Visual Studio 模拟器测试您的应用支持的触控交互。所以,不一定非得要有专用的触控硬件才能验证这些交互。
- 验证应用中所用的所有控件是否全都是易于触控的标准基本控件。请根据您的编程语言,选择使用 XAML 控件或 JavaScript 控件。
- 验证您的 Metro 风格应用是否符合标准的触控互动设计。
- 验证您的应用能否针对用户操作作出可视反馈。
- 验证应用能否避免从屏幕边缘执行拖动操作,以防止与 Windows OS 手势发生冲突。
- 如果您的应用支持任何文本输入控件,请验证软键盘能否按预期运行。验证键盘焦点区在软键盘显示时能否上移到视图中。
播放音频
Windows 8 支持 Metro 风格应用播放音频的模式,包括在后台播放。在测试音频时,我们建议您:
- 如果您的应用要播放音频,请验证当用户在您的应用和其他类型的音频应用间切换时,您的应用能否正确地处理声音级通知。例如,如果您的应用是一款游戏,则当您的应用收到“已静音”通知时,您可能想要暂停游戏。有关详细信息,请参阅 Metro 风格的应用程序中的音频播放。
- 如果您的应用支持在后台播放音频,请验证您的应用在没有被挂起的情况下能否持续在后台播放音频。验证您的应用在用户锁定设备时能否继续播放音频。
- 如果您的应用注册为使用传输控件控制音乐播放,请验证应用能否按预期运行。
不同屏幕尺寸
Windows 8 可以在各种不同的屏幕尺寸上运行,从平板电脑所用的小型屏幕,到便携式计算机的中型屏幕,再到台式机的大型屏幕,都可以运行。因此,测试您的应用能否在不同的屏幕尺寸上运行非常重要。您可以使用适用于 Metro 风格应用的 Visual Studio 模拟器在各种屏幕尺寸和像素密度上测试您的应用。
- 在分辨率介于 1024x768 和 2560x1440 之间时,验证应用的布局是否被截断以及内容是否显示在预期的位置。
- 验证图像在按照像素密度缩放时能否保持清晰。
数据漫游
Windows 8 支持跨多个 PC 的漫游设置,包括 Metro 风格应用使用的漫游状态。要测试这一功能,请:
- 验证应用上下文能否按预期跨多个 PC 漫游。例如,这可能是您应用中游戏的上一次通关级别、书籍中最近阅读的页面或者视频中的上一次观看停止点。验证应用在某台 PC 上设置的上下文能否反映到另一台您在使用该应用的 PC 上。
- 验证您的应用可用的用户首选项能否按预期在多个 PC 间漫游。例如,这可能是天气预报应用中用户的温度单位首选项。在此示例下,请验证用户在某台 PC 上的单位首选项设置能否反映到另一台您在使用该应用的 PC 上。
设备和传感器
如果您的 Metro 风格应用支持设备或传感器,您需要验证以下环节。
- 如果您的应用支持按照地理位置调整视图,请验证该功能能否按预期运行。在应用支持可设置当期位置的选项时,您可以使用适用于 Metro 风格应用的 Visual Studio 模拟器测试这一功能。
- 如果您的应用支持对用户启动的设备连接(例如照相机或 U 盘)作出响应,请验证您的应用能否根据事件正确地作出响应。例如,这可能要验证用户能否使用您的应用复制来自照相机的所有照片。另外,还要验证您的应用能否恰当地处理设备断开连接。例如,验证用户在复制照相机中的照片时断开了照相机的连接,应用会有怎样的行为。
- 用户可以将特定类型的计算机或设备连接到扩展坞。所以,请验证您的应用在计算机处于连接或断开连接的状态下能否按预期运行。
性能
用户希望应用能即时对输入作出响应。因此,验证应用的性能特征至关重要。Windows 8 可以在多种不同的硬件上运行,所以,请考虑将您的应用安装在低端计算机上,评估其性能特征。博文如何提高 Metro 风格应用程序的性能详细介绍了评估前准备计算机的方法。
响应
- 对于您的应用支持的关键场景,要了解预期的交互类并验证应用是否符合特定交互类的目标。
- 验证您的应用是否能持续对用户作出响应。
- 验证您的应用能否在任何长时间运行活动(例如异步网络电话)过程中为您的用户提供反馈。
成为应用程序生态系统中的一位好公民
正如博文如何提高 Metro 风格应用程序的性能中所述,验证您的应用是否是应用生态系统中的好公民非常重要。这其中包括积极地为提高用户的整体体验做出贡献(无论您的应用是否在前台运行)。除了验证上述博文中列出的环节,还需要验证如下所述的其他一些环节:
- 如果您希望您的应用在空闲状态时不占用 CPU,请验证您的应用是否不消耗任何 CPU。
- 用户可能会使用各种类型的网络,包括按流量计费的网络。如果您的应用可以连接互联网,请验证应用在发送和接收数据时能否根据按流量计费的网络调整自己的行为。
错误处理
俗话说,凡事只要有可能出错,那就准会出错。事实上,如果您的应用所依赖的条件发生了变化,则它可能会影响您的应用的行为。例如,您的应用需要处理不可用的网络连接并判断这种情况下的行为。
- 验证您的应用能否是当地处理错误条件。如上例,网络和/或设备连接是触发应用中的错误路径的绝佳方法。验证您的应用是否符合管理连接状态更改的相关指南。
- 验证错误处理不是侵入性的,并且您的应用仅向用户显示严重错误。
- 验证您的应用能否为用户提供可操作的错误消息。请参阅可操作错误消息指南。
可靠性
用户们希望应用能够可靠且始终如一地运行。所以,验证您的应用是否具备高可靠性非常重要。
- 验证您的应用能否在各种不同条件下可靠运行,并且不会因为未处理的异常情况而崩溃。
- 验证您的应用会不会泄露内存或任何其他资源。要检测 Metro 风格应用中的内存泄露,您可以使用您通常用于其他 Windows 应用程序的相同方法。
您的应用发布到 Windows 应用商店后,您可以使用 Windows 应用商店开发人员门户检查应用的使用和质量数据。例如,您可以查看用户所遇到的异常情况、崩溃和无响应问题的相关数据。请考虑使用这类数据解决应用的重大崩溃和挂起故障。
辅助功能
Windows 8 面向各类人群设计,任何人,无论他们的身体条件如何。如果您的 Metro 风格应用符合辅助功能基准,那么它对于改善辅助功能生态系统将有非常大的帮助。如果您的应用支持辅助功能,请验证它是否符合应用辅助功能测试中所述的条件。
全球化和本地化
如果您的 Metro 风格应用旨在面向全球用户使用,则可能对应用进行本地化,使其符合各个地区和市场的需要。Metro 风格应用可以使用配置的语言和显示格式(日期、时间、货币和数字)定制其内容。例如,如果某用户在英文版的 Windows 上将日语配置为主要语言,则当启动某个 Metro 风格股票应用时,该应用可能会用日语显示所有相关的新闻文章,另外,还会显示所选地区的股票交易信息(例如,东京证券交易所)。
应用本地化结束后,请验证它能否针对不同地区正常运行以及能否显示不同的语言。
- 对于您的应用支持的语言,请使用“控制面板”中的“语言”设置将各个特定语言添加为主要语言,并验证您的应用能否针对特定语言正确地调整内容。
- 验证当应用正在运行或挂起时,语言转换能否按预期运行。
- 对于您的应用支持的语言,请验证用户界面字符串能否按预期显示,并且不会出现截断。
- 验证应用图像中的各种显示文本是否以所选的显示语言显示。
处理器体系结构
Metro 风格应用可以是独立于体系结构的,也可以专门针对特定体系结构的。
如果您的应用是独立于体系结构的,则可以在任何所选的体系结构上测试它。
如果您的应用是特定于体系结构的,则需要在所有受支持的体系结构上对其进行测试。
- 如果您的应用专为 Windows RT (ARM) 而设计,则要验证其在 Windows RT 电脑上的功能性。有关 ARM 开发和测试的更多信息,请参阅在 ARM(WOA)上开发 Windows 时,你应该知道的事情。
- 如果您的应用面向 x86,并且不另外提供 x64 包,则请验证您的应用能否在 x86 和 x64 两种系统都可以运行自如。这是因为 x86 应用可以在 x86(32 位 Windows)或 x64(64 位 Windows)系统上运行。Windows 允许面向 x86 的应用在 x64 系统上运行。
验证应用的挂起行为
Windows 会挂起不在前台的应用程序。这样,Windows 就可以让前台应用程序更好地使用系统资源,并确保后台应用程序不会耗尽用户的电池电量。例如,在挂起期间,股票应用可以保留用户查看过的上一种股票的相关信息和股价图的时间范围。
- 验证您的应用在挂起状态下能否降低内存使用量。要在任务管理器中查看挂起状态,请单击任务管理器中的 [More details](更多详细信息),然后单击 (视图)> [Status values](状态值)> [Show suspended status](显示已挂起状态)。
- 如果您的应用支持后台数据的上传或下载,请验证这些数据在应用被挂起时能否继续传输。
您可以使用 Visual Studio 模拟应用的挂起/恢复。要执行此操作,请选择 (视图)> [Toolbars](工具栏)> [Debug Location](调试位置)。
验证应用的恢复行为
当您的应用重回到前台,Windows 将恢复应用,此时应用将从 Windows 将其挂起时的状态继续运行。所以,验证应用能否正常恢复非常重要。
- 您的应用可以在被长时间挂起后恢复。在这个时段内,原来显示的内容以及任何网络连接可能会已经过时。验证您的应用能否恢复以及能否针对其内容状态提供视觉提示。
- 应用恢复后,请验证应用能否刷新内容以及能否根据要求重新连接任何网络资源。以股票应用为例,在股票应用恢复后,它能否提供视觉提示告知用户数据上次更新的时间,然后继续更新缓存的股票数据,以便用户看到最新的股价。
验证应用的终止行为
当系统的运行资源不足时,Windows 可能会终止已挂起的应用。另外,如果用户手动关闭了应用,或者注销了 Windows,应用也可能会终止。根据应用的终止方式,非常有必要验证应用能否在终止后启动时恢复相应的应用数据。
- 在启动已被 Windows 终止的应用的过程中,验证应用能否将内容和状态恢复到被挂起和/或终止前的状态。例如,上次查看的股票信息以及应用挂起时保存的选定的股价图时间范围。
- 在启动被手动关闭的应用(用手指从屏幕顶端刷到底端)时,验证应用在打开时是否显示默认数据。
- 在启动意外终止(例如,崩溃)的应用时,验证应用是否依然能够启动以及能否加载默认数据。要想使应用意外终止,请在任务管理器中右键单击您的应用,然后,转到详细信息 (Go to details),再次右键单击,结束任务。
有关更多详细信息,请参阅管理应用程序生命周期,让应用程序始终充满“生命活力”。
验证应用未运行时的行为
Metro 风格应用即使没有运行也会向用户显示信息。所以,验证以下场景能否按预期运行非常重要。
磁贴
以下是应用未运行时需验证的主要环节:
- 验证默认磁贴能否按预期显示。根据磁贴指南和清单验证磁贴大小、用法和通知。
- 如果您的应用支持计划通知或通过云定期/推送通知,请验证即使应用未运行,其磁贴是否也能获得更新。我们以天气预报应用和体育报道应用为例,前者定期更新磁贴的当前温度,后者使用从云中推送的最新比分更新其磁贴。
- 动态磁贴是吸引用户重返您的应用程序的最佳方式之一。请验证动态磁贴中的信息是否显示您应用的最新动态。
Toast 通知
如果您的应用支持即使没有运行也会发出 Toast 通知(使用计划通知或推送通知),请验证在应用没有运行的情况下,Toast 通知能否按预期触发并显示。例如,日历应用可以用 Toast 通知安排会议提醒,新闻应用可以使用 Toast 通知显示即时新闻。
后台任务
如果您的应用支持后台任务,请验证相应的行为。
- 如果您的应用能够显示锁屏通知(例如,邮件应用或 VoIP 应用必须始终保持最新),请验证您的应用在 PC 未使用时能否显示最新通知。
- 如果您的应用可以在特定的触发条件(例如,照片应用可以在交流电源下处理来自照片库的照片)下执行后台任务,请验证您的应用能否在达到相应的条件时正确执行任务。
有关详细信息,请参阅博文后台任务。
总结
对 Metro 风格应用进行测试并验证其品质,对于确保您的用户拥有绝佳应用体验发挥着关键作用。在本博文中,我们介绍了一些 Metro 风格应用验证的关键环节,包括验证应用在不同环境下启动后的行为,验证应用的功能性,以及验证应用在 Metro 风格应用生命周期不同阶段下的行为。
在实际使用中,用户可能会同时执行多个会影响应用的交互。例如,某个用户可能会非常迅速地连续执行下列操作:突然将应用贴靠到填充视图,然后旋转设备,接着调整屏幕分辨率。所以,除了要单独测试应用在特定场景下的行为以外,还要发挥您的想象力,多多测试您的应用,使其能够适应这种复杂的交互。
我们希望本博文能给你带来一个好的起点,有助于您考虑如何验证应用的功能性并使它们表现出一流的品质。在未来几周内,我们准备继续发布其他博客,更深层次地讨论 Metro 风格应用测试的特定话题。
谢谢!
-- J. Kalyana Sundaram,Windows 高级 SDET
-- Ashwin Needamangala,Windows 首席测试主管
-- Mete Goktepe,Windows 首席测试经理
在此特别感谢 Tom White、Patrik Lundberg、Tom Baxter、Vik Kumar、Rui Sun 和 Yves Neyrand,感谢他们为本文的撰写提供帮助和支持。