App 技术架构#
一个典型的 App 技术架构分为 客户端(Client) 和 服务端(Server) 两部分,通过 网络通信 实现数据交互。以下是分层架构示意图:
客户端技术架构#
客户端分层#
-
UI 层(View)
- 负责界面渲染和用户交互。
- 技术实现:
- Android:XML 布局 + Jetpack Compose(声明式 UI)。
- iOS:Storyboard/SwiftUI。
- 跨平台:Flutter(Dart)、React Native(JavaScript)。
-
业务逻辑层(ViewModel/Presenter)
- 处理业务逻辑、数据转换和状态管理。
- 技术实现:
- Android:ViewModel + LiveData。
- iOS:Combine 框架(Swift)。
- 跨平台:Bloc 模式(Flutter)、Redux(React Native)。
-
网络层(Repository/DataSource)
- 封装 API 请求、缓存策略和错误处理。
- 技术实现:
- Android:Retrofit + OkHttp。
- iOS:Alamofire(Swift)或 URLSession。
- 跨平台:Dio(Flutter)、Axios(React Native)。
-
本地存储层(Local Storage)
- 管理本地数据持久化。
- 技术实现:
- SQLite:Room(Android)、Core Data(iOS)。
- 键值存储:SharedPreferences(Android)、UserDefaults(iOS)。
- 文件存储:File System API。
客户端技术栈#
平台 | 开发语言 | 主流框架 / 工具 |
---|---|---|
Android 原生 | Kotlin/Java | Jetpack、Retrofit、Glide、Room |
iOS 原生 | Swift/Obj-C | SwiftUI/UIKit、Alamofire、Core Data |
跨平台 | Dart/JS | Flutter、React Native、Ionic |
服务端技术架构#
服务端分层#
-
API 网关层(API Gateway)
- 统一入口,处理路由、鉴权、限流和日志。
- 技术实现:Nginx、Kong、Spring Cloud Gateway。
-
业务逻辑层(Application Layer)
- 实现核心业务逻辑(如订单处理、用户管理)。
- 技术实现:
- Java:Spring Boot、Micronaut。
- Python:Django、FastAPI。
- Node.js:Express、NestJS。
- Go:Gin、Echo。
-
数据存储层(Data Storage)
- 持久化数据存储与查询。
- 技术实现:
- 关系型数据库:MySQL、PostgreSQL。
- 非关系型数据库:MongoDB、Redis(缓存)。
- 大数据存储:HBase、Elasticsearch(搜索)。
-
消息队列与异步处理
- 解耦高并发任务(如邮件发送、订单异步处理)。
- 技术实现:Kafka、RabbitMQ、Celery(Python)。
-
微服务与容器化(可选)
- 复杂系统拆分为独立服务,提升扩展性。
- 技术实现:Docker、Kubernetes、gRPC。
服务端技术栈#
类型 | 技术选型 |
---|---|
开发语言 | Java、Python、Node.js、Go、C# |
数据库 | MySQL、PostgreSQL、MongoDB、Redis |
云服务 | AWS、阿里云、Firebase(Serverless) |
监控与运维 | Prometheus(监控)、Grafana(可视化) |
客户端与服务端交互流程#
典型交互流程(以用户登录为例)#
-
客户端发起请求
- 用户输入账号密码,客户端通过 HTTPS 发送登录请求(POST
/api/login
)。 - 数据格式:JSON(如
{"username": "user1", "password": "***"}
)。
- 用户输入账号密码,客户端通过 HTTPS 发送登录请求(POST
-
服务端处理请求
- API 网关验证请求合法性(如 IP 白名单、频率限制)。
- 业务逻辑层校验账号密码,生成 Token(JWT)。
- 数据库查询用户信息(MySQL
SELECT * FROM users WHERE username = ?
)。
-
服务端返回响应
- 成功:返回
200 OK
+ Token 及用户数据。 - 失败:返回
401 Unauthorized
+ 错误码。
- 成功:返回
-
客户端处理响应
- 解析响应数据,存储 Token 至本地(SharedPreferences/Keychain)。
- 跳转至首页,更新 UI 状态。
通信协议与数据格式#
- 协议:HTTP/HTTPS(RESTful API)、WebSocket(实时通信)。
- 数据格式:JSON(主流)、Protocol Buffers(高性能场景)。
- 安全机制:JWT 鉴权、OAuth 2.0(第三方登录)、SSL/TLS 加密。
App 测试#
测试流程#
-
需求分析阶段
- 明确测试目标:理解功能需求、用户场景和非功能性需求(如性能、安全)。
- 编写测试需求文档:确定测试范围、优先级和验收标准。
-
测试计划阶段
- 制定测试策略:确定测试类型(功能、性能、兼容性等)、资源分配和时间表。
- 风险评估:识别潜在风险(如设备碎片化、网络环境差异)并制定应对方案。
-
测试用例设计
- 根据需求编写测试用例,覆盖正向、逆向场景和边界条件。
- 使用等价类划分、边界值分析、场景法等设计方法。
-
测试环境搭建
- 准备硬件设备(真机、模拟器)、网络环境、测试数据和工具链。
-
测试执行
- 按优先级执行测试用例,记录测试结果和缺陷。
- 分阶段进行:冒烟测试 → 功能测试 → 回归测试 → 验收测试。
-
缺陷管理
- 使用工具(如 JIRA、Bugzilla)跟踪缺陷生命周期(提交→修复→验证→关闭)。
- 分析缺陷分布,优化测试重点。
-
测试报告与总结
- 输出测试报告:覆盖率、缺陷统计、风险分析和改进建议。
- 复盘测试过程,优化后续测试策略。
测试方法#
-
黑盒测试
- 关注输入输出,不涉及内部代码逻辑。
- 典型方法:功能测试、用户体验测试、安装卸载测试。
-
白盒测试
- 基于代码逻辑设计用例,覆盖分支、路径和条件。
- 常用技术:代码覆盖率分析(如 JaCoCo)、静态代码检查(如 SonarQube)。
-
灰盒测试
- 结合黑盒与白盒,通过接口或日志分析定位问题。
-
专项测试类型
- 功能测试:验证核心功能(如登录、支付)是否符合需求。
- 性能测试:响应时间、内存 / CPU 占用、启动速度(工具:GT、PerfDog)。
- 兼容性测试:覆盖不同设备、OS 版本、屏幕分辨率、网络环境(工具:Firebase Test Lab)。
- 安全测试:数据加密、权限管理、漏洞扫描(工具:OWASP ZAP、Burp Suite)。
- 用户体验测试:界面易用性、交互流畅度、多语言支持。
- 安装卸载测试:安装包大小、升级覆盖、残留文件清理。
- 接口测试:验证 API 调用和数据传输(工具:Postman、Charles)。
- 回归测试:自动化脚本覆盖主流程,确保新版本无回退问题。
测试技术#
-
自动化测试
- UI 自动化:Appium(跨平台)、Espresso(Android)、XCUITest(iOS)。
- 接口自动化:RestAssured、Python Requests。
- 性能自动化:JMeter、LoadRunner。
-
云测试平台
- 使用 AWS Device Farm、Sauce Labs 等平台实现多设备并行测试。
-
Monkey 测试
- 通过随机事件(点击、滑动)检测崩溃和 ANR(工具:Android ADB Monkey)。
-
A/B 测试
- 对比不同版本的用户行为数据,优化功能设计(工具:Firebase A/B Testing)。
-
代码静态分析
- 使用 Lint 工具检测代码规范、内存泄漏和潜在崩溃。
-
网络模拟工具
- 模拟弱网、延迟、丢包(工具:Network Link Conditioner、Charles Proxy)。
测试环境#
-
硬件环境
- 真机覆盖主流品牌(如 iPhone、华为、三星)和不同配置(CPU、内存)。
- 模拟器 / 虚拟机:Android Studio 模拟器、iOS Simulator。
-
软件环境
- 操作系统:Android(不同版本及定制 ROM)、iOS(最新及旧版本)。
- 第三方依赖:SDK 版本(如 Google Play Services)、数据库兼容性。
-
网络环境
- 测试不同网络类型(Wi-Fi、4G/5G)、弱网(2G / 高延迟)及离线场景。
-
数据环境
- 准备测试数据:正常数据、异常数据(如超长文本、特殊字符)。
- 数据隔离:避免测试数据污染生产环境。
-
持续集成(CI)环境
- 集成 Jenkins、GitLab CI 等工具,实现自动化构建→测试→报告流程。
-
安全测试环境
- 搭建沙盒环境,模拟中间人攻击、数据篡改等安全威胁。