前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《架构整洁之道》第 28 章 测试边界

《架构整洁之道》第 28 章 测试边界

原创
作者头像
巴啦啦的积累
发布2023-06-16 10:32:34
2070
发布2023-06-16 10:32:34
举报
文章被收录于专栏:巴啦啦的积累

测试代码也是系统的一部分,测试代码的地位比其他组件更独特。

测试也是一种系统组件

关于测试,总会有许多讨论,测试是系统一部分还是独立于系统之外?测试分为几种?单元测试和集成测试有什么不一样?质量检查测试功能性测试Cucumber 测试TDD 测试BDD 测试,分别又是什么?

还好我们没必要去讨论这些,因为在架构角度来看,所有测试都是一样的。

究其本质而言,测试组件也要遵守依赖关系原则,它始终都是依赖于被测试部分代码的,并且不会有其他组件会去依赖测试组件。另外测试组件也应当是可以被独立部署的,它是系统中最独立的一个组件,因为系统的正常运行,并不会需要使用到测试组件,它只是为了支持开发过程而存在的。

但是测试组件仍然是系统架构中不可缺少的组件,它在许多方面都反映了系统中其他组件所应遵循的设计模型。

可测试性设计

由于测试组件的独立性,以及往往不会部署到正式环境,开发者通常忽略测试的重要性,这是极为错误的。测试如果没有被集成到系统设计中,往往是非常脆弱的,这种脆弱性会使得系统变得死板,非常难以更改。

这里的关键就是耦合,如果测试代码和系统强耦合,哪怕系统一点点变更那也会导致相关测试要变更。这个问题是很严重的,修改一个通用的系统组件,可以能导致成千上百个测试出现问题。我们将这种问题称为脆弱的测试问题

脆弱的测试,还会导致系统死板,因为程序员知道一旦修改逻辑,就可能导致很多测试出错,就会抵制修改。

想要解决这个问题,就必须考虑到系统的可测试性。软件开发第一要以,不要依赖于可变或经常变动的东西。比如,GUI往往是多变的,所以通过GUI来验证系统,那必然是脆弱的,我们应当让业务系统不需要通过GUI也能被测试。

测试专用 API

设计一个可测试的系统,方法之一就是创建一套专门供测试使用的API,它应该被赋予超级权限,绕过数据库操作,强制将系统设置为某种可测试的状态中。这种测试API就是为了解耦,和应用程序的代码结构分开。

结构性耦合

结构性耦合是测试代码中耦合关系最强大,最阴险的。假设有一组类需要测试,每个类中有一个测试函数,这就是结构性耦合。如果类和函数发生了变更,就极容易导致测试的变更。

测试专用API就是为了保证,应用程序的变更,不会导致测试代码的变更,测试代码的变更,也不会影响到应用程序的变更。

安全性

这种具有超级权限的测试专用API,是非常危险的,所以我们应当将它放置在一个独立的,可单独部署的组件中。

本章小结

测试不是独立于整个系统之外的,它是系统的一个重要的组成部分,我们要精心设计它,才能让它发挥验证系统稳定性的作用。如果不按系统组成部分来设计它,往往就会变得脆弱难以维护。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试也是一种系统组件
  • 可测试性设计
  • 测试专用 API
    • 结构性耦合
      • 安全性
      • 本章小结
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档