TDD会破坏架构吗?

简介:

作为敏捷宣言的共同作者,我们熟知的鲍勃大叔Bob Martin,在最近发表的一篇文章中对TDD是否会损害架构进行了评估。文中大部分讨论围绕着遵循测试驱动方法对高层设计和实现代码的总体可维护性是否会产生消极影响。Martin认为,虽然TDD是重要的守则,但良好的设计来源于解耦、分离和隔离等原则。

Ruby on Rails的作者David Heinemeier Hansson曾发表过一篇有关测试破坏了设计的文章。Martin对此观点作了进一步探索。这篇文章基本上是对以下两种设计进行比较,其一是Hansson所倡导的设计,另一个则是Ruby的贡献者和布道者Jim Weirich所倡导的更易于测试的设计。Martin鼓励读者选择更适合自己的设计,并写道:

争论的焦点在于隔离性和间接性。 DHH的优秀设计理念最小化了上述两点,而Weirichdd 设计则将这两点最大化。
Martin还撰写了一篇测试脆弱性的问题。文章中提到对实现代码的细微改动都可能会对数以百计的相关测试用例造成影响,从而不得不把它们全部更新。

Martin在阐释他的观点时首先指出,不论是否遵循了TDD,测试代码都需要像产品代码那样精心设计:

应用在测试上的设计原则应当和普通代码一样多。测试是系统的一部分,必须和系统中的其他部分那样维持相同的标准。
Martin还解释道,对TDD的一个常见误区就是测试和实现是一一对应的。这可能意味着一个实现类对应一个测试类,一个实现方法对应一个测试方法。这种做法的不足之处主要在于,它将测试和实现紧紧绑在了一起,导致很难进行重构和梳理。

Martin认为高层架构和设计不会从TDD中浮现:

坦白讲,系统的高层设计和架构会从TDD中浮现这一说法听起来很荒谬。在动手编码之前,你就应当对软件项目具备一定的架构视野。而这是TDD无法带给你的。
另一方面,Martin认为那些实现代码级别的低层设计确实来源于TDD的实践过程。换句话说,在测试代码保持不变的同时,实现代码可以进行重构和结构化,使得代码更具有可维护性。Martin认为这会导致事物向两个方向发展:“一方面测试变得越来越具体,另一方面产品代码则越来越通用。”

除了这些差别之外,Martin坚信TDD是一条守则。不管是否实践TDD,开发者本身才能决定良好的设计:

TDD不会导致坏的设计,也不会导致好的设计。开发者才是设计好坏的决定因素。TDD只是一条守则,是组织工作的方法,是确保测试覆盖率的途径,是在应对特殊性的同时确保适当通用性的手段。

本文转自d1net(转载)

目录
相关文章
|
Ubuntu
虚拟机Ubuntu连接不了网络的解决方法
虚拟机Ubuntu连接不了网络的解决方法
716 0
|
机器学习/深度学习 自然语言处理 计算机视觉
KAN结合Transformer,真有团队搞出了解决扩展缺陷的KAT
【10月更文挑战第15天】Transformer模型在深度学习中广泛应用,但其扩展性存在局限。为此,研究人员提出了Kolmogorov-Arnold Transformer(KAT)模型,通过引入理性基函数、Group KAN和方差保持初始化等创新设计,显著提升了模型的性能和扩展性。实验结果显示,KAT在图像识别、目标检测和语义分割任务中均表现出色,但在计算成本和训练资源方面仍有改进空间。
617 1
|
存储 弹性计算 前端开发
阿里云服务领域Agent智能体:从概念到落地的思考、设计与实践
本文讲述了作者团队在阿里云的服务领域Agent是如何设计与实践的,以及到目前为止的一些阶段性成果,作者做出了总结和整理。
|
网络安全 网络虚拟化 Docker
PPTP——如何快速搭建PPTP服务
PPTP——如何快速搭建PPTP服务
1111 0
|
存储 安全 网络安全
云计算与网络安全的融合之道
【7月更文挑战第20天】随着云计算技术的飞速发展,其安全性问题也日益凸显。本文从云服务的安全挑战出发,深入探讨了网络安全在云计算环境下的重要性,并提出了信息安全技术在保障云环境中数据安全的关键作用。文章旨在为读者提供一个关于如何通过技术创新和策略部署来强化云计算环境下的网络安全防护的全面视角。
151 1
|
图形学
浅谈Unity之UGUI不规则区域按钮点击实现
UGUI不规则区域按钮点击实现
|
Web App开发 iOS开发
Motrix开源下载管理器
Motrix开源下载管理器
672 0
|
安全 Java 数据库
Spring Security加密解密
Spring Security加密解密
1030 0
|
SQL 关系型数据库 MySQL
Mybatis-Plus(连接Hive)
Mybatis-Plus(连接Hive)
591 0
|
SpringCloudAlibaba Java Nacos
空的springboot项目导入nacos 配置中心和注册中心依赖后报错,提示 org.apache.http.impl.client.HttpClientBuilder 这个类找不到 问题的解决
空的springboot项目导入nacos 配置中心和注册中心依赖后报错,提示 org.apache.http.impl.client.HttpClientBuilder 这个类找不到 问题的解决
1026 0

热门文章

最新文章