健壮性关注异常处理,而可靠性更关注正确性保障
定义
健壮性(Robustness)
- 定义:代码在非预期输入、异常环境或错误操作下仍能保持正常运行,避免崩溃或产生灾难性后果的能力。
- 核心目标:优雅地处理错误,保障基本功能可用。
可靠性(Reliability)
- 定义:软件在指定条件下持续正确执行预期功能的能力。
- 核心目标:长期稳定运行,降低故障率。
提升健壮性的五大策略
健壮性不是一次性的任务,而是需要持续优化的过程。从今天开始,让每个方法都思考"如果...会怎样",代码质量将得到质的飞跃!
- 防御式编程
- 异常边界管理
- 资源安全管理
- 输入验证与过滤
- 状态一致性维护
防御式编程
三不原则
- 不信任任何外部输入
- 不假设调用方行为
- 不容忍未定义行为
实例:Android组件通信场景
防御式编程三板斧:空对象模式、保护性子句、不可变数据
- 空对象模式
- 保护性子句
- 不可变数据
异常边界管理
实例
- UI层:捕获未处理异常,防止崩溃
- 业务层:转换异常为友好错误码
- 数据层:封装原始异常信息
资源安全管理
四类关键资源
- 文件流(必须使用use关闭)
- 数据库连接(使用Room的自动关闭)
- 网络连接(OkHttp连接池管理)
- Bitmap资源(及时recycle)
实例
输入验证与过滤
实例——三级验证体系
- UI层:实时输入校验
- 业务层:DTO对象校验
- 服务端:最终一致性校验
状态一致性维护
实例——状态机模式
综合应用实例——图片上传
确保可靠性的三大支柱
让每个功能模块都成为可靠的"黑盒",在满足输入契约的前提下,始终提供符合预期的输出结果。
- 契约式设计
- 分层错误处理
- 自动化质量保障
契约式设计(Design by Contract)
核心三要素
要素 | 作用 | Android典型应用场景 |
前置条件 | 调用方必须满足的输入要求 | Activity跳转参数校验 |
后置条件 | 方法执行后必须满足的输出承诺 | 网络请求返回数据格式保证 |
不变式 | 对象生命周期内始终成立的条件 | ViewModel状态一致性维护 |
实例——安全导航组件
分层错误处理
错误处理层级架构
实例——各层级职责分解
- 数据层(Data Layer):
- 领域层(Domain Layer):
- 表现层(Presentation Layer):
自动化质量保障
Android测试金字塔
单元测试(JUnit 5 + MockK)
集成测试(Hilt + Room)
端到端测试(Espresso + Kakao)
三大支柱协同工作流
常见陷阱类型和规避策略
陷阱类型 | 表现症状 | 解决方案 |
契约过度设计 | 接口过于僵化,维护成本高 | 使用Kotlin默认参数+扩展函数 |
错误分层混乱 | UI层处理数据库异常 | 建立错误类型转换映射表 |
测试覆盖率虚高 | 大量无断言测试 | 引入突变测试(Mutation Test) |
契约与实现不一致 | 文档描述与实际行为不符 | 使用契约测试工具(Pact) |
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/f92fc170-b833-4f6c-9a5a-4f60dba192ea
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts