移动-DevOps-攻略书-全-
移动 DevOps 攻略书(全)
原文:
annas-archive.org/md5/be98d708e176b50f9833d9bb61c785a3
译者:飞龙
前言
你好!Mobile DevOps Playbook 是一本实用指南,涵盖了构建、测试、发布、监控和管理移动应用程序的各个方面。在学习公司如何使用移动 DevOps 方法论来改善开发、测试、发布和运营团队之间的协作时,你将能够更快速、更高效地向移动应用发布新功能、修复 bug 和进行更新。
这是一本循序渐进的指南,帮助你理解从开发到发布的移动 DevOps 概念、过程和使用案例,并预测移动 DevOps 未来如何发展,包括必要的新技术和工具。
这本书是一个对开发者来说极其宝贵的资源,特别是对于那些希望在快速变化的移动应用开发领域中保持更新的开发者。它提供了关于移动开发过程的全面概述,涵盖了可供开发者选择的不同架构、平台和技术。书中还提供了如何有效管理软件开发生命周期的实用建议,并介绍了如何使用 DevOps 来确保成功和高质量的发布。移动 DevOps 是开发者希望走在技术前沿的必备资源。
通过学习移动 DevOps,开发者可以节省时间、减少错误,并确保应用程序优化以提供最佳用户体验。此外,理解移动 DevOps 的原则可以帮助开发者创建更高效、更有效的移动应用,因为他们将对开发、测试和部署应用程序的过程有更深入的了解。
这本关于移动 DevOps 的书包括了移动开发和 DevOps 原则的全面概述,深入探讨了用于管理移动应用开发的工具和技术,提供了如何成功部署和维护移动应用的实用建议,以及如何简化移动 DevOps 流程的技巧。此外,书中还包括了多种案例研究,展示最佳实践并提供真实世界的例子。
我将根据我在过去几年在移动 DevOps 领域的经验和知识,提供相关信息并指导你了解移动 DevOps 的一些要素。
阅读完这本书后,你将能够在公司实施移动 DevOps,并决定哪些工具或方法对你的团队有用。你还将学会如何在公司规模扩大和业务增长时,利用移动 DevOps 来帮助你的团队。
本书的读者对象
本书将重点介绍移动 DevOps 过程和实施的各个阶段,适用于所有参与移动开发的人员。主要目标读者是对 DevOps 感兴趣的工程师和一线工程管理人员。此外,读者群体还包括 CTO、DevOps 工程师、移动开发者、IT 企业架构师、移动发布经理、移动架构师、移动平台工程师、QA 工程师以及各级发布工程师,他们将能够实施书中规定的解决方案。为了从本书中获得最大收益,读者需要具备 DevOps 概念和实践的基础理解。
本书的读者可能已经对 DevOps 和移动应用的挑战有一定了解,并且深知在规模化应用下测试、发布和监控移动应用的痛苦。
本书内容概述
第一章,解决移动 DevOps 中的挑战,介绍了移动 DevOps。我们将深入探讨移动应用开发的世界,并研究移动优先功能如何帮助更高效、更快速地测试、构建和发布移动应用。
第二章,理解移动生态系统,探讨了移动生态系统及其在开发成功移动应用中的关键作用。内容包括硬件、软件、操作系统、网络和服务等基本组件。话题包括挑战、移动 DevOps、移动操作系统/框架/平台、应用功能和移动应用架构。
第三章,移动 DevOps 基础,探讨了移动 DevOps 的基本原理及其在实现快速高效的移动应用开发中的作用。涵盖的主题包括移动 DevOps 原则、实现移动 持续集成/持续交付(CI/CD)、移动 DevOps 的各个阶段、选择自托管与云托管 CI/CD、移动发布列车概念、应用发布清单以及移动 DevOps 工程师的需求。
第四章,通过移动 DevOps 实现持续集成和交付,探讨了如何使用移动 DevOps 实现移动应用的 CD。内容包括选择 CI/CD 提供商、建立定制的 CI/CD 流水线,并为移动应用设置有效的构建和单元测试。
第五章,实施强大的移动应用测试策略,探讨了如何实施强大的移动应用测试策略,以确保应用质量。涵盖的主题包括移动应用测试简介、测试自动化、创建测试策略、不同类型的移动测试、在移动 DevOps 中的持续测试、测试工具和框架、使用 AI 提升应用质量、实现测试覆盖率,以及提高移动测试技能。
第六章,移动应用发布管理,专注于移动应用发布管理的关键阶段,涵盖挑战、CI/CD 实施、符合应用商店指南、发布和分发、测试版测试、应用商店提交、ASO 以及监控进展。
第七章,建立移动应用程序监控、可观察性和分析,解释了监控和可观察性对移动应用程序的重要性。涵盖建立有效实践、应用程序监控的关键指标、选择合适的工具以及实施持续监控。
第八章,确保移动应用程序和 DevOps 安全,讨论了移动应用程序安全在 DevOps 背景下的重要性。涵盖主题包括安全在移动开发中的重要性、介绍移动 DevSecOps、移动应用程序安全威胁、安全应用程序架构、移动安全测试方法和工具、启动移动 DevSecOps 旅程以及移动 DevOps 安全自动化的技巧。
第九章,移动 DevOps 最佳实践,专注于利用移动 DevOps 实现更快、更高质量的应用开发。涵盖的主题包括 CI/CD 最佳实践、版本和发布管理、基础设施即代码(IaC)、配置管理、A/B 测试、缓存、并行执行、Fastlane 自动化、API 模拟和 ChatOps 协作。
第十章,通过开发者体验和平台工程提高生产力,探讨了开发者体验(DX)和内部开发者生产力(IDP)团队的概念,在移动开发中的重要性得到了强调。突出了移动 DevOps 与 DX 团队之间的关系,介绍了平台工程原则,并将其与 DevOps 和 SRE 工程进行了区分。
第十一章**,预测移动 DevOps 的未来,讨论了移动应用程序开发和移动 DevOps 的未来趋势。提供了即将到来的进展和总结了移动* DevOps Playbook。
要充分利用本书
了解移动应用程序开发,包括开发生命周期、编码实践和移动平台考虑因素是至关重要的。熟悉敏捷方法和CI/CD原则也至关重要。此外,对移动应用程序测试和发布管理流程的工作知识将会有所帮助。
假设读者对移动开发概念、DevOps 原理以及领域内常用的工具和技术有基本了解。
确保在阅读本书后,通过在公司或团队中实施移动 DevOps 框架来确保对流程和所需步骤的理解是最佳方法。
书中涵盖的软件/硬件 | 操作系统要求 |
---|---|
Java +8 | Windows, macOS 或 Linux(Ubuntu) |
Node.js 和 npm | Windows, macOS 和 Linux |
Xcode | macOS |
Android Studio | Windows, MacOS 和 Linux |
Git | Windows, MacOS 和 Linux |
React Native | Windows, MacOS 和 Linux |
Flutter | Windows, MacOS 和 Linux |
Apple 开发者账户 | MacOS |
Google Play Store 账户 | Windows, MacOS 和 Linux |
如果你正在使用本书的数字版本,我们建议你自己输入代码,或通过书籍 GitHub 仓库(下一节提供了链接)访问代码。这样可以帮助你避免因复制和粘贴代码而导致的潜在错误。
下载示例代码文件
你可以从 GitHub 上下载本书的示例代码文件,网址为 github.com/PacktPublishing/Mobile-DevOps-Playbook
。如果代码有更新,会在 GitHub 仓库中更新。
我们还提供其他来自丰富图书和视频目录的代码包,网址为 github.com/PacktPublishing/
。快来看看吧!
使用的约定
本书中使用了一些文本约定。
Code in text
: 表示文本中的代码词汇、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟 URL、用户输入以及 Twitter 账号。例如:在测试中无需反复调用sleep()
。当这个过程需要较长时间时,Maestro 会自动等待内容加载(但不会等得太久)。
当我们希望引起你对代码块中特定部分的注意时,相关行或项会以粗体显示:
[default]exten => s,1,Dial(Zap/1|30)
exten => s,2,Voicemail(u100)
exten => s,102,Voicemail(b100)
exten => i,1,Voicemail(s0)
所有命令行输入或输出将按以下方式书写:
wget --quiet https://github.com/TestArmada/flank/releases/download/ v22.05.0/flank.jar -O /usr/local/bin/flank.jar java -jar /usr/local/bin/flank.jar firebase test android run
粗体:表示新术语、重要单词或屏幕上显示的词语。例如,菜单或对话框中的词语会以粗体显示。以下是一个例子:“从管理面板中选择系统信息。”
提示或重要说明
显示如下:
联系我们
我们始终欢迎读者的反馈。
常规反馈:如果你对本书的任何方面有疑问,请发送邮件至 customercare@packtpub.com,并在邮件主题中注明书名。
勘误:尽管我们已尽一切努力确保内容的准确性,但错误仍然可能发生。如果你发现本书中的错误,请及时向我们报告。请访问 www.packtpub.com/support/errata 并填写表单。
盗版:如果你在互联网上发现我们的作品存在任何非法复制,恳请你提供其位置或网站名称。请通过 copyright@packt.com 联系我们,并附上该材料的链接。
如果你有兴趣成为一名作者:如果你在某个领域有专业知识,并且有兴趣写书或为书籍贡献内容,请访问 authors.packtpub.com。
分享你的想法
阅读完 Mobile DevOps Playbook 后,我们非常希望听到你的想法!请 点击这里直接前往亚马逊评论页面并分享你的反馈。
你的评论对我们和技术社区非常重要,它将帮助我们确保提供优质内容。
下载本书的免费 PDF 版本
感谢购买本书!
你喜欢随时随地阅读,但又无法携带印刷书籍吗?你的电子书购买是否无法与选择的设备兼容?
不用担心,现在购买每本 Packt 书籍时,你都可以免费获得该书的无 DRM PDF 版本。
随时随地在任何设备上阅读。搜索、复制并粘贴你最喜欢的技术书籍中的代码,直接应用到你的项目中。
好处不仅仅如此,你还可以独家获得折扣、新闻简报和每天发送到你邮箱的精彩免费内容
按照这些简单步骤获取福利:
- 扫描二维码或访问以下链接
packt.link/free-ebook/9781803242552
-
提交你的购买证明
-
就是这样!我们会直接将你的免费 PDF 和其他福利发送到你的邮箱
第一部分:Mobile DevOps 介绍
大规模构建移动应用需要以移动优先的特性来帮助你更快、更高效地构建、测试和部署应用。由于移动设备、原生 iOS 和 Android 开发、跨平台框架以及大团队中的架构扩展等特点带来的挑战非常多,这些问题可能会延长发布过程。在这一部分,我们将学习 Mobile DevOps 及其重要性,并了解移动生态系统以及如何搭建成功的 Mobile DevOps 环境。
本部分包括以下章节:
-
第一章**,解决 Mobile DevOps 中的挑战
-
第二章**,理解移动生态系统
-
第三章**,Mobile DevOps 基础
第一章:解决移动 DevOps 中的挑战
由于其性质,移动应用的发布周期可能会延长。以移动优先为原则的功能帮助你更高效、更快速地进行测试、构建和发布。
为确保移动 DevOps 的成功,开发、运维和 QA 团队必须紧密合作。建立明确的沟通渠道,确保每个人都在同一页面上。
因此,在本章中,我们将涵盖以下主要内容:
-
移动应用的重要性
-
理解移动 DevOps
-
敏捷方法在移动 DevOps 中的作用是什么?
-
有效转型移动 DevOps
-
如何加速组织中的移动 DevOps
-
移动 DevOps 团队的角色与职责
-
大规模移动应用开发的挑战
移动应用的重要性
数字化转型日益取得进展。如今,消费者要求更好的产品和服务,而企业必须采用新技术以保持竞争力。这将帮助他们提高效率并做出更好的决策。
此外,还有满足客户需求的创新空间。所有这一切都需要集成、持续开发、创新和部署。这一切都可以通过移动 DevOps 实现。
尤其是,移动应用开发变得越来越具有挑战性和复杂性。如今,我们依赖移动应用来完成许多任务,包括在线购物、在线支付、资金转账、医疗咨询、在线学习、社交分享等等。
随着这些活动的增加,客户期望移动应用能够更高效地运行,拥有友好的用户界面,可定制的功能,支持多语言,并且具备更多高级功能,同时占用更小的存储空间。
当你的移动应用上线后出现 bug 时,维护和修复它非常困难,甚至可以说几乎不可能。找出根本原因、准备新版本、测试并发布热修复补丁的过程需要团队付出大量努力。你可能需要等待几周或几个月才能完成这些工作。因此,在这段时间内,客户肯定会在应用商店留下负面评价。
“为了最大化客户满意度和价值,必须审视你的流程和工具,找出可以改进的机会。”
但是问题是,你当前的工作流程或配置能否在长期内支持你的移动应用?未来又如何?你的团队能应对这种规模吗?如果业务和团队不断扩展,会发生什么?最后但同样重要的是,你的团队对日常执行的任务感到满意吗?
移动团队专注于处理日益具有挑战性的任务。正因为如此,往往容易忽视整个过程。移动开发人员如果定期停下来检查自己的工作(例如采用 DevOps 流程),会花更少的时间去修复 bug。
持续的挑战
智能手机的使用在全球范围内持续增长。预计到 2025 年,全球智能手机用户将达到 74.9 亿人,比 2022 年的 72.6 亿人有所增加。更多详情请见此链接:shorturl.at/vCQ13
。
到 2026 年,预计全球在高级应用、应用内购买和订阅上的支出将达到 2330 亿美元,比 2021 年消费者支出的 1320 亿美元增长了 77%。
此外,预计在未来五年内,两个应用商店的总收入将继续以 12%的速度增长,年复合增长率(CAGR)为 19%,到 2026 年将达到 2330 亿美元。更多详情请见此链接:sensortower.com/blog/sensor-tower-app-market-forecast-2026
。
哇,真多!毫无疑问,所有企业都需要为下一波浪潮做好准备,意识到自己的挑战,制定下一步的计划,并且不忘提及成长和改进的机会。
在移动开发中,每个企业都面临以下情况:
-
独特的流程
-
独特的投资和目标
-
独特的人员和文化
这是一个例子
金融科技应用在我们日常活动中扮演着重要角色。个人可以使用这些应用管理财务并做出金融决策,它们通常会使用人工智能和机器学习等先进技术提供个性化的推荐和洞察。
无论是在电子商务、食品/杂货配送还是数字银行,金融科技(fintech)正成为我们个人和职业生活中不可或缺的一部分。
在数字时代,金融科技已经产生了显著影响,而这些针对私人和市场金融的先进技术工具将在使用和效果上进一步发展。
这类移动应用需要不同于其他应用的流程。它们需要一个有效的自动化测试策略,包括安全性测试,因为安全性在这里非常重要,应用的性能也很关键,而且由于竞争或客户满意度,频繁和快速的发布是优先考虑的事项。
另一方面,如果我们在创建一个社交媒体应用,需求和流程将会有所不同。
因此,我认为没有万能的解决方案,每个团队或公司都应该制定自己的解决方案。
让我给你讲个故事
为了理解移动 DevOps 的重要性,让我与您分享一个实际的场景,这个场景发生在我们尚未建立任何流程、技术或技术栈的情况下。
假设我们在 XYZ 公司工作,这是一家金融科技公司,开发和发布移动应用的过程本可以更快更高效。在应用发布之前,开发团队需要花费数周甚至数个月的时间来构建和测试新功能,QA 团队会发现需要手动修复的漏洞,因为他们没有自动化测试脚本。由于这个原因,新的应用版本很少发布,而且发布时通常会有问题,需要后续修复。
当前面临的挑战可以总结如下:
-
我们的新功能每 3 个月发布一次:这是一个巨大的因素,因为我们必须跟上竞争对手的步伐,并尽可能快速地发布新功能。
-
我们的部署过程混乱且痛苦,因为我们没有清晰的部署流程或发布经理。
-
持续集成(CI)流水线或工作流不灵活且脆弱,我们的团队花费大量时间和精力处理与 CI 服务器、配置、网络问题以及设备问题相关的日常事务。
-
手动测试存在很多问题,包括它们既耗时又费力。此外,如果我们有自动化测试,UI 测试和模拟器可能无法正常工作,这使得我们面临不稳定的测试结果。
-
我们没有可用的安全测试工具,也不知道该使用哪些工具进行安全测试。
管理团队看到应用开发进度缓慢以及众多问题时感到沮丧。尽管知道需要改善开发和发布移动应用的方式,但他们不知道从哪里开始。此前,团队每3 个月发布一次,首要目标是将发布周期缩短至1 个月或 2 周(每周或每两周发布一次)。
为了改善其移动应用开发过程,公司采用了移动 DevOps实践。它开始了移动开发和 QA 团队之间基于 Mobile DevOps 原则的协作过程,涵盖了 CI、持续交付和持续部署等方面。
移动 DevOps = 更快的发布
通过移动 DevOps,公司能够显著提高移动应用开发过程的速度和可靠性。移动开发团队能够对应用进行小而频繁的更新,QA 团队也能够快速识别并修复出现的任何问题。
因此,公司能够更频繁地发布应用的新版本,且 问题更少。
管理团队对移动 DevOps 实施的结果感到满意,应用程序更加稳定且频繁更新,显著提高了用户满意度。因此,公司能够比以前更快速高效地向用户交付高质量的应用。
但是这很容易吗?不,成功的实现需要团队思维方式的转变以及所有团队成员的参与。
这需要很短的时间吗?不,这是一场永无止境的旅程,是一个始终在不断发展的过程,以应对移动应用开发中的挑战。
从我的角度来看,我相信以下几点:
“移动 DevOps 是一场旅程,而不是 一个终点。”
既然我们已经解决了移动团队每天面临的大部分主要挑战,那么让我们来看看为什么我们需要考虑像移动 DevOps 这样的流程。
为什么移动 DevOps 重要?
移动 DevOps 使团队能够以更快的速度发布新功能、更新和 bug 修复。这种灵活性有助于满足不断变化的用户需求,并在市场中获得竞争优势。它通过自动化测试和持续监控来确保更高的应用质量,减少达到最终用户的 bug 和问题,从而提高用户体验和客户满意度。
它还促进了开发人员、测试人员和运维团队之间的协作与沟通。这种协作环境促进了知识共享、反馈交流以及团队合作和集体所有感文化的形成。
在之前的简短故事中,我们遇到了一些阻碍进展的挑战,如下所示:
-
不灵活且脆弱的开发环境
-
QA 团队需要很长时间来批准新版本
-
发布新版本的应用程序需要很长时间
-
我们没有清晰的发布流程或职责
然后,团队意识到移动 DevOps 流程能够帮助解决所有这些问题,因为移动 DevOps 的好处包括以下几点:
-
更快地解决问题和交付结果
-
你的业务将因此变得更加灵活
-
建立信任与合作
-
创新源自自动化
-
成本和风险大大降低
-
专注于客户满意度
-
更快的反馈和市场响应时间
-
改善构建正确解决方案的能力
-
更好的产品质量
-
更可靠的发布
-
提高生产力
移动 DevOps 流程能够帮助企业更快地解决问题,变得更加灵活,建立信任与合作,降低成本与风险,专注于客户满意度,提高产品质量、可靠性、生产力和上市时间。
这将是对移动 DevOps 的简短介绍,因为我们将在第三章中进一步探讨,移动 DevOps 基础。
理解移动 DevOps
移动 DevOps 是一套加速移动应用开发和交付的实践方法。这一方法结合了 DevOps 的原则,强调软件开发中的协作和自动化,以及开发移动应用所面临的具体挑战和考虑因素。
移动 DevOps 涉及以下内容:
-
协作与沟通:移动 DevOps 需要开发、运维和 QA 团队之间的密切协作与沟通。建立清晰的沟通渠道和反馈与协作的途径,确保每个人都朝着相同的目标共同努力,是非常重要的。
-
持续集成、部署和交付:移动 DevOps 依赖于自动化流程进行移动应用的 CI 和交付。这意味着代码更改会自动构建、测试,并部署到预发布和生产环境中,无需人工干预。
-
测试与质量保证:测试和质量保证是移动 DevOps 的关键组成部分。应将自动化测试工具和流程集成到开发工作流中,以确保新的代码更改不会引入漏洞或回归问题。
-
监控和反馈:移动 DevOps 还包括监控移动应用在生产环境中的性能和使用情况,并利用这些数据向开发团队提供反馈。这有助于快速识别和解决问题,提升整体用户体验。
-
工具与技术:为了有效实施移动 DevOps,组织需要投资于合适的工具和技术。这可能包括用于 CI 和交付、自动化测试、监控和反馈的工具。
为了让移动 DevOps 方法尽可能有效,你还应在整个移动应用发布的生命周期中集成安全性。移动 DevOps 方法从一开始就将安全集成到流程中,安全性成为共享责任。这就是为什么它被称为“DevSecOps”,因为所有 DevOps 举措必须基于安全的基础。
DevOps 与移动 DevOps
几乎每个公司现在都使用 DevOps 来构建、测试和交付其后端服务(API)、网站或基础设施。
在移动工程的背景下,移动 DevOps 是 DevOps 的一种变体,重点是通过更快的迭代周期和提高移动开发、运维和 QA 团队之间的协作,迅速将高质量的应用交付到市场。移动 DevOps 和 DevOps 的一个关键目标是通过自动化、协作和团队间的沟通,推动快速且高质量的软件交付。
在移动 DevOps 生命周期中,采用了略有不同的方法。尽管步骤有所调整,但连续性符号保持不变,以便频繁地向客户交付有价值的应用、保持质量,并实时监控应用的健康状况。更新后的移动开发生命周期可能包括 持续集成/持续交付(CI/CD)策略、构建、测试、发布、监控和度量。
图 1.1 – 移动 DevOps 与 DevOps
移动 DevOps 将 DevOps 的原则扩展到移动应用开发中,强调在整个开发生命周期中促进协作和自动化。因为它促进了开发人员、测试人员和运维团队之间的协作,所以我使用了前面的图示。它们使用相同的实践,但对于移动应用来说,它们是独特的,并包含不同的挑战。
重点
DevOps 关注不同类型的软件或应用程序,例如网站和后端服务,但移动 DevOps 专注于移动应用程序。
复杂性
移动应用程序必须支持的设备类型、操作系统版本和网络条件范围广泛,通常使其部署环境比传统软件或应用程序更加复杂和多样化。
敏捷方法如何在移动 DevOps 中工作?
由于我们已经花费大量时间在不同的书籍、文章和视频中描述瀑布模型与敏捷方法之间的差异,因此我不想再花时间描述瀑布模型。不过,让我问你一个问题:瀑布模型可以与 DevOps 结合使用吗,还是敏捷方法 更合适?
如果你将移动 DevOps 的优势(前面列出)与移动应用开发中的挑战(前面列出)结合起来,并将它们应用于瀑布模型和敏捷方法,你可以找到答案。
如果你仍然感到困惑,请记住以下链接中的敏捷宣言:Agile Manifesto。
现在答案是什么?我可以帮助你,但首先,让我们回顾一下瀑布模型并识别问题所在。
瀑布模型
瀑布模型是一种线性的软件开发方法,涉及从一个阶段到下一个阶段的顺序和线性流程,且方向是向下的。因此,每个阶段必须完全完成,才能开始下一个阶段。
图 1.2 – 瀑布模型
瀑布模型的阶段如下:
-
需求收集与分析:这一阶段涉及确定软件将解决的问题,确定软件的需求,并创建规格说明书。
-
设计:创建软件的详细技术设计,包括各个组件之间的接口,并制定实现软件的计划。
-
实现:在这一阶段,软件的实际编码工作开始。代码是基于前一阶段的设计创建的。
-
测试:在这一阶段,进行软件测试以确保软件满足规格说明书中的要求,并按预期执行。
-
部署:在这一阶段,软件被部署到目标环境中,例如生产服务器或移动设备。
-
维护:作为维护阶段的一部分,软件中发现的任何错误或问题将被修复,新增功能或特性将被添加,并且软件的性能将得到改进。
瀑布模型有一些缺点。它假设可以在前期收集并分析软件需求,但这并非总是可能的。此外,它假设软件的设计是正确且完整的,但这也并非总是如此。最后,一旦开发过程开始,软件就不能再进行任何更改。
瀑布模型适用于移动 DevOps 吗?实际上,不适用,因为移动 DevOps 涉及持续集成(CI)、持续测试、持续部署和持续监控,变更是常态,且各个阶段不是孤立的。移动 DevOps 中,所有跨职能团队共同协作,在一个流程中共同努力,目标和宗旨是快速、频繁地交付高质量的移动应用,以满足客户需求。
敏捷
相较之下,敏捷方法论被视为瀑布模型的直接继承者。它是一套强调协作、灵活性和快速迭代的软件开发原则。这是一个建立在敏捷宣言基础上的体系,敏捷宣言概述了一套在短时间内交付高质量软件的关键价值观和原则。
通常,敏捷通过使用如Scrum等敏捷方法来实施,其中团队成员在短周期开发(称为冲刺)中进行沟通和相互反馈。
在敏捷宣言背后的敏捷原则中(agilemanifesto.org/principles.html
),我们可以找到第一条原则如下:
“我们最优先的任务是通过尽早和持续交付有价值的软件来满足客户。”
你还记得移动 DevOps 的好处吗?客户分层和频繁交付移动应用。基于此,结合移动 DevOps 的敏捷原则旨在通过持续集成(CI)、持续交付和持续部署策略加速移动应用的开发和交付,使团队能够快速、可靠地发布移动应用。
在移动 DevOps 和敏捷中,都非常强调团队间的协作与沟通,同时两者都强调自动化重复任务的重要性,以便尽可能快速高效地生成高质量的软件产品。两者还强调尽快且高效地交付高质量软件产品的重要性。
敏捷强调短周期开发,而 DevOps 强调持续交付。
图 1.3 – 敏捷方法论
目标是以最小的风险实现最大的速度——你需要进行实验、测试,尽可能地探索每一个细节,以免在客户需求面前落后或在过程中崩溃。关键不是防止失败,而是迅速恢复。唯一重要的就是你恢复的速度。
移动 DevOps 阶段
和 DevOps 一样,移动 DevOps 也有多个阶段,从规划到监控,包括所有帮助移动团队顺利、快速、频繁交付高质量移动应用的实践。
图 1.4 – 移动 DevOps 阶段
-
战略与规划:这涉及到识别移动应用的目标和任务,明确目标用户以及任何特定的需求或限制。
-
开发:在这一阶段,移动应用采用敏捷方法和 CI/CD 实践进行开发。这包括编写代码、构建和测试应用程序,并集成任何所需的 API 或服务。
-
测试:移动应用测试是 DevOps 流程中的重要环节,旨在确保应用在不同设备和操作系统上稳定运行并且表现良好。这包括单元测试、集成测试和用户验收测试。
-
发布:一旦应用测试完成并准备好发布,就可以将其发布到适当的应用商店或分发平台。
-
监控:应用部署后,重要的是要监控其性能并解决任何出现的问题。这可能包括崩溃报告、错误追踪、网络请求分析、内存泄漏和应用性能。
这只是对各阶段的简要介绍,但在第三章《移动 DevOps 基础》中,我们将深入探讨这些阶段,而在接下来的章节中,我们将分别用实际案例和用例来探索每个阶段。
在了解了 DevOps 和移动 DevOps 之间的差异、敏捷与移动 DevOps 之间的紧密关系,并看到了移动 DevOps 的不同阶段后,让我们看看如何能够成功、有效地将我们的团队或组织转型为移动 DevOps。
有效地转型移动 DevOps
移动 DevOps 转型和 CI/CD 实施的成功可以通过关键绩效指标(KPI)来追踪,这些是可衡量的数值。通过设定具体、量化的 KPI,并定期监控其进展,您可以追踪移动 CI/CD 努力的有效性。
为了推动移动 CI/CD 转型,可以使用以下 KPI:
-
部署频率决定了新代码更改部署到生产环境的频率。高效和成功的 CI/CD 流程要求有高频率的部署。
-
恢复时间中位数(MTTR)衡量组织在发生故障后多快能够恢复正常运营。具有较低 MTTR 的 CI/CD 流程表明其稳健,能够快速发现并解决问题。移动应用可能面临一些挑战,因为一旦应用发布后,衡量起来会较为困难,但通常我们可以将测量应用到其他移动应用所使用的服务上。
-
缺陷密度:生产环境中发现了多少个 bug?如果 bug 数量很低,说明 CI/CD 流程非常完善,能够有效地识别和修复问题。
-
用户满意度:移动应用是否受到用户的好评?应用质量的一个重要指标是用户满意度。如果你的应用评分较低或在应用商店中有负面反馈,这可能表明你的质量和发布流程需要重新审视。
-
衡量开发者满意度,了解他们在构建和维护公司产品时所使用的工具、流程以及获得的支持。为了节省成本,公司通常会自建工具,但开发者可能对这些工具不满意,公司应该了解开发者是否满意。这是一个极其重要的问题。在 0 到 10 的评分范围内,公司询问内部开发者,他们愿意将公司开发环境推荐给同事的可能性有多大。根据这些数据,可以对开发环境进行改进,以更好地支持内部开发者的需求。
我们还可以使用各种指标来衡量 DevOps 和移动 DevOps 的性能和生产力,例如 MODAS 调查,以及来自 Google 的 DORA 指标 (shorturl.at/beAX1
)。
移动 DevOps 的 ROI
投资回报率(ROI)是衡量投资效率的标准。通过确定实施移动 DevOps 方法的成本,并将其与所获得的收益进行对比,可以计算出移动 DevOps 的 ROI。
首先,你需要确定实施移动 DevOps 方法进行移动应用开发的相关成本,包括团队的培训或认证费用、将使用的工具或技术,以及其他相关成本。通过这些信息,你可以计算出实施移动 DevOps 的总成本。
下一步是确定使用移动 DevOps 的收益,例如提高效率、改善团队成员之间的协作和沟通,以及更快的部署和发布周期。为了衡量这些收益,你可以进行我们之前提到的调查(开发者满意度),分析项目绩效数据,并将结果与没有使用 DevOps 的类似项目进行对比。
为了计算移动 DevOps 的 ROI,你需要确定成本和收益:
**ROI = (收益 - 成本) / ** 成本
如何加速组织中的移动 DevOps 实施
移动 DevOps 是一项协作努力,涉及团队、心态和承诺,以及流程和工具集。
图 1.5 – 移动 DevOps 考虑事项
为了加速移动 DevOps 过程和成功,团队应考虑以下事项和最佳实践:
-
确保版本控制健壮,以减少合并冲突和丢失工作
-
构建自动化(CI/CD),让你可以专注于创造而不是管理复杂的流水线
-
经常进行测试并自动化以回应反馈(左移测试)
-
管理你的移动应用工件,确保它们发布到正确的地方
-
确保时刻关注安全
-
从小处开始,并从那里智能地成长
-
创造是关于设计和开发
-
持续进行应用监控和状态检查
移动 DevOps 团队的角色与职责
正如我们之前讨论的,移动 DevOps 涉及一个跨职能的团队,每个角色都有独特的责任,如 CI/CD 流水线、云架构、安全合规性和待命(事件管理)。它们彼此补充。如果团队采用小队与部落的方式,或许一个专门集中化的团队可以处理以下移动 DevOps 实践和流程:
-
发布经理
-
移动工程经理
-
质量保证工程师
-
DevOps 工程师
-
移动工程师
-
安全工程师
-
云/DevOps 架构
图 1.6 – 移动 DevOps 团队
这种方法或配置可以帮助企业公司有效地扩展他们的团队和业务。
在中小型团队中,移动开发人员与 DevOps 工程师可以完成相同的工作,但这可能需要他们付出时间和努力,因此始终取决于移动 DevOps 的目标。
大规模移动应用开发挑战
除了移动应用的独特性外,开发它们时还面临许多挑战。以下是最常见的一些挑战:
-
整合多个平台以创建无缝的用户体验:移动应用通常需要为多个平台(如 iOS 和 Android)开发。这在测试、部署和维护方面可能会带来额外的复杂性。
-
单体代码库与多个代码库:在处理大规模项目时,协调和版本控制会变得具有挑战性。
-
适配应用到不同的设备和操作系统:模拟器和仿真器对于测试可能有用,但它们无法复制用户在真实设备上可能遇到的所有体验和问题。这可能导致确保移动应用的质量和可靠性变得困难。
-
确保应用程序安全并符合安全性和数据隐私要求:移动应用程序通常处理敏感数据,如个人信息和金融交易。这需要对安全性和隐私风险进行细致的管理。
-
紧跟移动应用趋势和技术:为了开发移动应用,你需要一个不断发展的独特工具集。随着市场需求的不断增长,总有新的技术用于构建、部署和监控性能。
-
确保持续交付和部署:移动应用程序需要频繁更新以修复漏洞、添加新功能并提升性能。这要求有一个强大的 DevOps 流程,能够处理每天多个版本的发布。
-
与 API 集成:移动应用程序通常依赖外部 API 提供功能,如位置追踪和数据存储。这些 API 可能会发生变化或出现停机,从而影响移动应用的稳定性。
正如我们之前在《移动 DevOps 基础》一文中提到的,由于每个企业都有独特的投资、目标和流程,开发移动应用可能会面临挑战。以下是几种不同类型的移动应用,每一种都需要简要探讨,以便更好地理解它们的目的。
鉴于所有这些挑战,可以开发出不同类型的移动应用公司。
超级应用
超级应用是一种提供多种服务的移动应用。服务的例子包括打车、外卖、在线购物和金融服务。超级应用为用户提供一站式服务,使他们可以无需下载和使用多个独立的应用程序,便可访问多项服务。
亚洲是超级应用的热门地区,因为它们增加了用户参与度和收入,为提供这些应用的公司带来了好处:
-
Gojek (
www.gojek.com/en-id/
) – 一款印度尼西亚超级应用,允许用户使用各种服务,如消息和支付处理 -
Grab (
www.grab.com/sg/
) – 一款按需提供外卖、支付及其他服务的应用 -
Paytm (
paytm.com/
) – 一款流行的印度电子钱包和支付应用,提供购物、投资等功能,并且可以预订旅行、电影和活动的门票 -
LINE (
line.me/en/
) – 一款日本的消息应用,也允许进行支付和预订酒店房间
通过为用户提供便利,超级应用可以使他们无需在多个应用之间切换,就能访问各种服务。企业主可以通过超级应用生成新的收入,并吸引新客户。
白标应用
应用程序的白标版本显示的是重新销售该应用程序的公司的徽标和名称,而不是最初开发它的原始开发者的名称。通常,这些应用程序被定制以满足公司的特定需求,然后重新销售给其他企业或客户,以为公司带来收入。
因此,它们被推荐为公司提供可定制的应用解决方案,而不必投入时间和资源来从零开始开发应用,从而提高客户的满意度。
电子商务是白标应用程序的一个常见示例,企业可以购买现有软件并以其自己的品牌、产品和价格进行定制,例如 Shopify(www.shopify.com/
)。这使它们能够快速轻松地推出自己的在线商店,而无需从头开始构建平台。
此外,白标应用程序在医疗保健、教育和政府领域也有所应用。例如,医疗保健提供者使用白标应用程序来安排和跟踪患者的治疗,而学校使用它们来评分和跟踪学生的进展。
使用白标应用有多个好处,包括以下几点:
-
从头开始开发应用可能昂贵且耗时。白标应用更具成本效益和效率。
-
由于其预先存在的特性,白标应用可以比定制建造的应用更快地实施和发布。
这里有一些白标移动应用程序的示例:
-
适用于本地餐厅连锁店的品牌化和定制化食品送货应用程序
-
酒店或度假村品牌的预订和预订应用程序
-
定制和品牌化的门票和活动管理软件,适用于音乐会和体育场馆
此外,开发一个目标受众会发现有价值且吸引人的应用程序,并优化应用程序的功能,可能具有挑战性。
移动团队可以通过实施 CI/CD 和自动化测试等最佳实践来应对这些挑战。此外,他们可以使用诸如移动设备云和测试自动化框架之类的工具来简化流程并改善其移动应用程序。
让我们总结一下:
由于移动应用开发具有独特性,因此 DevOps 也应该 独一无二。
总结
移动 DevOps 的概念涉及集成开发和运维(DevOps)实践,以提高移动应用程序开发的效率和速度。为了实现这一目标,我们使用移动优先功能来更快地测试、构建和发布移动应用程序,并实施移动应用程序的持续集成、测试、部署、交付和监控。
一个有效的移动 DevOps 流程还涉及开发、运维和质量保证团队之间的协作与沟通,以及使用合适的工具和技术以实现预期的结果。为了保持竞争力并满足客户对高质量移动应用的需求,企业应该采纳移动 DevOps。
确保不要盲目复制网上找到的他人流程。制定一个适合你的利益相关者和团队成员需求的策略和计划。在一开始就为你的移动 DevOps 最佳实践建立一个标准流程。
我们向移动 DevOps 迈进的旅程刚刚开始,在接下来的章节中,我们将进一步探索并学习如何有效地使用移动 DevOps。
第二章:理解移动生态系统
一个应用的移动生态系统包括它在移动设备上正常运行所需的所有元素,包括硬件、软件、操作系统、网络和使其运作的服务。为了成功实施移动 DevOps 并满足客户需求,理解移动生态系统至关重要,因为这有助于了解所面临的挑战,并找到解决方法以交付成功的移动应用。
在本章中,我们将覆盖以下主题:
-
移动应用像冰山一样
-
移动应用的伟大之处
-
市场上的不同移动操作系统、框架和平台
-
移动应用功能,如盈利化、推送通知、状态管理、深度链接等
-
移动应用架构
移动应用像冰山一样
在我看来,一个移动应用程序就像一个冰山,有明显的部分(用户界面或 UI)和不显眼的部分(UI 下方的代码和功能)。尽管最终用户是唯一能够看到成品的人,但这个比喻常常能说明构建和维护一个移动应用程序所需的努力、复杂性和工作量,如下图所示:
图 2.1 – 移动应用是一个冰山
当一个用户例如下载并首次使用一个应用时,他们看到的仅仅是它的界面、功能和特性。用户看不到后台发生的许多事情,但这些远比他们意识到的要重要。一个移动应用连接着服务器、数据库和 API,使其能够与其他应用和设备进行通信、检索数据、传输数据并执行各种任务。
一个移动应用,从最简单的意义上讲,就是一种为某个平台(如 Android 或 iOS)设计的运行软件。因此,它需要大量的编码才能开发出来。如图 2.2所示,它由多种编程语言、框架、库和工具组成,这些都用于开发应用的功能和特性:
图 2.2 – 移动应用开发
除了移动应用的技术方面,很多工作还集中在其规划、设计、测试和发布阶段。必须开发线框图、原型和用户流程,并进行用户测试,以确保应用直观、易用且性能优良。
现在我们已经探讨了移动应用开发的基础,让我们将焦点转移到大多数移动开发团队在构建优秀应用时面临的挑战。
什么使得移动应用伟大?
为了制作一个优秀的移动应用,它需要有一个简洁直观的用户界面,易于使用,但与 Web 应用不同,原因如下(如图 2.3所示):
-
这变得更加重要。
-
这个平台是高度碎片化的。
-
工具经常变化。
-
它迭代得非常迅速:
图 2.3 – 移动应用是独特的
基于移动应用的性质和复杂性,在评估移动应用的优点时,有几件事情需要考虑,如下所示:
-
移动应用帮助用户解决问题或满足他们的需求,因此它们需要经过精心设计,并且具有一系列有用的功能和特性,且要可靠。
-
它们应该快速、响应迅速,并且能够完美地处理各种平台和设备,且不会崩溃或出现卡顿。
-
对于移动应用而言,兼容多种设备和平台非常重要,这样尽可能多的用户才能使用它们。
-
它们被设计用来保护敏感数据,并防止未经授权的访问。
-
它们需要定期更新,增加新功能和改进,以保持用户兴趣,并确保未来仍然具有相关性。
既然我们已经了解了移动应用的重要性,现在让我们更详细地看看今天市场上可用的平台和框架,以及在实施移动 DevOps 流程和实践时需要考虑的事项。
当前可用的移动平台和框架
在写这本书的时候,目前市场上有很多不同的移动平台,包括原生平台和跨平台平台,下面我们快速了解一下它们之间的差异,帮助你更好地理解在思考移动 DevOps 时需要考虑的因素。
注意
我不想详细解释移动开发,因为这本书是关于移动 DevOps 的,而关于移动开发的书籍有很多。然而,正如我们之前提到的,我们应该能够解读不同平台的需求,然后根据这些需求实施 DevOps 流程。
作为起点,让我们来看一下原生应用,如 iOS 和 Android。
iOS
如我们所知,iOS是运行在 iPhone 和 iPad 上的操作系统。现在,iPad 有了专门的 iPadOS。众所周知,iOS 除了拥有用户友好的界面、与其他 Apple 产品的整合以及通过 App Store 提供的大量应用外,还与其他 Apple 产品兼容。在写这本书时,iOS 的最新版本是 16。
在开发、测试和发布 iOS 应用时,务必始终使用最新版本的 macOS,并配备最新的 SDK 和工具,以满足应用的需求。这对于移动 CI/CD 来说是一个大挑战,因为如果你想构建和发布 iOS 应用,你就必须始终保持最新。
为了避免浪费开发人员在设置和维护移动 CI/CD 平台上的时间,我们应该始终寻找一个即插即用的平台。在 第四章,通过移动 DevOps 实现持续集成与交付 中,我们将深入探讨如何为我们的团队选择合适的 CI/CD 提供商。
iOS 16 新增功能
2022 年 9 月,Apple 发布了其新操作系统 iOS 16。该版本的 iOS 操作系统在 Apple 的 WWDC22 大会上发布(developer.apple.com/videos/wwdc2022/
)。iOS 包含适用于广泛设备的功能和性能改进,包括以下内容:
-
全新锁屏:现在,你可以使用 WidgetKit 为 Apple Watch 创建复杂功能,并为 iPhone 锁屏创建小部件,扩展便捷查看的体验,并拥抱 SwiftUI
-
iPhone 一触即付:通过 Apple Pay、Apple Watch 和其他数字钱包,iPhone 上的支付应用现在可以通过接触式信用卡和借记卡接受非接触式支付
-
SwiftCharts 是一个强大且简洁的 SwiftUI 框架,用于将数据转化为信息丰富的可视化效果
-
3D 地图:在全新的地图上体验高度详细的 3D 城市体验
-
App Intents 将为用户提供仅通过语音或点击应用即可执行快速任务的能力
-
改进的应用内购买体验,新增 API 和增强功能
-
在视频和应用中使用实时文本执行简单任务,如复制和粘贴
所有这些功能都伴随着安全性、可访问性和隐私方面的新特性和增强功能,帮助开发者构建安全且丰富的 iOS 应用。所有细节可以在这里找到:www.apple.com/ios/ios-16/features/
。
除了在这里提到的新功能外,我还想强调,我们在 UI 测试这些功能时面临不同的挑战,例如小部件和图表的 UI 测试以及锁屏测试,因此当涉及到下一个可能的挑战时,我们必须始终考虑更大的范围。
只需准备好,在你阅读本书时,新版本的 iOS 就会发布。
除了 iOS 16 中的上述功能外,Apple 还发布了最新版本的 Xcode,即15(apps.apple.com/us/app/xcode/id497799835?mt=12/
),这本书写作时,Xcode 是开发 iOS、tvOS、iPadOS、watchOS 或 macOS 应用的主要开发 IDE。Xcode 的二进制文件比以前小了 30%,因此启动速度比以往更快。Xcode 还提供可下载的 watchOS 和 tvOS 模拟器运行时,让开发者可以随时接触到最新的平台。另一个重要的功能是通过单一的应用目标来配置多平台应用。让我们深入了解一下什么是多平台应用。
配置多平台应用程序
使用多平台应用程序(developer.apple.com/documentation/xcode/configuring-a-multiplatform-app-target
),你可以通过使用多平台目标共享应用程序的项目设置和代码,正如图 2.4所示,这将允许你将应用程序的体验扩展到应用程序支持的多个平台:
图 2.4 – 多平台目标
注意
尽管 iOS、iPadOS、macOS 和 tvOS 应用程序可以共享一个目标,但 watchOS 应用程序仍然保持在一个单独的目标中。更多信息请参见:developer.apple.com/documentation/Xcode/configuring-a-multiplatform-app-target
。
在设计 CI/CD 管道时,我们应该考虑到这一点,因为我们需要为每个目标考虑代码签名机制、证书和配置文件,以及在归档或构建应用程序进行测试时必须采取的步骤。
Android
Android(www.android.com/
)操作系统是由 Google 为智能手机和平板电脑开发的开源平台。这个操作系统基于 Linux 内核,主要用于移动设备,但也已在手表、电视、汽车和其他设备上实现。Android 之所以如此受欢迎,有很多原因,包括设备的定制能力,以及通过 Google Play 商店提供的各种应用。
作为 Android 操作系统的替代版本,Android Go(www.android.com/versions/go-edition/
)旨在平稳运行于低配置的智能手机和平板电脑,这些设备具有有限的资源。通过一个更轻量版的 Google Play 商店、Google 应用以及一系列优化为低端设备的应用,它旨在平稳运行于资源有限的入门级智能手机和平板电脑。
Android Go 的主要目标是为资源有限的用户提供流畅、可靠且易于使用的用户体验。
注意
你可以在这里了解更多关于如何为 Android Go 开发应用程序的信息:
developer.android.com/guide/topics/androidgo/develop
Android 13 新功能
同样,iOS 始终拥有 Android 的最新版本,包括新的功能和现有功能的增强。让我们一起探索其中的一些:
-
作为 Android 13 的一部分,Material You (
material.io/blog/announcing-material-you
) 被整合到操作系统的外观和样式中。通过自定义非 Google 应用程序,您可以通过匹配您选择的主题和颜色,使主屏幕更具连贯性和独特性。 -
当您复制敏感信息,如电子邮件地址、电话号码或用户名和密码时,Android 将在一段时间后自动清除您的剪贴板历史记录。
-
现在 Android 13 可用后,在平板上执行多任务更加容易了。
注意
还有更多内容 — 您可以在以下链接找到所有新功能的详细信息:www.android.com/android-13/#a13-highlights
。您可以在以下链接查看所有发布和版本信息:developer.android.com/about/versions
。
在持续集成/持续交付方面,Android 可以在 macOS、Windows 或 Linux 等各种操作系统上构建,但要构建 Android 应用程序,您需要拥有 Android 的 SDK 和工具,例如 Gradle,这是 Android 应用开发的官方和主要工具。
接下来,让我们来看看可以在多个平台或跨平台运行的应用程序。
Flutter
Flutter (flutter.dev/
) 是由 Google 创立的移动应用开发框架。Flutter 平台使开发者能够从单一代码源创建适用于 Android 和 iOS 的移动应用,这些应用具有高响应性、视觉吸引力和高性能,以及适用于 macOS 和 Windows 的桌面应用、Web 应用和嵌入式应用 (flutter.dev/multi-platform/
)。
因此,Flutter 是一个生态系统,在这里您可以从单一代码库构建六种应用程序。正如 图 2**.5 所示,使用 Flutter 您可以构建 Web、移动嵌入式应用程序和桌面应用程序(Windows、macOS 和 Linux):
图 2.5 – Flutter 多平台
Flutter 使用 Dart 编程语言 (dart.dev/
) 并采用响应式编程模型,允许实现流畅无缝的应用交互。它还包括各种可定制的 UI 组件和构建工具,以及访问摄像头和存储等本地设备功能。
Flutter 是一个出色的工具,可以帮助您构建诸如 渐进式 Web 应用 (PWAs) 等 Web 应用,并将现有的移动应用扩展到 Web,但 Web 本身是一个灵活的平台。
在涉及 Flutter 时,考虑 CI/CD 流水线是有挑战性的,因为每个应用都需要特定的工具和预请求才能发布。由于 Flutter 也支持 iOS 应用,因此它还需要 macOS 机器以及最新的工具和 SDK。例如,使用 Flutter SDK 时,Linux 除了需要 Flutter SDK 之外,还需要其他工具,而在 Windows 上,你肯定需要 Windows 操作系统才能构建应用。
React Native
React Native 框架 (reactnative.dev/
) 是 Facebook 最受欢迎的框架之一,因为它允许开发者使用 JavaScript 和 React 库构建类似原生的应用。React Native 使用声明式编程,并包含大量组件和工具,用于创建高性能的应用。在此链接中,你可以了解哪些公司在使用 React Native,例如 Shopify、Microsoft、Facebook(Meta)等:reactnative.dev/showcase
。如 图 2.6 所示,你可以通过 React Native 和 JavaScript 从一个单一代码库构建 iOS 和 Android 应用:
图 2.6 – React Native 框架
React Native 团队最近宣布了 React Native 的新版本 0.72.4 (github.com/facebook/react-native/releases
)。该版本带来了若干改进,包括统一的 CodeGen 配置、新的 Android 构建支持 CMake 以及新架构的文档。
此外,他们宣布了新架构,因为旧架构存在多个挑战,具体包括以下几点:
-
数据被 异步 提交到桥接层,然后 异步 等待被另一个层处理。
-
由于 JS 是单线程的,因此所有计算都发生在这个线程中。
-
决定使用 JSON 作为最简单且易于人类阅读的格式,但它确实带来了一些开销,因为每当一个层需要使用另一个层时,都必须序列化一些数据。
尽管如此,新的架构会带来几个好处,具体包括以下几点:
-
现在可以执行 同步 函数。在过去,这些函数是异步的。
-
新架构不再需要序列化或反序列化数据,因此不需要支付序列化的成本。
-
通过使用 C++,现在可以抽象出所有的 平台无关 代码,并且可以轻松地在各个平台之间共享。
-
包含一层由一个或多个 JavaScript 规范自动生成的代码,确保 JavaScript 可以调用 C++ 方法,反之亦然。
注意
通过此链接可以了解更多关于新架构的信息:
reactnative.dev/docs/next/the-new-architecture/why
构建时间方面还有一个改进:从 React Native 0.71 开始,您将能够使用来自 Maven Central 的预构建工件,这些工件可以从 Android 消耗。因此,新架构 (github.com/reactwg/react-native-new-architecture/discussions/105
) 在构建时间上有了巨大的改进。
最后但同样重要的是,Shopify (www.shopify.com/
) 最近宣布其整个移动应用已迁移至 React Native。
注意
以下链接详细解释了为什么 Shopify 这么做,它是如何做到的,以及公司从中获得了什么:shopify.engineering/migrating-our-largest-Mobile-app-to-React-Native
。
Ionic
Ionic 提供与主要框架的集成,包括 Angular、React 和 Vue,以便使用 Web 技术提供高质量、高性能的移动应用。Ionic 框架 (ionicframework.com/docs/
) 提供了一整套 UI 工具包,用于构建高质量、高性能的移动应用,如下图所示:
图 2.7 – Ionic 框架
对于构建移动应用的开发者来说,使用 Ionic 的优势在于,它提供了各种预设计的 UI 组件和布局,使开发者能够轻松构建用户友好且具有视觉吸引力的应用。此外,Ionic 拥有一个活跃且庞大的社区,提供了多种插件和资源,可以在广泛的方式中扩展其功能。
Ionic 框架的本地应用可以通过应用商店进行分发,并能在移动设备上运行,因为 Ionic 应用通常作为本地应用进行部署。它还提供用于开发 PWA(渐进式 Web 应用)的工具和服务,PWA 是像本地应用一样能够离线工作的 Web 应用,并且可以作为本地应用安装到设备上。
Ionic 拥有 Capacitor (capacitorjs.com/
),一个开源跨平台应用运行时,允许基于 Web 的应用在 iOS 和 Android 上原生运行。将这些应用称为本地 PWA(渐进式 Web 应用)是有帮助的,因为它们代表了超越传统混合应用思维的下一个进化阶段,如 图 2.8 所示:
图 2.8 – Ionic 和 Capacitor
对于 Ionic 的 CI/CD,Appflow (ionic.io/appflow
) 允许团队构建具有混合移动架构的应用,包括 Cordova、Capacitor 和 React Native 应用。别担心,在 第四章,实现移动 DevOps 的持续集成与交付 中,我们将学习更多关于 Appflow 的内容以及如何与 Ionic 应用一起使用它。
Cordova
Cordova 框架 (cordova.apache.org/
) 允许你使用标准的 Web 技术(如 HTML5、CSS3 和 JavaScript)开发跨平台应用程序,如 图 2.9 所示。
注意
更多信息可以在这个链接中找到:
cordova.apache.org/docs/en/11.x/guide/overview/index.html
每个平台都通过其自己的封装器进行目标定位,该封装器提供对传感器、数据、网络状态等的访问,使用符合标准的 API 绑定:
图 2.9 – Cordova 框架
如果你想做以下操作,可以使用 Apache Cordova:
-
将你的移动应用扩展到多个平台;你不必使用每个平台的语言和工具重新实现它。
-
开发一个应用程序,并通过打包它进行 web 部署,以便在应用商店中分发。
作为 Cordova 社区的一部分,已经开发了各种插件来扩展 Cordova 应用程序的功能,例如通过 Cordova 插件访问本地设备功能,如相机、GPS 和加速度计。
注意
在这个链接中,你可以找到 Cordova 和 Capacitor 之间的对比:
ionic.io/enterprise-guide/capacitor-vs-cordova
Xamarin
在 Xamarin 框架 (dotnet.microsoft.com/en-us/apps/xamarin
) 中,开发者能够用 C# 编写代码,并通过使用特定平台的 API 来访问平台的本地功能和能力,正如 图 2.10 所示:
图 2.10 – Xamarin 框架
作为 Xamarin.Forms 工具包的一部分,Xamarin 为开发者提供了定义其应用程序 UI 布局的能力,这些布局可以在多个平台上重用,使用单一的 UI 工具包。
Xamarin 是死是活?
最近,我们注意到微软宣布,如果你想从单一代码库构建原生的跨平台桌面和移动应用程序,你可以使用 .NET MAUI。
所以,我们曾假设 Xamarin 可能已经结束,但实际上,它是 .NET MAUI 的开始。
如 图 2.11 所示,.NET MAUI (dotnet.microsoft.com/en-us/apps/maui
) 旨在取代 Xamarin.Forms,并为构建可以在 iOS、Android 和 Windows 平台上运行的移动应用程序提供一个更现代、功能更强大且一致的 UI 工具包。
.NET MAUI 构建于 .NET 6 之上,但在写作时该框架的当前版本为 .NET 7 (dotnet.microsoft.com/en-us/download
):
图 2.11 – 多平台目标
注意
要将你的应用从 Xamarin 迁移到 .NET MAUI,请访问以下链接:
learn.microsoft.com/zh-cn/dotnet/maui/get-started/migrate?view=net-maui-7.0
最后,Xamarin、React Native、Ionic、Cordova 和 Capacitor 之间的区别如以下截图所示:
图 2.12 – Xamarin、React Native、Ionic、Cordova 和 Capacitor
正如我们之前讨论的,不同的框架使用如 HTML、JavaScript 和 CSS 等 Web 技术来构建移动应用,以模拟原生应用的体验。让我们解释一下 PWA 背后的概念。
PWA
PWA(web.dev/progressive-web-apps/
)是一种旨在模拟原生应用体验的网页应用。除了它们可以在任何设备上运行,无论该设备是否支持现代网页标准外,它们还被称为渐进式,因为随着运行它们的设备变得更强大,它们也变得更强大。
PWA 通过使用 HTML、CSS 和 JavaScript 等 Web 技术通过网络浏览器访问。用户还可以将它们安装到设备上,并像使用原生应用一样使用它们,享受离线支持、推送通知、访问硬件(如摄像头和麦克风)等功能,如图 2.13所示:
图 2.13 – PWA
PWA 的主要优点之一是它们易于分发和安装,因为它们不需要应用商店下载。这使得用户可以更轻松地使用应用程序,也使得更新速度更快,在设计和功能方面更具灵活性。
除了提供与原生应用相同的许多优点外,PWA(渐进式网页应用)还可以通过网络浏览器轻松访问,这使得它们在构建移动应用时越来越受欢迎。在一些情况下,当企业或组织希望为用户提供移动应用体验,但又无法为不同平台构建和维护独立的原生应用时,它们可以使用 PWA。
以下是一些流行的 PWA 示例:
-
Twitter Lite:这是 Twitter 应用的极简版本,可以直接从任何具有网络浏览器的设备访问
-
Starbucks(星巴克):用户可以通过星巴克 PWA 从移动设备上进行订购、支付和跟踪购买
-
Trivago:用户可以搜索并预订酒店,还可以访问他们的历史预订
注意
由于有很多关于跨平台框架的书籍、文章或视频,我不会浪费你的时间进行比较,但我建议根据应用的性质、业务需求、目标和目标受众,以及团队的技能水平来选择框架。
现在我们简要地探讨了不同的移动应用操作系统、框架和平台,让我们来看一看移动应用最有价值的功能。
移动应用的最有价值功能
移动应用中包含了众多有价值的功能,满足了用户多样化的需求和偏好。接下来将描述一些最有用的功能。
大屏幕和可折叠设备
为了确保你的应用在大屏幕和可折叠设备上正常工作,你需要确保它针对不同的屏幕尺寸进行了优化。这可能意味着重新设计布局,以充分利用额外的屏幕空间,或将应用设置为支持纵向和横向屏幕。
可折叠设备为用户与设备互动提供了新的方式,例如可以在折叠或展开模式下使用。如图2.14所示,当可折叠设备处于折叠状态时,它可能会影响应用的显示和使用方式。在设计应用时,确保考虑到这一点,并进行测试,确保设备在折叠和展开时都能平稳运行。
图 2.14 – 可折叠设备
为了确保你的应用在大屏幕和可折叠设备上看起来既好又能正常运行,请遵循你正在开发的平台的设计指南,例如 Android (developer.android.com/guide/topics/large-screens/get-started-with-large-screens
)。提供一致的用户体验将有助于你的应用与操作系统的其他部分保持一致。你还可能需要投资一些额外的硬件以获得最佳效果。
此外,开发者还必须确保他们的应用与没有可折叠屏幕的旧设备兼容,尽管可折叠移动设备是一项相对较新的技术。为了确保应用在所有设备上正常工作,我们需要开发并测试应用的不同版本。在这种情况下,测试自动化可以帮助实现这一目标。
因此,QA 工程师需要确保应用和自动化测试能够帮助他们在测试大屏幕和可折叠设备上的应用时实现这一目标。这个挑战可以通过使用截图测试或人工智能(AI)测试工具来解决,该工具能够检测 UI 屏幕并进行对比。在第五章《实现强大的移动应用测试策略》中,我们将讨论大屏幕和可折叠设备的测试实践。
深度链接
在移动应用中,深度链接是允许用户通过点击应用内的链接直接访问应用中特定内容或功能的链接,而不需要手动导航到相关内容。
深度链接有多种方式可以用于推广应用内的内容,或者让用户快速访问应用内的特定功能或特性。它们可以被包含在电子邮件营销、社交媒体帖子或其他类型的营销材料中,鼓励用户与应用互动。
除了改善用户体验,深度链接还可以用于将用户引导到他们希望快速且轻松访问的内容或功能。例如,深度链接可以用于将用户引导到电子商务应用中的特定产品页面,或游戏中的特定界面,如图 2.15所示:
图 2.15 – 深度链接的工作原理
需要注意的是,要使用深度链接,应用必须已安装在用户的设备上。如果应用未安装,深度链接通常会将用户重定向到应用商店下载该应用。
对开发人员和 QA 工程师来说,另一个挑战是如何测试深度链接,这将在第五章《实施健壮的移动应用测试策略》中讨论。
碎片化
iOS 和 Android 应用在设备和操作系统上出现碎片化是常见现象。由于操作系统的升级和新设备的发布,更频繁地测试移动应用显得尤为重要。Android 和 iOS 设备的碎片化以及与硬件相关的错误是常见问题。
设备的制造商、屏幕尺寸、连接类型、电池寿命、分辨率和操作系统版本可能会有所不同,如图 2.16所示:
图 2.16 – 设备和操作系统碎片化
对开发人员来说,开发和维护跨所有设备和操作系统的应用可能是一项挑战,因为设备碎片化可能让他们在创建和维护应用时遇到困难。例如,一款在某设备上运行完美的应用,可能在另一款配置不同的设备上出现性能问题或显示故障。
团队需要在不同设备和操作系统版本上尽早并频繁地测试他们的移动应用,以增加测试覆盖率并确保我们的移动应用表现正确,这一点非常重要。
除了碎片化问题,企业可能由于不支持的设备和操作系统而失去潜在客户和收入。
在这种情况下,你可以使用云设备服务来设置不同的设备和操作系统版本,确保支持所需的设备。我们将在第五章《实施健壮的移动应用测试策略》中一起探讨市场上不同类型的设备实验室。
本地化
移动应用的本地化是指将其适配为特定语言或文化的过程,如图 2.17所示。相关任务包括翻译应用的文本和界面,调整图片和图形以符合不同的文化习惯,并根据当地需求调整应用的功能。
本地化移动应用非常重要,原因如下:
-
它有助于覆盖更广泛的用户群体,从而帮助你扩大用户基础,接触更多的受众。
-
它改善了不精通应用语言的用户体验,同时也改善了精通应用语言的用户体验。通过提供应用本地语言的内容,用户可以更好地与应用产生联系,因为他们可以接收与自己文化和语言相关的内容。
图 2.17 – 本地化
要本地化移动应用,需要考虑几个因素,包括你打算针对的语言和文化、可用的资源和预算,以及在本地化过程中可能遇到的技术挑战。
此外,你还需要考虑随着时间的推移,如何维护和更新本地化版本的应用程序,因为语言和文化会不断变化和演变。第五章,实施强健的移动应用测试策略,讨论了如何通过屏幕截图和其他方法测试移动应用的本地化。
可访问性
在移动应用中,可访问性是指开发和设计能让残疾人士(如视力或听力障碍者)使用的应用程序,如图 2.18所示。你必须确保你的移动应用具有可访问性,因为这将使更广泛的用户群体能够使用并从中受益,同时提升所有用户的体验。
图 2.18 – 可访问性
移动应用可以通过以下几种方式实现可访问性:
-
对于有视力障碍的用户,确保文本格式正确,且文本与背景之间有足够的对比度尤其重要。
-
为了确保有视力障碍的用户能够理解内容,请为图像、视频及其他媒体提供替代文本。
-
有听力障碍的用户可能会从音频和视频内容的字幕和文字记录中受益。
-
语言应该清晰简洁。避免使用可能令某些用户困惑的行话或技术术语。
-
遵循可访问性指南和最佳实践。
-
使用辅助技术进行测试,如屏幕阅读器或文本转语音软件。在第五章,实施强健的移动应用测试策略中,我们将更详细地讨论这一点。
通过实施这些和其他可访问性措施,您可以确保您的移动应用对更广泛的用户群体可用,并改善所有用户的体验。
推送通知
推送通知是一种从服务器发送到移动设备的消息,通知用户有关新内容、交易、事件或更新的信息。
用户可以在收到新邮件、任务完成或新功能可用时接收推送通知。推送通知也可以用于推广产品和服务,或鼓励用户使用应用,正如以下截图所示:
图 2.19 – 推送通知
只有用户选择并授权应用发送推送通知时,才能接收到推送通知。通常,用户可以在应用设置或操作系统的设置中进行授权。
即使应用没有运行,用户也会通过推送通知收到提醒,这使得推送通知成为与用户互动的有用工具。然而,不应过度使用推送通知,因为过多的通知可能会让用户感到烦扰,甚至可能导致用户禁用通知或卸载应用。推送通知的测试具有挑战性,但我们将在第五章,实施强大的移动应用测试策略中讨论这一点。
离线功能
在移动应用中,对离线功能的需求通常是最大的。除了应用必须在用户是否有网络连接的情况下都能正常工作外,一些应用(如外勤工作应用)还可以在网络连接较差或完全没有网络的地方使用,正如以下截图所示:
图 2.20 – 启用离线功能
当互联网连接不可靠或无法使用,或者用户不想产生数据费用时,此应用设计为即使没有互联网连接也能正常工作。
开发人员可以通过以下策略在移动应用中启用离线功能:
-
移动应用可以在设备上本地缓存数据,例如图片或文本,并在设备离线时访问这些缓存文件,从而使用户在没有互联网连接的情况下仍能使用应用的某些功能。
-
当互联网连接可用时,应用可以在设备与服务器之间同步数据,使用户能够随时在线访问最新信息。
-
设备可以作为本地存储使用,例如SQLite设备,当应用安装时存储数据,并在离线时访问这些数据。
-
内容可能会在服务器上渲染,并通过服务器端渲染缓存到设备上。在某些情况下,应用可能会在服务器上渲染某些内容,并将其缓存到设备上,以便在设备离线时仍然能够显示这些内容。
测试连接性也是一个挑战,因为你必须使用真实设备来测试各种连接类型和条件,这需要测试实验室和良好的测试设计。别担心——在第五章中,实施稳健的移动应用测试策略会详细讨论这一问题。
盈利
盈利的目标是为应用开发者创造收入,同时为用户提供价值。盈利策略根据应用和其受众的不同而有所不同,可能涉及多种不同方法的组合。
应用内购买是一种功能,允许用户在移动应用内购买额外的内容或功能。这些购买通常通过用户的应用商店账户直接在应用内完成,如下图所示:
图 2.21 – 盈利
使用多种支付方式(如信用卡、PayPal 或 Apple Pay 等移动支付服务)可以进行应用内购买。开发者可以设置应用内购买的价格,这些购买可以是一次性购买,也可以是订阅。
第五章,实施稳健的移动应用测试策略,将讨论如何测试 Android 和 iOS 设备的应用内购买,并介绍实现这一目标所需做的事情。
模块化
在移动应用中,模块化是指将应用划分为更小、更独立的模块或组件。代码可以更容易地在应用的其他部分或未来的项目中复用,从而节省时间和精力。
模块化过程还可以通过让你仅加载需要的模块,而不是一次性加载整个应用,从而提高应用的性能。因此,你可以在不影响其他部分的情况下修改某个模块,使得应用的维护和更新变得更加容易。
各个模块之间的交互可以通过使用如依赖注入(DI)或控制反转(IoC)等技术来管理,如下图所示:
图 2.22 – 模块化的应用架构
移动应用开发可以通过模块化架构带来多种好处:
-
跨不同部分或不同应用重用模块的能力减少了编写新代码的需求,加快了开发进度。
-
模块化架构简化了应用的维护和更新,因为可以在不影响整个应用的情况下对单个模块进行更改。
-
通过添加新模块或修改现有模块,模块化架构使应用能够在成长和发展过程中进行扩展。
-
使用模块化架构更容易测试应用程序,因为每个模块可以单独测试,从而减少错误 或 bug 的风险
注意
欲了解更多信息,您可以访问以下链接—例如,查看如何将 Android 应用进行模块化:developer.android.com/topic/modularization
。
性能优化
由于用户期望移动应用响应迅速且快速,性能是一个重要的考虑因素。
在多种设备和网络上测试应用程序很重要,以确保它在真实世界条件下表现良好。各种移动性能优化工具和库(如Flipper,github.com/facebook/flipper
)可以用于此目的。此外,我们可以使用不同的实践来优化移动应用性能,如下所示:
-
缓存减少了应用程序发出的网络请求次数,并提高了其整体性能
-
编写干净、高效的代码,以最小化资源使用并减少应用程序的加载时间
-
使用性能分析工具可以揭示应用程序的瓶颈或问题,并提供有关其性能的详细信息
-
使用较小的、更优化版本的图像和视频可以最小化资源的使用
-
您可以通过性能监控工具来识别和诊断应用程序中的性能问题
-
如果您减小应用程序的大小,其下载和安装时间将更快
下一章将讨论如何使用缓存来改善应用程序的构建过程,尤其是在 CI/CD 流水线中,如何使用工具来减少应用程序的大小和提高性能。
正如我们所讨论的,模块化是指将应用程序分成更小的、独立的模块或组件,了解移动应用架构及其设计良好的考虑因素是非常重要的。
移动应用架构
移动应用架构描述了应用程序的设计和结构,如下图所示。它包括所有组件及其之间的关系,以及为开发所选的设计模式和框架:
图 2.23 – 购物应用架构示例
设计移动应用架构需要考虑多个因素,包括以下几点:
-
架构将受到应用程序开发和运行平台的影响(例如,iOS;Android)
-
组件和设计模式将由应用程序的功能决定
-
一个设计良好的架构应在设计时考虑应用程序的性能
-
可扩展架构对于应用程序随着人气和使用量的增长非常重要
这里提供了一些移动应用架构的最佳实践:
-
设计你的应用,使其可以通过将其划分为更小的独立模块,轻松进行更新或替换。
-
通过使用清晰的命名约定和遵循已建立的编码标准,使你的代码库更易于阅读和维护。
-
考虑使用最小可行产品方法。从用户认为有价值的最小功能集开始,根据需要进行迭代。
-
确保你的应用可扩展,能够处理大量数据和多个用户而不导致性能下降。
-
根据新技术和新特性调整你的设计:使用一种灵活且可适应的架构。根据平台,有多种架构可供移动开发使用,例如以下几种:
-
模型-视图-控制器 (MVC) (
shorturl.at/bjuO0
) -
模型-视图-呈现器 (MVP) (
shorturl.at/hkHWX
) -
模型-视图-视图模型 (MVVM) (
shorturl.at/fptP2
) -
视图-交互器-呈现器-实体-路由 (VIPER) (
www.objc.io/issues/13-architecture/viper/
) -
视图 - 交互器 - 呈现器 (VIP) (
github.com/thetay55/VIP-Architecture/blob/master/VIP_Architecture.md
) -
Redux (
www.kodeco.com/books/advanced-ios-app-architecture/v3.0/chapters/6-architecture-redux
)
-
-
通过使用自动化测试和持续集成,确保你的应用程序是可靠的。
-
创建一个可维护的架构,采用设计模式和实践,使得应用的更新和维护更加便捷。
-
通过使用依赖注入(DI)使你的应用更具灵活性和可测试性。
-
确保你的后台和前端之间的网络层是稳健且高效的。
-
确保你的应用数据存储在高效且可靠的数据库中。
-
通过实现强大的错误处理机制来改善用户体验。
-
使用强大的日志机制可以使故障排除和调试变得更加容易。
为了为客户提供更好的用户体验,移动应用开发者应遵循这些实践,使其应用性能更好,提供更佳的用户体验。
总结
当我们一起踏上这段旅程,探索移动平台、框架以及移动设备独特功能的复杂世界时,我们越来越明显地发现,这些为从事移动开发的人员,包括开发者、QA 工程师、发布工程师等,带来了许多挑战。这些平台和技术复杂且不断演变,要求我们保持警觉和积极主动的态度,持续寻求创新解决方案,克服我们面前的障碍。
我们应对这些挑战的一种方法是通过利用自动化来简化和增强移动应用开发过程。无论是在构建、测试、发布还是监控方面,自动化都提供了诸多好处,可以极大地帮助我们高效地开发高质量、可靠的移动应用。
通过全面了解这些不同的移动平台、框架和功能,我们可以自信地应对前方的挑战,利用自动化作为强大的工具,在我们创造优秀移动应用的过程中不断前行。因此,让我们继续探索和发现,拥抱我们面前的障碍和机会,始终努力突破移动开发领域不断变化的可能性边界。
我们的下一章将讨论 Mobile DevOps 的基础知识,以及如何在接下来的章节中开始实施的实际步骤。
第三章:Mobile DevOps 基础
毋庸置疑,Mobile DevOps 正迅速成为移动开发过程中的一个关键部分,使团队和组织能够快速开发和发布移动应用程序。我们将讨论 Mobile DevOps 的基础,并介绍它如何通过这一过程帮助您的团队实现移动开发目标。
在本章中,我们将涵盖以下主题:
-
移动持续集成/持续交付(CI/CD)基础
-
在自托管和基于云的持续集成/持续交付(CI/CD)之间做出选择
-
我们需要一名 Mobile DevOps 工程师吗?
听起来很有趣!让我们开始向 Mobile DevOps 进军吧。
Mobile DevOps 的重要性
如今,企业越来越依赖移动应用程序。DevOps 是移动开发过程中的关键部分,因为它管理着移动应用的开发和发布。为了简化开发过程并提高移动应用的质量,采用了 CI、持续测试(CT)、CD 和持续部署等技术。
这是一种开发移动应用的方式,强调开发、质量、产品和运维团队之间的协作,以确保移动应用能够快速、频繁且可靠地交付,如下图所示:
图 3.1 – Mobile DevOps
通过 Mobile DevOps,团队可以更有效、更高效地协作,因为他们可以更快地开发和发布移动应用程序,并且错误较少(尽可能地),因为他们可以更多地合作。这有助于缩短开发移动应用的时间,同时确保应用程序符合质量、安全性和性能标准。
在第一章,解决 Mobile DevOps 中的挑战中,我们讨论了传统的移动应用开发往往是缓慢、容易出错且孤立的。开发者通常是单独工作,将工作交给质量团队进行测试,然后再交给运维团队进行部署和发布。这个过程通常很慢,导致了关键问题、延迟、糟糕的用户体验和不满情绪。
因此,Mobile DevOps 正在改变移动应用程序的开发和维护方式。它涉及运用 DevOps 原则和实践来提升移动应用开发的速度、安全性和质量。
Mobile DevOps 的许多优势可以总结如下:
-
更快的开发周期
-
不同团队之间的协作改善
-
更好的质量保证实践
-
高效的部署过程
-
快速响应客户反馈
-
通过自动化节省成本
-
部署时间减少
-
确保应用程序安全并符合规定
Mobile DevOps 过程对寻求最大化移动开发努力的组织来说,已被证明是极为宝贵的。
让我们深入探讨并了解更多关于移动 DevOps 的基础知识。
移动 CI/CD 基础
如果你熟悉 Web 应用、后台服务或其他类型应用的 DevOps 基础知识,你已经了解了CI/CD的概念。在移动端也是一样,只是需要一些特定的任务来构建、测试和发布移动应用。
在进入 CI/CD 部分之前,我想先给你介绍一下准备阶段,也就是规划阶段。
持续规划
作为一个团队,我们应该就实施移动 DevOps 和 CI/CD 的过程达成一致。持续规划阶段涉及从利益相关者收集需求、创建项目计划并确定必要的资源。这是确保应用满足用户需求并与整体业务目标一致的重要步骤。
此外,我们还需要清楚地定义你希望通过移动 CI/CD 策略实现的目标。这可能包括提高发布的速度和质量、增加团队成员之间的合作,或减少错误的风险。
可以用来改善 DevOps 实践的框架之一是CALMS(www.atlassian.com/devops/frameworks/calms-framework
),如图 3.2所示。它也可以应用于移动 DevOps,优化开发、测试和发布移动应用的过程:
图 3.2 – CALMS 框架
CALMS 可以用来实现以下目标:
-
团队可以通过协作和共享知识与资源,更快地识别和解决问题,从而交付更高质量的应用。
-
合作与沟通能够提升团队士气和生产力,进而提高效率和生产力。
-
通过确保每个成员了解项目目标和进展,团队可以避免误解和错误。
-
团队成员之间的沟通与合作可以促进更快的决策,进而提高项目进展的效率。
CALMS 有五个主要组成部分,如下所示:
-
文化:本质上,这指的是团队的价值观和信念,以及团队的整体工作环境和动态。每个团队都需要积极的文化才能取得成功。
-
自动化:自动化工作流减少了手动干预的需求,并通过使用工具和流程最小化错误的机会。
-
精益:在整个开发过程中,精益方法旨在最大化价值并最小化浪费。作为这一过程的一部分,需要识别并消除不必要的步骤,简化工作流程,并持续改进过程。
-
衡量:识别改进领域需要收集和分析数据。指标可以包括交付时间和周期时间,以及缺陷率。
-
共享:当知识和资源在部门内外共享时,协作和效率会得到提升。定期的团队会议、结对编程和代码审查都可以促进这一点。
现在我们已经确定了您的移动 CI/CD 策略应该实现的目标,让我们进一步了解 CI/CD 流程。
DevOps 文化是为组织构建有能力的工程团队的关键组成部分。它在向需求旺盛且具有广泛职业选择的工程师展示公司质量方面起着重要作用。
持续集成
持续集成(CI)定期且可靠地进行增量代码更改。CI 使得自动化构建和测试过程得以实施,从而在代码更新合并到代码库或特别合并到主分支或主分支之前,使得更新可靠,我们必须始终执行此操作,以保持主分支始终无冲突或错误,因为它是我们业务的主要来源。如果需要发布新版本,这是基准,如下所示的屏幕截图所示:
图 3.3 – CI 流程
移动应用的 CI 流程主要包括以下步骤:
-
从代码库克隆源代码
-
构建应用二进制文件
-
运行不同类型的测试,如单元测试、集成测试、UI 测试等
-
根据应用类型创建并部署工件(
.aab
或.ipa
),这些工件稍后可用于分发。
持续测试
持续测试(CT)的实践是将测试作为开发过程的一部分,而不是等到周期结束后再进行测试。高质量的应用程序对移动应用尤为重要,因为它们通常由许多用户使用,并且消耗大量数据。
移动应用可以通过多种方式进行持续测试,例如:
-
在开始测试之前,确定一个清晰的移动测试策略。
-
在整个开发过程中,确保在初始阶段就开始应用测试,并逐步进行。
-
遵循自动化测试流程,使用不同的测试工具执行测试,如单元测试、集成测试、UI 测试等,而无需人工干预。这对于以一致且及时的方式运行大量测试尤其有用。
-
可以通过基于云的测试,在各种设备和操作系统上运行测试,无需拥有或维护设备。通过在多种设备上测试应用,您可以确保其正常工作。
-
确保在真实的移动设备上测试 UI,而不仅仅是在仿真器或模拟器上。
-
执行足够的性能、压力和安全性测试。
-
进行测试以评估应用程序的互操作性、电池消耗和容错性(FT)。
在第五章,实施强大的移动应用测试策略中,我们将深入探讨移动测试策略、工具和框架。
持续交付
一旦这个过程顺利完成且没有错误,代码就可以通过持续交付(CD)过程快速且轻松地部署;否则,如果有任何错误,过程将停止,并将错误报告给开发人员修复,如下图所示:
图 3.4 – CI/CD 过程
一旦代码提交或变更合并到中央分支(如 main、master 等),CD 会自动将通过 CI 检查的构建版本交付到生产环境(如预发布环境),在那里进行测试和审查,然后才会发布到生产环境。
目标是自动化开发和部署流程,以确保快速、可靠且符合预算的移动应用交付。
移动应用的 CI/CD 过程主要包括以下几个步骤:
-
将构建版本发布给 QA 团队进行额外的检查和测试。
-
如果公司或团队已经参与该程序,则将构建版本发布给 Beta 测试人员。
-
如果一切正常,之后,发布经理或任何负责发布过程的人可以批准该构建并将其发布到应用商店或生产环境中。
持续部署
持续部署通常是 CI/CD 管道的一部分,这意味着部署到代码库的代码将自动部署到生产环境,或者在我们的移动应用案例中,将被部署到 App Store。CI/CD 管道通常被称为这些实践的组合,如下图所示:
图 3.5 – CI/持续部署过程
持续部署过程自动化了应用构建的部署,防止人工干预。唯一会阻止新变更部署到生产环境的情况是构建或测试失败。这种方式用于加速应用生产并更快获得客户反馈。
持续监控
在我们将移动应用发布到生产环境后,这并不是 CI/CD 生命周期的结束,而是进入了另一个阶段。持续监控(CM)涉及监控应用的性能并收集用户行为数据,如图 3.6所示。
这有助于组织改善用户体验、识别潜在问题,并优化移动应用程序的性能。收集的数据可以包括设备性能、网络状况、应用崩溃、用户行为等信息。通常,使用先进的分析工具和技术来分析这些数据,从而提供有关移动应用性能和用户体验的洞察。在 第七章,《建立移动应用监控、可观察性和分析》中,我们将深入探讨移动应用的监控和分析工具,并学习如何有效地将它们与移动 CI/CD 和 DevOps 一起使用:
图 3.6 – CI/CD 的完整过程
有效且具体的移动 CI/CD 平台由一系列不同的移动 DevOps 工具组成,用于解决特定的业务挑战。通过连接移动开发人员、质量工程师和客户,它们确保了一个有利可图的循环。
正如我们发现的,建立移动 DevOps 流程并不容易。自动化流程需要持续的实验和完善。
因此,我强烈建议在你决定开始移动 DevOps 之旅后,从小做起,逐步建立移动 DevOps 工具链和 CI/CD 管道。
根据我之前的经验,我相信如果你尝试一次性实施所有流程和步骤,你会失败并感到沮丧。相反,应该慢慢来,一步步建立;成功是小小努力的总和。
在我看来,如图 3.7所示,移动 DevOps 之旅分为三个阶段:
-
起始阶段/CI 阶段:只实现最小化的 CI 管道,通过克隆源代码、运行静态分析代码或 lint,并运行单元测试。
-
履行承诺阶段——移动 CI/CD 部分管道:通过添加其他一些步骤,如在云设备上运行 UI 测试、生成 UI 测试报告,并根据需求运行安全或性能测试,持续改进第一阶段的管道。此阶段还可以包括将应用程序发布给 QA 团队或相关利益方,并向不同团队发送关于状态的通知。
-
持续阶段——完全自动化的移动 CI/CD 管道:添加更多步骤来实现完全移动 CI/CD,例如将应用程序发布给测试人员和应用商店的步骤,以及通过并行运行 UI 测试来减少构建时间,或添加其他步骤来提高 CI/CD 管道的质量:
图 3.7 – 移动 DevOps 实施阶段
使用这种方法将始终帮助团队改进移动 DevOps 过程,并增强发布过程的性能。这些职责可能由平台工程团队、内部开发者生产力团队或移动工程团队承担,具体取决于组织内部的团队拓扑结构。在 第四章,使用移动 DevOps 实现持续集成和交付,我们将开始使用不同平台实现移动 CI/CD 流水线的实施阶段。
现在我们已经讨论了移动 DevOps 的基础知识,并解释了流程的每个阶段,让我们一起探讨移动 DevOps 和移动应用开发的好处以及 CI/CD 的好处。
CI/CD 对移动应用开发的好处
拥有移动 CI/CD 比仅仅提高现有流程效率有更多正面影响,原因如下:
-
它使开发人员能够专注于编写代码并监控生产中的移动应用
-
更快的部署时间和更快的市场交付
-
所有版本的移动应用程序都可供 QA 和产品利益相关者访问
-
测试结果、代码更改日志和发布日志始终可用
-
提升沟通与生产力
-
提升员工参与度
-
客户更加满意
确定移动 CI/CD 流水线中将使用的工具和技术。版本控制系统、构建自动化工具、测试框架或部署平台可能包含在此列表中。
移动 DevOps 的工具和基础设施
正如我们之前讨论的,移动 DevOps 是一组旨在简化移动应用开发和发布的实践、工具和基础设施。它实现了持续集成、测试、交付和监控,确保开发人员能够快速迭代、部署和维护高质量的移动应用。移动 DevOps 基础设施的关键组成部分如下所述:
-
版本控制管理系统,如 GitHub,允许团队跟踪其代码库的更改并进行协作。在 第九章,移动 DevOps 最佳实践,我们将更多地了解诸如单体仓库之类的不同 Git 仓库类型,以及如何使用它们。
-
自动化构建和测试过程的工具,如 Gradle、面向 Android 的 Gradle Enterprise 或 iOS 的 Fastlane,允许开发人员专注于编写代码而不是构建和测试。在 第四章,使用移动 DevOps 实现持续集成和交付,我们将更多地了解实践中移动应用程序的不同构建工具,以及如何使用缓存来加速这些工具的构建时间。
-
用于在各种物理设备上测试应用的实验室:这些实验室通常托管在云端,允许团队在多个设备上测试应用程序。在第五章中,实现强大的移动应用测试策略一章,我们将了解使用云设备加速测试过程的最佳实践。
-
用于部署和管理移动应用后端服务的基础设施由云平台提供,如Amazon Web Services(AWS)、Google Cloud Platform(GCP)或 Azure。在第九章中,移动 DevOps 最佳实践一章,我们将了解如何将云服务与移动应用结合使用。
-
测试工具如 Appium、Espresso、XCUITest 和 Detox 可以自动化测试不同平台和设备上的移动应用。在第五章中,实现强大的移动应用测试策略一章,我们将学习各种测试工具的差异,以及哪些工具或框架适合我们的团队。
-
使用 fastlane 等工具,管理移动应用分发过程,如自动管理代码签名、证书、配置文件和密钥库,变得更加简单。在第六章中,移动应用发布管理一章,我们将学习如何使用不同的工具(如 Firebase App Distribution、fastlane、TestFlight 等)自动将应用分发给 Beta 用户或 App Store。
在我看来,移动 CI/CD 流水线就像乐高玩具——你总是在使用不同的工具、配置和依赖。你所需要做的就是决定你的流水线应该是什么样子的。
当你玩乐高积木时,你会感觉自己像个建筑师。你可以通过构建不同的形状和结构来创造不同的结果。
构建适合自己需求的移动 CI/CD 流水线的核心思想是知道如何正确使用各个组件。构建移动 CI/CD 流水线没有固定的模板,关键是始终实施适合自己需求的步骤。
通过移动 DevOps,开发人员、测试人员、产品经理和发布管理团队可以更加高效地协同工作。
DevOps 和 CI/CD 基于快速开发、测试和发布的理念,这使得技术能够快速迭代。
这是一种紧密契合公司需求的理念,从初创公司到大型企业都可以受益。企业需要能够快速将产品推向市场,并不断提高质量,以获得竞争优势。
制定移动 CI/CD 策略是确保成功交付移动应用的关键部分。它涉及创建一个自动化开发、测试和部署应用的过程,帮助确保应用具有高质量并能快速发布。
因此,团队或组织应该选择适合业务和投资回报率(ROI)的移动 DevOps 和 CI/CD 平台。让我们比较自托管和基于云的 CI/CD 选项,以了解哪种选项或选择最适合我们的组织。
选择自托管和基于云的 CI/CD 之间的区别
使用自托管 CI/CD,组织可以完全控制其环境和数据。作为额外的好处,从长远来看,这种方式可能更具成本效益,因为组织可以通过利用现有基础设施避免云服务的费用。
例如,如果团队已经为 Web 应用、API 和后端服务使用了 CI/CD 平台,它就需要将移动部分集成进去。
这需要教育 DevOps 团队了解移动应用的要求,以便能够将移动部分添加到现有的 CI/CD 平台中,例如配置所需的硬件和软件,并实现支持移动发布流程所必需的流程和前提条件,以便将应用发布到应用商店,如应用签名、上传证书、配置配置文件以及创建密钥库。
此外,设置自托管的 CI/CD 解决方案可能非常耗时,并且可能需要专业知识。此外,团队还需要承担维护和更新其环境和基础设施的责任,这可能对资源造成负担。
另一方面,基于云的 CI/CD 解决方案相较于自托管解决方案有几个优势,具体包括:
-
设置和维护它们的过程通常更容易,并且它们具有更好的可扩展性。由于基于云的服务可以远程访问,它们也更加便捷。此外,它们可以更加灵活,因为它们可以轻松地与其他工具和服务集成。基于云的 CI/CD 通过提供异地托管,消除了对现场基础设施的需求。通过允许立即使用 CI/CD,基于云的 CI/CD 可以减少成本和设置时间。
-
云中的 CI/CD 还具有可扩展性,可以轻松扩展或缩减资源。
除了其好处,基于云的 CI/CD 也有一些缺点。对数据缺乏控制可能带来安全隐患。此外,基于云的服务费用可能迅速增加,特别是当组织需要使用多个服务时,因为必须监控机器和构建的费用。
需要注意的是,这还取决于项目的具体需求和要求,以及组织的规模和资源。如以下屏幕截图所示,自托管 CI/CD 可能耗时,但它更具可定制性;另一方面,云 CI/CD 可以通过管理必要的任务(如更新基础设施或技术栈)帮助开发者节省时间:
图 3.8 – 自托管与云托管(PaaS)CI/CD
基于云的 CI/CD 解决方案可能是 小团队或初创公司 的最佳选择,而更大的组织可能更倾向于拥有 更多的环境控制,并选择自托管解决方案,但最终选择总是取决于团队的期望和需求。
基于云的 CI/CD 版本通常被称为 CI/CD 即服务。CI/CD 工具由专门的组织开发、维护并托管,客户可以通过互联网访问。
相比之下,自托管的 CI/CD 意味着你要么构建自己的 CI/CD 工具,要么使用第三方 CI/CD 工具(通常是开源的)托管在你的基础设施上。它可以是本地服务器或 IaaS 平台,如 AWS、GCP 或 Microsoft Azure。
总结来说,这个对比表概述了自托管与基于云的 CI/CD 解决方案之间的主要差异,包括控制、成本、可扩展性和安全等因素。选择哪种方案取决于项目和组织的具体需求:
标准 | 自托管 CI/CD | 基于云的 CI/CD |
---|---|---|
控制 | 对环境和数据有完全的控制 | 对数据和环境的控制较少 |
成本 | 从长远来看更具成本效益;利用现有基础设施 | 成本可能迅速累积;需要监控机器和构建成本 |
设置与维护 | 设置耗时;需要专门的技术知识;团队维护基础设施 | 设置更简单;维护需求较少;托管在异地 |
可扩展性 | 受现有基础设施的限制 | 高度可扩展;可以轻松扩展或减少资源 |
可访问性 | 仅限于内部或本地网络访问 | 可以远程访问;更易于访问 |
灵活性与集成 | 可定制;可能需要与其他工具和服务进行更多的手动集成 | 更易与其他工具和服务集成;更灵活 |
安全性 | 对数据安全有更高的控制 | 由于对数据的控制较少,可能存在安全隐患 |
适用性 | 更适合有资源来管理环境和数据的大型组织 | 更适合需要立即访问和较低前期投资的小团队或初创公司 |
实施 | 自建 CI/CD 工具或使用托管在你基础设施上的第三方工具 | 由专门的组织提供的 CI/CD 即服务,客户可通过互联网访问 |
表 3.1 – 自托管与基于云的 CI/CD 解决方案之间的差异
移动特定的 CI/CD
移动 CI/CD PaaS 是指使用基于云的服务平台来自动化移动应用的构建、测试和部署。移动 CI/CD PaaS 提供商提供一系列工具和服务,帮助组织简化和优化其移动应用的开发和发布过程。市场上有不同的平台提供此类服务,例如 Bitrise (www.bitrise.io/
)、Codemagic (codemagic.io/
) 或 Apple 的 Xcode Cloud (developer.apple.com/xcode-cloud/
)。市场上所有这些平台将会在第四章,《实现移动 DevOps 中的持续集成和交付》中进行讨论并展示实例。
移动 CI/CD 服务有以下几个好处:
-
这些平台通常配备了管理代码变更和协作工具,能够与版本控制系统如 GitHub、Bitbucket 和 GitLab 集成。
-
开发人员可以通过自动化构建和测试过程,专注于编写代码,利用移动 CI/CD 服务。
-
云设备的集成:这些平台提供用于跨各种设备和平台测试和部署移动应用的工具。
-
使用监控和分析工具识别并解决移动应用中的问题:移动 CI/CD 服务平台通常提供跟踪移动应用性能和使用情况的工具。
-
与建立和维护内部移动 CI/CD 基础设施相比,移动 CI/CD PaaS 需要的是每月订阅费用,而不是前期投资。
-
组织可以根据需要调整其移动 CI/CD 能力,利用移动 CI/CD 服务的可扩展性。
-
对于那些刚接触移动 CI/CD 或者在此领域缺乏内部专业知识的组织,移动 CI/CD PaaS 可以非常有价值。
-
它通常通过允许移动 CI/CD 服务提供商维护和更新基础设施,释放 IT 员工去专注于其他任务。
-
许多提供移动 CI/CD 服务的供应商提供强大的安全措施,保护移动 CI/CD 过程和敏感数据的完整性。
发布过程可能还需要加速,因为移动应用需要高性能的快速机器来构建、测试和发布应用。在第四章,《实现移动 DevOps 中的持续集成和交付》中,我们将深入探讨,了解不同的移动 CI/CD 平台及其优缺点。
在讨论了自托管和云托管 CI/CD 对我们团队的利弊之后,每个团队应该自己决定哪个是最佳选择。现在是时候讨论我们是否需要一个移动 DevOps 工程师,还是可以自己管理。
正如我们讨论了移动 DevOps 和 CI/CD 基础知识,并了解了自托管和云 CI/CD 平台,你可能在想,我们需要一位移动 SRE 或 DevOps 工程师吗?这是一个重要的问题,我们来回答一下。
我们需要一位移动 DevOps 工程师吗?
最好的答案通常是,这取决于团队的目标、规模、技能和经验。你可以让不同的团队成员负责移动 DevOps 各个阶段,但不要忘记我们之前提到过,这是一项团队合作的工作。然而,如果团队中已经有一位 DevOps 工程师负责公司的 DevOps 实施工作,那么他也可以帮助移动团队,或通过以下方式参与到移动部分工作中:
-
理解移动的 DevOps 实践,例如代码签名和发布移动应用。
-
学习移动应用开发的基础知识。学习新的编程语言,例如 Kotlin 或 Swift,并积累构建移动应用的经验。
-
在你发展云计算知识的过程中,在云端创建、部署和管理移动应用。
-
参与开源项目或从事个人项目,获取在移动 DevOps 项目中动手实践的经验。
-
跟上最新的趋势和移动 DevOps 的最佳实践。
另一方面,经验丰富的移动开发者可能能够承担实施移动 DevOps 的责任,因为他们熟悉移动开发过程、大多数挑战,并且有必要提高他们在移动应用 CI/CD 方面的知识。
有一种观点认为,这是你在工作中采用的一种做事方式和过程。通过理解这四个基本的 DevOps 实践,即使是独立开发者或独立开发团队也能提高他们的生产力。
但就我而言,我认为这可以是两种方法的结合,因为我们可以让 DevOps 工程师和经验丰富的移动工程师一起合作,帮助移动团队更快速、更可靠地实现他们的目标并交付应用。确保有人负责服务器的基础设施,有人负责工具和框架,这一点至关重要。
总结
移动 DevOps 是高质量移动应用开发的关键实践。它是一个强大的过程,能够帮助团队快速高效地开发和部署移动应用。通过利用自动化、测试和持续部署,团队可以确保其应用程序稳定、安全并保持最新。借助移动 DevOps,团队可以更快速、更高效地实现他们的移动开发目标。
移动 DevOps 还通过自动化重复性任务简化了开发过程。这使得开发人员可以专注于开发中的创新性方面,例如创建创新功能,而不必担心日常琐事。此外,它确保移动应用遵循最佳实践,并针对特定平台和设备进行了优化。这使得组织能够创建高质量的移动应用,充分满足用户需求。
通过使用自动化、版本控制、云服务、监控与分析以及安全措施,开发人员可以简化开发过程,提高应用的整体质量。在这些实践的帮助下,移动应用开发人员可以更快速、更可靠地交付更好的应用。
CI/CD 流水线的实现将在下一章讨论,首先从 CI 部分开始,探索不同的 CI 提供商和需要遵循的步骤,然后集成 CD 部分,创建我们将在移动应用开发中使用的自动化 CI/CD 流水线。
第二部分:实现移动 DevOps 环境
移动 DevOps 依赖于自动化过程来实现移动应用的持续集成和交付。这意味着代码更改会自动构建、测试,并部署到预发布和生产环境,无需人工干预。
本部分包含以下章节:
-
第四章**,通过移动 DevOps 实现持续集成与交付
-
第五章**,实施强大的移动应用测试策略
-
第六章**,移动应用发布管理
第四章:通过移动 DevOps 实现持续集成与交付
在持续交付中,移动应用中的代码更改会自动进行构建、测试和发布。借助移动 DevOps,软件开发人员、测试人员、发布经理和 DevOps 工程师携手合作,以提升移动应用开发的速度和质量。当这些实践结合时,移动应用的交付可以实现持续交付。
本章将讨论以下主题:
-
选择 CI/CD 提供商时需要考虑的因素
-
选择 CI/CD 提供商
-
为移动应用实施 CI/CD 流水线
-
为移动应用设置构建和单元测试
介绍
移动应用的 CI/CD 是一个能够让组织快速高效地发布和更新其移动应用的过程。它还允许团队快速测试和发布他们的移动应用,确保代码的稳定性、安全性和最新性。此外,它还允许团队快速解决在移动应用中发现的任何漏洞或问题。
在快速发展的移动应用开发领域,持续集成(CI)和持续部署(CD)已成为优化开发流程、提高代码质量和实现快速迭代发布的关键实践。本章将探讨 CI/CD 在移动应用开发中的重要性,阐明其好处,并通过实际案例展示它对移动开发生命周期的影响。
如在第三章《移动 DevOps 基础》中提到的,我们将讨论如何在移动 DevOps 中实施 CI 和 CD 的步骤,但首先,让我们讨论如何选择适合您团队规模和业务需求的移动应用 CI/CD 提供商:
图 4.1 – 持续集成工作流程
我们将从 CI 部分开始,自动化构建和测试过程,内容包括以下内容:
-
为移动应用选择 CI/CD 提供商
-
为移动应用设置 CI 服务器
-
为移动应用设置构建和单元测试
在此之前,让我们讨论如何为移动应用选择 CI/CD,如何与市场上最受欢迎的 CI/CD 提供商一起设置 CI 服务器,以及每个提供商的优缺点。
选择适合您移动应用的 CI/CD 提供商至关重要,以确保开发、测试和发布过程的顺利进行。选择移动应用开发项目的 CI/CD 提供商时需要考虑以下因素:
-
平台支持:确保 CI/CD 提供商支持您的应用所针对的平台(例如,iOS、Android、React Native、Flutter 等)。某些提供商专注于单一平台,例如 Xcode Cloud,而其他一些提供商支持多个平台,例如 Bitrise。如果您的团队正在构建多个移动应用,请考虑这个因素。
-
性能和可靠性:提供商应能提供高性能、最小的停机时间和快速的构建时间。例如,CI/CD 平台提供了洞察和指导功能,用以跟踪我们的 CI/CD 性能和健康状态。这将确保一个顺畅且高效的开发过程。
-
构建配置和环境:选择适合你移动应用的 CI/CD 提供商时,要考虑可用的构建配置和构建环境选项。寻找具有灵活构建流水线和可定制环境的提供商,以支持你项目的需求。这些功能能够节省时间和精力,同时确保高效的构建过程和成功的项目部署。例如,大多数公司都在构建白标应用,这些应用需要使用不同的配置进行构建,以便能够在不同的值下复用相同的构建流水线。
-
可扩展性:扩展和发展你的团队需要考虑此因素,确保 CI/CD 提供商能够处理日益增长的复杂性、构建频率和应用开发人员的数量。你的提供商应提供可扩展的基础设施和资源,以满足你不断增长的需求,有时还需为你的团队提供专用机器,或者更换机器类型和技术规格。
-
集成:提供商应能与现有工具无缝集成,如版本控制系统、项目管理工具、缺陷跟踪工具、云工具、监控工具或特性标记工具,以便能够衡量整个移动 DevOps 过程的成功。
-
安全性和合规性:提供商应遵循严格的安全标准,并提供加密、访问控制和审计日志等功能。确保提供商支持你的应用符合特定的合规性要求,特别是如果它是云提供商,并且你的数据和客户的数据将存储在云中,例如在电子银行应用中。
-
易用性:选择一个具有用户友好界面、全面文档和良好支持的提供商。如果你遵循这些步骤,CI/CD 流水线就可以更容易地设置、维护和故障排除;例如,Bitrise 和 Codemagic 提供了构建流水线的 GUI。
-
社区和支持:通过一个活跃的社区和强大的客户支持,你可以轻松解决问题并得到答复。你可以通过专业论坛、支持渠道或社区论坛了解是否提供专业服务或咨询。
-
定价:在我看来,这个因素非常重要,即使 CI/CD 提供商在购买工具时有不同的功能,各种因素也会影响这个决策,因此在考虑每月构建次数、并行构建、构建分钟数和存储等因素时,你需要比较不同 CI/CD 提供商的定价计划。最好的提供商会在不妥协功能的情况下,为你的预算提供最大价值。
因此,选择 CI/CD 提供商最终是一个需要团队根据业务和团队需求做出的决定。
六个最受欢迎的移动应用 CI/CD 提供商概述
在讨论了需要考虑的因素后,我们来看看移动 CI/CD 市场上可用的 CI/CD 提供商。以下是六个最受欢迎的移动 CI/CD 提供商:
-
Bitrise
-
Codemagic
-
GitHub Actions
-
Xcode Cloud
-
Visual Studio App Center
-
Ionic AppFlow
要找到最适合你的移动应用项目的提供商,你需要根据前述因素评估每个提供商。
Bitrise
Bitrise (bitrise.io/
) 是一个基于云的 CI/CD 平台,专门为移动应用开发设计。它简化了构建、测试和部署 iOS、Android 和跨平台应用的过程,帮助开发者确保他们的应用可靠且高质量:
图 4.2 – Bitrise 主页
Bitrise 的移动优先策略使其成为移动应用开发者的 CI/CD 解决方案,并提供专门针对移动开发工作流的功能和工具。
Bitrise 与流行的版本控制系统(如 GitHub、GitLab、自托管 GitLab 和 Bitbucket)以及移动应用开发工具(如 fastlane、Xcode 和 Android SDK)无缝集成,如图 4.3所示:
图 4.3 – Bitrise 的版本控制系统
Bitrise 的可视化工作流编辑器允许开发者轻松设计和配置他们的 CI/CD 管道,而无需手动编辑配置文件,如图 4.4所示:
图 4.4 – Bitrise 的工作流编辑器
Bitrise 提供了广泛的预构建和社区步骤,可以轻松添加到工作流中,简化了设置常见移动应用开发任务的过程,如图 4.5所示:
图 4.5 – Bitrise 的集成步骤
Bitrise 支持 iOS 模拟器和 Android 模拟器,简化了在各种设备和环境中测试移动应用的过程。
该平台提供免费的(爱好者)计划,包含 90 分钟的构建时长、每月 300 个积分,并支持最多 5 个同时构建,使用 macOS M1 虚拟机,使其对小型项目和个人用户具有成本效益。
升级到高级计划可以为大型项目或团队提供更频繁或更长时间的构建。然而,Bitrise 的定价可能会对需要额外构建能力或功能的大型团队或项目来说较为昂贵。
通过与知名应用商店和测试服务(如 Google Play、Apple App Store 和 TestFlight)的无缝集成,Bitrise 简化了发布流程。
开发人员可以利用 Bitrise Insights 来识别并解决瓶颈,优化构建流程,并更有效地使用积分。
数据和配置设置可以安全存储,确保未经授权的人员无法访问。通过使用 Bitrise 的团队管理功能,开发人员可以在项目中协作并控制对特定工作流和环境的访问。
示例
让我们来看一个关于为 Android 创建 Bitrise 应用并进行配置的示例。
前提条件
你需要以下内容:
-
一个 Bitrise 账户 (
app.bitrise.io/users/sign_up
) -
一个 GitHub 账户 (
github.com/join
) -
一个 Android 应用
-
一个 Google Play Console 账户或 Apple Developer ID,以便将来可以将你的移动应用发布到相关的应用商店
让我们开始吧!
开始使用
请按照以下步骤操作:
- 要开始使用 Bitrise for Android,你需要选择 添加新应用,如 图 4.6 所示:
图 4.6 – 添加新应用
- 然后,选择工作区类型,以指定应用是否具有私人或公共访问权限,如下图所示:
图 4.7 – 选择应用的隐私设置
- 下一步是从提供商(如 GitHub)选择仓库,如下图所示:
图 4.8 – 选择仓库
- 然后,选择添加 SSH 密钥,以便能够访问源代码,如下图所示:
图 4.9 – 添加 SSH 密钥
- 从列表中选择分支名称,并选择 是,自动检测配置 选项,让 Bitrise 自动检测应用程序类型,如下图所示:
图 4.10 – 选择分支
- Bitrise 将检测到该应用为 Android 应用,并会提供适当的机器类型和堆栈。现在,你可以添加应用模块和变体,如下图所示:
图 4.11 – 选择应用模块
这是项目配置,包括 Android 堆栈和所有其他信息:
图 4.12 – 确认配置
- 下一屏幕将是应用图标。在这里,你可以上传自定义图像或使用应用程序目录中的图标,如下图所示:
图 4.13 – 应用图标
- 接下来,你必须注册一个 webhook 并触发第一次构建,如图 4.14和图 4.15所示:
图 4.14 – 注册 webhook
图 4.15 – 运行第一次构建
- 第一次构建将开始。此时,你可以查看构建日志和构建的详细信息,如下图所示:
图 4.16 – 构建日志详情
- 一旦构建完成,你可以检查构建的状态,查看它是成功还是失败,如下图所示:
图 4.17 – Bitrise 上的成功构建
- 之后,你可以点击工作流编辑器按钮,查看或修改 CI 工作流,添加或移除步骤,如下图所示:
图 4.18 – Android 工作流
- 在工作流编辑器区域,你可以配置触发映射,或根据 Gitflow 运行工作流时的条件,例如在每次拉取请求、新标签或推送新代码时运行,具体如下图所示:
图 4.19 – 如何在 Bitrise 上触发构建
- 此外,你还可以为任何第三方工具或服务(如 Slack webhook)添加秘密环境变量,如图 4.20和图 4.21所示:
图 4.20 – 添加秘密环境变量
图 4.21 – 添加 Slack webhook
- 你还可以更改堆栈和机器类型,如下图所示:
图 4.22 – 更改堆栈和机器类型
- 如果工作流中包含任何单元测试或 UI 测试,你可以在测试报告插件中访问自动生成的测试结果,如下图所示:
图 4.23 – 测试报告插件
Bitrise 还具有一个 bitrise.yml
文件,用于保存你在 yml
文件中的所有配置;你可以将其与源代码一起保存,或者保存在 Bitrise 网站上。以下是一个 bitrise.yml
文件的示例链接:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/bitrise.yml
。
注意
其他应用程序,如 iOS、macOS、Flutter、React Native、Ionic 和 Cordova,使用相同的流程,但步骤会根据类型有所不同。
Codemagic
Codemagic (codemagic.io/start/
) 是一个完全托管在云端的 CI/CD 解决方案,专为移动应用开发设计,特别强调跨平台项目。
该平台简化了构建、检查和发布 iOS、Android 以及跨平台应用程序的过程,使开发者能够高效地生产高质量的移动应用程序。本分析将涵盖 Codemagic 的优点、缺点和功能,并比较 Codemagic 与市场上其他 CI/CD 解决方案的表现:
图 4.24 – Codemagic 首页
开发者可以通过用户界面或高度可定制的codemagic.yaml
文件轻松配置 Flutter 构建,从而在 Android、iOS、Web 和桌面平台上创建应用程序。
Codemagic 无缝集成了 GitHub、GitLab 和 Bitbucket 等知名版本控制系统,并兼容各种应用商店、beta 测试服务和通知工具。
该平台简单的设置过程使开发者能够快速建立他们的 CI/CD 管道,而无需深入的技术知识。
通过 Codemagic,开发者可以使用 YAML 配置文件或基于 Web 的配置编辑器设计自定义工作流,赋予 CI/CD 过程更多灵活性和控制权。
该平台提供慷慨的免费套餐,包括每月 500 分钟的构建时间、120 分钟的构建超时限制和 macOS M1 虚拟机,适合小型项目和个人开发者,但需要启用计费才能使用完整功能。
Codemagic 提供专门支持 Flutter 项目的功能,自动检测项目设置并应用构建和测试 Flutter 应用程序的优化。
该平台支持 iOS 模拟器和 Android 模拟器,使开发者能够在各种设备和配置上评估他们的移动应用程序。
Codemagic 与 Google Play 和 Apple App Store 等流行的应用商店以及 TestFlight 等 beta 测试服务集成,简化了部署流程。
敏感数据和配置设置可以安全存储,确保不会在日志中泄露或被未经授权的用户访问。
Codemagic 还包括无限的团队席位和访问管理功能,方便项目协作,并允许开发者控制对特定工作流和环境的访问。
示例
在这个示例中,我们将使用 Codemagic 构建和测试一个 Flutter 应用程序,并根据我们的需求进行配置。
前提条件
你将需要以下内容:
-
Codemagic 账户 (
codemagic.io/signup
) -
GitHub 账户 (
github.com/join
) -
Flutter 应用程序
-
一个 Google Play Console 账户或 Apple Developer ID,以便之后将你的移动应用发布到相关的应用商店
让我们开始吧!
开始使用
按照以下步骤操作:
- 创建账户后,你可以开始在 Codemagic 上设置你的第一个应用程序,方法是选择仓库和项目类型,如下图所示:
图 4.25 – 选择仓库和项目类型
- 接下来,在 工作流编辑区,选择你偏好的配置,例如来自你的 Flutter 应用的 iOS、Android 或两者,以及你的机器类型,如 图 4.26 和 图 4.27 所示:
图 4.26 – Codemagic 的工作流编辑区
图 4.27 – Codemagic 上的机器类型
- 然后,你可以配置构建触发器,或者在测试失败时让构建失败,如 图 4.28 和 图 4.29 所示:
图 4.28 – 构建触发器
图 4.29 – 配置测试
- 接下来,你可以配置 Android 的 Flutter 配置,包括 Flutter 版本、项目路径 和 Android 构建格式,如下图所示:
图 4.30 – 指定 Flutter 配置
- 然后,你可以设置通知,并选择是否需要发送电子邮件或 Slack 通知,如下图所示:
图 4.31 – 配置通知
- 现在,你可以通过选择工作流名称和分支名称来触发第一次构建,如下图所示:
图 4.32 – 启动新构建
- 现在,你可以查看构建日志及其状态,如 图 4.33 和 图 4.34 所示:
图 4.33 – 构建视图
图 4.34 – 构建成功
使用 Codemagic,类似于 Bitrise,你可以通过 codemagic.yml
文件将 .yaml
文件保存在 Codemagic 网站上,如 图 4.35 和 图 4.36 所示:
图 4.35 – 从工作流编辑区将设置更改为 codemagic.yaml
图 4.36 – YAML 文件
这是一个通过 iOS 和 Android 构建 Flutter 的 YAML 文件示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/codemagic.yml
。
GitHub Actions
GitHub Actions (github.com/features/actions
) 是一个自动化平台,旨在通过启用 CI/CD 工作流来简化移动开发:
图 4.37 – GitHub Actions 首页
作为 GitHub 生态系统的一部分,GitHub Actions 与平台紧密集成,使得移动开发者可以轻松设置并使用他们现有的代码库。
GitHub Actions 允许开发者使用简单的 YAML 语法创建自定义工作流,从而实现高度特定和复杂的自动化任务。尽管在 CI 构建过程中提供了一个图形用户界面(GUI)来显示步骤和连接,但目前使用 Codemagic 或 Bitrise 等图形平台构建工作流并不可行:
图 4.38 – 应用程序仓库中的工作流文件夹
GitHub Actions Marketplace 提供了社区贡献的各种预构建操作,这些操作可以轻松地集成到工作流中,从而节省时间和精力。
GitHub Actions 支持多种平台,包括 Windows、macOS 和 Linux,类似于 Codemagic,使得移动开发者可以在多个环境(如 Flutter 应用)上测试和发布项目。您可以从单一代码库构建和发布移动、Web 和桌面应用程序:
图 4.39 – GitHub Actions 中的机器类型
GitHub 提供自托管的运行器,您可以自定义环境以在 GitHub Actions 工作流中运行任务。
它提供了慷慨的免费额度,对于个人和组织的私有仓库,每月提供 2,000 分钟的使用时间。然而,较大的项目和团队可能很快就会超过分配的分钟数,并需要升级到付费计划。
此外,GitHub 提供了一些功能,如 Codespace,它是一个具有灵活计算和预配置容器的云开发环境,包存储,GitHub 问题(如错误或安全问题)和项目管理,以及新的 GitHub Copilot 插件,可以在编辑器中提供整行或整个函数的建议。
对于不熟悉 YAML 或 CI/CD 概念的用户来说,设置 GitHub Actions 可能需要一定的学习曲线。由于 GitHub Actions 是 GitHub 生态系统的一部分,迁移到其他版本控制平台可能会遇到挑战。
虽然 Marketplace 提供了许多预构建的操作,GitHub Actions 可能不支持某些第三方服务,用户需要创建自定义操作或寻找替代解决方案。
GitHub Actions 支持多种触发器,包括推送、拉取请求、问题创建和计划事件。这个功能让开发人员可以同时在多个版本的编程语言、平台和配置上测试代码。
缓存是 GitHub Actions 提供的另一个功能。它允许你缓存依赖项,加速构建时间,减少资源使用。GitHub Actions 存储构建工件和日志,使得访问和与团队成员共享结果变得更容易。
除了提供安全性,GitHub 还包括代码扫描、秘密扫描、依赖项审查(带有 dependabot 警报),以及防止敏感数据或配置设置在日志中泄露或与未授权人员共享的功能。
示例
让我们看一个为 Android 应用设置 GitHub Actions 的例子,以便构建并运行单元测试和 lint 测试。
前提条件:
-
一个 GitHub 账户(
github.com/join
) -
一个 Android 应用
-
你需要一个 Google Play 控制台帐户或 Apple Developer ID,才能将你的移动应用发布到相关的应用商店。
让我们开始吧!
开始使用
让我们开始吧:
- 如果你已经有一个 Android 应用,可以点击Actions按钮开始使用 GitHub Actions,如下图所示:
图 4.40 – 开始使用 GitHub Actions
- 点击
Android
找到这个模板,如下图所示:
图 4.41 – 默认的 gradle.yaml 文件
- 在提交更改后触发构建。GitHub Actions 将启动新的构建。此时,你可以查看日志,如图 4.42和图 4.43所示:
图 4.42 – 构建日志视图
图 4.43 – 构建成功
这是一个 GitHub Actions Android CI YAML 文件示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/.github/workflows/android.yml
。
示例
在下一个例子中,我们将为 iOS 应用设置 GitHub Actions,以便我们可以构建该应用并运行必要的单元测试:
图 4.44 – 开始使用 iOS 应用
这是一个 iOS 应用的 YAML 文件示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/.github/workflows/iOS.yml
。
注意
如果你的应用不包含 podfile,可以删除安装 CocoaPods 步骤。
Xcode Cloud
Xcode Cloud (developer.apple.com/xcode-cloud/
) 是苹果构建的 CI/CD 服务,直接集成到 Xcode 开发环境中。它旨在简化 iOS、macOS、watchOS 和 tvOS 应用的构建、测试和部署过程:
图 4.45 – Xcode Cloud 首页
Xcode Cloud 完全集成到 Xcode 开发环境中,为苹果开发者提供无缝的体验。
与 Xcode 的集成意味着设置 CI/CD 流程非常简单,几乎不需要配置。
使用 Xcode Cloud,您必须拥有 Apple Developer Program 会员资格。
Xcode Cloud 提供免费版,但每月仅包含 25 小时的计算时间。Xcode Cloud 为构建和测试苹果平台应用进行了优化,确保最佳性能和兼容性。它支持在多个设备和配置之间并行测试,加速测试过程,提高整体效率。
作为苹果的服务,Xcode Cloud 旨在保护源代码和构建工件,贯穿整个 CI/CD 过程。Xcode Cloud 专门为苹果平台设计,因此不适用于 Android 或其他非苹果平台的应用开发。
Xcode Cloud 与 Xcode 的紧密集成可能会限制其与更通用的 CI/CD 解决方案相比可用的自定义程度。
由于 Xcode Cloud 集成了 Xcode,开发者如果偏好其他开发环境,可能会觉得它不太吸引人。
特性
Xcode Cloud 提供自动化的代码诊断功能,帮助您识别问题并提供改进建议。
Xcode Cloud 与 App Store Connect 集成,简化了将应用分发给测试人员并提交到 App Store 的过程。它支持团队协作,允许团队成员共同参与项目,分享结果并协调工作。
示例
让我们看一个使用 Xcode Cloud 构建、测试和归档 iOS 应用的示例。
前提条件:
您需要具备以下条件:
-
一个 Apple Developer ID,用于发布您的移动应用到 App Store
-
一个 GitHub 账户 (
github.com/join
) -
一个 iOS 应用
让我们开始吧!
入门
按照以下步骤操作:
- 要开始使用 Xcode Cloud,请在 Xcode 中打开 iOS 应用,点击左侧菜单中的 报告导航器,然后点击 开始使用 Xcode Cloud。之后,您必须选择一个产品,即您要构建的应用:
图 4.46 – Xcode Cloud 在 Xcode IDE 内部
- 此时,工作流编辑器区域将打开。在这里,您可以根据需要修改步骤,如 图 4.47 和 图 4.48 所示:
图 4.47 – 工作流程编辑区域
图 4.48 – 编辑工作流程
- 您可以为您的 iOS 应用添加不同的步骤,如构建、测试、分析和存档,如下图所示:
图 4.49 – 添加不同步骤,如测试和分析
- 接下来,您需要将 Xcode Cloud 连接到 GitHub 存储库,以便访问您的源代码并安装 Xcode Cloud 应用,如 图 4**.50、图 4**.51 和 图 4**.52 所示:
图 4.50 – 授予访问源代码的权限
图 4.51 – 将 Xcode Cloud 与 GitHub 连接
图 4.52 – 安装 Xcode Cloud 应用
- 选择您的存储库用于 Xcode Cloud 应用,如下图所示:
图 4.53 – 选择存储库
- 接下来,您可以通过 App Store Connect 从 Xcode Cloud 创建一个应用记录,以便发布应用到 App Store(如果您没有现有的),如下图所示:
图 4.54 – 在 App Store Connect 上创建应用
- 现在,您可以通过选择分支名称并单击 开始构建 按钮来启动构建,如下图所示:
图 4.55 – 开始构建
- 您现在可以通过 Xcode IDE 查看构建日志,如下图所示:
图 4.56 – 构建视图
- 一旦构建完成,您可以检查其状态,查看是否成功完成:
图 4.57 – 成功构建
- 另外,您可以查看日志和测试工件中的测试结果,如图 4**.58 和 图 4**.59 所示:
图 4.58 – 测试 - iOS 视图
图 4.59 – 存档 - iOS 视图
注
Xcode Cloud 的工作流程中没有 YAML 文件。但是,您可以从 Xcode IDE 或 App Store Connect 修改或访问工作流程,如下图所示:
图 4.60 – Xcode Cloud 在 App Store Connect 上
Visual Studio App Center
Visual Studio App Center(appcenter.ms/
)是由微软开发的专为移动应用开发设计的基于云的 CI/CD 平台。
它支持 iOS、Android、React Native 和 Xamarin 项目,简化了构建、测试、分发和监控移动应用的过程。本节将讨论 Visual Studio App Center 的优缺点和功能,以及它与市场上其他 CI/CD 解决方案的比较:
图 4.61 – App Center 首页
该平台拥有用户友好的设置过程,使开发者能够快速建立 CI/CD 管道。你可以与广泛使用的版本控制系统(如 GitHub、Bitbucket 和 Azure Repos)集成,并连接应用商店和 Beta 测试服务。
App Center 使得在云端设备上进行自动化测试成为可能,帮助开发者验证在多个目标平台间的兼容性和性能。尽管对于需要更多构建能力或功能的大型团队或项目来说,其定价可能较高,但其简化的设置过程弥补了这一缺点。然而,它可能缺乏其他 CI/CD 平台提供的自定义选项。
由于 App Center 专注于移动应用开发,因此它可能不是非移动或 Web 开发项目的理想选择。该平台简化了构建和签名 iOS 和 Android 应用的过程,确保发布过程中的一致性。它支持在云端的各种真实设备上进行测试,保证在目标平台间的兼容性和性能。
App Center 简化了将应用分发给 Beta 测试者、应用商店或企业环境的过程,并支持 空中下载 (OTA) 更新。此外,它提供崩溃报告和分析功能,使开发者能够实时监控应用性能并检测问题。最后,该平台还管理并推送通知给用户,支持细分和定向推送。
示例
让我们学习如何为 Android 应用设置 Visual Studio App Center。
前提条件
你需要以下内容:
-
一个 App Center 账户 (
appcenter.ms/create-account
) -
一个 GitHub 账户 (
github.com/join
) -
一个 Android 应用
-
一个 Google Play Console 账户或 Apple Developer ID,以便稍后将你的移动应用发布到相关的应用商店
开始吧!
开始使用
按照以下步骤操作:
- 创建 App Center 账户后,下一步是通过选择应用类型并连接源代码提供商来添加新应用,如 图 4.62 和 图 4.63 所示:
图 4.62 – 添加新应用
图 4.63 – 连接源代码服务
- 接下来,选择应用模块、变体和其他配置选项,然后点击 保存并构建 按钮以启动新的构建,如 图 4.64 和 图 4.65 所示:
图 4.64 – 配置构建
图 4.65 – 运行构建
注意
使用 App Center 的工作流没有 YAML 文件;你只能从网站修改或访问工作流。
Ionic AppFlow
Ionic AppFlow (ionic.io/appflow
) 是一个基于云的 CI/CD 平台,专门为使用 Ionic 框架进行移动应用开发而设计。它简化了构建、测试和部署基于 Ionic 构建的 iOS、Android 和 渐进式 Web 应用 (PWA) 的过程,帮助开发人员高效地交付高质量的应用:
图 4.66 – AppFlow 首页
Ionic AppFlow 专为 Ionic 框架项目设计,提供了专门的功能和增强功能,用于构建和部署 Ionic 应用。该平台简化了设置过程,使开发人员能够高效地配置 CI/CD 管道,而无需深入的技术专长。支持实时更新,允许将更改和 bug 修复直接部署到用户设备,而无需通过应用商店审核。
Ionic AppFlow 无缝集成了流行的版本控制系统,如 GitHub、GitLab 和 Bitbucket,以及应用商店、测试服务和通知工具。它还自动化了 iOS 和 Android 的构建过程,简化了移动应用的部署。
然而,Ionic AppFlow 对 Ionic 框架的专注可能不适合非 Ionic 或非移动应用开发项目。与其他 CI/CD 解决方案相比,它的定价对于需要额外构建能力或功能的大型团队或项目来说可能较为昂贵。虽然它简化了设置过程,但 Ionic AppFlow 可能缺少其他 CI/CD 平台的定制选项。
喜欢其他移动应用开发框架的开发人员,可能会觉得 Ionic AppFlow 对于非 Ionic 项目的专注性较低,从而不那么吸引人。尽管如此,它仍提供专门的支持,并且经过优化,适合构建和部署 Ionic 应用。
Ionic AppFlow 自动生成 iOS 和 Android 构建版本,供通过应用商店或内部测试进行分发,并直接将更新和 bug 修复部署到用户设备,而无需应用商店下载。
示例
让我们来学习如何为 Ionic 应用设置 Ionic AppFlow。
前提条件
你必须具备以下条件:
-
一个 AppFlow 账户 (
ionic.io/signup?source=appflow&product=appflow
) -
一个 GitHub 账户 (
github.com/join
) -
一个 Ionic 应用
-
一个 Google Play 控制台账户或 Apple 开发者 ID,以便将来能够将你的移动应用发布到相关应用商店
开始吧!
开始使用
按照以下步骤操作:
- 创建账户后,你可以开始创建一个新应用或将现有应用导入 AppFlow,如下图所示:
图 4.67 – 添加新应用或导入现有的 Ionic 应用
- 接下来,点击创建你的第一个构建,如下面的图所示:
图 4.68 – 创建你的第一个构建
- 接下来,选择应用类型,例如 Android,然后选择堆栈和构建类型。然后,点击构建按钮,如下面的图所示:
f
图 4.69 – 选择要构建的应用
- 一旦构建开始,你可以查看构建的日志视图和构建状态,如下面的图所示:
图 4.70 – 构建日志视图
现在,我们已经讨论了针对移动应用的不同 CI/CD 提供商及其工作原理,我们可以创建一个工作流来构建、测试和发布移动应用。现在你对移动 DevOps 和哪种 CI/CD 提供商适合你的应用、业务、团队以及前面提到的预算有了更好的理解。
注意
此外,市场上还有不同的 CI/CD 提供商,但它们并非专注于移动端,例如 CircleCI、GitLab、Azure Pipelines(DevOps)和 Jenkins。如果其他团队已经在后端和 Web 应用程序中使用其中的某一个,某公司可能会选择其中之一。
在前面的示例中,我们快速覆盖了集成到工作流或管道中的测试步骤,因为在第五章,实施健全的移动应用测试策略中,我们将深入探讨测试,从设计测试策略到在 CI/CD 管道中运行不同类型的测试。当我们继续学习第六章,移动应用发布管理时,我们将完成 CI/CD 周期,并进一步了解应用发布的内容。
总结
移动应用的 CI/CD 是一种可以帮助组织快速高效地发布和更新其移动应用程序的过程,确保代码稳定、安全并且是最新的。
选择合适的 CI/CD 提供商对于确保无缝的开发、测试和发布过程至关重要。我们探讨了移动 CI/CD 市场上最流行的 CI/CD 提供商,包括 Bitrise、Codemagic、GitHub Actions、Xcode Cloud、Visual Studio App Center 和 Ionic AppFlow。
每个服务提供商提供独特的功能、定价方案和支持级别,选择一个满足团队特定需求的提供商是至关重要的。
需要考虑的一个关键因素是平台支持,确保所选的提供商支持应用程序所针对的平台。例如,一些提供商专注于单一平台,如 Xcode Cloud,而其他提供商则支持多个平台,如 Bitrise。组织还应考虑性能和可靠性、构建配置与环境、可扩展性、集成、安全性、易用性、社区支持以及定价。
我们还讨论了实施 CI 并提供了详细步骤,介绍了为移动应用设置不同 CI 服务器的过程,包括设置必要的构建和单元测试。
在接下来的几章中,我们将继续迈向实现完整 CI/CD,包括测试自动化、发布管理和 DevSecOps。
第五章:实施强大的移动应用测试策略
如前几章所讨论的,移动应用已成为我们日常生活的一部分。随着智能手机和平板电脑的普及,开发和交付跨不同设备和平台提供无缝用户体验的移动应用变得至关重要。移动应用测试涉及测试应用的不同方面,包括其功能、性能、安全性、可用性和兼容性。此外,还应在各种设备、操作系统和网络配置下进行测试,以确保应用能够在所有可能的场景中无缝运行。
毫无疑问,移动应用测试在确保应用表现良好、蓬勃发展并具有积极用户体验方面起着至关重要的作用。通过投入时间和资源进行测试,开发者更有可能开发出响应迅速的应用并提供卓越的用户体验。
移动应用在移动 DevOps 中的测试自动化就像汽车的轮子——它为项目提供必要的牵引力,使项目能够高效推进并最小化风险。有了它,你将能够顺利到达目的地。
然而,由于设备、操作系统和网络配置的多样性,开发和测试移动应用可能具有挑战性。在本章中,我们将讨论如何实施一个强大的移动应用测试策略,帮助你交付高质量的移动应用,内容包括以下主题:
-
理解移动应用测试
-
移动应用测试自动化的重要性
-
移动应用测试的挑战和陷阱
-
什么是移动应用测试策略?
-
移动应用的测试工具、框架和服务
-
移动应用的 UI 和功能测试
-
在云设备上的测试
-
人工智能(AI)和机器学习(ML)如何改变移动测试
-
测试用例管理
-
实现成功的移动测试覆盖
让我们从理解移动应用测试开始。
理解移动应用测试
移动应用测试涉及测试应用的不同方面,包括功能、性能、安全性、可用性和兼容性。此外,还应在各种设备、操作系统和网络配置下进行测试,以确保应用能够在所有可能的场景中无缝运行。移动应用应在发布前后进行测试,以便识别和修复任何可能影响用户体验的漏洞和新特性。
首先,让我们讨论一下软件开发和移动开发中的不同测试层级。
测试层级
软件开发领域正在不断发展,特别是在移动开发领域。这是因为我们始终在努力引入新的改进功能和技术,以更好地帮助我们的客户完成日常任务。因此,所有移动开发者都需要将测试作为必要的实践,以确保所有功能按预期运行。
测试有多种类型,每种类型都有其独特的范围。通常,我们使用测试金字塔作为参考来对这些类型进行分类。
单元测试
这些测试专注于具有单一责任的独立组件。实际上,这是测试的最低级别。在这个测试级别中,开发者会验证一组必须为真的条件,以及一些需要为假的条件。
假设我们正在开发一个计算器应用——开发者会验证点击加号(+)按钮时会发生什么,且预期结果会被精确地定义。
作为代码单元,单元测试无法检测集成错误或系统级错误,这些会在集成测试和端到端(E2E)测试中覆盖。
在验证程序的不同方面时,单元测试可以用来查找以下内容:
-
预期情况或“理想路径”
-
边界情况
-
边界条件
-
程序逻辑
在 iOS 中,我们可以使用 XCTest 框架来为我们的 Xcode 项目编写单元测试,它与 Xcode 的测试工作流程无缝集成。
在 Android 中,单元测试会被编译以在 Java 虚拟机(JVM)上执行,从而减少执行时间。如果你的测试依赖于 Android 框架中的对象,可以使用 Robolectric (robolectric.org/
) 工具。在测试依赖项时,可以利用模拟对象来模拟这些依赖项的预期行为。
在 Flutter 中,可以使用 test
包编写单元测试,使用 flutter_test
包测试组件。
在 React Native 中,开发者使用像 Jest (jestjs.io/
) 这样的测试框架以及像 React Testing Library (testing-library.com/docs/react-testing-library/intro/
) 这样的测试工具来便于单元测试。
在编写高效的单元测试时,有一些标准需要记住:
-
测试应当快速高效。
-
测试必须完全自动化,并且只应显示“通过”或“失败”结果。
-
测试应当是独立的,彼此隔离,意味着它们不应共享状态。
-
建议在编写生产代码之前先编写测试。这就是所谓的测试驱动 开发(TDD)。
单元测试和代码覆盖率
代码覆盖率测试的目的是确定有多少代码被测试。可以使用以下公式来计算它:
Code Coverage Percentage = (Number of lines of code executed)/(Total number of lines of code in an application) * 100
以下是单元测试中使用的不同代码覆盖技术:
-
语句覆盖率
-
决策覆盖率
-
分支覆盖率
-
条件覆盖率
还有其他不同的代码覆盖率工具,例如以下几种:
-
JaCoCo (
docs.gradle.org/current/userguide/jacoco_plugin.html
) 可以为 Android 单元测试生成 HTML 报告,并与持续集成服务器集成。 -
Flutter Console Coverage Test (
pub.dev/packages/test_cov_console
) 是一个 Dart 工具,用于生成 Flutter 覆盖测试报告。 -
dlcov (
pub.dev/packages/dlcov
) 是一个命令行工具,用于验证代码覆盖率的阈值。 -
SonarQube (
www.sonarsource.com/products/sonarqube/
) 与多种构建系统集成,并支持 Android 项目。它提供一个全面的质量分析平台,包括代码覆盖率指标。 -
Codecov (
about.codecov.io/
) 是一个提供各种编程语言代码覆盖解决方案的服务,包括移动应用开发平台。它可以与 CI/CD 管道集成,收集并展示覆盖率报告。
另一种可以与单元测试一起使用的技术,以提高代码库质量的是 TDD。让我们来探索一下这个概念及其优势。
测试驱动开发
TDD 是一种与传统方法不同的测试方法。TDD 不是等到代码或功能完全开发完成再进行测试,而是根据功能需求创建测试,然后编写代码以确保测试通过,具体过程如图所示:
图 5.1 – TDD 如何工作
使用 TDD 是一种极为宝贵的技术,它可以提高代码库的内部质量。它还是训练你和你的团队以有纪律的方式设计更好软件的一个重要工具。
这是 TDD 过程的概述及其工作方式:
-
编写测试。在这个阶段,开发者为他们想要添加的每个功能编写测试。这些测试作为新代码必须满足的要求,首先编写它们可以确保开发者在编写代码之前就考虑到潜在的问题。
-
运行测试并故意使其失败。此步骤确认测试有效,并且需要新代码。
-
编写通过失败测试的代码。虽然代码可能并不完美,但它必须满足测试要求。如果失败,代码必须被修正,直到它通过测试,并确保新代码不会破坏任何现有功能。
-
重构代码,以提高可读性和可维护性。在这个阶段运行测试,确保功能得以保持。
-
对每个功能模块重复步骤 1的过程。
TDD 的好处是什么?
通过在编写代码之前编写测试,TDD 挑战我们更清晰、批判性地思考我们试图解决的问题。
将问题分解为更小的部分会导致更模块化的代码,从而最终产生更高质量的代码,并降低维护成本。
总结来说,TDD 的好处如下:
-
提高代码质量
-
给开发者信心去做出更改
TDD 的缺点是什么?
虽然 TDD 可以提高软件质量,但它也有缺点。一些开发者对这种方法表示担忧,并认为它并不总是最佳选择。
主要的批评意见是 TDD 可能会减慢开发进度,并增加额外的代码维护工作。
什么时候应该避免使用 TDD?
虽然 TDD 帮助团队在早期优先关注代码库的内部质量,但它并不是唯一的方式。是否采用 TDD 应该取决于项目的实际情况和周围环境。
下面是一些可能不适合使用 TDD 的场景或情况:
-
在进行实验或创建概念验证时
-
在处理语言/框架方法时
-
在进行 GUI 开发时
是选择 TDD 还是不选择 TDD
实施 TDD 涉及到文化和测试实践的根本转变,需要工程团队和管理层的支持。
如果你在一个使用大量遗留代码的组织中工作,你可能会好奇 TDD 如何能为你带来好处。虽然它可能不会影响现有的代码库,但你可以逐步将 TDD 整合到新的功能和 bug 修复中,随着时间的推移,代码库会得到改善。
集成测试
这些测试旨在检查各个组件的集成。这个过程确保应用程序的不同层次,如 UI、业务逻辑、数据存储和外部服务,能够无缝地协同工作。集成测试有助于发现由于这些不同部分之间的交互而可能出现的问题。
验收/E2E 测试
验收测试侧重于验证移动应用是否满足规定的需求并准备好发布。其目标是确保应用与预期功能、用户期望和业务需求保持一致。
E2E测试侧重于测试应用程序的完整流程,通常跨越多个组件和系统。在移动应用的背景下,E2E 测试确保应用的所有不同部分能够无缝地协同工作,从 UI 到后端系统。
TDD 与单元测试的区别
单元测试包括编写许多小的测试,每个测试针对一个非常简单的函数或对象的行为。TDD 是一种思维过程,它通过单元测试的方式得以实现,“以测试为思维”通常会导致更加细粒度、全面的测试,并使软件设计更易于扩展。
让我们继续了解更多关于移动应用测试的类型。
移动应用测试的类型
在移动应用测试中,有多种测试类型可以确保你的应用程序健壮、可靠并提供卓越的用户体验。以下是一些最常见的移动应用测试类型:
-
功能测试:此项测试旨在确定应用程序的功能是否符合要求并按预期工作。它涉及测试应用程序的各个方面,例如 UI、导航、数据处理和业务逻辑。
-
回归测试:此项测试确保新功能或更改不会影响应用程序的功能性。回归测试检查在引入新功能或更改后,应用程序现有的功能是否正常工作。
-
可用性测试:此项测试专注于用户体验,检查应用程序是否易于使用、导航和理解。它涉及测试应用程序的设计、布局、颜色、字体大小及其他影响用户体验的元素。这里一些流行的测试活动包括快照和视觉测试;我们将在本章讨论这两种测试。
-
兼容性测试:此项测试检查应用程序与不同设备、操作系统和屏幕尺寸的兼容性。测试应用程序与硬件、网络和软件配置的兼容性是必要的。使用云设备测试工具,如 Sauce Labs 或 Firebase Test Lab,帮助你在不同设备和配置上运行测试套件,确保应用程序按预期工作。
-
本地化测试:此项测试检查应用程序是否支持不同的语言、地区和文化,测试语言支持、日期和时间格式、货币格式及其他文化元素,尤其是当应用程序支持如阿拉伯语等语言时,因为这会将 UI 转换为从右到左(RTL)显示。
-
性能测试:此项测试检查应用程序在不同场景下的性能和响应性,例如低电量、弱网络连接或高使用量。它测试应用程序的负载、响应、内存使用和电池消耗。在第七章《建立移动应用监控、可观测性和分析》中,我们将讨论如何使用不同的工具和服务来监控移动应用的性能。
-
可访问性测试:此项测试检查应用程序的 UI 是否对残障人士友好,例如视觉障碍者。可访问性测试可以识别应用程序布局、设计和 UI 中可能会阻碍残障用户使用的潜在问题。
-
安全性测试:此项测试检查应用程序的安全功能,并识别可能会危及用户数据的漏洞。它包括测试应用程序的身份验证、授权、加密和数据存储机制。在第八章《保持移动应用和 DevOps 安全》中,我们将讨论安全性测试及如何将安全性融入到移动 DevOps 流程中。
通过执行这些类型的移动应用测试,您可以确保您的应用具有高质量,满足用户期望,并提供出色的用户体验。
测试自动化对移动应用至关重要,因为它提高了效率,降低了成本,改善了应用质量,并确保了在各种设备和操作系统上的良好用户体验。通过投资测试自动化,移动应用开发者可以创建和维护符合用户期望的高质量应用,并在竞争激烈的市场中脱颖而出。
现在,让我们讨论测试自动化对移动应用的重要性。
测试自动化对移动应用的重要性
在移动 DevOps 中,测试自动化至关重要,因为它使移动开发生命周期更快、更可靠。
移动 DevOps 无法在没有测试自动化的情况下存在,原因如下:
- 更快的发布周期:移动 DevOps 旨在快速且一致地交付移动应用。测试自动化通过允许团队快速而反复地执行测试,帮助实现这一目标,缩短了识别和修复问题的时间,从而加速了部署前的修复过程。
测试脚本可以重复使用,便于在更新 或修改后重新测试应用。
-
持续集成与部署/交付(CI/CD):移动 DevOps 依赖CI/CD来简化移动发布过程。测试自动化对这些过程至关重要。作为开发周期的一部分,自动化测试会在每次提交代码或进行更改时运行,确保移动应用保持稳定和功能正常。例如,我们在上一章中实现的 CI 工作流和管道可以使用不同的测试自动化工具,如Espresso、XCUITest和Appium来确保应用质量。
-
增加测试覆盖率:通过这种方式,可以快速运行更多的测试,从而获得更好的测试覆盖率。持续测试可以在开发过程中更早发现问题,减少最终生产缺陷的可能性。在本章后面,我们将讨论如何实现成功的移动测试覆盖率、持续测试和左移测试。
-
改善协作:自动化移动测试使开发人员和测试人员能够更高效地合作,提供有关代码更改如何影响应用程序的即时反馈。它们可以防止错误进入生产环境,并增强团队成员之间的沟通。
-
成本效益:手动测试可能导致测试自动化减少,从而节省时间和金钱。通过自动化重复性任务,团队可以专注于更复杂的任务,提高生产力并增加投资回报率(ROI)。
现在,让我们先讨论在移动开发中遇到的挑战,然后再讨论为何需要一个强有力的移动测试策略。
移动应用测试挑战与陷阱
移动技术正在迅速发展,这给移动测试团队带来了独特的挑战。让我们来看看团队在测试移动应用时最常面临的挑战,以便我们能够克服它们:
-
随着移动应用测试变得越来越重要,找到合适的自动化工具和框架变得具有挑战性。
-
随着设备和操作系统数量的增加,测试移动设备兼容性和跨平台兼容性变得具有挑战性。
-
要确定应用在不同网络(如 2G、3G、4G 和 5G)上的表现,有必要在每个网络上对应用进行测试。
-
为了确保应用与互联网协议第六版(IPv6)设置的兼容性,需要进行多项检查。这包括评估地址兼容性、网络配置、防火墙和 NAT,并确定如何解决可能出现的问题。
-
应对移动应用在各种条件下的性能进行测试,以确保最佳的用户体验。团队应确保应用在速度、响应性和稳定性方面经过测试。
-
安全性和隐私在移动测试中变得越来越重要。团队必须确保所有应用都经过漏洞测试,并且用户数据得到保护。
这些挑战要求团队拥有一个全面的测试策略,涵盖所有移动应用测试的各个方面。团队应专注于制定策略以应对复杂性,自动化测试,优化性能,提升安全性和隐私,并确保跨平台兼容性。
此外,团队应寻找可以帮助他们简化移动测试过程的工具和服务。通过战略性地规划和准备,团队可以有效应对移动测试的挑战。
为了确保测试策略保持相关性和时效性,团队应定期审查他们的流程,评估新工具,并根据需要调整他们的方法。
移动测试策略应该不断地 制定和维护。
这应该包括定义测试工作的范围、目标和优先级。确定应用所需的测试类型,并相应分配资源。审查测试流程,评估新工具和技术,并根据需要调整方法。
团队通过采取正确的方向并利用合适的工具,可以确保他们的移动应用成功。团队需要定期审查他们的测试流程,并评估新兴技术,以帮助简化移动测试过程。
需要一个强大的测试策略。
如在第一章中讨论的,解决移动 DevOps 中的挑战,金融科技公司或其他公司实施移动 DevOps 并遵循测试策略至关重要。未能做到这一点可能会导致手动测试的众多问题,例如消耗大量时间和精力,最终影响发布过程并延迟新功能的推出。为了确保移动应用的最佳功能和用户体验,移动测试策略涵盖了各种测试类型、工具和技术,所有这些都经过细致处理,以覆盖每个可能的场景。这包括单元、集成、系统、性能、兼容性和可用性测试。
在我看来,不要遵循测试金字塔。它只是一个模型。没有万能的解决方案或魔法棒;每个团队或公司应根据自身情况制定测试策略。有些企业更注重功能测试,有些注重性能测试,还有一些注重安全性测试。
注意
Mobile Native Foundation有一篇有趣的讨论(github.com/MobileNativeFoundation/discussions/discussions/6
),讨论了像 Lyft、Spotify、Uber 等公司如何进行测试并实施测试策略。
什么是移动应用测试策略?
移动应用测试策略是一个全面的计划,概述了移动应用的测试过程。它包括各种测试技术和工具,帮助确保应用的质量和可靠性。
在制定移动应用测试策略时,需要考虑以下一些关键要素:
-
明确定义你的测试目标和目的,考虑你希望通过测试实现的目标,例如确保应用在所有设备和平台上正常工作、在发布前识别并修复漏洞,或提升应用的整体用户体验。
-
确定目标设备和平台,你希望在其上测试应用。为了确保兼容性,考虑在不同操作系统、屏幕大小和硬件配置的多种设备上进行测试。
-
选择最适合你应用需求和目标的测试技术。考虑使用功能测试、可用性测试、性能测试、安全性测试、兼容性测试和本地化测试等技术。
-
使用可以帮助你自动化测试的工具,并提供全面的覆盖。考虑使用像 Appium、XCUITest、Espresso 和 Detox 这样的工具。
-
定义涵盖所有应用功能、特性和用户场景的测试用例和场景。测试用例和场景应设计为涵盖正向和负向测试场景。
-
制定测试执行计划,概述测试过程、测试时间表以及执行测试所需的资源。该计划还应明确测试团队的角色和责任。
-
实施测试自动化以节省时间并确保一致的测试结果。自动化执行那些可以快速执行的重复性测试,例如回归测试。
-
让最终用户参与用户验收测试(UAT),获取关于应用程序可用性和功能的反馈(beta 测试)。这些反馈可以帮助你发现任何问题并改善整体用户体验。在第六章《移动应用发布管理》中,我们将讨论移动应用的 beta 测试概念。
然而,有时人们会将测试策略与测试计划混淆。让我们来看一下它们之间的区别:
测试计划 | 测试策略 |
---|---|
描述计划测试活动的范围、方法、资源和时间表的文档 | 定义系统或产品整体测试方法的高层文档,包括所使用的测试方法、工具和过程 |
定义具体的测试目标和验收标准 | 确定整体测试目标和目的 |
提供关于如何进行测试的详细信息 | 提供关于测试方法的一般概述 |
描述测试团队的角色和责任 | 描述测试过程以及测试团队的角色和责任 |
提供详细的测试活动时间表 | 提供测试活动的高层计划 |
包含测试计划、测试用例、脚本和数据 | 包含测试方法、测试工具和测试过程 |
侧重于测试过程和测试用例的执行 | 侧重于整体测试方法和测试目标 |
表 5.1 – 测试计划与测试策略的区别
正如我们在本章之前提到的,测试自动化帮助我们增加测试覆盖率,更多的测试可以在开发过程中快速且持续地执行,从而获得更好的测试覆盖率。由此,我们得出了持续测试和左移测试的概念。接下来,让我们更详细地探讨这些概念。
持续测试
持续测试鼓励在整个软件开发过程中进行测试,而不仅仅是在最后阶段。通过对软件质量的早期和持续反馈,持续测试旨在帮助团队尽早发现和解决问题,以尽可能快的速度进行改进。
现代软件开发方法论,如敏捷开发和移动 DevOps,强调频繁发布和更新,这些方法严重依赖持续测试。团队可以通过将测试融入开发过程中,确保每个版本都具有高质量并满足最终用户的需求。
持续测试的做法是指在软件开发过程中进行测试,而不是等到开发周期结束或移动应用发布后才进行测试,正如我们在第三章《移动 DevOps 基础》中所讲的那样。高质量的应用程序对于移动应用至关重要,因为它们通常被许多用户使用,且消耗大量数据:
图 5.2 – 与 CI 的持续测试
由于持续测试过程的实施,左移测试变得越来越流行。
你可以通过 Katalon 的持续测试成熟度评估(katalon.com/continuous-testing-self-assessment
)来衡量你团队的成熟度,并获得领域专家的建议。
传统上,测试是在开发过程的末尾进行的,即代码编写完成后。然而,通过左移测试方法,测试从一开始就融入到开发过程中。
让我们解释一下左移测试的概念和优势。
什么是左移测试?
左移测试是一种软件测试方法,侧重于软件开发生命周期的早期阶段。在传统的软件开发中,测试通常在大部分代码完成后进行,接近开发阶段的结束时。
相比之下,左移测试是指将测试任务融入到开发的早期阶段,如需求收集、设计和实现,以下图所示:
图 5.3 – 测试中的左移
持续测试和左移测试有若干优点,诸如以下几点:
-
缺陷的早期发现(及早测试,频繁测试):通过在开发过程的早期进行测试,可以在缺陷传播并变得更加昂贵和难以解决之前,及时发现并修复缺陷。
-
改进的协作和沟通:左移测试鼓励开发人员和测试人员之间的合作与沟通,有助于及早发现和解决潜在问题,从而提高软件的整体质量。
-
更快速的交付和部署:通过将测试提前,团队可以更快地交付和部署软件。他们可以更早开始测试,避免在开发过程结束时出现延迟和瓶颈。
组织需要采用持续测试方法来实施左移测试,在这种方法中,测试被集成到开发过程中并贯穿整个生命周期。这可能需要文化和思维方式的转变,并采用合适的工具和技术来支持持续测试。
现在,让我们更详细地了解一下目前市场上可用的用于移动应用的测试工具、框架和云服务,帮助您决定最适合您公司的工具。
移动应用的测试工具、框架和服务
开发人员和测试人员可以使用众多的测试工具、框架和服务来帮助他们快速测试移动应用程序。
但首先,让我们从选择适合移动应用的测试自动化框架或工具时需要考虑的因素开始讨论。
在选择移动测试自动化工具时,有几个因素需要考虑:
-
工具应与您测试自动化生态系统中的其他工具(如 CI 和测试管理工具)集成,以便您可以在 CI/CD 流水线中使用它
-
工具应与您计划测试的不同移动设备和操作系统兼容
-
工具应易于设置、配置和使用
-
工具应提供清晰、详细的测试结果报告
-
工具应拥有强大的支持系统和庞大的用户社区,能够提供帮助和指导
-
随着移动应用和用户基础的增长,工具应能够处理大规模的测试
在决定某个工具或框架是否适合您的业务、应用和团队之前,评估几种不同的工具,并进行小范围的试点测试或概念验证项目,总是一个不错的选择。
移动应用的 UI 和功能测试
优秀的用户体验需要对移动应用的 UI 进行测试。测试人员通过在测试过程中执行自动化测试,可以识别并解决应用程序功能和 UI 的问题,从而带来良好的客户体验。
以下是一些本地和跨平台的移动测试框架,供您在测试应用功能时参考:
-
iOS:
-
XCUITest
-
EarlGrey
-
-
Android:
-
Espresso
-
Jetpack Compose
-
-
跨平台:
-
Appium
-
Detox
-
Flutter Driver 和 Flutter 集成测试
-
Maestro
-
让我们从 iOS 应用的本地框架开始。
XCUITest
XCUITest(developer.apple.com/documentation/xctest
)是由苹果公司专为 iOS、macOS、tvOS 和 watchOS 应用测试创建的移动测试框架。旨在帮助开发人员和质量保证团队自动化测试过程,它支持 Swift 和 Objective-C 语言,提供选择偏好语言的灵活性。
基于苹果的 XCTest 框架,XCUITest 使得单一框架内进行单元测试和 UI 测试成为可能,从而简化了 过程。
XCUITest 通过要求应用程序中使用正确的可访问性标识符来倡导可访问性,确保普遍的可用性。
此外,对于不熟悉 Swift 或 Objective-C 的测试工程师来说,可能会面临更陡峭的学习曲线。
要使用 XCUITest,开发人员必须导入 XCTest 框架并创建 XCTestCase 的子类。然后,他们可以定义测试方法,并使用 XCUITest 的 API 与应用的 UI 进行交互:
图 5.4 – iOS 应用中的 XCUITest 目录
该框架还提供了额外的功能,例如截图、执行滑动和捏合等手势,以及其他各种元素交互。更多信息可以参考苹果官方文档和 API 参考。
示例
这是一些简单的 XCUITest 代码,用于测试登录功能:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/simpleTest.swift
。
你也可以在 XCUITest 中使用 Page Object 模式,该模式涉及为应用中的每个屏幕创建单独的类。这些类将包含特定屏幕的 UI 元素和操作。这样可以促进更好的代码组织和可维护性。
对于给定的 SwiftUI 应用,我们可以创建两个页面对象:LoginPage
和 WelcomePage
。以下是如何在 XCUITest 中使用 Page Object 模式的一些示例:
-
创建
LoginPage.swift
文件 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/PageObjects/LoginPage.swift
) -
创建
WelcomePage.swift
文件 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/PageObjects/WelcomePage.swift
) -
更新你的测试类以使用这些页面对象 (
github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/TestClassWithPO.swift
)
XCUITest 可以轻松集成到大多数 CI 提供商中,如 Xcode Cloud、Bitrise、GitHub Actions 和 Codemagic,但要能够运行 UI 测试,必须拥有带目标 iOS SDK 和 iOS 模拟器的 macOS 机器。该方案还应该是共享的:
图 5.5 – iOS 应用中的共享方案
然后,如果你具备前提条件,可以在你喜欢的 CI 提供商上运行这些测试。
例如,在 Codemagic 上,你可以在 codemagic.yml
文件中使用以下链接的代码:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/codemagic.yml
。
在 Bitrise 上,您可以为 iOS 集成步骤添加 Xcode 测试,以构建应用进行测试并运行 UI 测试:
图 5.6 – Bitrise iOS 工作流
EarlGrey
EarlGrey (github.com/google/EarlGrey
),由谷歌开发,是一个专门的 iOS 测试框架,旨在支持原生 iOS 应用测试。它允许开发人员和 QA 团队根据需要使用 Objective-C 或 Swift 自动化他们的 iOS 应用 UI 测试。
EarlGrey 通过自动与应用程序的 UI 同步,确保平稳且可靠的测试执行。它还提供了广泛的断言和匹配器,使开发人员能够创建彻底且富有表现力的测试。
要使用 EarlGrey 为给定的 SwiftUI 应用创建 UI 测试,您需要在项目中设置 EarlGrey。之后,您可以编写测试用例。以下是使用 EarlGrey 为给定的 SwiftUI 应用编写的 UI 测试:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/EarlGrey/EarlGreyTest.swift
。
相同的页面对象概念也适用于 EarlGrey,就像在 CI/CD 工作流中运行必要的测试时一样。
现在,让我们讨论一下适用于 Android 应用的原生测试框架。
Espresso
Espresso (developer.android.com/training/testing/espresso
),由谷歌创建,是一个专门的 Android 测试框架,旨在支持原生 Android 应用测试。它允许开发人员和 QA 团队根据需要使用 Java 或 Kotlin 自动化他们的 Android 应用 UI 测试。
它通过自动与应用程序的 UI 同步,确保平稳且可靠的测试执行,从而实现更快和更准确的测试。Espresso 还提供了各种断言和匹配器,允许开发人员创建全面且富有表现力的测试。
Espresso 轻松集成 AndroidJUnit4,允许开发人员在单一框架内执行单元测试和 UI 测试。作为谷歌官方支持的产品,开发人员可以依赖最新的文档、资源以及与新 Android 版本的兼容性。此外,对于不熟悉 Java 和 Kotlin 的开发者来说,入门时可能会面临较陡的学习曲线。
示例
这里有一些简单的 Espresso 代码,用于测试登录功能:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/LoginTest.kt
。
您可以使用页面对象模式使您的 Espresso 测试更易于维护和阅读(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/PageObjects/LoginPage.kt
)。
下面是一个示例,展示了如何在 Kotlin 中为登录屏幕的 Espresso 测试中实现页面对象模式:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/LoginScreenTest.kt
。
此外,您可以与 Espresso 一起使用UI Automator(developer.android.com/training/testing/other-components/ui-automator
),进行跨系统和已安装应用的功能 UI 测试。
Espresso 与大多数 CI 提供商(如 Bitrise、GitHub Actions 和 Codemagic)轻松集成,但要能够运行 UI 测试,您必须拥有安装有 Gradle 和目标 Android SDK 的 Ubuntu 或 Windows 机器,并具有 Android 模拟器。然后,您需要运行 Gradle 命令./gradlew connectedDebugAndroidTest
。此命令使用 connectedDebugAndroidTest Gradle 任务在单个步骤中构建和安装主应用和测试应用。此任务构建主应用及其相关的 Android 测试应用,将它们安装在连接的设备上,然后运行测试应用中定义的测试。
一旦完成这些步骤,如果您符合先决条件,可以在首选的 CI 提供商上运行测试。
例如,在 Codemagic 上,您可以在codemagic.yml
文件中使用以下链接中的代码:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/codemagic.yml
。
在 Bitrise 上,您可以添加Android Build for UI Testing和Virtual Device Testing for Android集成步骤,以构建应用程序进行测试,并在 Firebase Test Lab 上运行 UI 测试,该步骤已与 Bitrise 集成:
图 5.7 - Bitrise Android 工作流程
最后,使用 GitHub Actions,您可以使用以下 YAML 文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/.github/android.yml
。
基于 Espresso 的开源项目
有许多开源 UI 测试库是基于 Espresso 为 Android 应用程序构建的,它们简化并优化了编写 UI 测试的过程,使开发者能够轻松创建强大且易于维护的测试。包括 Kaspresso(github.com/KasperskyLab/Kaspresso
)、Barista(github.com/AdevintaSpain/Barista
)和 Kakao(github.com/KakaoCup/Kakao
)。它们流畅的接口、高级测试拦截器、自动截图和增强的日志功能,使它们成为 Android 开发者提升 UI 测试体验的强大选择。
Jetpack Compose
Jetpack Compose(developer.android.com/jetpack/compose
)是 Google 为 Android 应用程序提供的现代 UI 工具包。Jetpack Compose 测试库(developer.android.com/jetpack/compose/testing
)旨在简化为使用 Jetpack Compose 构建的应用程序编写和维护 UI 测试的过程。
Jetpack Compose 测试提供了 Compose 测试规则,它设置了测试 Compose UI 所需的环境,并使在测试中创建和操作可组合的 UI 变得容易。
Jetpack Compose 测试支持截图测试,允许开发者在测试执行期间将 UI 元素的视觉外观与参考图像进行比较。
由于 Jetpack Compose 是一个工具化测试,因此可以使用 Espresso 作为测试框架,但 Compose 已经包含了测试 API,用于查找、验证和对元素执行用户操作。时间操作和其他高级功能也包含其中。
一般来说,如果你有特定类型的 UI 元素或组件,你应该有特定的 API 或方法来测试它们在不同场景中的表现。
要了解更多 Compose 测试的信息,可以查看备忘单(developer.android.com/jetpack/compose/testing-cheatsheet
),该备忘单作为一些最常用 Compose 测试 API 的快速参考。
相同的页面对象概念可以应用于 Jetpack Compose,并在必要的 CI/CD 工作流中运行测试(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/JetpackCompose/CounterTest.kt
)。
这是来自 Reddit 的一个示例,展示了他们的 Android 应用程序端到端 UI 自动化框架,以及他们如何使用页面对象和 Fluent 设计模式:shorturl.at/ajH78
。
Appium
Appium (appium.io
) 是一个开源的跨平台移动测试框架,使开发人员和 QA 团队能够在 Android、iOS 和 Windows 平台上自动化测试他们的移动应用。
Appium 支持多种编程语言,包括 Java、Ruby、Python、C# 和 JavaScript,允许开发人员选择他们喜欢的语言。
Appium 与流行的测试框架如 JUnit 和 TestNG 集成,允许开发人员使用他们喜欢的测试工具。
Appium 可轻松集成于 Bitrise、GitHub Actions 和 CircleCI 等 CI 工具中,简化开发工作流中的测试过程。
Appium 的大型活跃社区提供广泛的文档、资源和定期更新。但通常,Appium 的初始设置和配置可能会耗费大量时间,并需要大量努力来确保其正常运行 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Appium/AppiumDemo.java
)。
您还可以使用页面对象模式使您的 Appium 测试更易于维护和阅读。
要在 CI 工作流中运行 Appium 测试,您需要安装并运行 Appium 服务器,以及 Android 模拟器或 iOS 模拟器。您可以使用以下 Shell 脚本来完成这些操作:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Appium/emulator.sh
。
然后,您可以使用 Gradle 或 Maven 的命令行来运行测试。
Detox
Detox (github.com/wix/Detox
) 是专为 React Native 应用设计的端到端移动测试框架。它使开发人员和 QA 团队能够在 Android 和 iOS 平台上自动化测试他们的 React Native 应用。
Detox 作为灰盒测试框架运作,平衡了白盒测试的速度和可靠性以及黑盒测试的真实性。Detox 与 Jest 完美集成,这是一个流行的 JavaScript 测试框架,允许开发人员使用他们喜欢的测试工具和方法。
Detox 自动将测试执行与应用程序的 UI 同步,确保测试顺利可靠运行。
Detox 可轻松集成于 Jenkins、Travis CI 和 CircleCI 等 CI 工具中,简化开发工作流中的测试过程。
Detox 拥有一个活跃的开发者和用户社区,提供资源、支持和定期更新。
示例
这是一个简单的 React Native 登录应用的 Detox 测试示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Detox/LoginTest.js
。
Detox 还要求你拥有一个配置 JSON 文件,类似于以下内容:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Detox/config.json
。
要在 CI/CD 工作流或像 GitHub Actions 这样的管道中运行 Detox 测试,你需要 Android 模拟器或 iOS 模拟器。此外,还需要安装 Node.js 和 NPM,并使用上述配置文件构建应用。你可以使用以下 YAML 文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Detox/.github/detox.yml
。
类似于我们提到的 Bitrise、Codemagic 和其他 CI 提供商的方式,你需要使用脚本步骤来安装必要的依赖项,然后运行 Detox 测试。
Flutter Driver
Flutter Driver (api.flutter.dev/flutter/flutter_driver_extension/flutter_driver_extension-library.html
) 是一个用于 Flutter 应用程序的测试框架,使开发者和 QA 团队能够自动化 Flutter 应用的集成测试和 UI 测试。
它支持在 Android 和 iOS 平台上进行测试,允许开发者在各种设备和操作系统上测试他们的 Flutter 应用。
Flutter Driver 设计用于集成测试,使开发者能够测试他们应用的不同组件如何协同工作。
它使用 Dart 语言,这是开发 Flutter 应用程序所使用的编程语言,使开发者更容易用熟悉的语言编写测试。
Flutter Driver 会自动同步测试执行和应用的 UI,确保测试顺利且可靠地运行——Flutter Driver 与应用 UI 的自动同步确保了稳定和可靠的测试执行。
此外,对于不熟悉 Dart 或 Flutter 框架的测试人员,在开始使用 Flutter Driver 时可能会面临较陡的学习曲线。
示例
这是一个 Flutter Driver 测试的示例,用于一个简单的 Flutter 登录应用: https://github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/Flutter Driver/LoginTest.dart。
也有一个集成测试(https://docs.flutter.dev/testing#integration-tests),可以用来测试 Flutter 应用。以下是一个简单的 Flutter 登录应用示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/Integration%20Test/LoginTest.dart
。
要在 CI/CD 工作流或管道(如 GitHub Actions)中运行 Flutter 测试,你需要 Android 仿真器或 iOS 模拟器以及 Dart SDK。你可以使用以下 YAML 文件来帮助实现这一点:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/.github/FlutterIntegration.yml
。
这是一个 YAML 文件示例,它通过 GitHub Actions 在 Android 仿真器和 iOS 模拟器上运行 Flutter Driver 测试:github.com/PacwktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/.github/FlutterDriver.yml
。
在 Bitrise 上,有用于构建和测试 Flutter 应用的集成步骤:
图 5.8 – Bitrise Flutter 工作流
同样,在 Codemagic 上,也有支持 Flutter Driver 和 Flutter 测试的步骤:
图 5.9 – Codemagic Flutter 工作流
Maestro
Maestro (maestro.mobile.dev/
) 是最简单且最有效的开源移动 UI 测试框架,由 mobile.dev 开发。它允许你轻松定义和测试你的流程(即应用中的用户旅程——换句话说,就是 E2E 场景)。
Maestro 基于 YAML,这意味着你需要在 flow.yml
文件中定义测试流程(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Maestro/flow.yml
),然后在设备上运行它们。
Maestro 具有多种功能,例如:
-
使用 Maestro,可以容忍不稳定性。应用和设备设计时考虑到不稳定性,UI 元素也专门设计来应对这一点。
-
在测试中无需反复调用
sleep()
。当某个过程(例如通过网络)需要较长时间时,Maestro 会自动等待内容加载(但不会等待太久)。 -
当测试文件发生变化时,Maestro 会自动重新运行测试,因此无需重新编译任何内容。
-
Maestro 支持所有主要的移动开发平台,包括 Android、iOS、Flutter、React Native 和 Web Views。
-
此外,还有 Maestro Studio,Maestro 的个人助手,它将帮助你编写 Maestro 流程。
你可以轻松在 Maestro Cloud 上测试你的流程,因为它们在云端运行,这样你就不需要配置任何模拟器或仿真器。
流程也可以通过 Maestro CLI 在支持 ADB 连接的 Android 设备/仿真器和支持 Facebook 的 IDB 的 iOS 设备/模拟器上运行。你可以手动协调你的流程执行,针对任何支持这些协议的提供者进行操作。你可以像在本地一样使用 Maestro CLI 运行你的流程。
Bitrise 提供了一个集成步骤,帮助你在云端运行 Maestro 测试。如果你使用其他 CI 提供商,可以使用 Maestro CLI:
图 5.10 – Bitrise 和 Maestro 工作流
通过探索当前市场上可用的测试框架以及如何在 CI 工作流中运行它们,我们发现了一个新的挑战:在不同的设备和操作系统版本上同时运行测试。让我们来谈谈如何使用不同的服务在云设备上运行测试,以最大化覆盖面。
在云设备上测试
开发者和 QA 团队可以通过云设备测试在广泛的设备和平台上测试他们的应用,而无需使用物理设备,这是一种现代的移动应用测试方法。
一个基于云的基础设施远程托管多个模拟器或真实设备。以下是目前最受欢迎的移动应用云设备测试服务:
-
Sauce Labs
-
BrowserStack
-
AWS Device Farm
-
Firebase Test Lab
-
LambdaTest
让我们更详细地了解一下这些内容。
Sauce Labs
Sauce Labs (saucelabs.com/products/mobile-testing
) 通过消除购买和管理大量设备库存的需求,简化了测试过程,使用户能够在云端的真实设备上测试应用。得益于该平台的全面设备覆盖,用户可以通过在最新设备上测试应用,提前发现问题。
Sauce Labs 支持 Android 和 iOS 平台,使开发者能够在多个设备和操作系统上测试他们的应用。它提供访问大量真实设备的权限,确保测试结果准确,并减少在真实设备上遇到问题的可能性。除了真实设备,Sauce Labs 还提供模拟器和仿真器,用于更快速、更具成本效益的测试。
该功能允许同时执行多个测试,显著减少整体测试时间。
Sauce Labs 与流行的 CI 工具(如 Bitrise、GitHub Actions 和 Codemagic)无缝集成,允许在开发工作流中进行自动化测试。它支持流行的测试自动化框架,如 Appium、Espresso 和 XCUITest,为项目选择合适的框架提供灵活性。
此外,Sauce Labs 提供了详细的测试报告、日志和测试会话的视频记录,便于高效的调试和问题解决。
你可以使用 saucectl
CLI 配合任何 CI 提供商来配置你的账户,并从相关的 config.yml
文件运行测试 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/SauceLabs/config.yml
)。
你可以更改配置,以增加并发性,从而在不同设备上并行运行测试。
BrowserStack
BrowserStack (www.browserstack.com/app-automate
) 是一个基于云的测试平台,允许开发者在各种设备和操作系统上测试他们的移动应用。通过广泛的功能和用户友好的界面,BrowserStack 旨在为开发者和 QA 团队提供全面的测试解决方案。
BrowserStack 提供访问大量真实设备的权限,用于准确测试移动应用,确保它们在消费者使用的真实设备上表现良好。除了真实设备外,BrowserStack 还提供模拟器和仿真器,便于快速且具有成本效益的测试。
此功能支持同时执行多个测试,减少整体测试时间,提高工作效率。
BrowserStack 与广泛的 CI 工具集成,如 Jenkins、TeamCity、Bamboo、CircleCI、Travis CI、Azure、Bitrise 和 GitLab CI/CD,简化了开发工作流程中的测试过程。
例如,Bitrise 有与 BrowserStack 集成的步骤,可以上传并运行 Espresso 和 XCUITest 测试:
图 5.11 – Bitrise 和 BrowserStack 集成步骤
图 5.12 – Bitrise 和 BrowserStack 工作流程
如果你有其他 CI 提供商或服务器,可以使用 curl
命令从命令行将测试上传到 BrowserStack:
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" -X GET "https://api-cloud.browserstack.com/app-automate/recent_apps"
BrowserStack 支持多种测试自动化框架,包括 Appium、Espresso 和 XCUITest,为项目选择最合适的框架提供了灵活性。
你可以使用 BrowserStack App Automate 和 Appium 自动化框架,在各种真实的 Android 和 iOS 设备上测试本地和混合型移动应用。
LambdaTest
LambdaTest (www.lambdatest.com/mobile-app-testing
) 是一个基于云的测试平台,提供给开发者和 QA 团队访问多种设备和操作系统,用于 Web 和移动应用测试。
LambdaTest 支持 Android 和 iOS 移动应用测试,允许开发者在各种设备和操作系统上测试他们的应用。
LambdaTest 还提供真实的移动设备测试,确保测试结果的准确性,并提供更真实的测试环境。
LambdaTest 与许多流行的测试框架集成,如 Appium、XCUITest 和 Espresso,使其可以轻松地集成到现有的测试套件中。它还支持并行测试,可以同时运行多个测试,加速整体测试过程。
LambdaTest 的云基础设施提供可扩展性和协作功能,适用于小型和大型团队。
最后,LambdaTest 与广泛使用的 CI 工具集成,如 AWS CodePipeline、Jenkins、CircleCI、Travis CI、GitLab CI、Azure Pipelines 和 Bitrise。
使用命令行中的 curl
命令,您可以像在 Sauce Labs 和 BrowserStack 上一样,在 LambdaTest Cloud 上上传并运行测试。
这是一个上传 iOS 应用并运行 XCUITest 测试的示例:
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' \
--form 'appFile=@"/Users/macuser/Downloads/proverbial.ipa"' \
--form 'type="xcuit-ios"'
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \
--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' --form 'appFile=@"/Users/macuser/Downloads/proverbial_ios_xcuitest.ipa"' --form 'type="xcuit-ios"'
这是一个上传 Android 和测试应用的示例:
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' --form 'appFile=@"/Users/macuser/Downloads/proverbial_android.apk"' --form 'type="espresso-android"'
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \
--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' --form 'appFile=@"/Users/macuser/Downloads/proverbial_android_expressotest.apk"' --form 'type="espresso-android"'
如果您的 CI 提供商支持集成步骤,如 Bitrise,您可以直接使用它,而不必使用命令行:
图 5.13 – Bitrise 和 LambdaTest 集成步骤
图 5.14 – Bitrise 和 LambdaTest 工作流
AWS Device Farm
AWS Device Farm (aws.amazon.com/device-farm/
) 是由 AWS 提供的移动应用测试服务。它支持在 Android 和 iOS 平台上进行测试,允许开发人员在各种真实移动设备上测试他们的应用。
AWS Device Farm 提供对一系列真实设备的访问,以便更准确地测试移动应用,确保更好的与消费者使用的真实设备的兼容性。
开发人员可以远程访问设备进行手动测试,支持交互式调试和故障排除。
AWS Device Farm 支持流行的测试自动化框架,如 Appium、Espresso 和 XCUITest,使开发人员能够自动化他们的测试过程。
AWS Device Farm 与流行的 CI 工具集成,如 AWS CodePipeline、GitHub Actions、Codemagic 和 Bitrise,简化了开发工作流中的测试过程。
使用 AWS Device Farm,您可以手动上传移动应用和测试文件来运行测试,如以下截图所示。您还可以通过 CI 构建上传应用:
图 5.15 – AWS Device Farm – 选择应用程序
接下来,您可以配置测试类型并设置测试框架,如 Instrumentation,如图所示:
图 5.16 – AWS Device Farm – 设置测试框架
完成此操作后,您可以选择一个 APK 并选择您的执行环境:
图 5.17 – AWS Device Farm – 上传测试应用
接下来,您可以选择要使用的设备。您可以组合不同设备制造商,如 Google 和 Samsung,如下所示:
图 5.18 – AWS Device Farm – 选择设备
一旦运行了测试,您将看到测试结果,包括视频、日志和截图,如下所示:
图 5.19 – AWS Device Farm – 测试结果
AWS Device Farm 提供灵活的按需计费定价模型,允许开发人员仅为他们使用的测试资源付费,这对某些团队来说是一种成本效益高的选择。
Firebase Test Lab
Firebase Test Lab (firebase.google.com/products/test-lab
),作为 Google Firebase 开发工具套件的一部分,是一个基于云的测试服务,允许开发人员在各种真实设备和虚拟设备(模拟器和仿真器)上测试他们的移动应用:
图 5.20 – Firebase Test Lab 矩阵
Firebase Test Lab 支持在 Android 和 iOS 平台上进行测试,使开发人员能够在各种设备和操作系统上测试他们的应用。
Firebase Test Lab 支持流行的自动化测试框架,如 Espresso 和 XCTest,但不支持 Appium 和 Detox:
图 5.21 – Firebase Test Lab 结果
Firebase Test Lab 与流行的 CI 工具(如 Jenkins、GitLab CI 和 Bitrise)集成,在开发工作流程中简化了测试过程。
Firebase Test Lab 会自动生成一个发布前报告,包含详细的测试结果、性能指标和截图,帮助开发人员在发布应用之前识别和解决问题。
作为 Firebase 工具套件的一部分,Firebase Test Lab 与其他 Firebase 服务(如 Cloud Functions)无缝集成,简化了整体测试和开发流程。
你可以使用 Flank (github.com/Flank/flank/
),这是一个用于 Firebase Test Lab 的大规模并行 Android 和 iOS 测试工具。
Flank 与 gcloud
CLI 兼容。它提供了额外的功能来加速速度并提高质量。
你可以通过以下步骤使用 Flank:
-
创建一个 Google Cloud 项目和账户。
-
创建 Firebase 账户。
-
将你的项目添加到 Firebase。
-
创建服务账户以获取 API 访问权限。
-
下载服务账户的 JSON 文件。该文件包含一个私钥,可直接添加到你的 CI 服务器并用于身份验证。
完成此步骤后,你可以为你的应用创建一个配置文件,类似于github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flank/flank.yml
中的文件。
然后,你可以运行以下脚本:
wget --quiet https://github.com/TestArmada/flank/releases/download/v22.05.0/flank.jar -O /usr/local/bin/flank.jarjava -jar /usr/local/bin/flank.jar firebase test android run
最后,你需要监控 Flank 的使用情况,因为你正在运行并行设备,这会产生费用。
其他服务提供云设备,例如Genymotion(www.genymotion.com/
),这是一款流行的安卓模拟器和移动测试平台,使开发人员和质量保证(QA)团队能够在各种虚拟设备上测试他们的移动应用程序。此外,emulator.wtf(emulator.wtf/
)是一个专注于性能的安卓云模拟器,旨在为您的拉取请求(PRs)提供快速反馈。
Kobiton(kobiton.com/
)是一个基于云的移动测试平台,使开发人员和 QA 团队能够在各种真实设备和模拟器上测试他们的移动应用程序。它提供了丰富的功能,确保在不同平台和设备上进行全面的应用测试。
此外,Perfecto(www.perfecto.io/
)是 Perforce 推出的移动测试平台,使开发人员和 QA 团队能够在安全的云环境中,在各种真实设备和模拟器上测试他们的移动应用程序。它提供了丰富的功能,确保在不同平台和设备上进行全面的应用测试。
人工智能(AI)和机器学习(ML)如何改变移动测试
移动测试已经被人工智能(AI)和机器学习(ML)彻底革新。开发人员可以更快速、准确地测试应用程序,因为他们实现了测试的自动化。在预测分析的帮助下,错误可以更快地修复。智能化的测试用例生成根据用户行为和使用趋势生成测试用例,从而暴露潜在问题。
此外,借助 AI 和机器学习,移动测试的费用可以减少,除了前面提到的优势之外。公司通过自动化测试,能够减少与人工劳动相关的费用,并简化测试流程。
无代码和基于 AI 的测试工具
人工智能(AI)可以在自动化测试中成为游戏规则的改变者。AI 驱动的测试工具有助于提高测试覆盖率,减少测试所需的时间和精力,并提供更准确的测试结果。
这里有一些可以帮助软件测试人员在自动化测试中释放人工智能(AI)威力的工具:
-
Applitools
-
Katalon
-
Waldo
让我们仔细看看。
Applitools
Applitools(applitools.com/solutions/mobile-testing
)是一个视觉测试平台,旨在帮助开发人员和 QA 团队自动验证他们的移动应用程序在不同设备和屏幕分辨率上的外观。它通过利用 AI 驱动的视觉比较和验证,旨在简化测试流程,减少人工工作量。
它利用 AI 对应用程序的 UI 进行视觉比较,以高准确度检测差异,减少误报,这在可用性测试和快照测试中非常有益。
Applitools 与许多流行的测试框架(如 XCUITest、Appium 和 Espresso)集成,使得将视觉验证纳入现有测试套件变得简单。
它提供对不同浏览器、设备和屏幕分辨率的广泛覆盖,确保应用程序在各种配置上得到视觉测试。
Katalon AI 视觉测试
除了 Katalon 生态系统,Katalon 视觉测试通过无缝集成,帮助您优化测试性能并节省时间,无需任何设置工作。除了功能性测试外,它还能识别 UI 中的意外视觉变化。
使用 AI,Katalon 识别并匹配基准图像与检查点图像之间的各个区域,然后突出显示布局中的变化。此外,机器学习模型用于提取并比较两幅图像中的文本,帮助用户识别出无论字体、字体大小或颜色如何变化的已修改文本。
您还可以将其与功能性测试并行运行,以涵盖 E2E 场景和视觉回归。
Waldo
其他服务为我们提供了 AI 测试工具和平台,例如 Tricentis 的Waldo (www.waldo.com/
)。这是一个无代码的移动应用测试平台,旨在帮助开发人员和 QA 团队自动化并简化 iOS 和 Android 应用程序的测试过程。其无代码方法最大程度地减少了学习曲线,并减少了测试脚本创建和维护所花费的时间。
Waldo 使用户无需编写代码即可创建测试脚本,通过可视化界面定义和记录测试场景。Waldo 会在每次构建时自动运行测试,简化了流程并确保应用程序始终得到测试。
Waldo 提供云端真实移动设备测试,提供准确的结果和逼真的测试环境。Waldo 的无代码方法简化了测试脚本创建过程,使不同编程技能的测试人员都能轻松使用。
另外两个值得提及的工具是 Testsigma 和 Sofy.ai。
Testsigma (testsigma.com/ai-driven-test-automation
)与移动 CI/CD 工具无缝集成,便于将其纳入现有的开发工作流程中。
Sofy.ai (sofy.ai/
) 是一个 AI 驱动的移动应用测试平台,旨在帮助开发人员和 QA 团队自动化并简化 Android 和 iOS 应用程序的测试过程。其 AI 驱动的方法旨在减少测试脚本创建和维护所花费的时间,同时提高整体测试效率。在本评测中,我们将重点关注 Sofy.ai 的移动测试能力,讨论其主要特点、优缺点,并与市场上其他技术进行比较。Sofy.ai 与移动 CI/CD 工具无缝集成,便于将其纳入现有的开发工作流程中。
通过有效管理测试用例,测试团队可以确保全面覆盖软件功能,识别和修复缺陷,最终交付高质量的软件给终端用户。
测试用例管理工具在简化这个过程和提高测试效率方面发挥着至关重要的作用。让我们讨论一下测试用例管理的概念,并介绍一些流行的测试用例管理工具。
测试用例管理
为了确保高质量的移动应用交付给客户,测试用例管理必须与测试自动化和移动 DevOps 集成。集成意味着使用一个与自动化工具无缝对接并提供实时报告的测试用例管理系统。
这种集成使开发人员能够自动化不同场景的测试,并在多个设备上以受控的环境执行测试。
此外,将测试集成到 DevOps 管道中有助于自动化测试、早期缺陷识别和快速反馈。
与测试自动化和移动 DevOps 集成的测试用例管理可以提高移动应用的质量,减少开发时间并提高效率。
一个与测试自动化和移动 DevOps 集成良好的流行测试用例管理工具是TestRail。它是一个基于 Web 的测试用例管理工具,允许团队创建、管理和组织测试用例。TestRail 可以嵌入到 CI/CD 管道中,如 Jenkins、GitLab、GitHub Actions 等,也可以与 Appium、Espresso 和 XCUITest 等移动测试框架集成。
利用 TestRail 强大的 API、webhooks 或 CLI,你可以轻松自定义你的 QA 流程,使其适应特定的测试工作流程,并与技术栈集成。
其他一些测试用例管理工具包括Zephyr (smartbear.com/test-management/zephyr/
) 和Testmo (www.testmo.com/
)。
测试报告、洞察和分析是成功的测试过程和策略中的关键组成部分。当你在衡量测试自动化进展的成功时,测试报告、洞察和分析帮助利益相关者理解缺陷的根本原因,并做出数据驱动的决策。
让我们来看看测试报告、测试洞察和测试分析之间的区别:
-
测试报告:通过报告,你可以总结测试结果,包括执行的测试数量、通过和失败的测试数量,以及整体的测试覆盖率。测试报告应易于理解,并为软件的质量提供洞察。
-
测试洞察:测试洞察通过分析缺陷的根本原因并识别需要改进的领域,提供对测试过程的更深入理解。测试洞察有助于利益相关者理解测试失败背后的原因,并采取纠正措施以提高软件质量。
-
测试分析:测试分析涉及分析测试数据,以识别趋势和模式。测试分析可以帮助利益相关者识别应用程序中容易出现缺陷的区域,并根据数据做出提高软件质量的决策。
以下是一些测试洞察和分析的示例:
-
测试覆盖率指标显示了应用程序已测试和未测试的部分。
-
失败率和缺陷密度提供了有关发现的缺陷数量以及它们被发现的速度的信息。
-
测试执行时间和效率有助于识别测试过程中的瓶颈和改进领域。
-
测试结果和通过/失败率总结了应用程序的整体质量和测试的有效性。
可以使用许多工具和技术来收集测试洞察和分析,例如Buildkite Test Analytics(buildkite.com/test-analytics
)、Bitrise Insights(bitrise.io/bitrise-insights
)和Sauce Labs Insights(saucelabs.com/products/sauce-insights
)。
在软件测试中,测试自动化工具和测试用例管理对创建、组织和管理测试用例至关重要。这有助于确保软件应用程序经过彻底测试。然而,实现移动测试覆盖率同样重要。让我们学习如何做到这一点。
实现成功的移动测试覆盖率
在确保移动应用的质量和功能时,测试移动应用可能具有挑战性,甚至更难以实现成功的移动测试覆盖率。以下准则可能会有所帮助:
-
了解应用的目标和需求:在开始测试过程之前,彻底理解移动应用的需求和目标至关重要。应该理解应用的目的和功能,以及它们的特定特性和能力。
-
确定最重要的特性和功能:根据影响和风险优先考虑测试用例。移动应用最关键的特性和功能应该优先考虑,因为并非所有特性和功能都同等重要。可能需要识别哪些特性和功能是用户最常使用的,或者哪些最有可能影响应用的性能或稳定性。
-
应制定全面的测试计划:在识别移动应用的关键特性和功能后,您可以制定一个全面的测试计划,涵盖所有这些特性和功能。该测试计划包括各种测试用例和场景,以识别并解决潜在的应用缺陷和问题。
-
结合手动和自动化测试:手动测试和自动化测试都是至关重要的。手动测试可以有效地识别那些难以自动化的缺陷和问题,而自动化测试可以快速高效地运行大量测试。在开发过程中加入持续测试,并使用合适的测试工具和框架。
-
与开发人员和其他相关方合作:为了实现成功的移动测试覆盖,整个测试过程中与开发人员和其他相关方的合作至关重要。共同识别和修复潜在的应用问题和缺陷,可能需要共享测试结果和反馈。
这些指南将帮助你确保你的移动应用经过彻底测试,准备发布并有效。
成功的 CI/CD 管道和测试自动化的建议
任何成功的软件开发项目都需要有 CI/CD 管道和测试自动化。
以下是确保这些领域成功的一些建议:
-
为你的 CI 管道和测试自动化策略奠定坚实基础,涉及识别需求、选择合适的工具和技术,以及制定明确的实施计划。
-
选择合适的测试工具和框架对于你所做的测试非常重要。目前有许多工具可以用于手动测试、自动化测试和性能测试。
-
提供必要的设备、模拟器、仿真器和网络条件,以设置所需的环境。
-
根据市场分析选择你的测试目标设备和平台。使用真实设备和模拟器/仿真器相结合。为了确保广泛覆盖,确保包含流行设备、操作系统版本、屏幕分辨率和外形尺寸的混合。
-
分析 CI 管道和测试自动化的结果可以帮助你识别趋势、改进的领域和潜在问题。利用这些洞察,你可以不断完善和改进你的流程。
-
投资于团队培训可以帮助他们发展实施和维护 CI 管道及测试自动化策略所需的技能和知识。
-
通过不断根据结果和反馈改进测试策略,确保你的移动应用达到最高质量。根据需要更新测试用例、脚本和工具。
移动测试人员的技能
移动测试人员在确保移动应用质量和可靠性方面发挥着至关重要的作用。以下是移动测试人员应具备的一些基本技能:
-
移动测试人员应该能够与其他相关方有效沟通和合作,包括开发人员、产品负责人和业务分析师。
-
移动测试人员必须能够识别、分析和解决移动应用中的问题和缺陷。
-
移动测试人员需要了解他们所测试的移动平台的操作系统、设备类型和屏幕尺寸。
-
为了识别潜在的问题和缺陷,移动测试人员应该熟悉移动应用的架构,包括前端和后端如何交互。
-
为了自动化重复性测试并提高测试覆盖率,移动测试人员应该熟悉测试自动化工具和技术,包括 Appium、Espresso 和 XCUITest 等框架。
-
移动测试人员需要能够测试移动应用的性能,包括检查应用崩溃和加载缓慢等问题。
-
成为一名成功的移动测试人员,测试人员应该具备扎实的应用安全知识,并能够测试潜在的安全问题,如恶意软件和未经授权的访问。
-
移动测试人员必须熟练使用缺陷跟踪和报告工具,以便有效地记录、跟踪和报告问题给开发团队。
如何提升你的移动测试技能
现在我们已经讨论了移动测试人员需要的技能,接下来我们来探讨如何提升我们的移动测试技能。
跟上移动应用快速发展的步伐,需要不断提升自己的移动测试技能。你可以通过多种方式实现这一点:
-
了解各种可用的移动平台和操作系统,如 Android 和 iOS,是一个很好的起点。
-
参与真实项目,体验真实世界中的移动测试。
-
跟上最新的移动技术趋势,如 5G 或物联网,将帮助你预见未来的挑战和机遇。
-
熟悉不同的移动设备、操作系统和浏览器。
-
了解 Appium、XCUITest、Espresso、Detox 和 Maestro 等一些当今最流行的移动测试工具和框架。
-
为了交流知识和最佳实践,加入一个移动测试人员的社区,如在线论坛或本地聚会。
-
通过参加在线课程、阅读博客、参加网络研讨会和行业活动,持续学习。跟上这些资源将帮助你在快速变化的移动测试领域保持信息灵通并具备适应能力。
-
测试人员应能够将技术技能(如移动平台和测试自动化的知识)与软技能(如沟通和解决问题的能力)结合起来。移动测试人员必须具备多样化的技能组合,以帮助确保移动应用的质量和可靠性,最终确保最佳的客户体验。
总结
本章我们讨论了移动应用测试的众多方面。我们了解到,测试移动应用对于提供高质量的用户体验至关重要。我们还探讨了测试自动化的优势,如更快的测试周期和跨平台与设备的一致结果。这帮助我们理解了制定良好测试策略的重要性,以克服移动应用测试中的挑战和障碍。
此外,我们获得了关于各种移动应用测试工具、框架和服务的宝贵见解。我们理解了测试移动应用 UI 和功能的重要性,以确保无缝的用户体验。我们对云端设备上进行测试以及 AI 和 ML 对移动测试的影响的探索,加深了我们的理解,使我们认识到全面的测试用例管理的必要性。
这简化了测试过程,确保在各种设备、操作系统版本和网络条件下都能成功覆盖移动测试。通过引入这些概念,开发者可以实施有效的移动应用测试策略,创建满足用户期望的强大且可靠的应用程序。
下一章将涵盖移动应用发布管理。由于技术发展迅速和用户体验需求的不断变化,高效发布移动应用至关重要。我们还将讨论最佳实践和面临的挑战。
第六章:移动应用发布管理
我们现在处于移动 DevOps 和 CI/CD 进展的持续阶段。一旦应用程序成功开发和测试完毕,它就准备好发布到应用商店。这通常包括将移动应用发布到测试版或生产版本,并使其对用户可用。移动应用发布管理对于企业优化用户体验并保持高质量至关重要。它涉及规划和实施新功能/更新和热修复。
但发布移动应用需要不同的流程、步骤和工具。在本章中,我们将探讨移动应用发布管理过程的各个阶段,并涵盖以下主题:
-
移动应用发布管理中的挑战
-
移动应用程序发布的定义
-
实施完整的 CI/CD 过程
-
确保遵守应用商店的指南和规定
-
发布和分发移动应用程序
-
将用户反馈与测试版测试结合
-
应用商店提交
-
应用商店优化(ASO)
-
监控和报告发布进度
-
实施发布列车
首先,我们将讨论在发布移动应用时遇到的最大挑战,以便知道如何通过相关的发布策略、流程和工具来应对它们。
移动应用发布管理中的挑战
作为一名应用开发者,了解移动应用发布管理过程至关重要,以确保顺利部署并获得用户的高度满意。
为发布应用程序设立流程对企业至关重要,从初创公司到企业级公司,因为这是确保应用程序在长期内成功的最佳方式。这不仅有助于保持用户的参与度,还帮助建立企业与客户之间的强大关系。
此外,通过确保应用程序保持最新且无漏洞,企业可以降低用户不满意和昂贵的技术问题的风险。
作为一家以移动为主的公司,应用商店上的客户反馈和评分非常重要,因为它为我们提供了应用质量、功能和整体表现的指标——我们不能忽视它们,因为这将帮助我们改善开发和发布过程。
正如前面章节中所讨论的,移动开发是独特的,因此,由于以下原因,发布过程将是独特且具有挑战性的:
-
发布新功能或热修复没有简单直接的流程。
-
发布移动应用程序没有先决条件的工具、服务或平台来帮助我们顺利且频繁地发布;大多数情况下,我们是手动操作,这消耗了团队的时间和精力,而且发布可能会延迟数月。
-
在多个设备、平台和配置上进行测试可能会耗时且复杂。因此,在第五章,实施强大的移动应用测试策略中,我们建议使用测试自动化和云设备测试,因为手动测试可能需要数周时间才能对新版本发布有足够信心。
-
每个应用商店都有具体的政策和审查程序。 navigating 这些程序并确保遵守应用商店的规则可能会很有挑战性,且可能会导致应用发布延迟。
-
在发布后发现错误时,您可能需要恢复到先前的版本。管理多个软件版本并有效处理回滚可能会很困难。
-
发布跨平台应用程序具有挑战性,因为您需要管理两个具有不同要求、指南和流程的应用。
移动应用发布的定义
当移动应用发布后,客户可以下载、安装并在其设备上使用该应用。这涉及多个阶段,包括构建、测试和将应用发布到应用商店或其他分发平台。最终目标是为客户提供一个可靠、安全且功能齐全的应用,满足他们的需求和期望。
制定一个稳健的移动应用发布策略对于确保成功的上线和长期成功至关重要。以下是为您的移动应用定义发布策略的分步指南。
定义发布策略
拥有一个发布策略对确保成功的发布管理至关重要。这个策略应考虑各种方面,例如发布频率、发布功能类型、测试和验证过程、每次发布的风险以及减轻这些风险的最佳方法。
自信发布并通过工具和策略帮助全球发布、管理和分发应用程序,以确保您的应用成功上线。
移动应用发布策略是一个精心规划的方法,旨在启动、更新和维护移动应用程序。它概述了确保顺利发布过程的关键步骤、里程碑和所需资源,同时尽量减少干扰并最大化用户满意度。一个明确的发布策略可以帮助您管理期望,分配资源并衡量成功。
理解移动应用发布管理流程
移动应用发布管理涉及规划、安排、协调和向用户部署新版本或更新。这个过程对希望定期更新应用的新功能、修复程序和安全补丁至关重要。但是,在发布过程中,我们需要考虑不同的步骤;让我们一起来探索它们:
-
发布前:
-
计划发布
-
构建和测试应用
-
-
准备发布:
-
管理代码签名
-
准备
versionCode
和versionName
-
-
发布应用
-
选择合适的发布渠道:
-
测试版测试
-
应用商店提交
-
-
启动应用:
-
应用内更新
-
监控应用的性能
-
-
发布后:
-
处理用户反馈和评论
-
分析应用性能数据
-
规划未来的版本发布
-
移动发布列车
-
应用商店优化(ASO)
-
为了更深入了解每个阶段,让我们详细查看每一个阶段。
发布前
这是初始阶段,在这个阶段,我们应该作为一个团队,定义并达成一致关于发布过程的内容,包括发布策略、责任划分等。
发布规划
一旦发布策略已被定义,开发实现过程就显得尤为重要。这个过程应该包括发布安排、管理代码更改和确保应用符合质量标准。还应包括确保应用在发布前经过测试和验证的步骤。
构建和测试应用
如前章所述,我们应该使用持续集成(CI)流水线来构建和测试移动应用,确保我们没有任何阻碍因素或问题会延迟发布过程。然后,我们可以继续进行持续交付和持续部署(CD),将应用发布到应用商店。
持续交付和部署(CD)
如在第三章《移动 DevOps 基础》一书中提到,持续交付会自动将通过 CI 检查的构建交付到生产环境(例如暂存环境),在那里进行测试和审查,确保其符合要求后再发布到生产环境。
目标是自动化开发和部署过程,以确保移动应用的快速、可靠和经济的交付。
移动应用的 CI/CD 过程主要包括以下几个步骤:
-
将构建版本发布给 QA 团队,以便他们进行额外的检查和测试,例如探索性测试,以确保构建符合预期。
-
如果公司或团队已经参与该计划,可以将构建版本发布给测试人员。
-
如果一切正常,发布经理或负责发布过程的人可以批准构建并将其发布到相关的应用商店或生产环境中。
-
以下图中可以看到这些步骤:
图 6.1 – 持续交付过程
持续部署通常是 CI/CD 流水线的一部分,这意味着部署到代码库的代码将自动部署到生产环境——在我们这里,移动应用将自动部署到相关的应用商店。CI/CD 流水线通常被称为这些实践的结合体:
图 6.2 – 持续部署过程
持续部署过程自动化了应用构建的部署流程,避免了人工干预。阻止新更改部署到生产环境的唯一因素是构建或测试失败。这一流程有助于加快应用生产,并更快速地获得客户反馈。
注意
要了解 GitHub 移动团队如何通过 GitHub Actions 自动化发布流程,请访问github.blog/2022-01-12-how-we-ship-github-mobile-every-week/
。
准备发布版本和标签
我们需要根据应用的不同执行不同的步骤。例如,在应用级别的 build.gradle
文件中,需要处理 versionCode
和 versionName
。
接下来的步骤是使用 Build 菜单中的 Generate Signed Bundle / APK... 选项生成签名的 APK 或应用包;本节后面我们将介绍代码签名和生成包文件的过程。这也可以在 CI 服务器上自动完成。
同时,对于 iOS 应用,有不同的步骤,涉及在应用目标设置的 General 选项卡中更新版本和构建号。完成后,选择 Generic iOS Device 作为构建目标,从 Product 菜单归档应用,然后选择 Archive 菜单。本节后面我们将介绍如何进行代码签名和归档应用。
完成这些步骤后,GitHub 仓库中的发布标签和发布说明将为下一个发布版本做好准备。
准备发布
将任何应用发布到 Apple App Store、Google Play Store 或其他任何商店,都需要证书、配置文件或 Keystores 来识别应用已由受信任的公司或开发者构建。
因此,我们需要在构建发布应用之前管理代码签名过程。
设置开发者账户
该过程的第一步是设置 Apple 开发者账户。您需要提供姓名、地址和联系方式,还需要提供支付信息并同意 Apple Developer Program License Agreement。设置好账户后,您可以访问 Apple Developer Portal。对于 Google 开发者账户也需要执行相同的步骤,以便将应用发布到 Google Play 商店。
管理代码签名
代码签名 是对应用程序可执行代码进行数字签名的过程,确保其完整性和真实性。这个过程在 Android 应用开发生命周期中至关重要,它帮助确认应用来自受信任的来源,并且自签名以来没有被篡改。
让我们解释一下 Android 和 iOS 所需的代码签名步骤。
首先,让我们从 Android 应用的代码签名步骤开始。
要对 Android 应用进行签名(developer.android.com/studio/publish/app-signing
),请按照以下步骤操作:
-
设置一个开发者账户(
play.google.com/console/
)。 -
使用 keytool 工具创建一个唯一的私钥-公钥对(
docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html
)。 -
使用私钥签署应用程序,并将公钥嵌入到自签名证书中。
Android Studio 或 apksigner 工具用于使用生成的密钥对打包并签署应用程序。
Android 系统在安装过程中验证应用程序的签名,以确保其完整性和真实性。
要生成私钥-公钥对和自签名证书,请按照以下步骤操作:
-
打开终端或命令提示符。
-
执行以下命令:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
-
在提示时提供所需信息,如你的姓名、组织和位置。
-
选择一个强密码用于你的密钥库和密钥对。
你的密钥对和自签名证书将存储在指定的 .jks
文件中,如下图所示:
图 6.3 – keytool 输出
要在 Android Studio 中签署应用程序,请按照以下步骤操作:
- 在 Android Studio 中,打开 构建 菜单并选择 生成已签名的 Bundle / APK...:
图 6.4 – 生成已签名的 Bundle / APK…
选择 .aab
(Android 应用包)。然后,点击 下一步:
图 6.5 – 选择 Android 应用包或 APK
- 点击
my-release-key.jks
:
图 6.6 – 选择密钥库路径
-
输入密钥库和密钥对密码以及密钥别名。
-
选择你的 目标文件夹 和 构建变体 参数,然后点击 完成:
图 6.7 – 选择构建变体
Android Studio 将创建一个已签名的 App Bundle,准备好分发,如下图所示:
图 6.8 – Gradle 执行任务
在发布文件夹中,你可以找到生成的 .aab
文件,如下图所示:
图 6.9 – .aab 文件
注
保持你的签名密钥和密钥库文件的安全——它们用于标识和验证你的应用程序。如果你丢失了签名密钥或密钥库文件,将无法更新或维护你的应用程序。
现在,让我们看一下 iOS 应用程序代码签名的步骤。
要签署 iOS 应用程序,请按照以下步骤操作:
-
登录或创建一个 Apple 开发者账户(
developer.apple.com/
),如果你还没有的话。 -
访问 Apple 开发者门户,并从仪表板选择 证书、标识符与描述文件。
证书是用来验证应用开发者身份并签署应用代码的数字文件。
有两种类型的证书:
-
开发证书,用于应用开发过程中
-
App Store(发布)证书,用于将应用分发到 Apple App Store
标识符是用于将你的应用与开发者账户关联、启用某些应用功能(如推送通知)并创建配置文件的唯一标识符。
有三种类型的标识符:
-
应用 ID:此 ID 用于标识特定应用
-
包 ID:此 ID 用于标识特定应用组内的应用
-
团队 ID:此 ID 用于标识开发者或组织
配置文件是包含关于你的应用、证书和设备标识符的文件。这些配置文件允许你的应用在 iOS 设备上运行,并访问某些应用功能,如推送通知、应用内购买和 iCloud。
有两种类型的配置文件:
-
开发配置文件,用于应用开发过程中。
-
发布配置文件,用于将应用分发到 App Store,如下图所示:
图 6.10 – Apple 开发者证书
在 Apple 开发者门户中,打开证书、标识符与配置文件(developer.apple.com/account/resources/certificates/list
)页面,然后点击+按钮创建新的证书。选择iOS 应用开发并点击继续,如下图所示:
图 6.11 – 创建新的 Apple 开发者证书
按照屏幕上的指示从 Mac 的钥匙串访问应用生成证书签名请求(CSR)(developer.apple.com/help/account/create-certificates/create-a-certificate-signing-request
)。上传 CSR 并下载生成的开发证书。
接下来,你需要创建一个应用 ID。这个唯一标识符将你的应用与其配置文件和证书关联起来。点击标识符,然后点击+按钮。填写必要的详细信息,点击继续注册你的应用 ID,如下图所示:
图 6.12 – 创建应用标识符
现在,让我们创建一个配置文件。点击Profiles,然后点击+按钮。选择iOS App Development并点击Continue。选择你刚创建的 App ID、开发证书,以及你想用于测试的设备。为你的配置文件命名并点击Generate,如下面的截图所示:
图 6.13 – 注册新配置文件
选择我们之前创建的 App ID,并配置配置文件,如下面的截图所示:
图 6.14 – 生成配置文件 | 选择一个 App ID
打开你的 Xcode 项目并进入Signing & Capabilities标签。点击Team下拉菜单,选择你的开发者账户。Xcode 应该会自动处理配置文件和证书。如果没有,点击Import Profile并找到你下载的配置文件。
一旦你设置好账户、配置文件、App ID 和证书,你就需要为发布准备你的应用。这包括完成创建截图和设置应用元数据等任务。
但在此之前,你需要上传并保存你的凭据到 CI 提供商,以便在发布过程中自动签署应用。例如,Bitrise 在工作流编辑器中提供了一个标签,你可以上传你的配置文件和代码签名证书,以便它们能在 iOS CI/CD 流水线中使用:
图 6.15 – Bitrise 的 iOS 代码签名与文件标签
对于 Android,你可以上传 Keystore 文件以在 CI/CD 流水线中签署你的应用:
图 6.16 – Bitrise 的 Android 代码签名与文件标签
在 GitHub Actions 中也应该是一样的情况;你可以将凭据存储在 GitHub Secrets 中(docs.github.com/en/actions/reference/encrypted-secrets
),这样可以快速将凭据传递给 GitHub Actions。你还可以使用 Codemagic 来处理 iOS(docs.codemagic.io/yaml-code-signing/signing-ios/
)和 Android(docs.codemagic.io/yaml-code-signing/signing-android/
),采用相同的方法,或使用任何其他 CI 提供者。
注
或者,你可以通过 API 密钥连接到 Apple 服务(如 App Store Connect 或 Apple Developer Portal),以自动上传 iOS 应用到 App Store。
使用 fastlane match 管理大规模移动团队中的证书和配置文件
在一个大型且可扩展的移动团队中,集中且安全地管理证书和配置文件至关重要,以防止冲突并确保所有团队成员使用最新的统一文件。
工具如fastlane和fastlane match(docs.fastlane.tools/actions/match/
)可用于在大型团队中管理证书和配置文件。这些工具会在构建和发布应用时自动下载开发人员的最新签名证书和配置文件。
文件应根据仓库中的Matchfile进行存储和访问。一旦证书和配置文件被下载,团队成员可以使用 fastlane match 构建和发布应用,如下图所示:
图 6.17 – fastlane match 的工作原理。
使用 fastlane match 有助于消除许多与代码签名相关的常见问题,如过期的证书或不匹配的配置文件。这是一个推荐的安全且协作的代码签名管理方法。在第九章,移动 DevOps 最佳实践中,我们将讨论如何在构建、测试和发布移动应用时使用 fastlane。
发布应用。
发布候选版本(RC)构建在满足以下条件时准备好交付给我们的测试人员:
-
为处理发布候选版本所需的任何紧急修复,创建了一个分支。
-
构建是根据适当的版本号生成并上传到 TestFlight/Firebase App Distribution,具体取决于应用的类型。
-
所有的单元测试、UI 测试和快照测试都已通过。
-
创建一个问题来跟踪发布过程。
-
发布说明已准备好。
-
如果没有问题,构建可以自动提交到 App Store 或 Google Play Store,或者可以由发布经理和相关人员手动批准。
这个工作流或管道可以通过你的 CI 提供商实现,如在第四章中讨论的,通过移动 DevOps 实现持续集成与交付,但如前所述,它应支持与不同工具和服务的集成,以简化发布过程。
团队需要为给定的构建生成一个应用二进制文件。然后,必须定义一个包含多个步骤的任务,生成构建,执行测试用例,然后将其归档并上传到 TestFlight(iOS)或 Firebase App Distribution(Android)。你可以为每个版本创建一个专用的分支,这样可以随时回溯并挑选任何想要包含的更改,如下图所示:
图 6.18 – 移动发布周期。
现在,让我们深入了解不同的发布阶段,例如 beta 测试和应用商店提交。
Beta 测试
移动应用的 Beta 测试是创建过程中的一个关键阶段。在正式发布之前,它使开发者能够在实际移动设备上测试他们的应用并收集用户反馈。通常,Beta 测试使用一小群愿意测试发布版本并提供功能、可用性和整体用户体验反馈的用户。
移动应用开发过程中的 Beta 测试阶段至关重要,因为它为开发者提供了在公开发布前评估应用的可用性和功能的机会。然而,由于以下原因,构建有效的 Beta 测试计划可能会让人感到紧张:
-
害怕负面反馈:当将应用交给 Beta 测试人员时,可能会担心他们会提供负面反馈或遇到可能会削弱开发团队信心的关键漏洞。
-
资源不足:创建一个合适的 Beta 测试计划需要资源,如时间、金钱和人员。与测试人员协调、管理反馈以及实施更改可能会消耗大量资源,特别是对于较小的开发团队或独立开发者来说。
-
确定合适的测试人员:找到真正有兴趣提供有价值反馈并代表目标用户群的 Beta 测试人员可能具有挑战性。
-
时间限制:Beta 测试阶段可能会引入延迟,这可能会被视为快速部署的障碍。
设置应用的 Beta 测试计划有不同的步骤。我们来看一下。
定义应用的范围
设置成功的移动应用 Beta 测试计划的第一步是定义应用的范围。这应该包括对应用功能、目标用户以及应用可用平台的清晰描述。这对于确保应用在正确的环境中进行测试至关重要。
此外,开发者应该考虑在 Beta 测试过程中想要跟踪哪些指标。这可能包括下载数量、使用统计数据和用户反馈。
一旦应用的范围确定,就可以开始设置 Beta 测试计划。
准备发布
一旦 Beta 测试计划建立完成,准备应用的发布至关重要。这包括确保在测试阶段识别出的任何问题都得到了处理,并且应用已准备好公开发布。开发者还应考虑如何推广应用以及采取哪些措施以确保成功的发布。
对于 iOS,开发人员需要创建一个 App Store Connect 账户(appstoreconnect.apple.com/login
),并通过平台提交他们的应用程序。对于 Android,则需要一个 Google Play 控制台账户(play.google.com/console/about/
),并必须通过该平台提交他们的应用程序。这包括提供必要的元数据,如应用程序的名称、描述、关键字、截图、应用图标和定价信息。
开发人员还需要提供一个测试帐户及其登录凭据,如果他们的应用程序需要身份验证,则可以访问应用商店的内容或功能。这使他们能够在 Beta 测试和应用商店提交阶段测试应用程序。
通过允许一组用户在应用程序发布之前测试该应用程序,开发人员可以获取有关产品性能的宝贵反馈,并在确定版本发布之前进行任何必要的调整或增强。
招募测试员
你可以联系那些对测试应用程序表示兴趣的目标用户群体。你也可以在与应用相关的论坛和社交媒体上发布信息,或使用像 TestFlight 这样的服务来找到测试员。以下是一些有效的招募测试员的方法:
-
提供清晰的说明:一旦你招募了测试员,向他们提供清晰的安装和使用应用程序的说明,以及如何提供反馈意见。
-
监控反馈:监控测试员的响应,并在向公众发布之前对应用程序进行任何必要的更改。
Beta 测试工具
在移动应用程序开发中,Beta 测试是一个重要的阶段。它允许开发人员在应用程序全面发布之前从有限的用户群体中获取宝贵的反馈意见,识别和修复问题,并确保更顺利的发布。有多种工具可用于在移动应用程序上进行 Beta 测试。以下是一些流行的工具:
-
TestFlight
-
Google Play Beta 测试
-
Firebase 应用分发
让我们仔细看看。
TestFlight
TestFlight(developer.apple.com/testflight/
)是 iOS 应用开发者的宝贵工具,允许他们在将应用程序发布到应用商店之前进行测试。它现在是 iOS 应用开发生态系统的一部分。
TestFlight 简化了开发人员邀请 Beta 测试员尝试他们的应用程序的流程。您只需提供测试人员的电子邮件地址,他们将收到通过 TestFlight 下载应用程序的邀请。
TestFlight 与 iOS 开发环境的集成使得在 iPhone、iPad 和其他 Apple 设备上分发和测试应用程序变得简单。它是免费的,适用于各种规模的开发者,从个人到大公司。
开发人员可以同时分发多个应用构建版本,从而测试不同的版本并确定最成功的版本。
TestFlight 使测试版测试者能够轻松地在应用中直接提供反馈。这确保开发者能够获得宝贵的意见,并在公开发布应用之前进行必要的改进。
开发者可以邀请最多 10,000 名外部测试者,这使他们能够收集大量反馈并发现潜在问题。有关使用 TestFlight 测试应用的更多信息,请访问 testflight.apple.com/
。
以下是您必须遵循的使用 TestFlight 进行测试的基本步骤:
-
在 Xcode 中创建一个新版本,并确保它符合所有应用商店的指南和要求,包括截图和元数据。
-
将您的应用上传到 App Store Connect,并选择要分发给测试版测试者的版本。
-
通过从 App Store Connect 发送电子邮件邀请,邀请测试版测试者来测试您的应用。每个应用最多可以邀请 10,000 名测试者。邀请后,他们将收到一封邀请邮件,接受邀请并在其 iOS 设备上安装 TestFlight。
-
在测试版测试者接受邀请并安装 TestFlight 后,您可以将他们添加到 App Store Connect 的一个组中。这样,您可以管理不同版本应用的分发,将其分发给不同的测试者组。
-
一旦您将测试版测试者添加到一个组中,就可以通过在 App Store Connect 中选择要分发的应用版本,并选择要分发给的测试者组,来将应用分发给他们。
-
测试版测试者可以通过 TestFlight 应用提供关于应用的反馈,包括截图、评论和评分。
-
监控应用的表现并跟踪测试版测试者报告的问题,然后修复发现的任何问题。
在测试版阶段完成并解决所有问题后,应用就可以发布到相关的应用商店。
Google Play 测试版
Google Play 测试版 (support.google.com/googleplay/android-developer/answer/9845334?hl=en&visit_id=638185357369512451-3818777855&rd=1
) 是 Android 应用开发者的重要工具,提供了一个直接的方式来在应用发布到 Google Play 商店之前进行测试。它的简单设置、与 Google Play 商店的无缝集成以及对大量测试者的支持,使其成为 Android 应用测试的首选工具。
Google Play 测试版允许开发者通过电子邮件邀请或共享链接的方式将应用分发给测试者。测试者可以像访问其他应用一样,通过 Google Play 商店轻松访问应用。
测试者可以直接在应用中提供反馈,为开发者提供改进应用的重要意见,从而在应用发布到公众之前进行必要的优化。
Google Play beta 测试还支持分阶段发布,允许开发者将应用更新发布给一部分用户,并逐步增加该部分用户的比例。
你可以使用 Google Play Console 针对特定群体进行测试,或者将测试向 Google Play 用户开放,如下图所示:
图 6.19 – Google Play Console
Google Play 提供三种测试类型:
- 内部测试:最多可以让 100 名测试者快速访问你的应用进行初步质量保证检查:
图 6.20 – Google Play Console – 内部测试
- 开放测试:这允许你与大量用户进行测试,并在 Google Play 上展示测试版本的应用:
图 6.21 – Google Play Console – 开放测试
- 封闭测试:这允许你在发布前的测试阶段,从更广泛的测试者中收集更有针对性的反馈:
图 6.22 – Google Play Console – 封闭测试
以下是在 Google Play Console 上实施 beta 测试的一般步骤:
-
通过创建 beta 版本并使用 Keystore 签名,确保应用准备好进行测试。
-
通过将测试者的 Google 电子邮件地址添加到 Google Play Console,创建一个 beta 测试者列表。
-
将应用的 beta 版本上传至 Google Play Console,beta 测试者可以访问它。
-
通过电子邮件向测试者发送 beta 测试邀请,其中包含一个下载应用程序 beta 版本的链接。
-
监控来自 Google Play Console 的 beta 测试反馈,并解决任何报告的问题或 bug。
-
根据收到的反馈,我们可以对应用进行修改和改进,然后再向公众发布。
-
一旦完成测试并解决所有问题,便可以通过 Google Play Store 向公众发布。
Firebase 应用分发
Firebase 应用分发 (firebase.google.com/docs/app-distribution
) 可以通过简单的流程将你的应用分发给可信赖的测试者,将应用迅速部署到测试者的设备上。这样,你可以提前并频繁地收到反馈,并将其与移动 DevOps 和 CI/CD 目标对齐。
Firebase 应用分发允许开发者在 iOS 和 Android 设备上分发和测试应用,使其成为多平台应用开发的多功能选择。然而,iOS 开发者通常更喜欢使用 TestFlight,因为它是免费的,并且与 Apple 的服务和应用集成得更紧密。
使用 Firebase 应用分发分发应用给测试者非常简单。你可以通过电子邮件邀请测试者,或者分享一个链接,让他们快速访问应用。
Firebase App Distribution 与Crashlytics (firebase.google.com/products/crashlytics
) 无缝集成,这是一个实时崩溃报告工具。它帮助开发者快速识别并修复问题,提高应用的稳定性和性能。
Firebase App Distribution 支持流行的 CI/CD 工具,允许开发者自动化构建、测试和分发应用的过程。
使用 Firebase App Distribution 进行 Android 测试的基本步骤如下:
-
创建 Firebase 账户和项目。
-
将 Firebase SDK 添加到你的项目中。
-
创建一个已签名的发布版应用包。
-
使用 Firebase CLI、Gradle 或 CI 服务器将你的应用构建上传到 Firebase App Distribution。
-
通过添加测试者的电子邮件地址或在 Firebase 控制台中创建测试者组来邀请测试者。你也可以导入包含测试者电子邮件地址的 CSV 文件。
-
一旦构建完成并上传,且测试者已添加,便可以将应用分发给选定的测试者。他们将收到一封包含访问和安装应用 Beta 版本的说明的电子邮件邀请。
一旦测试阶段完成,我们可以进入最后阶段,即将应用提交到应用商店。
提交应用
在提交应用进行审核之前,开发者必须确保其符合App Store 审核指南,该指南涵盖了诸如用户隐私、内容、设计和功能等广泛的主题。开发者还应在不同设备和 iOS 版本上广泛测试应用,以确保流畅的用户体验。
提交应用即意味着将其上传到应用商店(如 App Store 或 Google Play)进行审核和批准,并让用户可以下载。
一旦你的应用准备好,你需要将其提交到相关的应用商店。这包括上传应用、提供截图和其他元数据,并提交应用进行审核。审核过程可能需要长达一周的时间,只有当应用符合应用商店的指南时,它才有可能被接受。
审核过程通常需要几天时间,但根据应用的复杂性和提交量,时间框架可能会有所不同。在审核过程中,Apple 团队会根据 App Store 审核指南对应用进行评估,检查其功能性、性能、设计和内容问题。
审核过程后,可能有几种结果:
-
如果应用符合所有指南,它将被批准并发布到 Apple App Store。你将收到通知,应用将可供下载。
-
如果应用不符合指南,它将被拒绝,并且你将收到反馈,说明需要解决的具体问题。然后,你可以进行必要的更改并重新提交应用进行审核。
-
如果应用的元数据不符合指南,它将被拒绝,但二进制文件无需重新审核或重新构建。你可以更新元数据并重新提交进行审核。
我们现在准备好发布应用了。但在此之前,我们需要了解可以使用哪些移动应用分发平台来公开发布它。
移动应用分发平台
移动应用分发平台 是开发者发布、分发并销售移动应用的数字市场。这些平台对于开发者而言至关重要,可以帮助他们触及更广泛的受众,并为其应用赢得曝光。一些最受欢迎的移动应用分发平台包括:
-
Apple App Store (
www.apple.com/de/app-store/
): iOS 设备的官方应用商店,包括 iPhone、iPad 和 iPod Touch。开发者可以提交应用进行审核,并在审核通过后提供下载。 -
Google Play Store (
play.google.com/store/apps
): Android 设备的官方应用商店,提供各种应用、游戏和其他数字内容,供用户下载。与 Apple App Store 类似,开发者可以提交应用进行审核,并在审核通过后提供下载。 -
Amazon Appstore (
www.amazon.com/mobile-apps/b?ie=UTF8&node=2350149011
): 亚马逊的应用商店,是 Android 应用的替代市场,提供广泛的应用和游戏,包括一些仅在该平台上独有的应用。 -
Microsoft Store (
apps.microsoft.com/store/apps
): Windows 设备的应用商店,包括 Windows Phone、Surface 平板电脑和 Windows PC 等设备。开发者可以通过该平台分发移动应用和桌面应用。 -
Samsung Galaxy Store (
galaxystore.samsung.com/apps
): 三星的应用商店,提供专为三星设备定制的各种应用和游戏,包括独家内容和促销活动。 -
Huawei AppGallery (
appgallery.huawei.com/
): 华为的官方应用商店,提供适用于华为和荣耀设备的应用和游戏。由于与谷歌服务断开连接,华为一直在发展其应用商店,作为 Google Play Store 的替代方案。
需要注意的是,所有这些应用商店都有相关的指南和政策,提交应用时必须遵守:
-
App Store (
developer.apple.com/app-store/review/
) -
Google Play (
play.google.com/console/about/guides/releasewithconfidence/
) -
亚马逊应用商店 (
developer.amazon.com/docs/app-submission/understanding-submission.html
) -
华为应用市场 (
developer.huawei.com/consumer/en/doc/distribution/app/50104
)
确保你的应用符合所有要求和指南,以便按时完成审核过程。
App Store 提交
将 iOS 应用上传到 Apple App Store 包括以下步骤:
-
你需要配置你的 Xcode 项目,以便使用必要的配置文件和证书构建并归档你的应用。确保你拥有用于应用分发的必要配置文件和证书,而不仅仅是开发用的证书。
-
访问App Store Connect网站,并使用你的 Apple Developer 账户登录。
-
点击我的应用并选择你要提交的应用。
-
在左侧边栏中,点击App Store标签,滚动到元数据部分,点击编辑按钮。在这里,你可以为你的应用添加必要的元数据,包括应用名称、副标题、描述、关键词和类别。
-
滚动到截图与视频部分并点击编辑按钮。在这里,你可以为每种设备类型和你支持的语言添加应用截图。确保你的截图符合 App Store 的指南,包括正确的尺寸和分辨率。
-
你可以通过拖放截图到截图部分,或点击+按钮从电脑中选择截图进行上传。
-
你还需要设置你的应用价格或选择将其免费提供。你还可以选择哪些国家或地区可以使用你的应用。
-
完成所有必要步骤后,你可以将应用提交到 App Store 进行审核。确保你已彻底测试应用,并符合 Apple 的所有指南和政策。
-
Apple 将审核你的应用,以确保它符合所有技术、设计和内容要求。审核过程通常需要几天时间,但如果应用存在问题,可能会更长。
一旦你的应用获得批准,你可以在 App Store 上发布它。你可以选择立即发布,或者安排未来某个日期发布。
App Store 提交提示
提交应用到 App Store 时,有几个步骤可以增加被接受的机会。首先,你应确保所有必填信息已包含并准确无误。这些信息包括截图、视频、联系方式、应用描述和隐私政策:
-
确保应用程序与最新的 iOS 版本和设备兼容。
-
使用 beta 测试工具在提交应用到 App Store 之前进行测试。
-
投资于优质的设计和开发服务,以确保您的应用符合 App Store 对质量的标准。
-
遵循 App Store 提交应用的指南,包括提供完整且准确的应用描述。
通过遵循这些提示,应用开发者可以提高应用被 App Store 接受的机会。
Google Play 商店提交
Google Play 商店 (play.google.com/store/apps
) 是 Android 设备的官方应用分发平台。与 Apple App Store 类似,开发者可以将他们的应用提交到 Play 商店进行审批,并分发给 Android 用户。
发布 Android 应用可能令人兴奋,但了解涉及的过程对于确保应用的成功至关重要。
将 Android 应用上传到 Google Play 商店涉及以下步骤:
-
在 Google Play 控制台中,进入所有应用程序标签页,点击创建应用按钮。选择一个默认语言并为您的应用输入标题。这将创建一个应用的草稿列表,您可以稍后更新更多细节。
-
接受开发者计划政策和美国出口法律,然后点击创建 应用按钮:
图 6.23 – Google Play 控制台 – 创建应用
-
请确保使用安全证书签名您的 APK 或 AAB 文件,创建版本代码,并更新应用的版本名称。
-
在 Google Play 控制台中,进入发布概览部分,然后选择生产。通过选择适当的发布轨道(alpha、beta 或 production)来创建一个新的发布版本。上传您的 AAB 文件并填写必要的详细信息,如下图所示:
图 6.24 – Google Play 控制台 – 发布仪表板
- 现在,您可以创建一个新的生产发布版本,如下图所示:
图 6.25 – Google Play 控制台 – 创建生产发布
- 如果您的应用有应用内产品、订阅或使用任何其他 Google Play 服务,请在获利部分中进行相应配置:
图 6.26 – Google Play 控制台 – 获利
最后,在应用内产品下,您可以添加 Google 支付详细信息,如下所示:
图 6.27 – Google Play 控制台 – 应用内产品
提交后,谷歌将审核您的应用,通常需要几个小时到几天时间。审核通过后,您的应用将在 Google Play 商店上线,您可以开始跟踪其性能、管理更新并回应用户反馈。
此外,您可以将安卓应用上传到其他应用商店,而不是 Google Play 商店,例如亚马逊应用商店、华为应用市场和三星 Galaxy Store。
要将应用上传到亚马逊应用商店,您需要拥有一个亚马逊开发者账户(developer.amazon.com/
)。
将安卓应用上传到亚马逊应用商店涉及以下步骤:
- 您需要配置您的 APK,并使用有效的证书进行签名。确保您的应用符合亚马逊的技术和设计指南(
developer.amazon.com/docs/app-submission/understanding-submission.html
),并且使用有效的签名证书构建:
图 6.28 – 亚马逊开发者仪表盘
-
一旦您的应用准备好上传,您需要提供一些有关应用的信息。这包括应用的名称、描述、关键词、截图以及其他元数据,帮助用户发现并下载您的应用。亚马逊应用商店目前支持分阶段发布(
developer.amazon.com/docs/app-submission/release-updates-in-staged-rollouts.html
),让您逐步将应用的新版本引入市场。 -
完成所有必要的步骤后,您可以将应用提交到亚马逊应用商店进行审核。确保您已彻底测试应用,并遵守所有亚马逊的指南和政策。
-
亚马逊将审核您的应用程序,以确保其符合所有技术、设计和内容要求。审核过程通常需要几个小时,但如果应用程序存在问题,可能会花费更长时间。
一旦您的应用被批准,您可以在亚马逊应用商店发布它。您可以选择立即发布或安排未来的发布日期。
完成 CI/CD 工作流
要完成我们在第四章《通过移动 DevOps 实现持续集成和交付》中创建的 CI/CD 工作流,您可以将所需的步骤添加到您的流水线中,以将 iOS 和安卓应用发布到 TestFlight、App Store、Firebase App Distribution、Google Play 商店或任何其他分发平台。
例如,以下是使用 Xcode Archive & Export for iOS 和 Deploy to App Store Connect 等步骤,通过 Bitrise 构建、测试和发布 iOS 应用到 App Store 的工作流概览,如下所示的截图所示:
图 6.29 – Bitrise iOS CI/CD 工作流
这是一个高层次的概述,展示了使用 Codemagic 构建、测试并发布 iOS 应用到 App Store 的 YAML 文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/codemagic-iOS.yml
。
此外,你还可以使用 GitHub Actions 执行相同的步骤,构建、测试并发布 iOS 应用到 App Store:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/.github/ios.yml
。
现在,让我们来看看使用 Bitrise、Codemagic 和 GitHub Actions 构建、测试和发布 Android 应用的一些示例。
我们将从 Bitrise 开始。以下截图展示了 Firebase 应用分发和 Google Play 的高级 Android CI/CD 工作流:
图 6.30 – Bitrise Android CI/CD 工作流,用于 Firebase 应用分发和 Google Play
对于 Codemagic,你可以在 github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/codemagic-android.yml
找到 YAML 文件。
最后,对于 GitHub Actions,你可以在 github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-6/.github/android.yml
找到 YAML 文件。
此外,我们还可以将 Android 应用上传到其他应用商店,例如针对华为设备的 Huawei 应用商店。以下是使用 Bitrise 构建、测试和部署 Android 应用到 Huawei 应用商店的工作流示例:
图 6.31 – Bitrise Android CI/CD 工作流,用于 Huawei 应用商店
一旦我们将应用发布并部署到不同的应用商店,我们需要等待质量团队给我们反馈关于版本的意见。如果通过审批,它可以发布到不同的商店;否则,我们将收到拒绝的理由。在这种情况下,我们必须修复问题并上传另一个版本。
现在,让我们来看一些常见的应用拒绝原因以及如何避免它们。
应用商店何时拒绝应用?
开发一个应用可能是一个耗时且昂贵的过程。应用开发者希望他们的应用能被应用商店接受,但有时它们会被拒绝。
当应用被拒绝时,这对开发者来说可能是一次令人沮丧的经历。理解应用被拒的原因非常重要,以便避免再次发生。
让我们来看一下 App Store 拒绝应用的最常见原因(developer.apple.com/app-store/review/#common-app-rejections
),以及应用开发者可以做些什么来提高被接受的机会。
不完整或不正确的信息
最常见的拒绝原因之一是不完整或不正确的信息。例如,如果应用开发者没有提交所有必需的截图和视频,App Store 会拒绝该应用。应用开发者还应确保应用的名称、描述和关键词准确无误并且是最新的,提供完整且准确的信息,以确保应用能够被接受。
质量差
App Store 还会拒绝不符合质量标准的应用。这包括那些难以使用、存在过多漏洞,或者用户体验不佳的应用。因此,在第五章《实施稳健的移动应用测试策略》中,我们建议在 DevOps 和 CI/CD 流水线中使用测试自动化,以作为移动应用质量的把关。
此外,App Store 有特定的设计指南(developer.apple.com/app-store/review/guidelines/#design
),必须遵循这些指南才能让应用被接受。例如,应用应易于导航,具有简洁的用户界面,并且没有拼写错误或其他问题。如果应用的设计未符合 App Store 的标准,可能会被拒绝。
不可接受的内容
App Store 还会拒绝包含非法内容的应用。这包括包含冒犯性或不当语言、侵犯版权或商标的内容,以及宣传仇恨或暴力的应用。应用开发者应确保其应用不包含任何可能被视为冒犯性或非法的内容。
正如你可能已经注意到的,我们讨论了手动发布移动应用的过程,目的是理解每个应用的流程和前提条件。
现在,让我们探讨一些自动化工具,这些工具可以帮助移动团队自动发布应用,而不是按照这里讨论的手动流程。
使用自动化发布工具自动化你的发布流水线
在撰写本文时,市面上有多种工具可帮助移动团队加速并自动化移动应用发布过程。这包括像 Runway 这样即用型的解决方案,以及 Bitrise 的发布管理附加组件。
Runway
Runway.team(www.runway.team/
)是一个简化移动应用发布过程的平台。它拥有一个用户友好的界面,使开发者能够轻松上传和分发他们的移动应用:
图 6.32 – Runway 仪表盘
只需几次点击,你就可以将应用推送到不同的应用商店,省去了手动提交的烦恼。Runway 提供了不同 CI/CD 平台之间的集成,如 Bitrise、Codemagic、GitHub Actions 等,自动化构建、测试和发布应用程序的过程。这节省了你的时间和精力,并通过早期发现问题确保高质量的产品。
它支持 Android 和 iOS,使其成为开发跨平台应用程序的多功能选择。你可以在一个中心位置管理两个平台的应用发布,如下所示,针对 iOS 应用:
图 6.33 – iOS 提交的 Runway 仪表板
你也可以对 Android 应用做同样的操作:
图 6.34 – Android 提交的 Runway 仪表板
它允许你设置不同的发布渠道(例如 alpha、beta 和生产),让你可以在上线前与不同的用户群体进行测试:
图 6.35 – Android 发布摘要的 Runway 仪表板
集成是 Runway 的核心,它投入大量精力使集成成为体验的一部分,确保其无缝、强大和安全:
图 6.36 – Runway 与分发服务的集成
你可以通过其 iOS (demo.runway.team/dashboard/org/demo/app/appollo-ios
) 和 Android (demo.runway.team/dashboard/org/demo/app/appollo-android
) 的沙盒解决方案体验该平台。
Bitrise 发布管理附加组件
在 Bitrise 发布管理 (devcenter.bitrise.io/en/release-management.html
) 中,你可以查看应用程序的发布状态。这样,所有团队成员都能了解即将发布的进度,从而更有效地协调工作。
使用发布管理,你可以自动化与特定发布相关的任务,例如监控功能准备情况或提交应用程序进行 App Store 审核:
图 6.37 – Bitrise 发布管理附加组件
你可以随时检查提交过程的状态。例如,下面的截图显示我们已经将应用提交到 TestFlight,下一步是将应用提交到 App Store:
图 6.38 – Bitrise 发布管理阶段
此外,其他工具也可以帮助你发布移动应用,例如 TestFairy (testfairy.com/app-distrubution
) 和 AppCenter (learn.microsoft.com/en-us/appcenter/distribution/
)。
启动应用
一旦应用被 App Store 团队批准,你可以通过多种方式通知用户新的版本发布,并且尝试通过ASO优化你的应用。让我们一起探索如何使用应用内更新。
应用内更新
用户可以直接通过应用更新他们的应用,而无需访问应用商店,这是一种很好的方式来更新应用的最新功能和修复的漏洞。应用内更新让用户能够直接在应用内更新,而无需去应用商店。
通过定期更新你的应用,你可以保持用户的参与度,减少用户因故障或缺乏新功能而放弃应用的可能性。
应用内更新有两种类型:
-
使用灵活的应用内更新意味着用户可以在下载和安装更新的同时继续使用应用。更新完成后,用户会被提示重新启动应用,以便使用更新后的版本。
-
即时应用内更新要求用户在使用更新版本之前先进行更新。一旦用户同意更新,更新后的应用就会被下载并安装。
应用内更新可以成为应用开发者改进用户体验、确保更多用户使用最新版本应用的强大工具。开发者通过实施应用内更新,可以增加用户参与度,减少流失,并在快速发展的移动应用市场中保持竞争力。
应用商店优化(ASO)
ASO 旨在优化移动应用,以便在应用商店中获得更好的可见度和更高的排名。这个过程包括研究关键词、撰写引人注目的标题和描述、建立链接、以及创建截图和视频。
ASO 受到以下因素的影响:
-
应用的标题在搜索引擎优化中起着至关重要的作用,因为它是用户在搜索应用时首先看到的内容。
-
应用的描述应该清楚地解释它是什么以及它的用途。描述中应该使用关键词,但要确保它自然流畅,而不是听起来像是垃圾信息。
-
应用关键词是用户可能在应用商店搜索的词语或短语。将相关关键词包含在应用的描述、标题和其他元数据中,以提高应用的可见度。
-
你可以通过鼓励用户评分和评论,以及回应负面反馈,来提高应用在搜索引擎结果中的可见度。
-
确保应用图标醒目,并且能够反映应用的用途,帮助用户在浏览应用商店时快速识别。
-
视频和截图可以帮助用户理解应用的功能。您应该使用高质量的图片和视频展示应用的核心功能。
-
如果您的应用支持多语言,请优化每种语言的应用商店元数据。这样可以提高在不同地区的应用可见性。
-
确保您的应用定期更新,添加新功能、修复 bug 和提升性能。
-
对应用图标、截图和描述进行 A/B 测试,以找到表现最佳的组合。
ASO 是一个持续的过程,定期监控和更新应用商店列表非常重要,确保其保持最新状态并反映应用的任何变化。
根据收集到的数据,对应用商店列表进行迭代和优化。
遵循此检查清单可以提高您的应用的可见性和转化率,进而增加下载量和用户参与度。市场上有不同的工具可以帮助您进行 ASO,例如 appfigures (appfigures.com/aso-tools
)。他们提供了关于 iOS 应用商店排名前列应用的有趣见解 (appfigures.com/top-apps/ios-app-store/united-states/iphone/top-overall
),Google Play 应用 (appfigures.com/top-apps/google-play/united-states/top-overall
),以及其他商店的相关数据。此外,他们还提供了关于 ASO 的不同资源和指南 (appfigures.com/resources/guides
)。
发布后
一旦移动应用发布到不同的应用商店,开发者仍然需要执行各种维护任务。这包括监控应用评论、回应用户咨询、并更新应用以修复 bug 和添加新功能。
监控应用性能
一旦应用发布,就必须密切监控,以确保它符合发布策略要求。作为这一过程的一部分,您可以监控用户反馈和使用分析,处理用户反馈和评论,分析应用和 bug 报告。通过这样做,我们可以发现潜在问题,并确保用户获得最佳体验。我们将在第七章中探讨移动应用监控、可观察性和分析,建立移动应用监控、可观察性和分析。
规划未来的发布
在发布当前版本后,保持您的移动应用更新并持续改进是保持用户参与度的关键。为了规划未来的发布,您可以按照以下步骤进行:
-
根据反馈和分析,更新您的产品路线图,包括新功能、增强功能和 bug 修复。您的业务目标应该与那些最能帮助用户的功能保持一致。
-
在实现计划的功能和增强时,请遵循编码和设计的最佳实践。确保所有的 bug 和问题都能被识别和修复。
实施发布列车
移动发布列车是一种加速您发布周期的过程。这种方法将帮助您更一致地发布,并允许分布式团队围绕应用开发更加对齐。
一旦您有了 CI/CD,您就可以构建列车。
在开发阶段,您的团队有时间审查、构建、测试和合并应该成为列车一部分的主分支功能,如下图所示:
图 1.39 – 移动发布列车
在发布列车期间,可能涉及广泛的利益相关者,包括开发团队、质量保证团队、产品管理以及最终发布完成前的多次迭代和测试阶段。
如何实施发布列车
要实施发布列车,您必须执行以下步骤:
-
采用固定发布列车的时间表(例如,2 周或 1 周)。
-
确定谁将负责管理发布(发布经理)。
-
使用功能标志和分阶段发布来增加发布的信心。
-
确定发布列车的范围。发布计划包括每个发布中将包含的功能和功能。
-
根据明确的流程计划和优先考虑功能。产品经理、开发人员和用户等广泛的利益相关者应参与此过程。
请记住,这是一个持续的过程,因为我们处于维持阶段,这需要外部支持以确保我们保持在轨道上。
总结
移动应用发布管理是一个关键的应用开发过程,需要仔细规划、测试和执行。遵循本章中概述的最佳实践可以确保顺利的发布过程并最大化用户满意度。
移动应用的发布管理涉及计划、调度、协调和部署移动应用的新版本或更新到用户。这一过程对于定期更新应用程序以及新功能、错误修复和安全补丁至关重要。但是,在发布过程之前、期间和之后,我们应考虑不同的步骤。让我们一起探讨它们。
移动应用发布管理对企业优化用户体验和保持高质量至关重要。它涉及计划和实施新功能/更新和热修复。
然而,发布移动应用程序需要不同的流程、步骤和工具。我们在本章涵盖的主题中发现了移动应用程序发布管理过程的各个阶段。
在下一章中,我们将继续向我们的移动应用和 CI/CD 管道添加更多功能,以确保我们向用户快速而频繁地发布。
第三部分:监控、优化和保障移动 DevOps
移动 DevOps 涉及在生产环境中监控移动应用的性能和使用情况,并利用这些数据向开发团队提供反馈。这有助于快速识别和解决问题,提升整体用户体验。
本部分包含以下章节:
-
第七章**,建立移动应用监控、可观察性和分析
-
第八章**,确保移动应用和 DevOps 安全
-
第九章**,移动 DevOps 最佳实践
第七章:建立移动应用的监控、可观测性和分析
在前一章中,我们学习了如何成功将移动应用发布到相关的应用商店。然而,这并不是 CI/CD 过程的最后阶段。下一个阶段是持续支持我们的客户并追踪应用使用情况、性能、崩溃等。这就是移动应用的监控、可观测性和分析发挥作用的地方。在本章中,我们将涵盖以下内容:
-
什么是监控?
-
什么是可观测性?
-
实施监控和可观测性对移动应用的好处
-
监控和可观测性之间的区别
-
什么是分析?
-
在监控和可观测性中考虑的因素
-
实施移动应用的监控和可观测性的步骤
-
移动应用的监控、可观测性和分析工具
-
移动应用监控、分析和可观测性的关键指标
-
实施移动应用的持续监控
移动应用之所以复杂,是因为它们与各种外部系统交互,如服务器、API 和数据库。这种复杂性会使得在问题发生时识别和诊断问题变得具有挑战性。监控、可观测性和分析可以实时反馈应用性能、用户行为和系统交互情况。这些信息可以帮助开发人员在问题影响用户之前识别潜在问题,并在问题发生时开发有效的解决方案。
另外,为了提高应用的评级、用户参与度和收入,您应建立监控和可观测性实践,以在它们对用户产生负面影响之前识别和解决任何问题。确保您的移动应用程序表现最佳非常重要,提供无缝的用户体验。
但首先,让我们更多了解监控、可观测性和分析。
什么是监控?
移动应用的监控指的是持续跟踪和分析移动应用程序的性能、可靠性和整体稳定性,以确保无缝的用户体验。它涉及收集关于应用崩溃、错误、冻结和其他性能问题的数据,帮助开发人员识别和解决可能会对用户体验产生负面影响的任何问题。
监控的目标是识别和解决可能影响用户体验质量的任何问题,例如崩溃或加载时间过长。
下图重点介绍监控中的不同关键组件,如应用崩溃、错误跟踪和应用性能:
图 7.1 – 监控组件
为了确保应用程序的最佳性能和用户满意度,开发团队必须优先解决这些关键组件。通过分析和解决潜在问题,团队可以保证卓越的用户体验。让我们深入了解每个组件,以充分理解它们的重要性:
- 应用崩溃报告:这包括识别和收集崩溃信息,包括应用崩溃的频率、受影响的设备以及导致崩溃的具体情况。这些数据有助于理解和修复根本原因。
“监控崩溃的症状,而不仅仅是 崩溃本身。”*
-
错误追踪:这包括 API 错误、网络错误或应用运行时发生的代码异常。这些信息可以用来解决和诊断应用代码中的问题。
-
应用性能监控:这衡量应用的响应性、加载时间及其他性能指标,以确保平稳的用户体验。
什么是可观察性?
移动应用的可观察性指的是通过分析应用的外部输出(如日志、指标和追踪)来获得对应用内部状态的洞察。它使开发人员或发布团队能够监控、理解和排查应用的行为和性能。
“可观察性是我们通过 应用二进制文件 在用户设备生产环境中看到发生的事情的能力。*”
可观察性对维护高质量的用户体验至关重要,确保应用的可靠性和稳定性。
可观察性专注于不同的关键方面,如图 7.2所示:
图 7.2 – 可观察性组件
如我们所见,可观察性的目标是深入了解系统的运行方式,检测问题并有效地排除故障。可观察性关注多个关键方面,包括以下内容:
-
日志:在应用运行时,日志包含关于用户操作、系统事件和错误信息的内容。分析日志可以帮助开发人员识别模式、诊断问题,并更好地了解应用。
-
指标:指标跟踪应用的健康状况,识别瓶颈并优化性能。
-
追踪:追踪提供了对单个请求或事务的详细视图,展示它们如何在应用的各个组件中流动,如网络调用、API 交互和数据库查询。
为移动应用实施监控和可观察性带来了许多好处,这些好处提升了应用的性能、用户体验和整体成功。让我们来看一些主要的优势。
实施移动应用监控和可观察性的好处
实施移动应用监控和可观察性有多个好处,其中一些如下:
-
监控和可观察性使你能够识别和解决应用中的性能瓶颈。
-
持续跟踪应用性能和用户行为有助于你做出数据驱动的决策,从而改善用户体验,最终提高用户留存率和满意度。
-
你可以通过监控和可观察性快速检测和诊断问题,并在它们对用户产生负面影响之前解决问题。
-
在问题变得严重之前,通过更好地理解应用的行为,可以主动解决可观察性相关的潜在问题。
“一旦我们在应用中具有可观察性,当事情变得奇怪但仍然 工作时,我们可以发出警报。”
- 可分析您应用的性能数据以优化资源使用,从而节省成本并提高效率。
监控与可观察性的区别
监控和可观察性是互补的实践,在一起使用时,有助于团队构建和维护高质量的移动应用。正如图 7**.3所示,监控侧重于积极追踪性能并响应已知问题,而可观察性则强调深入理解应用行为,以识别趋势、诊断未知问题和优化性能:
图 7.3 – 监控与可观察性
监控系统是被动的,而可观察性系统是主动的。通过结合这两种实践,团队可以创建全面的策略来维护和改进他们的移动应用。
什么是分析?
在移动应用分析中,收集、测量、分析和解释有关应用使用、用户行为和性能的数据。开发人员、营销人员和产品经理可以利用移动应用分析来优化应用性能、增强用户参与度和提高客户忠诚度。分析用户偏好和痛点能够实现数据驱动的决策和持续改进。
分析帮助您了解如何优化用户行为和应用,以实现业务目标。
分析侧重于不同的关键方面,如图 7**.4所示:
图 7.4 – 分析组件
正如我们所看到的,分析涵盖了各种关键方面:
-
用户获取和归因:跟踪新用户的来源,如有机搜索、付费广告或推荐,有助于确定营销活动的有效性,并识别最有价值的用户获取渠道。
-
用户参与度:监控用户与应用的互动,包括会话持续时间、会话频率、访问的屏幕和执行的应用内操作,可以深入了解用户偏好,帮助识别改进的方向。
-
用户保留和流失:分析用户保留率和流失模式有助于了解影响用户满意度或不满意度的因素,并帮助开发人员实施促进长期用户忠诚的改变。
-
用户分割:根据人口统计、行为和偏好对用户进行分组,可实现个性化营销活动、定向促销和量身定制的用户体验。
-
应用内购买和收入:跟踪应用内购买、订阅收入和广告收入有助于评估应用的盈利策略,并识别优化和增长的机会。
监控和可观察性中的考虑因素
为移动应用建立监控和可观察性策略时,我们需要考虑以下因素:
-
定义监控和可观察性策略的关键目标和目标。这决定了需要跟踪的指标,如应用性能、用户参与度和错误率,从而减少停机时间,确保符合法规或改善用户体验。
-
考虑应用的目的和用户期望,以确定合适的指标。例如,如果应用是一个游戏,你应该跟踪用户参与度,例如玩游戏的时间、完成的关卡数和社交分享。另一方面,如果应用是生产力工具,你应该跟踪应用性能,例如响应时间、加载时间和错误率。
-
定义实现这些目标所需的工具和技术也非常重要。一旦目标确定,接下来的步骤就是实施监控和可观察性工具。监控和可观察性有多种工具可供选择,包括 APM(应用性能管理)、日志管理和分析工具。选择与目标和需求相符的正确工具至关重要。
-
确定需要监控的关键指标和 KPIs(关键绩效指标),如系统性能、资源利用率、错误率和响应时间。确保这些指标是相关的、可操作的,并且可以用来跟踪朝着目标的进展。
-
收集数据只是第一步。分析已收集的数据并根据获得的洞察采取行动至关重要。你可以利用这些数据来识别性能瓶颈、解决问题并优化应用性能。
-
确定哪些数据源是必要的,以收集所需的指标。这可以包括日志、应用程序追踪和系统或网络指标。
-
选择适当的工具和技术来分析和可视化数据,如仪表板、异常检测和警报机制。确保这些工具能够提供可操作的洞察,以支持决策。
-
设置警报和通知机制,及时通知相关利益相关者出现问题或潜在问题。配置警报阈值和升级策略,以平衡误报和漏报。实时警告开发者应用崩溃和错误,并提供关于问题原因的详细信息。
-
实施应用内反馈。可以直接在应用内提供反馈和建议,这有助于开发者识别改进点。
-
确保你的监控和可观察性策略与其他基础设施中的工具(如事件管理或 CI/CD)良好集成。
-
为团队成员提供培训和文档,确保他们能有效使用监控和可观测性工具,并理解收集到的数据。
实现移动应用监控和可观测性的步骤
让我们看看实现监控和可观测性的步骤:
-
根据你的需求、预算和平台支持选择适合的工具。一些流行的选择包括以下几种:
-
监控工具:Firebase Crashlytics、Bugsnag、Sentry、Embrace 和 Instabug
-
分析工具:Firebase Analytics、Amplitude、Mixpanel 和 Google Analytics for Mobile
-
可观测性工具:Datadog 和 NewRelic
-
移动性能 工具:Emerge
-
事件管理:PagerDuty、Incident.io 和 Grafana Incident
-
-
对于选择的工具,按照官方文档的步骤在移动应用中设置 SDK。这通常涉及向构建或依赖文件中添加依赖项,并在应用代码中初始化 SDK。
-
配置监控工具以捕捉崩溃、非致命错误和性能问题。你还可以设置自定义事件、标签或用户属性,以便为调试提供更多上下文。
-
定义你希望追踪的事件和用户属性,同时考虑用户参与度、转化率和留存率等方面,使用分析工具来辅助决策。
-
通过在应用中添加代码来实现事件追踪,记录在相关节点上定义的事件和用户属性。例如,当用户完成购买或到达特定应用页面时,你可以记录一个事件。
-
定期监控你选择的监控工具的仪表盘,以识别崩溃、性能瓶颈和其他问题。
-
设置警报和通知,以便及时了解需要立即处理的关键问题。如果发生紧急问题,你还可以将这些警报通过 ChatOps 集成发送为 Slack 消息给 Microsoft 团队,甚至通过 SMS 或电话通知。
-
使用你选择的分析工具的仪表盘分析用户行为,例如活跃用户数、会话时长和用户留存率。
-
创建自定义报告或使用内建报告来识别趋势、模式和改进的方向。
-
利用分析洞察设计并实施 A/B 测试,以优化应用的用户体验、参与度和转化率。
-
分析 A/B 测试的结果,并做出基于数据的决策以改进你的应用。
现在我们已经了解了如何开始进行移动应用的监控和可观测性,接下来让我们讨论市场上移动应用的监控、可观测性和分析工具,以及它们之间的差异。
移动应用的监控、可观测性和分析工具
开发者可以使用工具监控应用性能,接收实时通知,并通过 SDK 与警报工具集成。我们一起来看看这些工具。
监控和可观测性工具
如前所述,监控和可观察性工具应与事件管理工具集成,以便能够处理值班管理或应对事件。
可观察性工具对于移动应用开发和维护至关重要。它们提供宝贵的数据和指标,帮助识别瓶颈、改善应用稳定性并增强用户体验。流行的选项包括监控工具。
让我们讨论一些可以帮助我们实现这一目标的工具。
Firebase Crashlytics
Firebase Crashlytics (firebase.google.com/products/crashlytics
) 是一个优秀的崩溃报告工具,专为移动应用开发者设计,提供 实时崩溃报告、详细诊断和与其他 Firebase 工具的无缝集成。其直观的仪表板和准确的崩溃报告使其成为开发者改善应用稳定性的可靠选择。
以下是 Firebase Crashlytics 的一些功能:
-
实时崩溃报告:它监控你的应用并自动捕获崩溃数据,提供关于任何问题的最新信息。
-
详细的崩溃诊断:它深入分析每次崩溃的细节,并提供丰富的诊断信息,如堆栈跟踪、设备信息和用户数据,帮助你定位问题。
-
崩溃分析:它提供有价值的分析,帮助识别趋势、检测常见问题并优先修复漏洞。
-
与 Firebase 的集成:作为 Firebase 套件的一部分,Crashlytics 能与其他 Firebase 工具无缝协作,简化你的应用开发工作流程。
-
跨平台支持:它支持 Android 和 iOS 应用,使其成为移动应用开发者的多功能选择。
你可以通过访问 https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk 来轻松地将 Crashlytics SDK 添加到你的 Android 应用中;对于 iOS、Flutter 和 Unity 应用,你可以按照相同的步骤操作。
此外,你还可以将 Crashlytics 数据导出到 BigQuery (firebase.google.com/docs/crashlytics/bigquery-export
) 进行进一步分析。你可以使用 BigQuery SQL 分析数据,导出到其他云服务提供商,并使用 Google Data Studio 可视化数据并创建自定义仪表板。
此外,你还可以通过 Android Studio 内的 App Quality Insights 分析 Firebase Crashlytics 中的任何问题 (developer.android.com/studio/debug/app-quality-insights
)。
Xcode Organizer
Xcode Organizer(developer.apple.com/documentation/xcode/analyzing-the-performance-of-your-shipping-app
)是一个优化 Apple 生态系统内移动应用性能的工具。它能够提供详细的性能数据、实时监控和以用户为中心的分析,使其成为开发者在提供卓越用户体验过程中不可或缺的资源。
Xcode Organizer 帮助你管理 iOS、macOS、watchOS 和 tvOS 应用开发项目的各个方面。它提供了组织、归档和分发应用的功能,如下图所示:
图 7.5 – 从窗口菜单打开 Xcode Organizer
你可以查看崩溃情况以及与特定版本相关的不同指标,如下图所示:
图 7.6 – Xcode Organizer 的主屏幕
以下是 Xcode Organizer 的一些功能:
-
深入的性能洞察:这个工具提供了丰富的性能指标,从 CPU 和内存使用情况到网络活动。它可以帮助你深入了解应用的内部运行情况。
-
实时监控:你可以实时观看应用在用户交互时的表现。这个功能特别有助于识别可能影响用户体验的性能问题和崩溃。
-
以用户为中心的分析:Xcode Organizer 的一大亮点是能够根据不同的用户交互分析性能数据。这对进行有针对性的改进、提升最常见的用户场景至关重要。
-
对比分析:你可以衡量不同版本或构建的应用性能。这有助于你追踪所做更改的影响,并找出需要关注的区域。
然而,值得注意的是,这个工具仅与在 Apple 生态系统内为 iOS、macOS、watchOS 和 tvOS 开发的应用兼容。开发跨平台应用的开发者可能会觉得这个工具不太有用。
需要记住的是,Xcode 的界面和特性可能会随着新的更新而有所变化。为了保持信息的更新,最好参考 Xcode 文档(developer.apple.com/documentation/xcode
)或相关资源以获取最新信息。
Firebase 性能监控
Firebase 性能监控 (firebase.google.com/products/performance
) 是一个旨在帮助您分析和优化应用性能,从而提供流畅用户体验的工具。它是移动应用开发者分析和优化性能的一个好选择。凭借实时性能监控、可自定义的指标以及与其他 Firebase 工具的无缝集成,它是确保流畅用户体验的强大工具。
以下是 Firebase 性能监控的一些功能:
-
实时性能监控:它自动实时跟踪应用的性能指标,为您提供有关应用运行情况的宝贵见解
-
可自定义的指标:可以根据应用的具体需求创建定制的性能指标
-
详细的性能数据:它分析延迟、渲染、网络使用等方面的详细数据,以确定性能瓶颈并优化您的应用
-
跨平台支持:它与安卓和 iOS 应用无缝兼容,是移动应用开发者的多功能选择
-
与 Firebase 集成:它作为 Firebase 套件的一部分,这意味着性能监控可以与其他 Firebase 工具无缝集成,从而简化您的应用开发流程
-
性能数据仪表盘:性能数据以用户友好的仪表盘形式展示,便于您分析指标并优化应用
您可以通过遵循 firebase.google.com/docs/perf-mon
上的步骤,轻松将性能监控 SDK 添加到您的 Android、Flutter 或 iOS 应用中。
当您添加性能监控 SDK 时,Firebase 会自动收集应用中若干常见过程的数据,包括以下内容:
-
苹果和安卓应用的启动时间
-
苹果和安卓应用的屏幕渲染
-
所有类型应用的网络请求
以下是从性能监控中收集到的一些信息示例:https://firebase.google.com/support/privacy?authuser=0&hl=en#performance-monitoring-collected-info
。
Instabug
Instabug (www.instabug.com/
) 是一个强大的全方位平台,专为寻求全面的错误报告、崩溃报告和性能监控工具的移动应用开发者设计。其便捷的集成、直观的仪表盘和广泛的功能使其成为那些希望提升应用稳定性和用户体验的开发者的优秀选择,如下图所示:
图 7.7 – 发布视图
以下是 Instabug 的一些功能:
- 应用内错误报告:它允许用户在应用内直接报告错误,并附带注释截图,使收集宝贵反馈变得更加简单:
图 7.8 – Bug 报告视图
- 崩溃报告:它帮助实时获取崩溃报告,并提供详细信息,如堆栈跟踪和用户数据,使你能够快速识别并修复问题:
图 7.9 – 崩溃视图
- 性能监控:Instabug 通过其监控工具帮助你关注应用的性能,跟踪关键指标,如应用启动时间、网络请求和 UI 响应性:
图 7.10 – Bug 报告详细视图
- 应用内调查:此调查通过可定制的应用内调查轻松收集用户反馈,帮助你做出数据驱动的决策,从而提升你的应用:
图 7.11 – 创建测试调查
-
集成:Instabug 与流行的项目管理、沟通和问题跟踪工具(如 Jira、Slack 和 GitHub)集成,简化你的开发工作流程。
-
跨平台支持:Instabug 与 Android、Flutter、React Native、Xamarin、Cordova 和 iOS 应用无缝兼容,满足各种开发者需求:
图 7.12 – Instabug 支持的平台
此外,Instabug 还提供了一个沙盒环境 (demo-dashboard.instabug.com/demo
),让你可以体验产品并了解更多功能。
但请注意,Instabug 的免费版本有一些限制,可能需要升级到付费计划才能访问高级功能和更高的使用限制。
这是将 SDK 添加到你的 iOS 应用的文档:docs.instabug.com/docs/ios-integration
。
Embrace
Embrace (embrace.io/
) 是一款强大的移动应用性能管理平台,提供全面的性能监控、崩溃报告和用户会话跟踪,具体如以下截图所示。其独特的重播功能和详细的洞察分析使其成为开发者优化应用性能和用户体验的绝佳选择。然而,缺乏免费版本以及初期的学习曲线可能是一些用户的挑战:
图 7.13 – ANR 摘要
以下是 Embrace 的一些功能:
-
性能监控:Embrace 提供详细的应用性能洞察,涵盖关键指标,如应用启动时间、网络请求和用户界面响应性
-
崩溃报告:你可以获取实时崩溃报告,包含丰富的信息,如堆栈跟踪、设备数据和用户操作,帮助你快速识别并解决问题:
图 7.14 – 崩溃摘要
- 用户会话跟踪:Embrace 使你能够监控单个用户会话,提供完整的用户体验图景,包括交互和遇到的问题:
图 7.15 – 用户时间线
这里是将 SDK 添加到你的 Android 应用程序的文档:embrace.io/docs/android/integration/integration-steps/
。
Sentry
Sentry for 移动应用 (sentry.io/for/mobile/
) 是一款强大的错误监控和报告解决方案,简化了调试过程。它的易于集成、实时错误追踪和直观的仪表板,使其成为一个在快速捕获和修复问题方面非常有价值的工具:
图 7.16 – 项目视图
以下是 Sentry 的一些功能:
-
实时错误监控:Sentry 帮助自动跟踪和捕捉应用中的错误,提供关于任何问题的最新信息。
-
详细的错误诊断:Sentry 帮助获取深入的诊断信息,如堆栈跟踪、设备信息和用户数据,帮助你准确定位错误的根本原因:
图 7.17 – 问题详细视图
- 问题分组:Sentry 智能地将相似的错误分组,使得识别趋势和优先修复变得更加容易:
图 7.18 – 问题视图
- 集成:Sentry 与流行的项目管理、通信和问题追踪工具如 Jira、Slack、GitHub 等进行集成,以简化你的开发工作流程:
图 7.19 – 集成视图
-
跨平台支持:Sentry 支持 Android、Flutter、React Native 和 iOS 应用,成为开发者的多功能选择。
-
实时错误追踪:Sentry 的实时错误监控可以帮助你快速发现和修复问题,确保更流畅的用户体验。
-
直观的仪表板:Sentry 的用户友好型仪表板让错误监控和数据分析变得轻松,帮助你随时掌握应用的稳定性。
这里是将 SDK 添加到你的 Flutter 应用程序的文档:docs.sentry.io/platforms/flutter/
。Sentry 还为客户提供沙盒环境 (try.sentry-demo.com/organizations/noted-baboon/issues/
),以便他们通过演示应用程序探索产品。
Google Play 控制台关键数据
Google Play Console vitals (developer.android.com/topic/performance/vitals
) 是一个为 Android 应用开发者提供的工具,旨在轻松监控和优化应用性能。它的无缝集成、数据驱动的见解以及免费的使用方式,使其成为跟踪应用稳定性、电池使用情况和渲染性能的理想选择:
图 7.20 – Android vitals 概览
以下是 Android vitals 的一些功能:
-
Android vitals 仪表盘:Google Play Console vitals 提供一个用户友好的仪表盘,概述应用的性能指标,如崩溃率、应用无响应(ANR)率等。
-
稳定性监控:您可以实时跟踪崩溃和 ANR,以识别并解决影响应用稳定性的问题。
-
渲染性能:您可以监控应用的渲染性能,包括渲染缓慢和帧冻结等问题,以确保流畅的用户体验。
-
电池使用:您可以关注过度唤醒和唤醒锁,以优化应用的电池使用并最小化用户设备的电量消耗。
-
用户反馈:您可以访问用户评论和评分,获取有关应用性能和改进方向的深入见解。
请注意,Google Play Console vitals 仅适用于 Android 应用。因此,iOS 应用开发者应考虑其他性能监控解决方案。Android Studio 的最新版本现在支持 Android vitals,无需任何额外的 SDK 或配置(developer.android.com/studio/preview/features#aqi-android-vitals
)。
Datadog
Datadog for mobile apps (www.datadoghq.com/dg/real-user-monitoring/mobile-rum/
) 是一个强大的监控和分析平台,提供性能监控、详细的错误报告以及强大的分析功能。它的灵活性和跨平台支持使其成为开发者在寻找一体化移动应用监控平台时的理想选择。
以下是 Datadog 的一些功能:
-
实时性能监控:您可以实时监控移动应用的性能,包括网络请求、错误和延迟等关键指标。
-
详细的错误报告:Datadog 提供关于错误和崩溃的详细信息,包括堆栈跟踪、设备信息和用户操作,帮助您快速识别和解决问题:
图 7.21 – 错误和崩溃跟踪视图
- 可自定义仪表盘:Datadog 创建个性化的仪表盘,以可视化和分析应用的性能数据,以最适合您团队的方式进行展示:
图 7.22 – 仪表板视图
- 日志管理 (
docs.datadoghq.com/logs/log_collection/android/?tab=kotlin
):它自动收集并分析应用程序的日志数据,以检测异常并排查问题:
图 7.23 – 添加新的日志
以下截图显示了如何将 SDK 依赖项添加到 Android 应用程序的 Gradle 文件中,以便你能够监控应用程序的性能:
图 7.24 – 添加新的 Android 日志
- 集成:Datadog 与广泛的其他工具和平台集成,允许你集中管理数据并简化开发流程,如以下截图所示:
图 7.25 - 集成视图
-
RUM 和会话回放 (
docs.datadoghq.com/real_user_monitoring/
):Datadog 提供对单个用户活动和体验的实时可见性,从而带来以下好处:-
跟踪移动应用程序屏幕、用户操作、网络请求和前端代码的性能
-
跟踪长期和版本中的持续性错误和问题:
-
图 7.26 – UX 监控视图
图 7.27 – 为 Android 设置实时用户监控
你可以通过将 SDK 添加到应用程序的依赖项中来为应用程序设置实时用户监控,以下截图展示了如何操作:
图 7.28 – 设置实时用户监控
- 确定应用程序使用的国家、设备和操作系统,监控单个用户的操作流程,并分析用户与应用程序的互动(最常访问的页面、点击、交互和功能使用):
图 7.29 – 为 iOS 设置实时用户监控
- 获取有关用户会话的所有信息以排查问题(会话持续时间、交互、加载的资源和错误)
New Relic
New Relic 移动应用版 (newrelic.com/platform/mobile-monitoring
) 是一款性能监控和分析解决方案,提供监控、详细的崩溃报告和高级分析功能。它的可定制性和对 Android、iOS、React Native、Capacitor、Cordova 和 Flutter 的跨平台支持,使其成为开发者优化应用性能和用户体验的优秀选择。然而,其复杂性和缺乏免费套餐可能会成为一些用户的障碍。
以下是 New Relic 的一些功能:
-
实时性能监控:New Relic 提供对关键性能指标的实时监控,如应用加载时间、网络请求和错误率
-
崩溃报告:你可以获取有关崩溃的详细信息,包括堆栈跟踪、设备信息和用户操作,以帮助你快速识别并解决问题
-
可定制仪表盘:你可以创建个性化的仪表盘,以一种适合团队需求的方式来可视化和分析应用的性能数据
-
用户互动跟踪:你可以监控用户在应用中的互动,深入了解用户体验并识别需要改进的地方
-
集成:New Relic 与流行的工具和平台集成,使你能够集中管理数据并简化开发工作流,如下图所示:
图 7.30 – 在 New Relic 上设置移动应用
你可以从选择希望使用的平台开始,比如 Android,然后继续完成其余配置,如下图所示:
图 7.31 – 在 New Relic 上设置 Android 应用
之后,你可以将 SDK 添加到 Gradle 文件中,如下图所示:
图 7.32 – Android 构建配置
配置完成后,你将看到一个显示 Android 应用概览的仪表盘,如下图所示:
图 7.33 – Android 应用概览
你可以找到不同的示例,了解如何为 Android (docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-android/get-started/introduction-new-relic-mobile-android/
)、iOS (docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/get-started/introduction-new-relic-mobile-ios/
)、Flutter (docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application/
) 和 React Native (docs.newrelic.com/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application/
) 设置 New Relic。
Emerge
Emerge (www.emergetools.com/
) 是一个创新的移动应用优化平台,旨在帮助开发者减少应用大小并提高整体性能。
它专注于应用大小减少、资源优化和代码分析,使其成为移动开发者在希望最小化应用占用空间并提升用户体验时的推荐选择。
以下是 Emerge 的一些关键功能:
- 应用大小减少:Emerge 分析你的移动应用,找出优化的地方,使你能够在不影响功能的前提下减少应用的大小:
图 7.34 – iOS 应用仪表盘
此外,你还可以使用 Emerge 来分析应用的大小,例如,iOS 应用,如下图所示:
图 7.35 – iOS 应用大小分析
-
资源优化:Emerge 帮助优化应用的图像、字体和其他资源,最小化它们对应用大小和性能的影响。
-
代码分析:你可以深入了解应用的代码库,识别未使用的代码,发现重构和优化的机会:
图 7.36 – iOS 大小分析 X 光
- 快照测试(测试版):你可以为每次上传创建快照。这些快照会自动与拉取请求进行比较,帮助你看到哪些内容发生了变化,哪些被添加或移除,如下图所示:
图 7.37 – 快照测试视图
-
CI 集成:通过 GitHub Actions 和 Codemagic,你可以配置自动化的比较(PR 评论/状态检查)显示在你的版本控制系统(VCS)中,使得组织中的每个人都能轻松了解你的性能指标。更多细节可以在此查看:
docs.emergetools.com/docs/integrate-into-ci
。 -
自动告警:例如,通过 Slack 告警 (
docs.emergetools.com/docs/slack
),当上传的构建触发配置阈值时,可以向某个频道发送告警。
事件管理
移动应用的事件管理工具在确保应用的顺利运行和稳定性方面起着至关重要的作用,帮助你检测、分析和应对事件,如崩溃、性能问题以及其他技术问题。
让我们来看一些在移动应用开发中常用的流行事件管理工具。
Incident.io
Incident.io (incident.io/
) 是一款强大的事件管理平台,旨在帮助团队有效地处理事件并提高系统韧性。它的集中事件跟踪、改进的沟通、自动化功能和事后分析能力使其成为那些希望简化事件响应流程的团队的优秀选择。
以下是 Incident.io 的一些功能:
-
事件跟踪:集中所有与事件相关的信息,使得可以通过一个平台轻松追踪和管理事件
-
沟通:通过内建聊天功能以及与流行的沟通工具集成,促进事件期间团队的沟通和协作
-
自动化:通过触发预定义的操作来自动化事件响应流程,例如告警响应者、创建工单和更新利益相关者
-
事后分析:通过综合报告进行事后回顾,帮助团队从事件中学习并提高系统的韧性
-
集成:与流行的监控和工单工具集成,简化事件管理工作流程
PagerDuty
PagerDuty (www.pagerduty.com/
) 是一款事件管理平台,旨在帮助团队有效地处理事件并提高系统可靠性。它的全面事件跟踪、灵活的告警功能、改进的沟通、自动化功能和事后分析能力使其成为那些希望简化事件响应流程的团队的优秀选择。
以下是 PagerDuty 的一些功能:
-
事件跟踪:集中所有与事件相关的信息,使得可以通过一个平台轻松追踪和管理事件
-
告警和升级:配置告警规则和升级策略,确保在事件发生时,正确的团队成员得到通知并参与其中
-
沟通:在事件发生期间,通过内置聊天功能和与流行通信工具的集成,促进团队之间的沟通与协作。
-
自动化:通过预定义的操作(如告警响应者、创建工单和更新利益相关者)自动化事件响应过程。
-
事后分析:进行事后事件回顾,提供全面报告,帮助团队从事件中学习并提高系统的韧性。
-
集成:与流行的监控、告警和工单工具集成,简化事件管理工作流。
此外,我们还可以通过以下步骤使用分析工具优化移动应用的性能:
-
识别性能问题:确定需要改进的应用性能的具体方面,如启动时间、帧率或内存使用。
-
选择分析工具:选择一个适合平台和解决的性能问题类型的工具。一些常见的移动应用分析工具包括 XCode Instruments(iOS)(
developer.apple.com/documentation/xcode
)、Android Profiler (developer.android.com/studio/profile/android-profiler
) 和 Flutter Profiler (docs.flutter.dev/perf/ui-performance
)。 -
运行分析工具:使用分析工具收集应用性能的数据。这可能涉及在设备或模拟器上运行应用,并执行特定的操作或场景,以模拟实际使用情况。
-
分析结果:回顾由分析工具收集的数据,以识别应用性能中的任何问题或瓶颈。
-
优化应用:利用从分析工具中获得的见解,通过修复任何已识别的问题或提高应用代码和资源的效率来优化应用的性能。
分析工具
移动应用的分析工具在帮助团队做出数据驱动决策、增强用户体验和实现商业目标方面起着至关重要的作用。
通过提供有价值的指标和用户洞察,这些工具使开发者和营销人员能够持续优化他们的应用,并在动态的移动应用市场中保持竞争力。
让我们来看看一些用于移动应用的流行分析工具。
移动应用的 Google Analytics
Google Analytics for Mobile Apps (developers.google.com/analytics/solutions/mobile
) 就像为你的应用配备了一个私人侦探。这款强大的工具帮助你收集关于用户如何与应用互动的宝贵信息。无论你是在运行一个游戏、生产力应用,还是介于两者之间的应用,这个工具都能提供有助于你做出更好决策的见解。
以下是 Google Analytics for Mobile Apps 的一些功能:
-
用户群体分析和人口统计学:了解您的应用程序有多少用户,他们的特征是什么,以及他们来自哪里
-
用户行为分析:深入了解用户在应用中的行为和交互
-
应用内购买收入测量:跟踪和分析货币化和支付指标
-
定制报告:创建对您的业务有益的报告
-
视觉用户旅程导航:通过图形路径分析增强用户体验
-
用户群体行为分析:通过数据分割和分析获得更深入的洞察
-
利用谷歌分析数据:在谷歌产品中利用谷歌分析数据
-
多平台支持:Google Analytics 为 Android、iOS 和 Flutter 移动应用提供分析数据
您可以在 firebase.google.com/docs/analytics
学习如何将 SDK 添加到您的 Android、iOS、Flutter 和 Unity 应用中。
振幅
振幅 (amplitude.com/
) 是一个强大的产品分析平台,可以深入洞察用户行为,帮助团队做出数据驱动的决策,优化其产品。其易用性、可扩展性和集成能力使其成为企业驱动产品增长的优秀选择:
图 7.38 – 振幅首页
图 7.40 – 向振幅添加新移动应用
以下是振幅的一些关键特点:
-
行为分析:跟踪用户在产品中的动作,帮助您理解用户行为模式并识别改进的空间
-
漏斗和队列:分析用户转化漏斗和队列保持,以衡量产品功能和营销工作的成功
-
实时分析:实时监控产品性能,使您能够快速响应用户行为的任何问题或变化
-
可定制仪表板:创建个性化仪表板,可视化和分析团队最关注的数据
-
A/B 测试和实验:运行实验和 A/B 测试,优化产品的用户体验并测量变化的影响
Mixpanel
Mixpanel (mixpanel.com/
) 是一个产品分析平台,可以深入洞察用户行为,帮助团队做出数据驱动的决策,优化其产品。其易用性、可扩展性和集成能力使其成为企业驱动产品增长的优秀选择:
图 7.40 – 向 Mixpanel 添加新移动应用
以下是 Mixpanel 的一些特点:
-
行为分析:跟踪用户在产品中的操作,帮助你理解用户行为模式并识别改进的地方。
-
漏斗和用户群体:分析用户转化漏斗和用户群体留存情况,以衡量你的产品特性和营销效果的成功。
-
实时分析:实时监控产品性能,使你能够迅速响应任何问题或用户行为的变化。
-
可定制的仪表板:创建个性化的仪表板,以可视化和分析对你的团队最重要的数据。
-
A/B 测试和实验:进行实验和 A/B 测试,以优化你的产品用户体验,并衡量变更的影响。
现在我们已经探讨了不同的监控、可观察性、事件管理和分析工具,接下来我们来概述一下在使用这些工具时通常考虑的关键指标。
移动应用监控、分析和可观察性的关键指标
在这一部分,我们将查看一些适用于移动应用监控、分析和可观察性的关键指标,你应该在这些方面考虑使用。
监控指标
一些关键的监控指标如下:
-
应用加载时间:应用初始化并准备好用户交互所需的时间。更快的加载时间能提供更好的用户体验。
-
API 响应时间:你的应用从后端服务或第三方 API 获取响应所需的时间。较长的响应时间可能让你的应用感觉缓慢或反应迟钝。
-
帧率:应用每秒渲染的帧数。低帧率可能表明存在性能问题,尤其是在动画繁重或游戏类应用中,可能会导致用户体验差。
可观察性指标
一些可观察性指标如下:
-
错误率:导致错误的应用请求比例,例如失败的 API 调用或后端问题。高错误率可能会影响应用的性能和可靠性。
-
延迟:请求从用户设备到服务器再返回所需的时间。高延迟会让你的应用感觉缓慢且反应迟钝。
-
吞吐量:你的应用每单位时间能处理的请求数。监控吞吐量有助于识别瓶颈和可扩展性问题。
分析指标
移动应用的分析指标指的是提供用户行为、应用性能和整体成功洞察的数据和度量。通过利用分析工具和平台,应用开发者和营销人员可以跟踪、分析和解读这些指标,从而优化用户体验、增强应用功能,并推动用户参与和留存。
一些移动应用分析的关键指标包括以下内容:
-
日活跃用户(DAU):表示每天与应用互动的独立用户数量。日活跃用户是衡量用户参与度的关键指标。
-
月活跃用户(MAU):MAU 指的是每月与您的应用程序互动的独立用户数量。此指标为应用程序的整体覆盖范围和受欢迎程度提供了见解。
-
会话时长:这是用户在单次会话中在应用程序内花费的平均时间。较长的会话时长表明更高的用户参与度和满意度。
-
会话间隔:此指标显示用户会话之间的平均时间,揭示用户多频繁地返回应用程序。较短的间隔通常表示较强的用户留存率。
-
留存率:留存率表示在特定时期(如几天或几周)后返回应用程序的用户百分比。较高的留存率意味着积极的长期用户参与。
-
流失率:流失率表示在特定时间内停止使用应用程序的用户百分比。较高的流失率可能突出显示与用户满意度或应用程序功能相关的问题。
-
用户生命周期价值(LTV):LTV 估算用户在整个使用过程中为应用程序带来的收入。了解 LTV 有助于您评估获取和留住用户的价值。
-
转化率:转化率衡量完成特定期望动作(如购买、注册或订阅)的用户百分比。较高的转化率表示应用程序性能和用户满意度较好。
-
漏斗分析:漏斗分析可视化用户在应用程序中通过不同步骤或事件的流程,帮助您识别用户流失点以及优化用户旅程的机会。
-
自定义事件:自定义事件跟踪应用程序中用户的特定互动或里程碑,为用户行为和应用程序使用模式提供有价值的见解。这些事件可以根据应用程序的独特目标和需求进行定制。
实施移动应用程序的持续监控对于确保其性能和整体质量至关重要。持续监控包括定期跟踪和分析应用程序的行为、使用情况和性能指标,从而使开发人员能够及时识别和解决问题。
现在,让我们看看实施移动应用持续监控的推荐实践。
实施移动应用持续监控
持续监控涉及收集和分析有关移动应用程序的性能、使用情况和安全性的数据显示,以识别并解决任何问题或潜在的改进。让我们来看一下它的一些好处:
-
提高可靠性:持续监控可以帮助在问题影响用户之前识别并修复它们,从而提高应用程序的可靠性并减少停机风险。
-
更好的性能:通过收集应用程序性能的数据,团队可以识别并解决瓶颈或其他性能问题,从而提高用户体验。
-
增强的安全性:持续监控有助于识别和解决安全漏洞或其他风险,从而提高应用程序的整体安全性
-
更快的解决问题:通过不断收集应用程序性能的数据,团队可以快速识别和解决问题,从而缩短问题解决的时间
摘要
监控和可观察性对于移动应用开发至关重要。开发人员可以通过建立有效的实践并使用合适的工具来收集和分析数据,确保应用程序的最佳性能并提供无缝的用户体验。监控使开发人员能够收集应用性能、用户行为和系统交互的数据,从而在问题影响用户之前识别潜在问题。
以下是关于移动应用开发中监控和可观察性的关键学习点:
-
实现监控和可观察性的好处
-
监控和可观察性中需要考虑的因素
-
实施移动应用监控和可观察性的步骤
-
移动应用的监控、可观察性和分析工具
-
移动应用监控、分析和可观察性的关键指标
-
为移动应用实现持续监控
随着我们在移动 DevOps 旅程中的前进,我们将更深入地探讨如何将安全性融入我们的 CI/CD 和移动 DevOps 生命周期中,这是将其加入移动 DevOps 生命周期中的关键一步。在下一章中,我们将讨论移动应用安全的重要性,以及如何将自动化安全测试注入移动 DevOps 和 CI/CD 流水线中。
第八章:保持移动应用和 DevOps 的安全
从前面的章节中,我们已经了解到,移动应用已成为数字时代我们日常生活的重要组成部分,必须不断进行创新和优化。组织越来越多地实施 Mobile DevOps 方法,以实现这一目标,使开发、测试和发布团队能够无缝合作。
然而,快速的开发和发布可能导致移动应用程序的安全漏洞。为了保护您的移动应用和 DevOps 过程,在本章中,我们将探讨移动应用安全的基础知识、安全测试自动化以及 DevSecOps 的基本概念。我们还将探讨在移动应用开发和移动 DevOps 中,安全性重要性的背后原因,内容包括以下主题:
-
移动开发中的安全性重要性
-
移动应用安全威胁
-
架构安全的移动应用
-
传统的安全测试方法
-
引入移动 DevSecOps
-
移动 DevSecOps 的好处
-
构建安全文化
-
开始您的 DevSecOps 之旅
-
通过移动持续自动集成和持续交付(CI/CD)以及 DevOps 自动化移动安全测试
-
移动 DevOps 安全自动化的技巧
-
人工智能与移动应用安全
移动开发中的安全性重要性
在数字化转型的时代,安全在生活的各个领域都至关重要。在汽车、医疗、金融、零售和电子商务等行业,以及嵌入式和物联网设备中,我们使用包括电子邮件、地址、信用卡和手机号码等敏感数据,涉及不同的移动应用程序。
移动应用开发在过去十年经历了指数级增长,数百万个应用程序可以在各种平台和应用商店中找到。这些应用程序提供各种服务,从社交网络到在线银行及其他各种服务。随着越来越多的用户依赖移动应用来访问服务并存储敏感数据,移动应用开发中的安全性重要性不容忽视。
移动应用开发中的安全性是开发人员必须优先考虑的关键方面,以保护用户数据、维持强大的声誉并遵守相关法规。通过了解安全性的重要性并实施切实可行的措施,开发人员可以创建提供更安全、更可靠体验的应用程序。
“以牺牲可用性为代价的安全,最终会以安全为代价。”
- Avi Douglen,OWASP 董事会 成员
因此,确保安全措施到位,以保护用户数据免受未经授权的访问,至关重要。
你知道吗?
通过谷歌的应用安全改进计划(developer.android.com/google/play/asi
),开发人员修复了影响超过 30 万个应用、累计安装量约 2500 亿的超过 50 万个安全问题。据谷歌称,2022 年通过改进的安全功能和应用审核流程,有 143 万不良应用未能进入 Play 商店(security.googleblog.com/2023/04/how-we-fought-bad-apps-and-bad-actors.html
)。
受到安全问题影响的最重要行业之一是金融科技领域以及在我们日常活动中发挥巨大作用的数字银行应用。金融科技正在成为我们个人和职业生活的重要组成部分。客户始终关注安全问题。如果他们对应用的安全性产生怀疑,他们会立即卸载该应用并切换到其他服务。
大多数数字银行应用都有强大的安全功能,如支付阻止、生物识别和双因素认证(2FA),并且仅允许用户提交复杂的密码。此外,客户数据的保护和处理至关重要,特别是当你在欧盟地区运营时,GDPR规则适用。
什么是 GDPR?
通用数据保护条例(GDPR)(gdpr.eu/
)是一个全面的数据保护法,于 2018 年 5 月 25 日在欧盟(EU)实施。其主要目标是通过规范组织如何收集、处理、存储和共享数据,来保护个人的隐私和个人信息。
GDPR 确立了一系列原则和规定,组织必须遵守这些规定,以确保尊重数据主体(即被收集数据的个人)的权利。不遵守这些规定可能会导致公司面临罚款。因此,GDPR 帮助保护你的个人信息,并确保公司适当处理这些信息。
上述示例仅是许多需要考虑保护自己的行业中的一个。
在移动开发过程中,安全性可以在多个层面上进行集成。首先,应实施强大的身份验证协议,确保只有授权用户才能访问应用。这可以包括生物识别认证、指纹扫描或基于密码的认证。
移动开发人员还应注意第三方库和 API 可能带来的风险。任何添加到应用中的额外代码都应经过彻底审查,以确保其安全并保持最新。
因此,安全性对移动开发至关重要,必须认真对待。按照这里列出的步骤,开发人员可以确保他们的应用是安全的,并为用户提供安全的体验。
移动应用安全威胁
移动应用面临各种安全威胁,这些威胁可能危及用户数据和应用程序的整体完整性。以下是一些常见的移动应用安全威胁:
-
黑客可以通过逆向工程、代码注入或绕过认证机制来获得未经授权的访问权限,提取敏感的用户信息。
-
移动应用通常处理个人信息、财务细节或登录凭证。如果未实施适当的安全措施,攻击者可能在数据传输或存储过程中拦截或窃取数据,从而导致数据泄露和隐私侵犯。
-
移动设备可能通过多种方式受到攻击或感染恶意软件。这些恶意程序可以危害设备的安全、窃取数据或执行未经授权的操作。
-
如果应用未加密或保护用户数据,攻击者可能通过物理设备的漏洞、文件系统漏洞或不安全的服务器配置来访问用户数据。
-
弱或无效的认证机制可能导致未经授权的访问用户账户。此外,授权控制不足可能允许攻击者执行超出其权限的操作,如访问敏感功能或篡改用户数据。
-
应用代码中的不良编码实践或未修复的漏洞可能引入安全弱点。攻击者可以利用这些漏洞执行任意代码、提升权限或获得设备的未经授权访问。
-
攻击者可以向移动应用服务器发送大量请求,导致服务中断,使应用无法被合法用户访问。
移动应用开发者必须通过遵循安全编码实践、加密敏感数据、实施强大的认证机制,并教育用户有关最佳安全实践,来减轻这些威胁。
移动开发者在架构和开发移动应用时应将安全性放在首位。接下来我们来探讨这一点。
架构安全的移动应用
在如今广泛使用的移动设备环境中,构建安全的移动应用至关重要。忽视移动应用安全可能导致各种错误,从而将用户数据和隐私置于风险之中。为了确保移动应用的安全,开发者应遵循以下最佳实践:
-
通过考虑保护用户数据、确保安全通信和防止未经授权访问等因素,识别应用的安全目标。评估特定于应用和行业的潜在威胁和漏洞。
-
实施强加密技术来保护存储在设备上的敏感数据。
-
采用多因素认证和最新的认证框架,如OAuth 2.0,以安全地管理用户访问。
-
使用SSL/TLS进行数据传输,并验证证书以建立应用与后端服务器之间的加密通信。
-
使用最新的加密算法和技术保护敏感数据,例如SHA-256。
-
实施安全方法来存储敏感信息,例如使用环境变量或安全存储解决方案。
-
在客户端和服务器端验证用户输入,以防止注入攻击和其他安全漏洞。
-
进行安全测试,包括静态和动态分析、渗透测试和漏洞评估,以识别和解决潜在的安全缺陷。
-
定期更新第三方库和框架,以避免过时版本中可能存在的漏洞。
-
在整个开发生命周期中整合安全措施,从设计、编码到测试和部署。
-
确保开发人员接受安全编码实践的培训,并了解常见的移动应用程序安全风险及其缓解技术。
-
持续监控应用程序的安全事件,并及时处理任何问题。保持对行业最佳实践和新兴安全发展的更新,以确保持续的保护。
让我们来看一下移动开发和安全团队通常如何进行安全测试,以及为什么这可能不是 Mobile DevOps 的最佳实践。
传统的安全测试方式
传统的安全实践通常是在开发的后期阶段应用安全措施,导致潜在的漏洞可能被忽视,如下图所示。DevSecOps 旨在通过在整个开发过程中嵌入安全性来解决这些问题。
图 8.1 – 传统的安全测试过程
通过这些实践,我们通常会具有以下特点:
-
过程过于缓慢;如图 8.1所示,从 1 到 2 周需要较长时间,甚至可能延长至 1 个月,才能确保应用程序在发布之前的安全性。
-
团队各自为战,移动开发、测试和安全团队之间缺乏协作。
DevOps 的出现导致了 DevSecOps 的兴起,因为传统的方法已经无法很好地适应变化中的环境。这些因素促使了新方法的需求。
让我们一起探讨 DevSecOps,了解其好处以及如何实施它。
移动 DevSecOps 简介
移动 DevSecOps将软件开发、安全性和运维工程学科结合在一起,以确保移动应用程序的安全性、可靠性和维护性。
DevSecOps 一词指的是“在开发的早期阶段将安全性注入到移动 CI/CD 管道中。安全性作为跨文化、自动化和平台设计的共享责任,贯穿整个移动 DevOps 生命周期。”
团队文化的转变是必要的,将安全测试从阻碍变为促进因素。移动 DevSecOps 与 DevOps 结合,重点是持续交付移动应用程序和安全,如下图所示。
图 8.2 – DevSecOps 生命周期
移动 DevSecOps 涵盖了许多开发活动,如图 8.2所示,诸如威胁建模、代码扫描、漏洞扫描、安全代码审查和安全编码实践等活动,这些活动确保移动应用程序的安全性、可靠性和可维护性。
以下是移动应用程序的 DevSecOps 原则:
-
DevSecOps 的最根本特点是从移动应用开发过程一开始就集成安全措施。这与传统方法不同,传统方法通常将安全检查作为最后一步。在 DevSecOps 中,安全在开发过程的每个阶段都会被考虑,从规划、编码到测试和发布。
-
每个人都有责任确保将安全融入软件开发的各个方面,包括开发人员、测试人员、DevOps 工程师、安全专业人员和业务利益相关者。
-
通过使用工具和技术自动检查在编码过程中潜在的安全漏洞,可以比等待人工审核更快、更高效地识别和解决问题。这可以包括静态应用程序安全测试(SAST)、动态应用程序安全测试(DAST)和渗透测试等技术。
-
安全措施不应只是一次性措施。DevSecOps 方法强调持续的安全性,这意味着即使应用程序已经发布,也应持续监控和更新,以应对可能出现的新安全威胁。
-
DevSecOps 鼓励一种文化,在这种文化中,开发人员、安全团队和测试团队共同合作,分享对应用程序安全的责任。这通常被称为shift-left方法,即将安全考虑因素提到开发过程的前沿。
-
在问题发生之前识别潜在威胁。这可能包括数据泄露、不安全的 API 或移动应用程序的恶意软件攻击。
-
开发人员应接受安全编码实践的培训。这意味着在编写代码时考虑安全因素。
-
最后,一个健全的 DevSecOps 方法应包括应对和恢复安全事件的计划。这可能包括补丁管理、灾难恢复计划和专门的事件响应团队。
DevSecOps 是一个结合了 DevOps 和安全原则的过程,旨在确保组织能够更快、更安全地开发和发布移动应用程序。
移动 DevSecOps 的好处
移动 DevSecOps 提供了一种积极主动、协作的移动应用开发方法,确保安全是过程的不可或缺的一部分。它有助于构建更强大、更安全的移动应用,同时降低安全漏洞的风险并提升整体开发效率。
首先,它有助于降低移动应用中安全漏洞的风险。通过在开发过程中实施安全措施,移动 DevSecOps 有助于在问题变得严重之前识别并缓解安全问题。
其次,移动 DevSecOps 有助于加快交付安全、可靠和可维护的移动应用程序。通过自动化流程和实施持续交付,移动 DevSecOps 帮助移动团队更快地交付应用,并提高质量。此外,以下是 DevSecOps 的一些其他好处:
-
DevSecOps 有助于识别并解决可能导致应用程序变慢或不可靠的问题。这有助于确保应用程序持续保持最佳性能。
-
移动 DevSecOps 通过自动化安全流程,帮助减少与人工安全检查和审计相关的成本。这有助于公司节省开支,将资源集中在开发的其他方面。
-
移动 DevSecOps 有助于通过确保应用程序的安全性和可靠性来提升整体用户体验。这可以增加用户参与度并提高用户对应用程序的满意度。
对于希望保持竞争优势的企业来说,移动 DevSecOps 是必不可少的。
组织可以通过遵循此处概述的最佳实践来确保其移动 DevOps 流程是安全的。这将有助于保护用户数据,确保安全的移动应用程序开发,并降低恶意攻击的风险。
在实施 DevSecOps 之前,培养安全意识和建立一个信奉安全的团队至关重要。让我们先讨论如何作为第一步建立安全文化。
建立安全文化
为了使 DevSecOps 能够有效运作,团队首先必须建立开发团队与安全团队之间的协作文化。你需要做以下几件事:
-
实施安全优先的策略
-
在团队中建立以安全为重点的思维方式
-
采用 DevSecOps 方法,并将安全左移(开发团队与安全团队的协作),同时使用CI/CD管道,对于防止安全事件的发生至关重要。
-
确保开发人员拥有合适的工具
-
将你的安全策略纳入移动测试策略中
-
提供可信的安全指导(通过 OWASP MASVS 推荐增强你的移动应用安全性)– 我们将在本章稍后讨论这一点。
-
构建仪表盘以显示移动应用的安全健康状况
-
培训开发人员和 QA 工程师掌握安全编码实践
-
让非技术团队成员参与安全意识
-
如有需要,利用外部资源和合作伙伴的安全专长
让我们深入探讨 DevSecOps 并开始实施。
开始你的 DevSecOps 之旅
正如我们在本书开头所提到的,DevOps 和 DevSecOps 的实施不仅依赖于工具,还涉及必须考虑的多个步骤和其他因素。
以下是将安全融入移动应用 DevOps 过程中的一些步骤。
确定你的目标和目的
开始 DevSecOps 之旅的第一步是确定你的目标和目的。你希望通过 DevSecOps 实现什么?你是否希望提高部署速度?你是否希望减少移动应用中的安全问题?无论你的目标和目的是什么,设置清晰且可衡量的指标,以确保能够追踪和衡量你的成功。但始终确保目标是在不拖慢开发进度和交付速度的情况下保持安全。
构建合适的团队
拥有合适的团队对于实现你的 DevSecOps 目标至关重要。你需要拥有一个了解 DevOps 和安全原则、并且有移动开发经验的团队。你还需要确保你的团队配备了合适的工具和流程,以确保 DevSecOps 之旅的成功。
将安全作为共享责任
DevSecOps 宣言 (www.devsecops.org/
) 强调了软件开发过程中所有团队成员之间合作的必要性。安全性不应是专门的安全团队的唯一责任;相反,开发人员、运维人员和其他利益相关者必须共同合作,在整个软件生命周期中识别并解决安全问题。
将安全性提前
根据 第五章**,实施强大的移动应用测试策略,建议将测试提前,以确保在每个 DevOps 周期阶段执行不同类型的测试。同样,DevSecOps 确保在 DevOps 周期的每个阶段都进行安全检查,以确保不存在漏洞或安全问题。
图 8.3 – 提前进行安全测试
将安全性提前意味着将安全实践尽早融入开发过程,而不是等到后期再考虑。这个方法使团队能够在安全漏洞在生产环境中变得严重之前识别并解决这些问题。
我们可以通过以下实践将安全性提前,并保持移动 DevOps 的安全:
-
建立一个安全的开发过程;这一过程应在整个移动 DevOps 团队中得到建立并强制执行。该过程应包括安全编码实践、安全测试以及移动应用的安全部署。
-
在规划和设计阶段融入安全要求。
-
在开发过程中实施安全编码实践,并使用安全聚焦的工具。
-
在持续集成(CI)过程中进行安全审查和测试,例如静态和动态分析。
-
这样可以让安全团队与开发和测试团队紧密合作,以便能够快速返回测试结果,并在需要时随时进行测试。
建立安全的开发生命周期
一旦团队到位,建立安全的开发生命周期就是下一步。这涉及到设立流程和程序,确保安全在开发过程的每一个步骤中都得到落实。包括设置自动化测试、代码审查、渗透测试、安全扫描等。以下是建立安全开发生命周期的推荐步骤:
-
自动化安全测试:将自动化安全测试工具集成到您的 CI/CD 管道中。这包括静态和动态分析工具、依赖性检查器和漏洞扫描器。定期进行安全测试,以便尽早发现漏洞,缩短发现和修复问题之间的时间。
-
安全代码审查:将以安全为重点的代码审查融入到开发过程中。使用同行评审和自动化工具来识别并解决代码中的潜在安全问题。
-
威胁建模:在设计阶段进行威胁建模演练,以识别潜在的风险和漏洞,并制定相应的缓解策略。定期更新威胁模型,以应对应用、基础设施或威胁环境的变化。
-
漏洞管理:建立一个跟踪、优先排序和处理在开发、测试或生产环境中发现的漏洞的流程。创建一个清晰的沟通渠道来报告安全问题,并确保所有团队成员理解这个流程及及时解决漏洞的重要性。
-
持续监控和审计:监控移动应用的安全事件、性能问题和可疑活动。使用监控工具、日志分析和入侵检测系统实时检测潜在的安全事件或漏洞。
-
事件响应计划:制定一个事件响应计划,以有效且高效地处理安全事件,例如数据泄露或网络攻击。定期审查和更新该计划,并进行演练,确保所有团队成员在发生事件时都能做好响应准备。
-
与安全团队合作:鼓励开发、运维和安全团队之间的紧密合作。打破信息孤岛,促进共享安全责任,确保所有团队成员理解在保护应用和用户数据中的角色。
-
持续改进:定期审查和改进您的安全实践、工具和流程。保持对最新安全趋势和最佳实践的关注,并根据需要更新您的 DevSecOps 策略。
选择合适的安全工具集
安全工具集的选择基于多种因素,包括您的具体安全需求、组织的规模和复杂性、预算限制以及技术栈。
以下是一些通用的考虑因素,帮助您选择合适的安全工具集。
OWASP 安全测试指南(MASTG)
OWASP 移动应用安全 (MAS) (mas.owasp.org/
) 项目定义了移动应用安全的行业标准,并为移动应用提供了两个部分的安全标准:
-
OWASP 移动应用安全验证标准 (MASVS) 是确保行业内移动应用安全的首选标准。它对那些想要开发安全移动应用的移动软件架构师和开发人员,以及那些希望确保其测试结果完整和一致的安全测试人员非常有益。
-
OWASP 移动应用安全测试指南 (MASTG) 涵盖了移动应用安全测试中使用的过程、技术和工具,并提供了一套全面的测试用例,使测试人员能够提供一致和完整的测试结果。您可以在
github.com/OWASP/owasp-mastg/releases/latest/download/OWASP_MAS_Checklist.xlsx
找到检查表。 -
OWASP 移动应用 Top 10 是一个列出移动应用最重要安全风险的清单,开发人员可以使用它来识别和解决关键的安全问题。根据 OWASP 网站(
owasp.org/www-project-mobile-top-10/
),2023 年版的 Top 10 目前正在开发中,并包括以下风险:- M1:不当的平台使用
滥用平台功能,如 Android 意图或 iOS Touch ID,或者未遵循平台的安全最佳实践
- M2:不安全的数据存储
在用户设备上不安全地存储敏感数据,可能导致未授权访问或数据泄露
- M3:不安全的通信
未能保护应用与后端服务或第三方 API 之间传输的数据,可能会暴露于拦截或中间人攻击中
- M4:不安全的身份验证
实现弱或无效的身份验证机制,允许未授权用户访问应用或冒充其他用户
- M5:加密不足
使用弱或过时的加密算法、密钥或协议,或者错误地实现它们,可能导致敏感数据暴露并被解密
- M6:不安全的授权
未能在服务器端实现适当的访问控制或授权检查,允许用户执行其不应有权执行的操作或访问数据
- M7:客户端代码质量
编写不安全或维护不善的代码,可能导致漏洞,如缓冲区溢出或内存泄漏
- M8:代码篡改
未能保护应用程序免受篡改或修改,可能允许攻击者修改应用程序的行为或注入恶意代码。
- M9: 逆向工程
未能保护应用程序的源代码或知识产权免受逆向工程或反编译的威胁,可能允许攻击者发现漏洞或提取敏感信息。
- M10: 多余功能
在应用程序中包含隐藏或未使用的功能,可能引入安全风险或暴露敏感信息。
此外,当团队开始考虑实施安全测试时,他们应当探索不同的方法,包括以下内容:
-
静态应用程序安全测试 (SAST): 这涉及分析应用程序的源代码,而不执行它以发现漏洞。
-
动态应用程序安全测试 (DAST): 分析正在运行的应用程序的漏洞,需要实时检查应用程序。
-
互动应用程序安全 (IAST): 这是一个过程,涉及通过软件仪器监控应用程序的性能,无论是主动的还是被动的。
让我们更详细地研究 SAST 和 DAST。
SAST
SAST扫描应用程序的源代码,以检测任何潜在的安全问题。这是一种主动的方式,可以在问题成为隐患之前识别风险。这使得开发人员能够在问题被利用之前解决它们。
此外,SAST 使开发人员能够避免手动检查每一行代码,这是节省时间和成本的安全测试方法。
通过利用 SAST,开发人员可以降低应用程序在遭受安全漏洞风险时的可能性,从而确保应用程序更加安全可靠。
DAST
DAST分析应用程序的源代码、移动应用程序及其他组件,以识别并报告任何安全漏洞。这种类型的测试通常用于防范恶意攻击、数据泄露和其他形式的恶意活动。它有助于确保应用程序保持安全并及时更新。
DAST 是一个很好的工具,可以帮助减少数据泄露的风险,因为它能够在问题发生之前发现并提醒您潜在的安全漏洞。它还可以帮助您确保应用程序已经更新至最新的安全补丁和更新版本。此外,DAST 可以为您提供应用程序如何与其他应用程序交互的洞察,并帮助您识别更广泛环境中的任何风险或漏洞。
此外,DAST 可以为您的应用程序的安全性和性能提供有价值的洞察,帮助您做出有关改进应用程序安全态势的明智决策。
现在我们已经了解了如何开始使用 DevSecOps 以及静态测试和动态测试之间的区别,接下来让我们探讨如何通过 CI/CD 和移动 DevOps 自动化安全测试。
使用移动 CI/CD 和 DevOps 自动化移动安全测试。
在 CI/CD 和 DevOps 环境中自动化移动安全测试可以帮助提高安全测试流程的效率、速度和可靠性。
以下是你如何在这种设置中自动化移动安全测试的概述:
-
研究并选择适合的工具,确保它们能集成到你的 CI/CD 管道中。一些流行的移动安全测试工具包括NowSecure、Guardsquare、Snyk、Oversecured和Mobile Security Framework(MobSF)。确保所选工具支持自动化,并能够轻松集成到你的开发和部署流程中。
-
将移动安全测试过程集成到你的 CI/CD 管道中。通常,这包括在你的管道中添加安全测试阶段,例如预提交钩子、构建阶段和部署后验证。
-
利用移动模拟器和仿真器来复制不同设备配置和环境。这样,你可以在多种设备上进行自动化测试,而无需为每个测试都提供物理设备。
-
使用静态代码分析工具扫描你的移动应用源代码中的安全漏洞。这些工具可以识别常见的编码缺陷、不安全的编码实践和潜在的安全弱点。将代码分析工具集成到你的 CI/CD 管道中,有助于在开发早期发现安全问题。
-
配置你的 CI/CD 管道,在构建和部署阶段执行自动化安全测试。这些测试应在每次提交新代码时、构建过程中以及部署后触发,以确保持续的安全验证。
-
配置你的自动化框架,在每个测试周期后生成安全报告。这些报告应提供有关识别到的漏洞、其严重性以及修复建议的详细信息。
让我们来看看一些你可以用来自动化安全测试的工具。
自动化安全测试的工具
有几种工具可以用来自动化安全测试,从而使过程更加高效和全面。请记住,安全工具的生态系统在不断变化,因此可能会有更新的工具出现。
这里是一些流行的安全测试工具。
NowSecure
NowSecure(www.nowsecure.com/
)提供了一个强大且易于访问的移动应用安全测试平台。凭借其用户友好的界面、全面的测试功能和广泛的平台支持,它是寻求增强移动应用安全性的组织的理想选择,如以下截图所示。
图 8.4 – NowSecure 仪表板
NowSecure 提供以下功能:
-
它提供了一个简洁直观的用户界面,使得即使是技术经验有限的用户也能轻松使用。该工具提供了逐步指导,帮助用户快速完成测试过程。
-
它覆盖了广泛的安全测试方面,包括漏洞扫描、行为分析和渗透测试。其强大的功能确保能够有效识别并修补各种安全漏洞。
-
它支持在多个平台上进行测试,包括 iOS 和 Android,使开发者和安全专家能够评估其应用在不同操作系统上的安全态势,如下图所示。
图 8.5 – NowSecure – 包或应用详情
- 它提供自动化扫描和测试功能,显著减少了识别潜在安全风险所需的时间和精力。对于拥有大量应用组合的组织而言,这一功能尤其有利。
f
图 8.6 – 应用分析
- 它生成详细的报告,突出显示漏洞,并提供详细的解释和修复建议。这些报告使开发者能够更高效地优先处理和解决安全问题。
图 8.7 – NowSecure MASVS 报告
此外,NowSecure 会根据 MASVS 分类提供安全扫描结果,如下图所示。
图 8.8 – 基于 MASVS 分类的安全扫描结果
- 它可以集成到 CI/CD 流水线中,例如 Bitrise。通常,这涉及将安全测试阶段添加到流水线中,例如预提交钩子、构建阶段和部署后验证。你只需要拥有一个 NowSecure 账户、一个访问令牌和一个组 ID:
图 8.9 – Bitrise 上的秘密管理
然后,你可以将 NowSecure 集成步骤添加到 CI/CD 工作流程或流水线中,以执行安全测试,如下图所示。
图 8.10 – 使用 NowSecure 的 Android 工作流程
NowSecure 集成步骤需要添加 NowSecure API 令牌和组 ID,如下图所示。
图 8.11 – NowSecure 配置
NowSecure 还可以与 GitHub Actions 一起运行 (github.com/nowsecure/nowsecure-action
),使用以下 YAML 文件 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-8/android.yml
)。
此外,NowSecure 支持 GitLab、Azure DevOps 和 CircleCI (www.nowsecure.com/solutions/by-need/mobile-devsecops/
)。
Guardsquare
Guardsquare (www.guardsquare.com/
) 是一款强大的移动应用保护套件,提供先进的代码混淆和防篡改措施,以保护移动应用免受逆向工程和篡改。凭借其强大的功能集、多平台支持和优化的性能,Guardsquare 是开发者和组织保护应用代码及知识产权的理想选择。
Guardsquare 提供以下功能:
-
它提供强大的代码混淆技术,将应用程序代码的结构和逻辑进行转换,使得攻击者更难进行逆向工程或理解应用的内部工作原理。这有助于保护知识产权、阻止未经授权的访问,并威慑恶意活动。
-
它采用防篡改机制,能够检测和防止应用在运行时被修改,防御针对篡改或绕过安全措施的攻击。这些措施确保了应用代码的完整性,并保护免受未经授权的修改。
-
Guardsquare 的代码混淆技术旨在尽量减少对应用性能的影响。优化过程有助于保持应用的功能性和响应性,确保流畅的用户体验。
-
它支持广泛的平台,包括 Android、iOS 和 Xamarin,使其成为一个多功能的解决方案,能够跨不同操作系统保护移动应用。
以下是 Guardsquare 提供的不同产品:
-
DexGuard (
www.guardsquare.com/dexguard
):提供全面的移动应用保护。 -
iXGuard (
www.guardsquare.com/ixguard
):确保为您的移动应用提供最高级别的保护。该解决方案为您的 iOS 应用和 SDK 提供全面的安全措施,包括多层代码加固和运行时应用自我保护(RASP)。 -
AppSweep (
www.guardsquare.com/appsweep-mobile-application-security-testing
):帮助你发现并修复 Android 应用代码和依赖项中的安全问题,符合如 OWASP 等安全标准,如下图所示:
图 8.12 – AppSweep 项目仪表板
它还提供应用发布分析详细信息,如下图所示。
图 8.13 – 发布分析
你还可以查看最近构建的详细信息,包括扫描和分析结果,并且可以比较两个构建版本,如以下截图所示。
图 8.14 – 最近的构建
AppSweep 的扫描结果已映射到 OWASP MASVS,如以下截图所示。
图 8.15 – 扫描结果映射到 OWASP MASVS
它还可以提供应用中发现的安全问题的详细视图,并将其分为不同类别,例如应用安全、不安全通信等,如以下截图所示。
图 8.16 – 问题视图
最后,在问题详情部分,你可以找到基于 OWASP 指南的代码修改建议。
图 8.17 – 带有推荐的详细问题信息
- ThreatCast (
www.guardsquare.com/threatcast-mobile-threat-defense
): 它实时监控移动应用,并不断提升你的安全实现。
Snyk
Snyk (snyk.io/learn/application-security/mobile-application-security/
) 是一个有价值的移动应用安全平台,特别是在漏洞管理和代码修复领域。凭借其全面的漏洞检测、简便的集成、持续监控、推荐以及对语言/平台的支持,Snyk.io 简化了识别和解决移动应用代码中的安全弱点的过程。
图 8.18 – Synk 仪表板
以下是 Snyk 的一些功能:
- 它提供了一个广泛的漏洞数据库和扫描功能,帮助识别移动应用代码中的安全弱点。它能检测常见漏洞,并提供详细的代码行分析,帮助开发者轻松导入并扫描项目,理解并解决问题,如以下截图所示。
图 8.19 – 从 GitHub 导入项目
- 它与流行的开发工具和工作流无缝集成,包括使用 Snyk CLI (
github.com/snyk/cli
) 的 CI/CD 管道和源代码仓库。这使得开发者可以将安全检查融入现有的开发流程中,确保在开发生命周期早期发现漏洞,如以下图所示:
图 8.20 – Snyk CLI
-
它提供了详细的修复建议和修复指导,帮助开发者解决已识别的漏洞。它提供了可操作的步骤和代码片段,以简化修复安全问题的过程,帮助开发者有效地修复漏洞。
-
它支持多种编程语言和平台,包括流行的移动应用开发框架,如 iOS 和 Android。这种多样性确保开发者无论选择何种语言或平台,都可以利用该平台,如下图所示。
图 8.21 – Snyk 集成
您可以将 Snyk 与现有的工具和工作流无缝集成。此集成将帮助您在开发的各个阶段高效地保障项目安全。
- Snyk Code (
snyk.io/product/snyk-code/
)
图 8.22 – 带有不同扫描选项的应用详情
要在 Android 应用中使用 Snyk,请按照以下一般步骤操作:
-
首先,在您的开发机器上安装 Snyk 命令行界面(CLI)。您可以在针对您的操作系统的 Snyk 文档中找到安装说明。
-
打开终端或命令提示符,并导航到您的 Android 应用项目的根目录。
-
在终端中运行
snyk auth
Snyk 登录命令,并按照提示进行身份验证,以便将您的应用与 Snyk 帐户关联,如下图所示:
图 8.23 – 运行 Snyk 命令
- 使用 Snyk
test
命令分析您的 Android 应用依赖项中的已知漏洞,如下图所示。在您的项目目录中运行以下命令:snyk test
。
图 8.24 – snyk 测试和监控命令
Snyk 将扫描您的应用依赖项,并提供任何发现的漏洞报告。它还将建议以下步骤来修复这些问题:
-
如果 Snyk 发现任何漏洞,它将在扫描报告中提供修复建议。通常,这涉及将受影响的依赖项更新为包含安全补丁的较新版本。
-
您可以配置 Snyk 作为 CI 流水线的一部分运行(
docs.snyk.io/integrations/ci-cd-integrations
),或者设置定期扫描。
Oversecured
Oversecured (oversecured.com/
) 是一个强大的移动应用安全测试和漏洞修复平台。凭借其先进的安全测试能力、实时反馈、集成修复以及对多个平台的支持,它提供了一种全面的解决方案,能够提升移动应用的安全性,如下图所示。
图 8.25 – Oversecured 仪表板
以下是 Oversecured 功能的简要概述:
-
它提供多种先进的安全测试技术,包括 SAST、DAST 和 IAST。
-
它在测试过程中提供实时反馈和可操作的指导。它会突出显示漏洞,解释潜在风险,并建议具体的修复步骤,帮助开发者高效地解决安全问题。
-
它提供集成修复功能,使开发者能够直接在平台内处理已识别的漏洞。这种简化的工作流程有助于加速漏洞修复过程,并确保安全问题得到及时解决。
-
它支持 Android 和 iOS 等移动平台。这种灵活性使其适用于使用不同技术栈的开发者,如下图所示:
图 8.26 – 应用视图
- 它提供协作功能,允许开发者、安全团队和其他相关人员无缝合作。它还生成包含详细漏洞信息、支持文档和进度跟踪的报告,促进沟通和责任追踪,如下图所示。
图 8.27 – 代码视图中的漏洞
Oversecured 支持不同的 CI/CD 工具 (oversecured.com/docs/ci-cd/
) 和公开 API。无论你使用哪个 CI/CD 工具,你都需要执行以下操作:
-
在活动集成列表中获取集成 ID
-
生成 API 令牌
目前支持以下工具:
-
Bitrise
-
Jenkins
-
CircleCI
-
Travis CI
MobSF
MobSF (github.com/MobSF/Mobile-Security-Framework-MobSF
) 是一个开源自动化框架,用于进行渗透测试、恶意软件分析和移动应用(Android/iOS)的安全评估。你只需上传你的 iOS 或 Android 应用,如下图所示:
图 8.28 – MobSF 登陆页
接下来,MobSF 将通过扫描 .apk
或 .ipa
文件开始分析过程,如下图所示。
图 8.29 – 正在分析应用
然后,扫描结果和报告将显示,报告包括安全评分和分析结果,截图如下所示。
图 8.30 – 扫描结果
以下截图展示了应用内证书分析的示例。
图 8.31 – 应用中的证书分析视图
你还可以使用 MobSF 和亚马逊 Web 服务在云端运行你的 Android 或 iOS 静态分析测试,并使用 Docker。
你可以通过运行以下命令来安装预构建的 Docker 镜像(更多信息请参见 MobSF 文档:mobsf.github.io/docs/#/docker
):
docker pull opensecurity/mobile-security-framework-mobsfdocker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Docker 将开始拉取镜像并构建容器,它将在端口 8000
上运行。
MobSF 是一个开源项目,但一些公司可能会选择使用许可的自动化安全工具。这是因为许可工具通常包括培训、支持和访问安全专家的权限。
GitHub 高级安全
GitHub 高级安全(docs.github.com/en/get-started/learning-about-github/about-github-advanced-security
)可以帮助解决包括以下在内的各种安全问题和漏洞:
-
依赖扫描
-
通过使开发者能够在他们的本地工作流程中修复漏洞,从而实现实时保护代码。
-
启用来自数百万开发者和研究人员的众包智能。
-
促进团队成员之间的轻松协作,无论他们身处何地。
-
以自动化的方式交付安全软件,这种方式能够加速开发,而不是拖慢速度。
识别可能通过利用移动应用的弱点而引发的潜在安全问题至关重要,这突显了在安全团队中负责任和道德行为的重要性。
道德黑客的目的是增强安全性并防止潜在的攻击,而不是造成伤害。始终负责任地行为,遵守法律限制,并坚守道德行为是至关重要的。
让我们考虑一个假设的移动应用示例,该应用在设备的内部存储中以纯文本文件的形式存储用户登录凭证(用户名和密码)。如果攻击者能够物理访问该设备,就可能检索到这些凭证。以下是我们调查并修复此漏洞的步骤:
-
定位代码中存储敏感数据(如用户登录凭证)的部分,这些数据存储在设备上。
-
验证数据是否确实以不安全的方式存储,例如纯文本文件或未加密的数据库。
-
为了解决这个漏洞,敏感数据应该以加密格式存储。
-
将安全扫描工具,如 SAST 和 DAST,集成到您的安全流程中,可以大大增强您识别和缓解漏洞的能力。将这些自动化测试集成到您的 CI 管道中。每当有新代码推送到代码库时,运行这些测试,以确保应用在演进过程中保持安全。
-
定期将自动化安全测试作为您应用测试计划的一部分。随着应用的安全机制或代码库的任何变化,保持测试计划的最新状态。
-
考虑由安全专业人员定期进行手动渗透测试。他们可以提供自动化测试可能遗漏的潜在漏洞的见解。
移动 DevOps 的安全自动化技巧
以下是一些避免在实施 DevSecOps 时由于注入安全检查和扫描导致构建速度变慢并影响开发者生产力的建议:
-
重要的是,CI 构建不应被拖慢。然而,某些安全工具可能需要时间来扫描移动应用,这可能会影响 CI 构建时间,并导致开发者在一段时间内处于空闲状态。
-
如果需要,可以将测试拆分,以减少扫描执行时间,特别是在测试耗时较长时。并行在不同的移动设备上运行自动化安全测试可以减少总体执行时间,同时不会影响 CI 构建的运行时间。这一过程可以避免在单一设备上按顺序运行测试。
-
如果关键漏洞或安全问题可能对最终用户或系统造成伤害,请阻止构建或在进行安全测试后发布(建议优先处理那些优先级高、严重性大的关键问题)。开发和安全团队应合作,决定是否阻止构建或发布,并考虑潜在的影响和风险以及修复的时间框架。
总结
在本章中,我们的重点是保护您的移动应用和 DevOps 流程。我们探讨了移动应用安全的基础,自动化安全测试以及 DevSecOps 的基本知识。
阅读本章后,您将获得宝贵的见解和基本技能,这些将极大地帮助您的移动应用开发之旅,并且您将理解在移动应用开发和移动 DevOps 领域中安全的重要性。
您已经了解了移动 DevSecOps 的介绍及其如何显著增强您的移动应用安全性。理解各种移动应用安全威胁和架构考虑因素,使您能够从零开始构建安全的移动应用。
确保移动应用安全的关键方面是采用全面的测试方法和工具。您现在已经熟悉了静态和动态分析、渗透测试以及 API 安全测试等技术。通过将这些安全措施纳入您的开发管道,您可以高效地在早期阶段发现并缓解漏洞。
你现在的技能已经扩展到在移动 DevOps 过程中自动化安全性。关于 CI/CD、容器化和自动化代码分析的实用技巧使你能够在应用开发生命周期中简化安全实践。
通过理解和实施本章讨论的概念,组织可以确保其移动应用在面对不断演变的威胁时保持安全和具有韧性。
进入下一章,我们将讨论加速整个过程并提高开发者生产力的移动 DevOps 最佳实践。
第九章:移动 DevOps 最佳实践
正如前几章所讨论的那样,采用移动 DevOps 流程对于频繁且快速地开发和发布高质量的移动应用至关重要。通过结合开发者、测试工程师、发布专家和其他相关人员的最佳实践,可以加快移动应用的开发和分发。因此,较短的交付时间也将提高质量和用户体验。
在本章中,我们将探讨一系列关键主题,帮助移动应用开发者和 DevOps 团队实施高效且有效的持续集成/持续交付(CI/CD)流水线;我们将深入研究推动成功移动应用开发的基本实践。
本章将涵盖以下主题:
-
移动应用开发中的 CI/CD 最佳实践
-
管理移动应用版本和发布
-
管理移动应用基础设施
-
A/B 测试和功能标记
-
移动应用的远程与依赖缓存
-
CI 构建和测试并行执行
-
使用 fastlane 自动化构建、测试和发布
-
模拟 API
-
移动 DevOps 协作的 ChatOps
移动应用开发中的 CI/CD 最佳实践
保持移动 DevOps 流程的有效性、高效性,并与您整体的移动应用开发战略对齐,需要您和您的团队定期审查和优化这些流程。没有万灵药,因此我们应根据团队和业务的成长不断优化我们的移动 DevOps 流程。
有许多实践可以添加到移动 DevOps 流程中,以优化 CI/CD 流水线、代码审查流程、开发速度等。
在前几章中,我们讨论了实施 CI/CD 流水线或工作流时的不同阶段。
以下是确保移动应用 CI/CD 流水线成功的一些最佳实践:
-
尽可能实现自动化: 自动化构建、测试、代码分析、发布和其他任务,以减少人工干预、最小化错误并加速开发过程。
-
实施测试策略: 采用单元测试、集成测试、UI 测试和端到端测试的组合,以确保高质量代码。使用模拟器或真实设备测试各种设备、屏幕尺寸和操作系统。
-
优化构建和测试时间: 使用缓存、并行化和增量构建来减少构建时间。并行化测试执行,优先执行关键测试,以加快测试运行速度。
-
采用明确的分支策略: 在处理大型或复杂代码时,使用如 GitFlow 或基于主干的开发等分支策略非常有帮助。这可以保持清晰的提交历史,并简化集成和部署。
-
执行良好的提交规范:这包括原子提交、描述性的提交信息和频繁的代码审查,以保持代码质量并确保变更的可追溯性。这有助于确保代码的质量和正确性,并改善团队成员之间的协作。有多种工具可以用来改进和自动化代码审查过程,例如以下工具:
-
What The Diff (
whatthediff.ai/
):这是一个由 AI 驱动的代码审查助手。它的目的是帮助团队编写更好的拉取请求描述,甚至可以加速审查和合并过程。此外,它还能让非技术团队成员保持信息同步并参与其中。 -
Danger (
github.com/danger/danger
):这是一个非常棒的工具,可以帮助你的团队自动化代码审查规范。通过在流程中加入一个额外的逻辑步骤,Danger 可以在日常代码审查过程中帮助执行这些常规任务的 lint 检查。 -
MergeQueue (
mergequeue.com/
):一种更快速的方式来自动化合并工作流程,管理大型团队中的队列,并且再也不用担心构建失败了。
-
-
关注关键的 CI/CD 指标:监控 CI/CD 指标非常重要,例如构建时间、测试执行时间、部署频率和代码质量。本章将进一步讨论这些指标,以帮助识别瓶颈和改进领域。
-
将安全措施纳入 CI/CD 流程:为了确保 CI/CD 流程的安全性,重要的是要加入安全措施。可以通过使用静态和动态代码分析工具,扫描依赖项中的漏洞,以及通过最小权限原则来实施访问控制。
-
制定明确的回滚策略:在部署过程中遇到任何问题时,拥有一个清晰且明确的回滚计划是非常重要的。这可能需要为移动应用提交一个新的更新到应用商店。
-
建立清晰的沟通渠道:在团队成员之间建立清晰的沟通渠道,以确保每个人都能了解项目的进展和任何可能出现的问题。
-
与跨职能团队合作:与跨职能团队合作,确保开发和部署过程的各个方面都得到充分考虑。这涉及与设计师、开发人员、测试人员和运维团队的协作。
此外,随着我们改进移动 DevOps 流程和 CI/CD 实施,我们还应关注 CI 构建和 CI 服务器的整体性能。让我们看看一些要跟踪的 CI/CD 指标。
移动应用开发中需要跟踪的关键 CI/CD 指标
在你的 CI/CD 管道中跟踪关键指标可以帮助你衡量开发和部署过程的有效性,识别瓶颈,并优化管道。
以下是移动应用开发中需要跟踪的一些基本指标:
-
构建成功率:衡量每次构建所需的时间,包括编译、打包和其他任何与构建相关的任务。跟踪此指标可以帮助你识别低效环节并改进构建性能——例如,你可以选择加入缓存步骤,以减少应用程序构建时间,前提是应用模块没有从上次构建以来发生任何变化。这样可以防止应用程序从头开始构建,并从上次构建中断的地方继续。我们将在本章稍后讨论缓存。
-
部署频率:跟踪你部署新版本或更新到移动应用的频率。高部署频率表明成熟的 CI/CD 过程,并能更快地将功能和漏洞修复交付给用户。
-
更改的领先时间:衡量从提交到生产的代码更改所需的时间。较短的领先时间表明管道高效,并能更快地向用户交付价值;我们将在本章稍后讨论帮助代码提交过程的不同工具。
-
更改失败率:监控导致失败或需要回滚的更改百分比。较低的更改失败率表明你的测试和发布过程有效地在生产前捕捉到了问题。
-
平均恢复时间(MTTR):衡量修复问题或从生产中的故障中恢复所需的平均时间。较短的 MTTR 表明你的团队能够迅速有效地识别和解决问题。
-
测试执行时间:监控执行测试套件所需的时间。较长的测试执行时间可能会减慢开发进程。识别慢速测试或优化测试并行化可以减少执行时间。我们将在本章稍后讨论并行化。
-
测试覆盖率:跟踪代码库中被测试覆盖的百分比,以确保你有足够的测试来捕捉问题并保持高代码质量。
-
测试通过/失败率:监控每次构建中测试的通过或失败百分比。高通过率表明代码库稳定,而高失败率可能表明代码或测试过程存在问题。易波动的测试会产生不一致的结果,在某些运行中通过,在另一些运行中失败,且没有明显原因。尽早解决易波动的测试,以避免虚假的负面结果,并保持对测试套件的信心。以下是 Slack 团队如何在大规模中处理易波动测试的一个例子:
slack.engineering/handling-flaky-tests-at-scale-auto-detection-suppression/
。 -
代码质量指标:跟踪与代码质量相关的指标,如代码复杂度、代码重复性和遵循编码标准的情况。这些指标可以帮助你保持干净且易于维护的代码库。
在移动应用开发中,跟踪 CI/CD 的关键指标对于评估开发和部署过程的效率至关重要。通过监控这些指标,团队可以识别瓶颈,优化流水线,并确保功能和更新的平稳、可靠交付给用户。
这些指标为 CI/CD 流水线的整体健康和有效性提供了宝贵的见解,使团队能够进行数据驱动的改进,并保持稳定且高质量的代码库。
通过精心监控的 CI/CD 流水线和清晰理解的关键指标,让我们一起探索管理移动应用版本和发布的基本策略。
移动应用版本和发布管理
管理移动应用的版本和发布可能是一个复杂的任务,但有一些最佳实践可以帮助简化这一过程:
-
遵循语义化版本控制:采用明确且一致的版本编号系统至关重要。语义化版本控制(
semver.org/
)是开发人员广泛认可的标准。版本号由三个部分组成:主版本.次版本.修订版本。主版本的更改表示有破坏性变化,次版本的更改引入新功能,修订版本的更改修复错误和问题。 -
全面的发布说明:为每个发布提供详细的发布说明,包括新功能、修复的 bug、已知问题以及额外的说明或要求。
-
简化的分支策略:采用明确且定义良好的分支策略,如GitFlow或基于主干的开发,以避免混淆并保持清晰的提交历史。这将有助于确保顺利的集成和部署过程。
现在,让我们一起看一下用于组织和管理版本控制系统中源代码的两种策略:单一仓库和多仓库。
单一仓库
单一仓库(monorepo.tools/
)是一个包含多个不同项目并具有明确关系的单一仓库。这种方法旨在通过为项目提供一个统一的代码和资源的源,简化管理和开发大型复杂软件系统的过程。
单体应用和单一仓库之间存在差异;一个好的单一仓库与单体应用正好相反,如下图所示:
图 9.1 – 单体应用与多仓库与单一仓库的对比
单一仓库为项目开发提供了若干优势:
-
首先,将所有代码存储在一个单一的仓库中,可以更容易地理解不同系统组件是如何互相配合并依赖于彼此的。这也简化了依赖管理,减少了开发过程的复杂性,并促进了变更的无缝构建和部署。
-
单一仓库通过提供一个集中存储所有相关代码和资源的位置,增强了开发者之间的协作。这改善了沟通,减少了冲突,并促进了项目上的顺利协作。
然而,单一仓库也有一些挑战:
-
它们可能变得很大,增加了磁盘空间需求和克隆时间,从而使得克隆和使用仓库变得更加困难。
-
它们可能更复杂,尤其是对于大型和复杂的项目,因为更改会影响整个仓库。
安全执行也可能带来困难,因为所有代码都存储在一个位置并对多个开发者开放。这对于敏感项目尤其具有挑战性,需要谨慎的授权流程。
多仓库
多仓库是一种开发方法,其中项目的每个组件存储在自己的独立仓库中。它促进了模块化,并允许团队在特定组件上独立工作。虽然它提供了灵活性,但在多个仓库之间协调更改可能具有挑战性。
以下是与多仓库相关的一些特点和挑战:
-
在多仓库方法中,每个项目、库或模块都有自己独立的仓库。这使得每个项目的代码库保持隔离和独立。
-
每个仓库都有自己的版本控制历史,允许项目独立版本化。这为管理发布周期和更新提供了灵活性。
-
项目之间的依赖关系必须显式地进行管理和版本控制,从而增强了对项目间依赖关系的可视性和控制。
-
每个仓库只包含特定项目的代码,保持仓库的大小较小,可能提高性能。
-
多仓库方法允许更去中心化的开发过程,因为每个团队可以独立管理自己的仓库。
-
管理多个仓库之间的依赖关系、版本和配置,比单一仓库更加复杂且耗时。
-
在多个项目中进行更改可能是具有挑战性的,因为这可能需要在多个仓库之间协调提交和发布。
因此,选择单一仓库(monorepo)和多仓库(multi-repo)之间的决策,取决于团队规模、项目复杂性、开发流程和工具偏好等因素。有些组织偏好单一仓库的简化和统一方式,而另一些则偏爱多仓库设置的独立性和去中心化特性。
由于移动应用依赖于后端服务、数据库和配置管理,因此团队应考虑自动化发布和管理这些服务,以防止出现任何问题。让我们来探讨一下管理移动应用基础设施的概念。
管理移动应用基础设施
管理移动应用基础设施是成功开发和部署应用的关键方面。它涉及监督支撑应用功能和用户体验的底层系统、服务器、数据库和云资源。
高效的基础设施管理确保了可扩展性、可靠性和性能。任务包括配置和部署服务器、设置数据库、监控资源利用率和实施安全措施。采用现代的基础设施即代码(IaC)实践,可以让团队自动化基础设施的配置和部署,从而更容易保持一致性并无缝地进行变更部署。
一个良好管理的移动应用基础设施对于提供流畅且可靠的用户体验至关重要,同时能够高效处理日益增长的用户需求并随着应用的扩展进行扩展。让我们讨论一下如何管理移动应用的基础设施。
移动应用的基础设施即代码(IaC)
IaC 是一种强大的方法,它允许你通过代码定义和管理应用的基础设施,带来了可重现性和可扩展性等好处。虽然 IaC 通常与基于服务器的基础设施相关,但它也可以应用于移动应用,如下图所示:
图 9.2 – 基础设施即代码 (IaC)
以下是如何更详细地利用 IaC 管理移动应用的说明:
-
IaC 使你能够轻松创建可重现的环境。你可以为不同的环境(如开发、测试、预生产和生产)启动相同的基础设施设置。通过使用相同的基础设施代码,确保环境之间的一致性,减少配置漂移和环境相关问题的可能性。
-
定义支持移动应用所需的基础设施组件。这可能包括服务器资源、数据库、存储服务、内容分发网络(CDN)以及其他必要的资源。确定这些组件之间的配置设置、依赖关系和相互关系。
-
选择一个支持移动应用基础设施配置的 IaC 工具。常见的选择包括 Terraform 和 AWS CloudFormation。这些工具允许你描述和管理你的 IaC,并支持多种云提供商和服务。
-
将基础设施代码存储在版本控制系统(如 Git)中,以便跟踪更改、实现协作,并维护基础设施修改的历史记录。
-
利用 IaC 为移动应用的基础设施定义自动扩展能力。这使得您的应用能够根据需求自动增加或减少资源,从而确保最佳性能和成本效率。在基础设施代码中指定扩展策略和阈值。
-
借助 IaC,您可以将配置设置和变量作为代码进行管理,使得保持一致性变得更容易,同时避免手动错误。例如,您可以在基础设施代码中定义特定于环境的配置值(例如 API 端点和数据库凭据),并在不同环境中始终如一地使用它们。
-
借助 IaC,您可以对这些变化进行版本控制和跟踪,确保透明性并简化部署。您无需手动修改资源,而是修改基础设施代码并应用更改,IaC 工具将处理更新。
-
将测试原则应用于基础设施代码。编写自动化测试以验证基础设施定义的正确性和完整性。这有助于在配置或修改基础设施之前捕捉潜在问题。
-
将基础设施代码集成到您的 CI/CD 流水线中。这使您能够自动化移动应用基础设施的配置和更新,同时处理应用代码,确保一致性和可靠的部署。
在 IaC 之后,我们来探讨一下移动应用的配置管理以及如何使用它。
移动应用的配置管理
管理不同环境的配置设置和变量,确保一致性并避免手动错误,具体步骤如下:
-
确定移动应用所需的配置设置和变量。这些可以包括 API 端点、数据库连接字符串、功能标志、日志级别、凭据以及任何可能在不同环境之间变化的值。
-
将配置设置与应用代码分开。将配置值直接硬编码到代码中,会使在不同环境之间迁移时更新这些配置变得困难。相反,应将配置值抽象到单独的配置文件中,或通过环境变量将其外部化。
-
使用特定于每个环境的配置文件。例如,您可以为开发、测试、预发布和生产环境分别设置配置文件。这些文件可以是 JSON、XML、YAML 或属性文件。每个文件都包含该环境的相应值。
-
利用环境变量存储配置值。环境变量在系统级别设置,您的移动应用可以在运行时访问这些变量。此方法提供了灵活性,并且可以轻松更改配置,而无需修改文件。
-
使用集中式配置管理解决方案来存储和管理您的配置设置。这些解决方案包括 AWS Secrets Manager 的机密、Parameter Store 的参数或 HashiCorp Vault 的配置值。它们允许您为每个环境存储不同的配置,并提供在运行时检索值的 API。
-
自动化配置设置在不同环境中的部署,作为 CI/CD 管道的一部分。这确保了正确的配置值与移动应用一起部署,减少了在手动更新配置时发生人为错误的风险。
-
将配置文件或脚本存储在版本控制中,以跟踪变更、维护历史记录并启用协作。这使得在需要时可以恢复到先前的配置,并提供配置修改的审计跟踪。
-
避免直接将敏感信息存储在配置文件或环境变量中。相反,使用您选择的配置管理解决方案提供的安全存储机制,或在存储之前加密敏感值。
-
将配置测试纳入自动化测试策略的一部分。编写测试用例,以验证配置设置的正确性和完整性。这有助于在开发早期捕捉到与配置相关的问题,并确保应用在不同环境中按预期行为运行。
-
为修改配置设置建立变更管理流程。实施审批工作流,确保在将变更应用于生产环境之前,相关利益相关者已对其进行审查和批准。这有助于保持控制并防止未经授权或计划外的变更。
优化构建过程以减少构建时间,因为构建时间过长会拖慢开发周期并增加开发者的等待时间。使用缓存、并行化和增量构建等技术来加速过程。在下一部分中,我们将深入探讨移动应用的远程和依赖缓存,并探索其带来的好处。
远程和依赖缓存
构建和发布移动应用通常需要下载依赖项和资源到 CI 服务器或本地机器上,以便能够构建应用,这可能是耗时且数据密集的。然而,随着远程和依赖缓存解决方案的出现,开发人员现在拥有了一种强大的工具来提高生产力。
移动应用的远程和依赖缓存是指从远程服务器存储和获取常用的依赖项和资源。开发者无需每次构建应用时都下载这些资源,而是可以利用缓存显著减少构建过程中所需的时间和带宽。这种优化技术可以显著简化应用开发工作流程,缩短构建时间,提高迭代周期,并减少数据消耗。
以下是远程和依赖缓存的一些好处:
-
它消除了重复下载相同资源的需求,使开发人员在构建过程中节省宝贵的时间。当处理依赖项较多的大型项目时,这种加速效果尤为明显。
-
缓存有助于团队成员之间的协作,确保每个人都能访问相同的依赖和资源。这有助于避免版本冲突,确保团队内一致的开发环境。
-
开发人员可以快速迭代他们的应用程序,无需等待资源下载,从而加快测试和调试的周期。
-
一些缓存解决方案提供离线支持,使得开发人员即使在没有互联网连接时也能继续进行项目工作。这个功能对于经常外出的开发人员或在网络连接不稳定的地区特别有用。
但根据选择的缓存解决方案,开发人员可能需要监控和管理缓存,以防止缓存增长过大或堆满过时的资源。有效的缓存管理策略对于保持最佳性能至关重要。
在移动应用的远程和依赖缓存方面,一些工具和平台提供了类似的功能,包括以下内容:
-
Gradle 构建缓存 (
docs.gradle.org/current/userguide/build_cache.html
):Gradle 是一个流行的构建自动化系统,提供了一个构建缓存功能,可以用来缓存依赖和资源。它与基于 Gradle 的 Android 项目无缝集成,适用于大规模构建。 -
npm
包管理器包括一个缓存机制,可以有效地解析和获取依赖。npm 的缓存显著减少了获取和安装常用包所需的时间。 -
Bazel.build
利用复杂的依赖图和缓存机制,智能地确定需要重新构建的内容,大幅减少构建时间,提高开发人员的生产力。你可以阅读 Reddit 如何在 iOS 应用中使用 Bazel 的例子 (www.reddit.com/r/RedditEng/comments/syz5dw/ios_and_bazel_at_reddit_a_journey/
),以及 Square 如何在 Apple Silicon 上使用 Bazel 的例子 (developer.squareup.com/blog/getting-squares-ios-build-ready-for-apple-silicon-with-bazel/
)。 -
Tuist(
tuist.io/
):Tuist 是一个命令行工具,使用声明式方法简化 iOS 项目的设置和维护过程。Tuist 缓存(docs.tuist.io/building-at-scale/caching
)通过存储和重用先前构建的依赖项、资产和中间构建工件来优化构建时间。这种缓存机制可以大大减少构建和迭代 iOS 项目所需的时间。 -
BuildBuddy(
www.buildbuddy.io/
):BuildBuddy 是一个基于云的构建执行平台,帮助开发人员将构建卸载并分发到远程机器。它提供了一个用户友好的界面、广泛的构建洞察和协作功能,以简化开发工作流。通过使用 BuildBuddy,团队可以减少构建时间,节省基础设施成本,并提高开发人员效率。以下是如何使用 GitHub Actions 进行远程构建执行的示例:www.buildbuddy.io/docs/rbe-github-actions
。 -
XCRemoteCache(
github.com/spotify/XCRemoteCache
):XCRemoteCache 是一个 Xcode 项目的远程缓存工具。它重用在远程机器上生成的目标工件,并通过一个简单的 REST 服务器提供服务。 -
Carthage 缓存:Carthage 是一个 iOS 应用的依赖管理工具,提供缓存功能以加速依赖项的获取和构建时间。它与 Xcode 兼容,并简化了团队成员之间共享依赖项的过程。此外,你还可以使用 Rome(
github.com/tmspzz/Rome
),这是一个为使用 Carthage 构建的框架提供的共享缓存,允许苹果平台的开发人员使用 Amazon 的 S3、本地文件夹或自定义引擎。
如果在 iOS 应用中使用,你还可以使用 Cocoapods 缓存(cocoapods.org/pods/Cache
)或 Swift 包管理器(SPM)(github.com/apple/swift-package-manager
)缓存。
移动应用的远程和依赖缓存是移动应用开发和移动 DevOps 中的游戏规则改变者,它在节省时间、带宽节约、协作和迭代效率方面提供了实际的好处。
移动 CI/CD 系统使用缓存来在隔离的构建之间传输数据。由于 CI 构建运行在短暂的、隔离的虚拟机中,典型的 CI 工作流必须采取额外的步骤来引导开发人员通常可用的本地环境。
缓存这些操作将使你的 CI 工作流更快,因为安装 CLI 工具和下载第三方依赖项需要时间,如下图所示:
图 9.3 – CI 构建机器之间的缓存
虽然初始的设置可能会有一些复杂性,并且需要考虑缓存管理的问题,但总体的优势使得缓存成为任何开发者工具包中的宝贵补充。
这是一个如何使用 GitHub Actions 设置一个简单的 Gradle 缓存管道来加速 Android 应用构建时间的示例:
-
在
.github/workflows
目录下,创建一个 YAML 文件,例如android_build.yml
。 -
添加以下
android_build.yml
文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/.github/android_build.yml
。该工作流根据 Gradle 文件的内容缓存 Gradle 依赖项。 -
根据应用的复杂性和需求,您可能需要添加更多的步骤,例如运行测试、部署构件或与其他服务集成。
让我们来看一个如何在 Bitrise 的 CI/CD 工作流中使用缓存的示例。
Bitrise 提供了缓存拉取步骤和缓存推送步骤,这些功能可以基于应用的依赖关系,在构建之间缓存和检索特定的目录或文件。
要为您的 iOS 项目设置缓存,您需要将以下步骤添加到您的 Bitrise 工作流中:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/bitrise.yml
。
您可以通过以下链接了解更多关于 Bitrise 依赖和缓存的内容:devcenter.bitrise.io/en/dependencies-and-caching.html
。
最后,通过根据项目的需求对比并选择最合适的缓存解决方案,您可以优化应用开发过程,解锁更高的生产力。
对于你的移动应用和 CI 提供商,始终寻找合适的缓存解决方案是非常重要的。
并行执行 CI 构建和测试
在移动应用开发中利用并行执行进行 CI 构建和测试,可以显著提高开发者生产力,缩短反馈周期,提升整体效率。考虑使用 Fastlane、Firebase Test Lab 以及 CI 工具的能力,以实现最佳并行化并加速您的移动应用开发过程。
移动应用 CI 构建中并行执行的一些好处如下:
-
更快的反馈:并行执行减少了构建步骤和测试套件所需的时间,提供了更快速的代码更改反馈。这使得开发者能够更快地进行迭代,并在开发周期的早期捕捉到问题。
-
提高效率:通过利用并行执行,您可以充分利用可用资源,并将工作负载分配到多个代理或设备上。这提高了资源效率,并最大化了 CI 基础设施的利用。
-
可扩展性:并行执行使您的 CI 流水线能够随着移动应用项目的增长无缝扩展。它使您能够处理更大的代码库、增加的测试套件,并支持多个平台和配置,而不会牺牲速度或性能。
-
时间和成本节省:通过并行执行来减少构建和测试时间,您节省了宝贵的开发时间,并可能降低与维护 CI 基础设施相关的成本。
大多数 CI/CD 工具支持并行构建,或者将 CI 流水线或工作流拆分成小的补丁或任务,以并行运行,从而节省构建时间。例如,在 GitHub Actions 中,您可以使用 Matrix(docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
)在多种语言版本或多个操作系统上测试您的代码。
使用 Bitrise,您可以使用构建流水线(bitrise.io/why/features/pipeline
),它帮助您组织整个移动 CI/CD 构建过程,并允许您设置多个任务和测试的高级配置,可以并行和/或顺序执行。
在并行执行中,多个 UI 测试在不同的设备或模拟器上同时执行,如下图所示:
图 9.4 – 并行 UI 测试执行
移动应用 UI 测试的并行执行有助于提高测试过程的速度和质量,从而使您的移动应用更加可靠和健壮。
以下是并行执行在移动应用 UI 测试中的一些好处:
-
通过并行运行 UI 测试,您可以显著减少整体执行时间。与按顺序执行测试不同,并行执行允许在不同设备或模拟器上并发执行多个测试。这有助于节省时间,并提高测试过程的效率。
-
通过并行执行,您可以在多个设备或模拟器上同时执行测试。这使得您能够在更短的时间内覆盖更广泛的设备配置、操作系统和屏幕尺寸。它有助于确保您的应用在各种设备上都经过测试,并增加捕捉到设备特定问题的可能性。
-
并行执行为您的 UI 测试过程提供了可扩展性。随着测试套件的增长,并行执行测试可以让您处理更多的测试,而不会显著增加执行时间。您可以轻松地向测试基础设施中添加更多设备或模拟器,并将测试工作负载分配到它们上。
-
并行执行充分利用可用资源。通过同时使用多个设备或模拟器,您可以最大化测试基础设施的利用率。这有助于优化资源分配,并确保测试在没有不必要等待时间的情况下执行。
-
并行执行非常适合集成到 CI/CD 流水线中。通过并行执行测试,你可以实现更快的反馈周期和构建过程。它允许你将 UI 测试无缝集成到 CI/CD 工作流程中,并确保每次代码更改后,应用保持稳定和功能正常。
使用 Flank(flank.github.io/flank/
)可以运行并行的 Android 和 iOS 测试,它与 gcloud CLI 兼容。Flank 提供额外的功能来加速速度并提高质量。
移动团队安全快速发布功能的一种有用做法是实现特性标志。让我们讨论一下这一概念及其如何被利用。
A/B 测试与特性标志
A/B 测试和特性标志是移动应用开发中常用的强大技术,用于实验、验证和逐步推出新功能或变体给一部分用户。让我们深入探讨 A/B 测试和特性标志如何为移动应用带来好处以及可用的实施工具。
移动应用的 A/B 测试
A/B 测试涉及向不同用户组展示应用的不同版本或特定功能,以评估其对用户体验、参与度或关键绩效 指标(KPI)的影响。
这是它的工作原理:
-
实验:A/B 测试工具使开发者能够定义实验,创建不同的变体(A 和 B),并将用户随机分配到每个变体中。例如,你可能会测试不同的应用布局、导航结构或按钮位置。
-
衡量:指标和分析对于评估 A/B 测试的成功至关重要。通过监测用户交互、转化率或其他相关 KPI,你可以评估哪个变体表现更好并推动所需的用户行为。
-
分析与迭代:分析测试结果帮助你做出数据驱动的决策。你可以根据获得的见解来改进并迭代测试过的功能或版本,从而提升应用的性能和用户体验,如下图所示:
图 9.5 – A/B 测试的工作原理
移动应用的特性标志
特性标志(或开关)使开发者能够控制应用程序中特定功能或代码段的可见性和行为。特性标志提供了灵活性,允许开发者逐步推出新功能,在生产环境中进行测试,或动态启用/禁用它们。
这是特性标志的工作原理:
-
特性标志库或 SDK 被集成到应用程序的代码库中,以实现对功能可用性的运行时控制。标志可以根据预定义条件(如用户群体、设备类型或应用版本)配置为启用或禁用功能。
-
功能标记使开发者能够通过为特定用户群体选择功能来进行有针对性的测试。这有助于评估功能性能,收集反馈,并在将功能发布给更广泛的受众之前做出数据驱动的决策,如下图所示:
图 9.6 – 功能标记的工作原理
以下是一些最受欢迎的移动应用功能标记工具:
-
LaunchDarkly (
launchdarkly.com
) 是一个功能管理平台,提供强大的功能标记能力。它允许您控制功能的可用性,定位特定的用户群体,并通过基于 Web 的仪表盘轻松管理标记。 -
ConfigCat (
configcat.com/
) 提供了一个支持移动应用开发的功能标记和配置管理平台。它允许您创建功能标记,控制其可见性,并动态更新配置,无需应用更新。 -
Flagsmith (
flagsmith.com/
) 是一个开源功能标记和远程配置平台。它提供了一系列功能,包括 A/B 测试、目标规则,并与各种开发框架集成,适用于移动应用实现。 -
Firebase 远程配置 (
firebase.google.com/products/remote-config
) 是一个基于云的服务,允许开发者动态配置和定制应用程序,无需新发布或应用更新。它使开发者能够远程控制和个性化应用程序的各个方面,如文本、图像、颜色和行为,从而实现有针对性的内容推送和 A/B 测试。 -
Optimizely (
www.optimizely.com
) 是一个强大的实验和个性化平台,帮助企业做出数据驱动的决策,并提升数字化体验。
以下是 A/B 测试和功能标记在移动应用中的一些好处:
-
它们帮助您基于真实的用户数据做出明智的决策,提高功能发布和更新成功的机会。
-
通过逐步推出功能或仅对特定用户群体启用功能,您可以降低与 bug、性能问题或负面用户反应相关的风险。这确保了更平滑、更安全的部署过程。
-
它们允许根据用户反馈和可衡量的结果快速迭代和优化功能。这个迭代过程增强了开发周期,并加速了功能交付。
-
功能标记通过根据特定用户群体或个别用户定制应用功能,来提供个性化体验。这种定制化增强了用户的满意度和参与度。
A/B 测试和功能标志为移动应用开发者提供了宝贵的实验、验证和控制发布的技术。可以考虑使用像 Firebase Remote Config、Optimizely、LaunchDarkly、ConfigCat 或 Flagsmith 这样的工具来实现这些策略,并在移动应用开发过程中解锁数据驱动决策和灵活功能管理的好处。
接下来,我们将探讨在移动 UI 测试中使用模拟 API,这可以通过让你在不设置真实 API 或等待网络响应的情况下测试应用 UI,节省时间和精力。它还可以帮助你在不同的场景和条件下测试应用行为,而这些可能是通过真实 API 很难设置的。
模拟 API
模拟 API 在简化移动应用开发中至关重要,它通过解耦后端依赖、加速开发周期并增强可测试性,帮助提升开发效率。
在选择模拟 API 解决方案时,考虑其与开发工作流的集成、定制选项、文档和社区支持。通过利用模拟 API,移动应用开发者可以简化开发流程,提高应用质量,并更高效地进行迭代。
用于移动 UI 测试的模拟 API 是一种模拟的 API,允许你在不连接真实 API 的情况下测试移动应用的 UI。在许多不同的情况下,它都非常有用,例如当真实 API 尚不可用时,当你想要测试应用在不同场景下的行为,而这些场景可能无法通过真实 API 设置,或是你希望在不受网络延迟影响的情况下测试应用性能时。
图 9.7 – 模拟服务器的工作原理
你可以使用多个工具为移动 UI 测试创建模拟 API,例如 WireMock(wiremock.org/
),这是一款开源工具,允许你通过定义 HTTP 请求和响应来创建模拟 API。它可以作为独立服务器运行,也可以作为 Java 库在你的测试代码中使用。
这是一个设置简单模拟 API 端点返回 JSON 响应的示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/mockTest.kt
。
这是一个如何将 WireMock 服务器整合到 Android 测试设置中的示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/MyApiTest.kt
。
运行 Android 测试。对本地模拟服务器上指定 API 端点(例如 http://localhost:8080/api/endpoint
或 http://mock-server.com/api/endpoint
)发出的请求将被 WireMock 拦截,并返回配置的模拟响应。
使用 fastlane 进行构建、测试和发布
fastlane (fastlane.tools/
) 是一款功能强大的自动化工具,专门设计用于简化构建、测试和发布移动应用的过程。它提供了多种功能和集成,能够自动化重复任务,从而为移动开发者节省宝贵的时间和精力。
让我们深入了解使用 fastlane 构建、测试和发布移动应用的关键方面:
-
fastlane 简化了构建配置过程。你可以通过 fastlane 的配置文件(Fastfile) (
docs.fastlane.tools/advanced/Fastfile/
) 以可读的方式定义构建设置,例如代码签名、配置文件和构建风味。这消除了手动配置的需要,并减少了出错的可能性。 -
fastlane 与流行的测试框架(如 XCTest 和 Espresso)集成,允许你在构建过程中运行单元测试、UI 测试以及其他自定义测试。它还可以处理测试报告并生成详细的测试结果报告。
-
fastlane 与流行的 CI/CD 平台(如 GitHub Actions、Codemagic 和 Bitrise)无缝集成。它提供了专门的插件和集成功能,帮助将 fastlane 平滑地融入到 CI 工作流中。这确保了你可以在 CI 流程中持续、自动化地构建、测试和发布移动应用。
-
fastlane 简化了将应用发布到应用商店的过程。通过其 App Store Connect 和 Google Play 插件,你可以自动化整个发布流程,包括版本控制、代码签名、元数据管理,以及上传应用包或 APK 文件。
-
fastlane 的可扩展性允许你通过创建自定义动作或使用许多现有插件来扩展其功能。fastlane 的插件生态系统 (
docs.fastlane.tools/plugins/available-plugins/
) 提供了大量的预构建插件,这些插件可以与第三方服务如 Slack、Firebase App Distribution、Sentry、BrowserStack 等集成。这些插件使你能够将额外的功能(如崩溃报告、beta 测试或分析)融入到 fastlane 的工作流中。 -
fastlane 拥有一个充满活力和积极参与的社区,社区成员积极贡献开发工作。定期发布更新、新功能和修复漏洞,确保你可以访问到最新的改进和增强功能。
开始使用 fastlane 相对简单。以下是一步一步的指南,帮助你快速上手:
-
确保你的系统上已安装 Ruby。你可以通过在终端运行
ruby -v
来检查。如果 Ruby 未安装,你可以使用包管理工具进行安装,例如 Homebrew(适用于 macOS)或 Chocolatey(适用于 Windows)。 -
通过在终端运行
gem install fastlane
来安装 fastlane。此命令将获取并安装 fastlane 的最新版本。 -
使用终端导航到您的移动应用项目目录。
-
在项目目录中运行
fastlane init
。此命令初始化 fastlane 并创建一个新的 fastlane 文件夹,其中包含配置文件。 -
fastlane 使用 Fastfile 来定义和管理自动化任务。使用文本编辑器打开位于 fastlane 目录中的 Fastfile。
-
fastlane 提供了广泛的内置操作,涵盖了常见任务。例如,您可以使用 scan 操作运行测试,使用 delivery 操作将您的应用上传到 App Store。
-
fastlane 允许您安全地存储敏感信息,如代码签名证书和 API 密钥。在 fastlane 目录中创建一个新的
.env file
,并添加项目所需的环境变量。 -
更新位于 fastlane 目录中的
Appfile
,添加相关信息,如您的应用的包标识符和 Apple 开发者帐户详细信息。 -
要执行特定的 lane,请在终端中运行
fastlane <lane_name>
。例如,运行 fastlane beta 将执行您在 Fastfile 中定义的 beta lane。
这是一个 iOS 应用的 Fastfile 示例,包含用于构建、测试和将应用发布到 TestFlight 和 App Store 的 lanes(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/fastlane/Fastfile%20
)。
这是一个基本示例,展示了如何使用 fastlane 和 GitHub Actions 自动化您的 iOS 应用部署过程:
-
如果
.github/workflows
目录不存在,请在 GitHub 仓库中创建该目录。在该目录下创建一个 YAML 文件(例如,i0S-fastlane.yml
)。 -
配置一个 GitHub Actions 工作流,例如这个示例:
github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-9/.github/iOS-fastlane.yml
。 -
将
./path/to/your/project
替换为您的 iOS 项目目录的实际路径,并将your_lane
替换为您要运行的 fastlane lane(例如,beta、release 等)。
现在,每当您将更改推送到 main
分支时,GitHub Actions 工作流将被触发,并执行定义的步骤,这些步骤包括设置环境、安装依赖项并运行您的 fastlane lane。
这是一个基本示例,您可能需要根据您的项目设置和需求进行调整。
确保查看 fastlane 和 GitHub Actions 文档(docs.fastlane.tools/best-practices/continuous-integration/github/
)以了解更多高级配置和选项。
在使用 Bitrise、Codemagic 或任何其他 CI 提供商时,过程类似。您需要将管道步骤替换为 fastlane 命令,并确保在虚拟机上安装了 fastlane 所需的必要先决条件。
记住,fastlane 高度可定制,因此可以根据你的具体项目需求进行调整。不要犹豫,参考官方 fastlane 文档(docs.fastlane.tools
)以获取更详细的信息和示例。
下一部分将探讨 ChatOps,以及如何将聊天工具纳入团队对话中,从而加速移动 DevOps 生命周期。
移动 DevOps 协作中的 ChatOps
在当今快节奏的软件开发世界中,有效的协作与沟通是实现无缝移动 DevOps 的关键。随着远程工作和分布式团队的兴起,拥有一个可靠且功能丰富的平台,以促进实时互动变得尤为重要。
ChatOps 是一种协作方法,通过使用聊天平台作为沟通和自动化的核心枢纽,将开发、运维及其他团队结合在一起。它能实现无缝协作并整合各种工具,使得管理软件开发和部署过程变得更加便捷,如下图所示:
图 9.8 – ChatOps 的工作原理
在移动 DevOps 项目中,实施 ChatOps 可以使协作更加高效和透明。这将改善沟通并加快开发团队的决策过程。
ChatOps 带来的好处如下:
-
沟通与自动化任务的机器人部署提高了跨职能团队的敏捷性,从而缩短了问题解决的时间。
-
ChatOps 允许我们将不同领域的熟练工人组合成一个团队,而不影响组织结构。
-
自动化:集成机器人是最重要的成就之一。它们是根据预定命令执行任务的助手。通过这种方式,机器人可以被分配执行如代码搜索、部署和服务器重置等功能,大大减少了处理问题的时间。
让我们一起探索可以帮助实现 ChatOps 的各种工具和服务,以优化我们的移动 DevOps 流程。
Slack
Slack (slack.com/
) 是一个因其多功能性和集成能力而广受欢迎的沟通工具。Slack 被证明是移动 DevOps 协作中 ChatOps 的一个强大工具。利用 Slack 进行 DevOps,也被称为SlackOps,是指利用这一流行的团队协作工具 Slack,来简化并增强 DevOps 流程中的沟通、协作和自动化。DevOps 是一种结合软件开发(Dev)和 IT运维(Ops)的方式,旨在促进协作文化、持续集成/持续交付(CI/CD)以及自动化。SlackOps 利用 Slack 的实时消息、频道、集成和机器人功能,提升 DevOps 团队的效率和效能。以下是使用 Slack 与 DevOps 的一些好处:
-
它为团队提供了一个集中的空间,便于沟通、分享想法和讨论项目更新。它提供实时消息和语音、视频通话,便于快速高效的协作。
-
Slack 的最大优势之一是其广泛的集成生态系统。它能够与 DevOps 生态系统中使用的各种工具和平台无缝连接,例如 GitHub Actions 用于 CI/CD 管道,GitHub 用于版本控制系统,Jira 用于项目管理工具以及监控服务。这种集成能力可以实现自动化通知和更新,减少在不同应用程序之间切换的需要。
-
Slack 的移动应用提供流畅的用户体验,使团队成员能够保持联系和参与。它提供推送通知、直观的导航和访问所有基本功能,确保无论身处何地都能持续协作。
移动 DevOps 团队可以使用 Slack 简化工作流程、自动化发布过程、共享测试结果,并保持高效。
AWS Chatbot
AWS Chatbot (aws.amazon.com/chatbot/
) 是 亚马逊网络服务(AWS)提供的一个服务,旨在通过将其与流行的聊天平台集成来简化这些过程。它可以与流行的消息服务集成,如 Slack、Microsoft Teams 和 Amazon Chime。你需要选择你想使用的消息服务并将 AWS Chatbot 连接到它。这将使你能够在消息服务中接收来自 AWS 服务的通知和警报。
首先,重要的是要在你的 AWS 账户中创建一个 AWS Chatbot。这可以通过访问 AWS 管理控制台并选择 AWS Chatbot 服务来轻松完成。然后,你可以创建一个新的聊天机器人,并根据需要自定义其设置。请记住,AWS Chatbot 提供了多个优势,包括以下几点:
-
与流行的聊天平台如 Slack、Microsoft Teams 和 Amazon Chime 无缝集成。这种集成使团队能够直接在他们首选的聊天环境中接收实时通知、警报和更新,减少上下文切换,让每个人保持信息同步。
-
团队可以为 ChatOps 定义自定义工作流程,自动化重复任务并促进协作。通过使用聊天命令,团队成员可以对 AWS 资源执行操作、检索信息、启动部署并执行预定义脚本。这种能力使团队能够高效管理基础设施,无需离开聊天环境。
总之,采用移动 DevOps 最佳实践是实现高效、高质量移动应用开发的关键一步。通过结合开发人员、测试工程师、发布专家和其他利益相关者的专业知识,组织可以加速开发和部署过程,从而缩短交付时间并改善用户体验。
摘要
在本章中,我们重点讨论了移动 DevOps 的最佳实践,旨在加速高质量移动应用的开发与发布过程。通过结合开发人员、测试工程师、发布专家及其他利益相关者的专业知识,组织可以优化移动应用开发流程,并向客户提供频繁的更新,从而提高速度和质量。
在本章中,你掌握了 CI/CD 最佳实践、移动应用版本管理、基础设施即代码(IaC)、配置管理、A/B 测试、远程与依赖缓存、并行 CI 构建、fastlane 自动化、API 模拟和 ChatOps 协作等关键技能。这些技能将帮助你在移动应用开发中脱颖而出,并有效地优化你的流程。
在下一章,我们将讨论平台工程和开发者体验(DevX)如何提高生产力。
第四部分:超越移动 DevOps 与 DevOps 的未来
移动 DevOps 的未来可能会继续专注于提升移动应用开发的速度和质量。这可能涉及使用更新的技术和实践,以帮助提高移动应用开发的速度和质量。
本部分包含以下章节:
-
第十章**,通过开发者体验与平台工程提高生产力
-
第十一章**,预测移动 DevOps 的未来
第十章:通过开发者体验和平台工程提高生产力
移动开发者是许多公司和组织的基石,拥有一个专门的团队来理解他们的需求并提供最佳体验,对于成功和提高生产力至关重要,尤其是在团队扩展和公司成长的过程中。这就是开发者体验(DX)、内部开发平台(IDP)和平台工程(PE)团队的作用所在。
在本章中,我们将涵盖以下主题:
-
DX 和 IDP 的概念
-
拥有 DX 和 IDP 团队的重要性
-
移动 DevOps 与 DX 团队的关系
-
PE 的概念、好处和原则
-
DevOps 工程、站点可靠性工程和 PE 的区别
在今天的移动应用开发环境中,交付高质量、创新和用户友好的应用不仅仅是关于编写代码、测试和发布应用。移动 DevOps 团队需要管理一套复杂的活动,如我们在前几章中所讨论的,包括持续集成与交付(CI/CD)、发布编排、监控和分析。投资 DX 可以帮助移动 DevOps 团队简化和自动化这些活动,从而提高应用质量、加快上市时间(TTM)并提高团队生产力。
这不仅仅是工具、流程和活动;开发者的幸福感和生产力应该是 DX 团队最重要的目标。
让我们更深入地探讨 DX,了解它意味着什么。
什么是 DX?
DX 描述了移动开发者在使用工具或平台时的整体体验。为了提高开发者的采用率、参与度和留存率,DX 专注于为移动开发者创造积极的体验。
对于与大规模和远程移动开发者合作的公司来说,拥有一个 DX 团队变得越来越重要。这能确保移动开发者能够使用最新的工具和资源,同时也能为组织提供有价值的反馈和见解,从而提升移动应用和服务,并让移动开发者更开心。
DX 是一种思考工程卓越和最大化工程表现的方法,通过提升个人和团队整体的能力和表现来实现。
组织可以采取若干步骤将 DX 融入到他们的移动 DevOps 文化中。这可以包括提供必要工具和流程的访问、创建开放且协作的环境,并鼓励持续学习和改进的文化。
此外,组织还可以专注于为移动开发者提供资源和支持,并认可他们的成就,以进一步建立积极的 DX。
确保在移动 DevOps 文化中实现良好的 DX 对组织至关重要,因为这能带来诸多好处,如缩短 TTM、提高团队间的协作、以及吸引并留住 顶尖人才。
组织应专注于提供适当的工具和流程,创造一个开放和协作的环境,促进持续学习和改进的文化,并为移动开发人员提供资源和支持,以实现这一目标。
DX 团队做什么?
DX 团队的角色基于三个支柱:理解开发者需求、创建以用户为中心的解决方案,以及改善开发者互动。如下面的图所示,DX 团队的目标是提升使用其平台的开发者的生产力、效率和满意度:
图 10.1 – DX 的重点
DX 团队代表并倡导公司内部的开发者,优先考虑他们的需求和体验。它提供技术支持,开发简化开发过程并提高应用性能的工具和接口。
理解开发者需求
DX 团队的主要目标是了解移动开发人员的需求,以确保组织为移动开发人员创造最佳体验。
这涉及到审查移动开发人员当前使用的工具和服务,并理解他们在使用这些工具时面临的问题。通过清晰且全面地了解移动开发人员的需求,DX 团队可以提出量身定制的解决方案和服务,以满足这些需求。
通过组织工作流程创建以用户为中心的解决方案
一旦识别出移动开发人员的需求,DX 团队就可以开始创建以用户为中心的解决方案。这意味着团队将设计量身定制的软件和服务,旨在让移动开发人员的体验更加直观和愉悦。通过设计符合移动开发人员需求的软件和服务,团队可以确保移动开发人员在与组织合作时获得最佳体验。
通过清晰且标准化的沟通增强开发者互动
DX 团队还致力于确保移动开发人员与组织的互动是积极的。这可能包括为移动开发人员提供他们成功所需的资源,确保他们在使用组织的产品和服务时获得良好体验。此外,团队将寻找方法来创造更积极且富有成效的组织与移动开发人员之间的关系,例如定期进行调查,征询他们对流程、工具和公司目标的反馈。
DX 与移动 DevOps
DX 团队可以提供对移动开发者需求的宝贵理解,这有助于确保所有团队成员达成共识。它还可以充当移动开发者、产品经理和高层之间的桥梁,帮助确保每个人的需求得到满足。这有助于创造一个团队协作的环境,共同开发成功的移动应用。
DX 涵盖了开发者与移动开发平台或生态系统互动的各个方面。以下是 DX 团队的一些关键职责:
-
入职支持:为移动开发者提供适当的材料、培训和业务文档,以帮助新员工或加入者顺利完成入职过程。这将使他们能够快速融入工作,避免浪费时间和精力去了解业务或代码。
-
文档:全面且清晰的文档对于移动开发者理解如何使用库、API、SDK、框架以及其他工具和流程至关重要。文档应易于查找、阅读和理解,并提供常见使用场景的示例和解释。
-
工具和 SDK:平台提供的工具、库、API 和 SDK 应直观易用,并提供清晰的文档和示例。这些工具应帮助移动开发者自动化重复任务,加快开发和发布速度,并提供代码质量和性能的洞察。
-
测试:测试和调试工具应易于使用、全面且可靠。移动开发者应能够快速识别和解决问题,并高效地调试代码。
-
性能与可扩展性:DX 团队应关注移动应用的性能,同时也要考虑后端服务的可扩展性。
-
安全与合规性:DX 团队应提供强有力的安全与合规指导,例如数据加密、访问控制和审计。它应遵循行业标准和法规,并为公司内的移动开发者提供明确的安全开发实践指南。
了解更多关于 Slack 移动开发者体验团队如何帮助移动开发者保持高效的内容,请访问slack.engineering/Mobile-developer-experience-at-slack/
。
探讨了 DX 背后的概念后,接下来让我们讨论一下 IDP 与移动 DevOps 之间的关系。
什么是 IDP?
IDP(internaldeveloperplatform.org/
)关注的是如何最好地为你的移动开发团队提供高效和有效的工具与资源。
在我看来,正如以下截图所示,IDP 是 DX 的一个子集,DX 是将各种工具和技术汇聚在一起的集合。IDP 提升了开发者的生产力,改善了 DX,减少了手动操作,降低了成本,并减轻了团队的维护负担。它们在保持低认知负荷的同时,支持开发者自助服务:
图 10.2 – DX 与 IDP
如我们在第一章中讨论的,Mobile DevOps 是一套实践方法,能够帮助组织以安全且高效的方式构建、测试、发布和监控移动应用。为了确保开发者的最高生产力,投资合适的工具、流程和实践至关重要。
这包括投资自动化工具,设置敏捷开发环境,并提供访问最新技术的权限。还应利用如 CI/CD 等技术,尽可能地自动化开发和发布周期。
对于 Mobile DevOps 来说,确保拥有合适的工具和流程是很重要的。这包括一个自动化测试框架,以及一个允许移动开发者快速测试和推送应用更新的移动设备实验室。
注意
了解更多关于 Netflix 在开发者生产力方面的经验,参见 www.droidcon.com/2022/06/28/netflix-gradle-a-journey-in-developer-productivity/
,了解 Uber 如何进行开发者生产力工程,参见 www.youtube.com/watch?v=YdmzVzxz9DI
,以及 DoorDash 如何进行开发者生产力工程,参见 www.youtube.com/watch?v=MN9U-JmRFJA
。
IDP 和 DX 能够解决组织面临的诸多痛点。
IDP 减少了整个组织的认知负担,使得移动开发者可以自助服务,而不需要抽象上下文或隐藏底层技术,具体包括以下内容:
-
移动 CI/CD 基础设施编排和发布管理:管理能够使这些阶段发生的工具和流程。这包括构建和测试应用的工具、自动化部署过程的工具,以及管理新版本应用发布的工具,正如我们在第六章中讨论的,移动应用 发布管理。
-
移动应用配置:用户可以自定义的设置和偏好,以定制应用的外观和行为。其中包括语言选择、主题自定义、通知设置、隐私设置和用户偏好等选项。
-
管理开发环境:开发者大多数时间都花在设置环境上,一个设计良好的开发环境对生产力和代码质量有着显著影响。
通过这种方式,团队可以确保开发环境根据他们的需求量身定制,并包含完成目标所需的所有工具和集成。
有不同的开发环境作为服务或产品,提供完全配置的开发环境,包括以下内容:
-
Coder (
coder.com/
): 这是一个自托管的远程开发平台,将软件开发从本地机器转移到本地和公有云基础设施上。在强大的服务器上构建代码,并在几分钟内为新开发者提供入职体验,同时确保源代码和数据的安全。 -
GitHub Codespaces (
github.com/features/codespaces
): 这是一个完全配置的云端开发环境,能够通过 GitHub 在几秒钟内启动,使用 Visual Studio Code、Jupyter 或 JetBrains,并配备编辑器、终端、调试器、版本控制、设置同步和所有扩展。无论你是在浏览器中工作还是在桌面上工作,都可以在任何设备上完成。这就是它的全部功能。 -
Gitpod (
www.gitpod.io/
): 该平台为任何类型的软件项目提供完全初始化和完美配置的开发环境。任何团队成员都可以使用 Gitpod 运行代码。通过一次配置环境,PE 团队能够实现开发者自服务。
在我看来,如果团队决定转向基于云的开发环境,可能会遇到困难,因为移动应用开发需要特殊的环境、工具和 SDK,但优步的开发者平台最近通过 Kubernetes 构建了一个基于单一代码库的远程开发平台,这是一个很好的例子 (www.uber.com/en-DE/blog/devpod-improving-developer-productivity-at-uber/
)。
- 管理机密:安全地存储密码、API 密钥和其他凭证,并确保它们保持受保护。通过有效管理机密,敏感数据能够防止未经授权的访问。
可以使用不同的秘密管理工具和服务,以下是一些例子:
-
HashiCorp Vault (
www.vaultproject.io/
): 使用 UI、CLI 或 HTTP API 安全存储并严格控制访问令牌、密码、证书和加密密钥,从而保护机密和其他敏感数据。 -
AWS Secrets Manager (
aws.amazon.com/secrets-manager/
): 跟踪数据库凭证、API 密钥和其他机密的生命周期,允许您根据需要检索、轮换和存储它们。 -
Doppler (
www.doppler.com/
): 允许开发人员和安全团队在设备、环境和团队成员之间同步和保护机密与应用配置。
如前面章节所讨论的,随着规模的扩大,所有上述责任应由一个专门的团队管理,这个团队可以是 IDP 和 DX 团队。
IDP 优化开发流程,使得移动应用的开发和发布变得更加高效。
这包括审视开发环境、工具和流程,寻找提升整体生产力的方法。这可能包括自动化流程、引入新工具,或重组移动开发团队等。
通过生产力工程,移动开发者能够将更多时间花在实际开发工作上,减少繁琐任务的时间。这样,你能够提升团队士气,加速开发周期。
例如,Netflix 的移动生产力(MoPro)团队帮助全球的工程师快速创建 Netflix 移动应用。为了实现这一目标,它使用优化开发者体验的工具和基础设施。通过先进的自动化测试和生产力解决方案,支持实验、自治和所有权的文化。
为了更好地理解开发者生产力,有一个框架叫做SPACE (queue.acm.org/detail.cfm?id=3454124
),它涵盖了以下几个重要方面:
-
满意度与福祉
-
性能
-
沟通与协作
-
效率与流程
组织和团队可以通过识别和衡量生产力,基于多个维度做出更好的决策。
移动开发者可以使用多种工具和技术来提升生产力,包括以下分析与协作平台:
-
Backstage (
backstage.io
): 这是一个开放平台,用于构建开发者门户。通过 Backstage 的集中式软件目录,你可以恢复微服务和基础设施的秩序,并使产品团队能够快速交付高质量的代码。 -
LinearB (
linearb.io/developer-experience/
): 这是一个平台,通过工作流自动化和优化你的交付流水线,提升开发者体验,使用你移动开发者喜爱的工具。 -
Compass (
developer.atlassian.com/cloud/compass/
): 这是一个开发者体验平台,将你的分布式软件架构和相关团队汇聚在一个统一的地方。 -
Okay (
www.okayhq.com/
): 这是一个平台,帮助你基于 Jira、GitHub、PagerDuty 等开发者工具构建查询和仪表板。
通过使用这些工具和技术,移动开发者可以简化工作流程,消除耗时的任务。
除了使用生产力工具,移动开发者还应优化他们的流程。开发过程可以被分解成更小的任务,或者可以为代码审查和修复漏洞创建更高效的流程。通过系统地优化流程,移动开发者可以最大化他们的生产力。
IDP 工程的好处
通过采用 IDP,移动开发者可以通过提高效率来增加生产力。它还能帮助开发者更快地发现和修复错误,并通过自动化重复性任务来节省时间。此外,IDP 还可以帮助减少与长周期开发相关的成本,如错过的截止日期和延期。
开发者生产力的概念充满了误解和神话,这些误解和神话可能导致错误的决策。其中包括以下几点:
-
一个常见的误区是认为工作时间越长,生产力越高。实际上,往往情况正好相反。过度工作可能导致倦怠,进而降低动机和生产力。
-
毫无疑问,干扰会妨碍生产力,但同样重要的是认识到,休息和停机时间对于防止倦怠和保持专注也同样重要。工作与生活的平衡 至关重要。
-
人们常常认为最优秀的移动开发者是单打独斗的,不需要其他人的帮助或合作。实际上,合作与团队合作能够带来更好的结果并提高生产力。
在 DX 和 IDP 团队的背景下,是时候了解新时代的 PE,以及它如何与 IDP 协同工作了。
什么是 PE?
PE 的概念是指定义、构建和维护一个平台的过程,这个平台将作为软件开发、发布和扩展的基础。
这包括设计基础设施和基础设施即代码(IaC),设置 CI/CD 管道,并自动化测试和发布过程。
PE 在确保移动 DevOps 平台成功方面扮演着至关重要的角色。
为了确保平台能够优化用于构建和发布移动应用,PE 与移动开发团队密切合作。在这个过程中,我们设置了构建、测试和部署应用所需的工具和框架,并确保平台具有可扩展性和可靠性。
PE 团队还负责监控和维护平台。任务包括监控平台的性能和稳定性,识别和修复问题,以及根据需要实施升级和更新。
PE 的原则包括以下几点:
-
处理不断增加的负载和使用量的能力
-
维护平台的可用性和功能性
-
保证平台及其用户免受恶意攻击和数据泄露是安全团队的责任。
-
保持平台的更新并易于维护
-
平台应该能被多个团队和应用重复使用
在许多情况下,平台工程师是更大工程团队的一部分,因此,考虑团队如何沟通及工作流程至关重要。因此,它变得更像是一个集中的产品团队,专注于内部平台客户,如移动开发者、测试人员和产品经理。
在 PE 中,常见的工程资源被整合为一个内部工具/平台,以简化软件开发。
平台工程师的技术能力还应包括云计算、容器化、基础设施即代码(IaC)、自动化和监控专长。可能还需要掌握编程语言和工具的熟练程度。
如今,平台工程师社区非常庞大(platformengineering.org/
),但大多数话题似乎主要集中在云计算和 Kubernetes 相关内容上。不过,我相信随着时间的推移,越来越多与移动相关的话题将被加入和支持。
PE 的好处
有了 PE,企业能够更快速、更具成本效益地开发和部署符合需求的软件解决方案。
此外,PE 使公司能够快速轻松地更新其软件解决方案,保持领先于竞争对手。此外,PE 还降低了成本,因为它消除了手动编码、测试和调试的需求。
如果想了解规模化 PE 的好例子,可以阅读Wise的PE历史(www.wise.jobs/2021/03/25/introduction-to-the-wise-platform-team/
)。
为了确保有效的 PE,遵循最佳实践至关重要。这包括确保应用的架构是可扩展和模块化的,使得随着应用的发展,新增功能和特性变得容易。平台工程师还应确保数据库设计合理,并经过性能优化,同时确保应用的数据 安全存储。
定期测试应用的后端以识别并修复任何问题也是非常重要的,避免它们影响用户体验。
最后,平台工程师应时刻关注移动应用开发领域的最新技术和趋势,以确保其应用保持竞争力和相关性。
随着移动应用使用量的持续增长,平台工程师的角色将变得更加重要。随着移动应用变得更加复杂和功能丰富,新的工具和框架将被需要来应对不断增加的工作负载。包括 5G、人工智能(AI)、云计算、增强现实(AR)和虚拟现实(VR)等新技术,将为平台工程师提供创新和创造引人入胜的移动体验的新机会。
平台工程师、移动 DevOps 工程师和移动端站点可靠性工程师的区别
随着更多组织采用移动 DevOps,理解三个相关角色——移动 DevOps 工程师、网站可靠性工程师和平台工程师之间的差异变得越来越重要。
这些角色中的每一个都需要自动化和基础设施来部署、维护和监控软件。尽管如此,每个角色在职责和重点上都具有独特性。
网站可靠性工程师、DevOps 工程师和平台工程师在移动应用开发中都扮演着至关重要的角色。每个角色的具体重点取决于组织的需求,每个角色在移动应用的成功中都发挥着关键作用。
移动应用平台工程师
如前所述,移动应用平台工程师构建和维护运行移动应用的平台。他们的职责包括以下内容:
-
构建和维护运行移动应用的平台服务,如数据库、缓存系统和消息队列
-
开发自动化工具,以简化常见的移动应用开发任务
-
通过微调平台服务来优化移动应用系统的性能
-
设计和实现移动应用系统的安全性和合规性功能
-
与移动应用开发人员合作,确保平台服务的设计和构建能够满足移动应用开发的需求
平台工程师的关键指标包括正常运行时间、可扩展性、开发者满意度、上市时间、安全性、基础设施成本效率和移动应用用户满意度。
移动应用 DevOps 工程师
在移动应用 DevOps 中,DevOps 工程师简化了移动应用的开发和部署过程。为了确保代码尽可能快速且可靠地交付给用户,他们与移动应用开发人员紧密合作,自动化移动应用系统的部署和测试。
DevOps 工程师应熟悉如 React Native 和 Flutter 等移动应用开发框架。此外,他们还应熟悉 GitHub Actions、GitLab 和 Bitrise 等 CI/CD 工具。
除了自动化和管理配置外,移动 DevOps 工程师还具有安全方面的专业知识。他们自动化应用交付,设置 CI/CD 管道,并管理移动应用的云基础设施。他们的日常职责包括以下内容:
-
通过 CI/CD 管道交付移动应用
-
通过构建和维护测试与集成系统来确保代码质量
-
解决由移动应用引发的事故
-
通过与移动应用开发人员合作简化移动应用交付
除了技术能力,移动 DevOps 工程师还必须具备出色的问题解决能力,能够识别并解决发布过程中出现的问题。
DevOps 的关键指标包括频率、交付时间、平均恢复时间(MTTR)和变更失败率(CFR)。
移动应用网站可靠性工程师
移动站点可靠性工程师负责确保移动应用程序的可靠性、可用性和性能。作为其职责的一部分,他们与开发团队密切合作,识别潜在的性能问题并优化应用程序,以实现最大效率。此外,他们必须熟悉诸如 Prometheus、Grafana 和 Elasticsearch 等监控和日志工具。
他们的专业知识包括监控和管理移动应用性能、自动化重复任务以及故障排除。以下是他们的职责:
-
建立监控和警报系统,以便在问题影响用户之前发现它们
-
创建和维护移动应用数据备份和 灾难恢复(DR)系统
-
与移动应用开发人员合作,设计和构建可扩展、可靠且容错的系统
移动应用站点可靠性工程师的关键指标包括应用程序稳定性、崩溃率、用户参与度、响应时间和服务器正常运行时间。
尽管这三个角色都需要与移动应用开发团队合作,但他们的具体重点各不相同。移动应用站点可靠性工程师的目标是与移动开发人员合作,确保移动应用系统的可靠性、可扩展性和性能。为了简化移动应用的交付过程,DevOps 工程师与移动开发人员密切合作。平台工程师与移动开发人员合作,设计和构建支持移动应用的平台。
我的公司是否需要 DX、IDP 或 PE?
为了在数字时代保持竞争力,企业需要 DX、IDP 和 PE 团队。PE 使公司能够创建安全、可扩展且强大的软件解决方案。通过 PE,公司还可以更快、更具成本效益地开发和发布软件解决方案,并对符合需求的开发过程有更多的控制权。
当公司利用 DX、IDP 和 PE 团队时,它们可以降低成本。如果你希望在数字时代保持竞争力,PE 可能是你公司成功的关键。
投资 PE 时,必须选择合适的工具,建立强大的基础设施,并需要跨团队的协作。为了确保成功,移动 DevOps 团队应定期评估其 PE 策略。
总结
任何与移动开发人员合作的组织都应该拥有 DX 团队。除了提高员工士气和忠诚度外,它还确保移动开发人员在公司产品和服务中的最佳体验。为了建立 DX 团队,必须进行细致的规划和执行,团队还应配备必要的资源和工具。
此外,DX 团队可以承担各种项目,从创建新工具到提供支持和指导。
本章中,我们涵盖了以下主题:
-
DX 和 IDP 的概念
-
拥有 DX 和 IDP 团队的重要性
-
移动 DevOps 和 DX 团队之间的关系
-
PE 的概念、优势和原则
-
DevOps 工程、站点可靠性工程和 PE 之间的区别
对于移动 DevOps 来说,确保拥有正确的工具和流程至关重要。这包括一个自动化测试框架,以及一个可以让移动开发者快速测试并推出应用更新的移动设备实验室。
最终,DX 团队将通过为移动开发者提供更好的体验,帮助公司或组织在开发工作中取得更大的成功。根据 DX 团队的设置和执行情况,它可以成为任何组织的宝贵资产。DX 团队可以用于各种项目,从开发新工具和资源到响应功能需求。
PE 使公司能够创建安全、可扩展和强大的软件平台和解决方案。通过 PE,公司还可以更快速、成本更低地开发和发布软件解决方案,同时在满足需求的开发过程中拥有更多的控制权。
最后,移动应用的站点可靠性工程师致力于确保移动应用系统的可靠性、可扩展性和性能,并与移动开发者协作。DevOps 工程师与移动开发者合作,优化移动应用交付流程。平台工程师与移动开发者合作,设计并构建用于运行移动应用的平台。
在下一章中,我们将讨论移动应用开发和移动 DevOps 的未来趋势,并将以总结我们的书籍以及我们对未来的预测作为结尾。
平台工程师、移动 DevOps 工程师和移动站点可靠性工程师之间的区别
第十一章:预测移动 DevOps 的未来
在本书中,我们讨论了移动 DevOps 是如何迅速发展的,它正在改变移动应用的开发、测试和发布方式。它是一种颠覆性的技术形式,彻底革新了我们开发移动应用的方式,使团队能够比以往更快地开发和发布移动应用。
本章将涵盖以下主题:
-
移动应用开发的未来趋势
-
移动 DevOps 的未来趋势
-
移动 DevOps 操作手册 回顾
移动 DevOps 为组织提供了灵活性,使其能够快速适应不断变化的市场条件和客户需求,从而更快、更高效地开发和发布移动应用。移动 DevOps 解决方案必须能够跟上移动技术的快速变化。
未来几年将充满移动应用开发的趋势。让我们一起探索这些趋势,并看看开发者和企业如何保持领先。
移动应用开发趋势
我们现在正处于 2023 年;这一年已经过半,移动应用开发行业正在经历快速变化。让我们仔细看看。
跨平台移动开发正在兴起
移动开发行业近年来一直在上升,这一趋势预计将继续。特别是,越来越多的公司意识到跨平台移动开发的潜力。
跨平台移动开发还通过使用单一代码库,使得实现新功能和更新变得更加容易;开发人员可以快速、轻松地向应用添加新功能和更新,而不必为不同操作系统更新多个版本的应用。
未来,跨平台移动开发的兴起将受到几个因素的推动,包括成本效益、更快的 市场时间 (TTM) 和一致性。
我们在 第二章中讨论了各种跨平台框架,理解移动生态系统。但在我看来,Flutter 在未来几年将会获得更多关注,因为它不仅是跨平台的,而且是一个允许用户通过单一代码库构建六个应用的生态系统,面向不同操作系统和设备。
使用低代码开发移动应用
使用低代码开发应用的方式越来越受欢迎,因为开发人员可以在几乎不需要编码技能的情况下创建移动应用。低代码移动应用是快速、轻松创建移动应用的绝佳方式,无需编写太多代码。通过使用拖放组件和预构建功能,开发人员可以快速创建具有丰富功能的移动应用,而无需了解太多编程知识。
在我看来,云服务将在低代码时代占据重要地位;例如,AWS Amplify(aws.amazon.com/amplify/
),您可以利用它在几小时内创建一个完整堆栈的移动应用,并为您的 iOS、Android、Flutter 或 React Native 应用创建一个带有认证、数据、存储等功能的Amazon Web Services(AWS)后端,并在几分钟内与其他 AWS 服务进行集成。
低代码移动应用开发的优点包括更快的开发速度、降低开发成本以及简化开发流程,但尽管低代码移动应用开发有其优势,企业也应意识到其中的一些潜在缺点。以下是几个需要考虑的因素:
-
低代码平台的定制潜力由于预构建的模板和组件而受到限制。因此,创建独特的功能或用户 体验(UXs)可能会变得困难。
-
如果企业被某个平台锁定,可能会很难切换到其他低代码平台。
-
由于依赖于尚未经过充分测试以排查安全漏洞的预构建组件,低代码平台可能比定制应用程序更不安全。
-
对于更复杂的应用程序,低代码平台可能仍然需要一定的学习曲线才能有效使用,尽管其易用性较高。
低代码移动应用开发的确是企业快速创建简单移动应用的一个好方法,但在决定使用哪个平台之前,企业应考虑其潜在的缺点。
安全性变得越来越重要
随着移动应用程序的流行,移动应用开发越来越注重安全性。开发安全的应用程序对开发者来说是必须的。
为了做到这一点,开发者必须保持对最新安全工具、框架、流程和技术的了解。为了进一步保护他们的应用程序,开发者应当集成额外的安全措施,如加密、会话管理、输入验证以防止 SQL 注入、跨站脚本(XSS)以及双因素认证(2FA)。
在第八章《保持移动应用和 DevOps 安全》中,我们详细讨论了如何使用 DevSecOps 保持移动 DevOps 的安全性,开发者如何在开发的每个阶段考虑安全性,以及他们如何将安全性集成到移动 DevOps 过程中。由于移动应用变得越来越复杂,我相信结合安全性的自动化将变得越来越重要。
AI 和 ML 的影响不断增加
使用人工智能(AI)和机器学习(ML)变得越来越流行,正如我们最近所注意到的,现在大多数应用程序都在不同的业务领域中使用 AI 以实现他们的目标。
通过 AI 和机器学习,移动开发者可以创建更加直观且用户友好的应用,同时提升应用功能。AI 和 ML 还可以用来创建预测分析,提供个性化的用户推荐。
为了保持竞争力,开发者应熟悉 AI 和机器学习(ML)技术,这些技术有潜力彻底改变移动应用开发。
我的预测是,AI 将在今年及未来几年内更加深入地融入各个行业,科技公司将在市场上展开激烈竞争。今天的世界已经可以看到,越来越多不同的工具、平台和应用正在融入 AI 技术。
云计算使用的增加
移动应用开发越来越依赖云计算,以创建可以在多个平台和设备上运行并提高移动性能的应用。
由于云计算的可扩展性和灵活性,移动开发者可以根据需要调整应用,以适应使用量的增加或新增的功能。开发者可以使用 AWS 的云服务来构建、测试和部署复杂的移动应用业务。
举例来说,AWS 提供了多种云服务,可以集成到移动应用中作为后端服务,包括以下几项:
-
AWS Amplify (
aws.amazon.com/amplify/
) 提供了一个无服务器的后端基础设施,能够自动扩展,免去开发者管理服务器基础设施的需要。它将后端开发的复杂性抽象化,使得开发者可以专注于构建前端体验,并为最终用户提供价值。 -
Amazon Cognito (
aws.amazon.com/cognito/
) 提供了一项安全且可扩展的用户身份验证和授权服务。它使得移动应用开发者能够轻松地为他们的应用添加用户注册、登录和访问控制功能。 -
Amazon Pinpoint (
aws.amazon.com/pinpoint/
) 是一项面向移动应用的客户参与和分析服务。它帮助你通过多个渠道(包括推送通知、短信和电子邮件)向应用用户发送定向、个性化的信息。这些只是云服务在移动应用中的一些例子。
用户体验(UX)日益重要
移动应用开发越来越重视用户体验(UX)。开发者必须创建用户友好且直观的应用,确保用户能够轻松导航和理解。UI 应设计得清晰、简洁,并融入语音命令、手势和动画。
用户体验(UX)包括诸如应用设计、使用方式、可访问性以及响应速度等因素。这些因素共同作用,帮助打造出让人印象深刻的应用。
通过专注于用户体验(UX),开发者可以开发出全球范围内受欢迎且成功的应用,吸引数百万用户。
因此,开发者在开发应用时,必须专注于用户体验(UX)。一个应用的 UX 可以使其更易于使用且更具愉悦感,反之也可能导致用户放弃使用。正如我们之前讨论的,AI 和 ML 可以在理解用户需求和期望、以及开发既易于使用又美观的应用程序方面发挥重要作用。UX 实践也应融入开发过程中,因为它们有助于创建既高效又愉悦的应用程序。
增强现实(AR)和虚拟现实(VR)的影响力日益增长
近年来,虚拟现实(VR)和增强现实(AR)在游戏行业以及商业和消费领域变得越来越受欢迎。通过移动应用,企业和开发者可以探索并利用这项先进技术所带来的无限可能。
因此,AR 和 VR 变得越来越显著,它们的潜力也愈加明显。AR 和 VR 将继续吸引大量关注和增长,因为这些技术有可能彻底改变我们与周围世界的互动方式。
正如我们之前提到的,AR 和 VR 可以提升移动应用的用户体验(UX)。移动设备使开发者和企业能够轻松创建沉浸式、互动性强且引人入胜的应用程序。用户与环境的互动变得更加容易,从而带来更愉悦和互动的体验。
语音应用的使用逐渐增多
语音应用在移动应用开发中变得越来越受欢迎。通过创建支持语音的应用程序,开发者可以为用户提供更直观、更友好的体验。语音应用可以用来为用户提供语音控制的功能访问,例如搜索、导航和日程安排。
此外,语音应用还可以用来创建互动教程和模拟,帮助用户更高效、有效地学习如何使用应用程序。语音应用是移动应用开发中的一项宝贵工具,开发者应该充分利用它们的诸多优点。
物联网(IoT)集成的增长
毫无疑问,物联网(IoT)正成为移动应用开发中最重要的部分之一。通过将物联网设备集成到应用中,开发者可以创建更智能的应用,并为消费者提供更个性化的体验。
随着物联网(IoT)集成的增长,智能家居设备变得越来越常见,如照明系统、温控器和安防摄像头。例如,通过智能手机应用,你可以远程控制你的灯光和安防系统。
物联网(IoT)集成的前景非常光明,随着物联网设备变得更加实惠和强大,未来可以开发出更复杂的应用程序,如预测性维护和自动驾驶汽车。人工智能(AI)和机器学习(ML)也将融入物联网中。
在讨论移动应用开发的未来以及如何为移动 DevOps 做准备时,组织需要了解移动应用开发的需求和挑战、可用的潜在解决方案以及新兴技术的影响。要实施正确的移动 DevOps 策略,组织必须理解移动开发人员的需求、移动应用开发的挑战和复杂性,以及新兴技术的影响。
通过利用合适的工具和技术,开发人员将能够构建强大、可靠的应用程序,满足用户的需求。
为了利用移动 DevOps 所带来的机会,开发人员需要了解将塑造其未来的趋势和技术。
移动 DevOps 趋势
为了保持竞争力,组织必须开始规划未来的移动 DevOps,以确保在竞争中保持领先地位。
随着我们不断前进,我相信以下目标将成为未来的方向:
为了实现成本优化、性能效率、提高可靠性并加快发布速度,业务团队和 IT 领导者必须理解 移动 DevOps。
以下预测适用于 2023 年及以后的移动 DevOps。
移动发布的自动化编排将增长
持续交付(CD)和发布编排是移动应用开发中的重要趋势。除了保持质量和可靠性外,发布管理实践还允许开发人员快速高效地构建、测试和部署移动应用。为了降低成本、提高可靠性并加速发布过程,预计部署和测试过程的自动化将变得越来越重要。
基于云的基础设施崛起
在我看来,这是移动 DevOps 最重要的趋势;如我们之前所讨论的,移动应用始终需要最新的硬件基础设施、操作系统和移动设备。
如我们所知,构建 iOS 应用总是需要使用最新的苹果芯片,因此我预计更多公司将采用基于云的基础设施,以便他们不必担心维护基础设施,而可以专注于开发应用。因此,应用开发将变得更快、更高效,同时扩展性、性能和测试也将得到改善。
对自动化需求的增长
自动化 在移动 DevOps 中至关重要,它将有助于加快开发过程,使开发人员可以专注于需要更多人工输入的任务。这将使他们能够专注于更重要的任务。
对于移动开发人员来说,专注于重要任务并避免浪费时间在无用任务上是非常重要的。
自动化过程可以用于将应用发布到应用商店、进行不同类型的测试、收集客户反馈、监控性能、扫描安全漏洞等。
除了节省时间和金钱外,自动化还可以减少错误的风险,而错误往往是昂贵且耗时的。这种自动化的增加也有助于提高移动应用的安全性,并减少完成某些任务所需的时间。
向左移将变得更加普遍
正如我们在第五章中讨论的,实施健全的移动应用测试策略,向左移指的是在开发过程的早期进行测试。根据向左移的原则,测试不应是开发过程的最后一步,而应是一个贯穿整个开发生命周期的持续过程。提前进行测试可以在项目进一步开发之前识别和修正任何问题,从而减少成本和时间。
显而易见,向左移将带来成本节约。如果团队成员在开发周期后期发现 bug,他们可以避免重新做项目。此外,向左移还可以改善客户体验,因为发布的无 bug 软件更有可能受到好评。
只有从一开始就在开发过程中构建健全的测试流程,向左移才能得以实施。为了确保软件的准确性,应该在整个开发过程中进行自动化测试,并在多个阶段进行手动测试。对于可能随着时间推移出现的问题,团队应持续监控软件。
增加安全性和数据保护的重要性
无法过分强调安全性在移动 DevOps 中的重要性。安全性和符合行业标准与法规对于日益复杂和互联的移动应用变得越来越重要。
在移动 DevOps 中,安全性和数据保护是首要任务。
移动 DevOps 的未来也将严重依赖于安全性。为了开发更强大和更安全的移动应用,开发流程必须变得更加健壮和安全。作为这一过程的一部分,必须采用安全编码技术,并对应用程序进行测试和验证。
开发人员可以通过遵循这些流程来确保其应用程序的安全性和可靠性。
关注移动应用的性能
分析分析数据对于移动 DevOps 团队来说至关重要,帮助他们了解用户如何与应用互动,识别改进空间,监控移动应用的性能,并诊断和解决可能出现的问题。
为了做出明智的决策,团队将需要工具来捕捉、分析和使用数据。为了确保应用程序保持可靠并满足用户需求,监控生产环境中的应用程序并快速响应用户反馈将变得至关重要。
因此,我相信 AI 和 ML 也将成为移动 DevOps 战略的一部分,我的梦想是参与应用程序监控和性能,因为正如我们之前提到的,组织将考虑这些因素在其移动应用中。通过 AI 和 ML,任务可以自动化,预测可以更加准确,移动开发成本和时间可以减少。
AI 测试和无代码测试工具的兴起
近年来,AI 在软件测试中的应用有所增加。AI 驱动的无代码测试工具如 Sofy.ai、Waldo 和 Testsigma 现在广泛用于自动化软件测试并增加测试覆盖率。
使用 AI 测试工具,我们可以自动化编写测试用例,增加测试覆盖率,并减少手动测试的需求,正如我们在第五章中讨论的,实施强大的移动应用测试策略。
测试人员可以使用无代码测试工具创建自动化测试,无需编写任何代码。这使得测试更简单、更快速,因为测试人员不需要花时间学习如何编写代码。由于测试可以在需要时快速修改,无代码测试工具也提供了更大的灵活性。
使用 AI 驱动的测试自动化工具,分析软件并生成自动化测试脚本。利用这些工具,测试人员可以自动化测试过程并快速发现任何问题。除了模拟真实用户交互外,AI 驱动的测试自动化工具还能更准确地进行测试。
平台工程和开发者生产力的上升
在 2023 年及以后,我认为我们将看到从 DevOps、站点可靠性工程(SRE)和平台工程(PE)转向,我们在第十章中讨论过,通过开发者体验和平台工程提升生产力。
DevOps或DevSecOps这一术语在过去曾试图涵盖其工作职能中过多内容,因此我们现在看到越来越多的 DevOps 和 DevSecOps 团队采用能够简化任务的平台,如编写规则和政策、创建流水线和编写代码来自动化这些任务。
行业不会将某些任务过度集中在一个团队,而是采用能够赋予团队最佳表现的平台。
通过 PE,开发团队可以提供更多的业务价值并实现更强的成果。
为了快速交付应用变更,移动 DevOps 团队需要建立强大的 DevOps 文化。
未来的移动 DevOps 工具链将最大化 IT 价值流的流程。
为了满足客户需求,移动 DevOps 在确保应用程序及时开发、测试和发布中起着关键作用。
总结
我们已经到达本书的最后一站,希望你和我一样享受这个过程,并且它能为你个人带来价值,并教会你一些可以带回团队或组织的知识。
回顾整本书,让我们总结一下我们学到的内容。
从第一章开始,我们着手解决移动应用开发中面临的挑战以及移动 DevOps 的概念,移动 DevOps 涉及将开发和运维(mobile DevOps)实践整合,以提高移动应用开发的效率和速度。
我们专注于确保你不会复制网上找到的别人流程。制定一个适合你利益相关者和团队成员需求的战略和计划。提前为你的移动 DevOps 最佳实践建立一个标准流程。
然后,在第二章中,我们了解了移动生态系统,并共同探索了各种移动平台、框架和移动设备的独特功能,以便理解移动开发人员、QA 工程师、发布工程师或任何从事移动开发工作的人所面临的挑战,因为我们需要考虑如何通过利用自动化来帮助我们构建、测试、发布和监控出色的移动应用。
然后,在第三章中,我们的移动 DevOps 之旅刚刚开始,我们讨论了移动 DevOps 的基础知识,包括持续集成(CI)、持续测试(CT)、持续交付(CD)、持续部署和持续监控(CM)的概念。同时,我们了解了自托管和基于云的 CI/CD 之间的区别以及云的好处。之后,我们学习了移动应用发布的检查表和发布列车背后的概念。
接下来,在后续的章节中,我们开始使用不同的平台实际实现移动 CI/CD 和 DevOps,并讨论了构建稳健测试策略的实施,包括 UI 测试、快照测试、性能测试和安全性测试等不同类型的测试。
一旦应用程序成功开发和测试完毕,它就准备好发布了。那时我们讨论了将移动应用发布给 Beta 测试者、质量保证(QA)、或者发布到应用商店和 Google Play 商店并使其对用户可用的过程。这包括了代码签名、证书、配置文件、密钥库等背后的概念。
在发布移动应用后,下一步是如何为移动应用建立监控和可观察性,并利用这些数据向开发团队提供反馈。我们讨论了不同的崩溃报告和错误监控的实现方式,以及不同的选项和平台。
由于安全性是一个必须考虑的重要因素,我们讨论了如何通过 DevSecOps 概念将安全性注入到移动 DevOps 和 CI/CD 中。这包括如何为团队进行安全培训、哪些安全工具适合我们的团队,以及安全测试类型之间的区别。此外,我们还讨论了全球应用安全项目(OWASP)的移动应用安全指南。
在第九章中,我们讨论了几种移动 DevOps 最佳实践,如 ChatOps、提升团队技能、规模化敏捷和 A/B 测试,以提高移动应用开发的速度和质量,并向用户交付高质量的应用。
在第十章中,我们讨论了内部开发平台(IDP)团队、开发者体验(DX)团队、PE 的好处,以及 DevOps、SRE 和 PE 之间的区别。
我们与移动 DevOps 的旅程终于走到了尽头;希望你享受其中。正如我们所讨论的,随着企业寻求最大化其移动开发团队的效率,移动 DevOps 预计将在未来几年变得越来越流行。许多组织可能会采用移动 DevOps 实践,以简化他们的移动开发流程。我们讨论了今年及未来几年我们应当看到的移动应用开发和移动 DevOps 趋势。
没有万能的解决方案;你应根据你的需求 和期望选择、构建并引导你的流程。
祝你构建愉快!