标记:测试
微服务架构中的测试策略华体会体育网页版入口
在过去的几年里,基于服务的体系结构已经向更小、更集中的“微”服务转变。华体会体育网页版入口这种方法有很多好处,比如能够独立部署、扩展和维护每个组件,以及跨多个团队并行开发。然而,一旦引入了这些额外的网络分区,就需要重新考虑应用于单片流程应用程序的测试策略。在这里,我们计划讨论一些管理多个独立可部署组件的额外测试复杂性的方法,以及如何在有多个团队分别担任不同服务的监护人的情况下保持测试和应用程序的正确性。
实用测试金字塔
“测试金字塔”是一个比喻,它告诉我们将软件测试分组到不同粒度的桶中。它还告诉我们每一组应该进行多少次测试。尽管测试金字塔的概念已经出现了一段时间,但团队仍然在努力将其正确地付诸实践。本文回顾了测试金字塔的最初概念,并展示了如何将其付诸实践。它展示了您应该在金字塔的不同层次上寻找哪种类型的测试,并给出了如何实现这些测试的实际示例。
TDD死了吗?
Ruby on Rails的创建者David Heinemeier Hansson在RailsConf上发表了一个主题演讲,他宣称TDD已死。这在Rails和更广泛的软件开发社区中引起了可以预见的大量争议。华体会登录网址这也引发了大卫、肯特和我之间一些有趣的对话。我们认为这些对话很有趣,其他人可能也会喜欢看,所以我们录制了一系列视频,在其中讨论TDD在软件开发中的作用。华体会登录网址
面向领域的可观测性
我们软件系统的可观察性一直很有价值,在这个云和微服务时代更是如此。然而,我们添加到系统中的可观察性在本质上往往是相当低级和技术性的,而且似乎经常需要用各种日志记录、检测和分析框架的复杂、冗长的调用来丢弃我们的代码库。本文描述了一种模式,它可以清理这些混乱,并允许我们以干净、可测试的方式添加与业务相关的可观察性。
Goto Fail, Heartbleed和单元测试文化
2014年初,人们发现了两个计算机安全漏洞:苹果的“goto fail”漏洞和OpenSSL的“Heartbleed”漏洞。两者都有可能出现广泛而严重的安全故障,我们可能永远不会知道故障的全部程度。考虑到它们的严重性,对于软件开发专业人员来说,反思它们是如何被检测到的是很重要的,这样我们就华体会登录网址可以提高我们在未来预防这类缺陷的能力。本文考虑了单元测试可能扮演的角色,展示了单元测试,以及更重要的单元测试文化,如何识别这些特定的错误。它继续着眼于这种文化的成本和收益,并描述了这种文化是如何在谷歌灌输的。
消除测试中的不确定性
自动化回归套件可以在软件项目中扮演重要的角色,对于减少生产中的缺陷和演化设计都很有价值。在与开发团队的交谈中,我经常听到关于不确定性测试的问题——有时通过有时失败的测试。不受控制的非确定性测试会完全破坏自动化回归套件的价值。在本文中,我概述了如何处理非确定性测试。最初隔离有助于减少它们对其他测试的损害,但您仍然必须尽快修复它们。因此,我将讨论导致不确定性的常见原因的处理方法:缺乏隔离、异步行为、远程服务、时间和资源泄漏。
mock不是stub
术语“模拟对象”已经成为一个流行的术语,用来描述模拟真实对象进行测试的特殊情况对象。现在大多数语言环境都有框架,可以很容易地创建模拟对象。然而,通常没有意识到的是,模拟对象只是特殊用例测试对象的一种形式,它支持不同的测试风格。在本文中,我将解释模拟对象是如何工作的,它们如何鼓励基于行为验证的测试,以及围绕它们的社区如何使用它们来开发不同风格的测试。
测试异步JavaScript
JavaScript社区中似乎存在一个常见的误解,即测试异步代码需要与测试“常规”同步代码不同的方法。在这篇文章中,我将解释为什么通常情况并非如此。我将强调测试支持异步行为的代码单元与测试本质上是异步的代码单元之间的区别。我还将展示基于承诺的异步代码如何用于干净和简洁的单元测试,这些单元测试可以以清晰、可读的方式进行,同时仍然验证异步行为。
持续交付
我们给持续交付一个小时的概述。主题包括持续交付的理由、部署管道、持续集成、devops和部署策略。最精彩的是杰斯对希腊神话英雄的拟人化演绎。
现代嘲讽工具和黑魔法
现代模拟工具对我们处理遗留代码的能力产生的积极影响,以及使用这些工具可能产生的负面影响。
生产中的QA
传统上,QA专注于在发布到生产环境之前测试软件,看看它是否已经为发布做好了准备。但是,现代QA组织也越来越多地将注意力集中在生产环境中运行的软件上。通过分析日志和其他监视工具,他们发现要向开发组织强调的质量问题。这种方法特别适用于使用持续交付将软件的新版本快速可靠地投入生产的组织。
测试影响分析的兴起
测试影响分析(TIA)是一种加速构建的测试自动化阶段的现代方法。它通过分析源代码的调用图来确定在对生产代码进行更改后应该运行哪些测试。微软已经在这种方法上做了大量的工作,但是开发团队也可以以相当低的成本实现一些有用的东西。
无断言测试
这是一个朋友的朋友讲的故事。我相信这一定是真的,至少在某个地方。
钟包装
如果需要在代码中获取当前日期或时间,不要直接访问该数据的系统例程。在它周围放置某种形式的包装器,允许您通过将“当前日期/时间”设置为特定值来覆盖它。这对于简化测试非常重要。
数据库和构建时间
这是我最近发现的一个有趣的对比。两个大小相似(~100 KLOC)、环境相似(Java和. net)的企业应用程序项目。一个可以在一个小时内完成完整的构建和测试,另一个则需要2-3分钟。
可憎的
(这是你字典里的新词条。)
可憎的(形容词):不可测试的软件。
不稳定测试失败
前几天我在写一些书中的示例代码。我做了一些更改,让一切正常工作,运行测试,并将其提交到我的个人存储库。然后,我转移到另一个区域并做了一些更改——一些意想不到的测试在前一个区域中断了。现在,运行自动化测试的部分目的是找到意外的中断,但本书的代码有完全独立的区域。这很奇怪。
探索性测试
探索性测试是一种强调学习、测试设计和测试执行的快速循环的测试风格。探索性测试不是试图验证软件是否符合预先编写的测试脚本,而是探索软件的特征,提出将被归类为合理行为或故障的发现。
给出时间
Given-When-Then是一种表示测试的风格——或者如它的倡导者所说——使用指定系统的行为SpecificationByExample.这是由丹尼尔Terhorst-North和克里斯·马茨行为驱动开发(BDD)。它似乎是许多测试框架(如Cucumber)的一种结构化方法。你也可以把它看做是四阶段测试模式。
卑微的对象
有些程序元素本身就很困难,甚至不可能测试。因此,这些元素中的任何逻辑都容易出现错误,并且难以发展。为了缓解这个问题,将尽可能多的逻辑移出难以测试的元素,移到代码库中其他更友好的部分。通过让不可测试的对象变得不起眼,我们减少了它们藏匿邪恶虫子的机会。
内存测试数据库
内存数据库是完全在主存中运行的数据库,不涉及磁盘。它们通常作为嵌入式数据库运行:在进程启动时创建,在进程中嵌入式运行,在进程结束时销毁。
Junit新实例
我经常收到关于设计选择的问题JUnit测试框架——决定为每个测试方法运行一个新对象。足够让我快速进入。(然而,我几乎不得不指出,我写关于JUnit的文章并不意味着我不认为其他形式的测试是重要的。有很多有用的测试活动,尽管JUnit及其表亲对其中许多都很有价值,但它并不是所有问题的解决方案。关于测试的更多博客,我建议您查看布雷特Pettichord,Brian Marick,詹姆斯·巴赫.您也不应该认为我写的关于xUnit测试的文章暗示重构、用例或使用牙线不重要。)华体会app下载二维码
使存根
测试增强设计的一个常见问题是,如何在测试模式下创建服务存根,同时让真正的存根用于生产(和一些测试)。我的几个同事分享了他们的想法。
纳什维尔项目
最近我花了一些时间在我最喜欢的一个Thoughtworks项目上。这是一个始于1998年的项目,使用了当时新的J2EE技术。多年来,它有一段迷人的历史:从ejb开始,将它们剥离,到离岸的班加罗尔,再回到芝加哥。许多人在项目中进进出出,项目的人数在6到60人之间变化。总的来说,该项目已经有超过300名员工多年的努力,重量约为100 KLOC。
对象的母亲
对象母类是一种在测试中用于帮助创建用于测试的示例对象的类。
页面对象
当您针对web页面编写测试时,您需要引用该web页面中的元素,以便单击链接并确定显示的内容。但是,如果您编写直接操作HTML元素的测试,那么您的测试将容易受到UI更改的影响。页面对象使用特定于应用程序的API包装HTML页面或片段,允许您在不深入HTML的情况下操作页面元素。
自我初始化假
使用a的经典案例之一TestDouble是在调用远程服务时。远程服务通常很慢,而且常常不可靠,因此使用double是使您的测试更快、更稳定的好方法。
自检代码
自检代码是我在华体会app下载二维码指与功能软件一起编写综合自动化测试的实践。如果做得好,这允许您调用执行测试的单个命令——并且您确信这些测试将揭示隐藏在代码中的任何错误。
静态变量替换
当我听我们的开发团队谈论他们的工作时,一个共同的主题是他们不喜欢静态的东西。通常情况下,我们会看到公共服务或组件保存在带有静态初始化器的静态变量中。静态的一个大问题(在大多数语言中)是你不能用多态性来替换一个实现。这让我们很困惑,因为我们是测试的忠实粉丝——为了测试得好,能够用一个服务存根.
综合监测
合成监视(也称为语义监视)定期针对实时生产系统运行应用程序的自动化测试子集。结果被推送到监控服务中,在发生故障时触发警报。该技术将自动化测试与监视相结合,以检测生产中失败的业务需求。
测试癌症
当我的职业生涯变成全职作者时,我经常担心自己会远离日常软件开发的现实。华体会登录网址我见过其他知名人物与现实脱节,我担心会有同样的命运。我对此最大的阻力来自于Thoughtworks,它就像一剂常规的现实药,让我保持脚踏实地。
Thoughtworks还充当了该领域的思想来源,我喜欢写一些同事们发现和开发的有用的东西。通常这些都是有用的想法,我希望我的一些读者能够使用。我今天的话题不是一个令人愉快的话题。这是一个问题,一个我们没有答案的问题。
测试覆盖率
我不时听到人们问他们应该以测试覆盖率(也称为代码覆盖率)为目标,或者自豪地陈述他们的覆盖率级别。这种说法没有抓住要点。测试覆盖率是发现代码库中未测试部分的有用工具。测试覆盖率作为测试有多好这一数字声明的用处很小。
测试不变
在契约式设计(DbC)和测试驱动开发(TDD)的倡导者之间有一场长期的、低调的争论。我现在不打算深入研究这个问题,但我会提出一个想法,将两者结合起来,这是我在与他交谈时想到的丹尼尔·杰克逊.
测试金字塔
测试金字塔是一种思考如何使用不同类型的自动化测试来创建平衡的投资组合的方法。它的要点是你应该有更多的低层次单元测试比高水平BroadStackTests运行GUI。
测试资源池
我在翻看一些旧笔记时,发现了里奇·加扎尼提给我的一个简单但有用的建议。