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