软件测试指南
我在那里长大瀑布时代在那里,测试被视为独立于编程的活动,由不同的团队完成,并在编程完成后进行。向迭代和敏捷方法的转变,特别是的影响极限编程,已经改变了测试的角色——提高了它的重要性,并将其与核心开发工作结合起来。
我的测试哲学的核心是我们想要编写自我测试代码,这意味着我们有一套自动化测试,可以很容易地针对代码库运行。我们应该相信这个套件将捕获软件中几乎所有的错误,因此当这个套件“变绿”(通过)时,我们可以将该版本的软件发布到生产环境中。这种环境既可以大大提高我们软件的健壮性,也可以使我们使用华体会app下载二维码在未来几个月提高我们的生产力和响应能力。
www.rodiba.com上关于测试软件系统的材料指南。
自我测试代码
自检代码是我在华体会app下载二维码参考与功能软件一起编写综合自动化测试的实践。如果做得好,这允许您调用执行测试的单个命令——并且您确信这些测试将揭示隐藏在代码中的任何错误。
你应该做什么样的检查?
测试有很多种形式,这取决于它们试图验证的内容、它们覆盖的代码库的范围以及它们在软件过程中的作用。查看您的测试组合的一个流行的方法是测试金字塔。
测试金字塔
测试金字塔是一种思考应该如何使用不同类型的自动化测试来创建一个平衡的投资组合的方法。它的要点是,你应该有更多的低级代码单元测试比高水平BroadStackTests通过GUI运行。
实用测试金字塔
“测试金字塔”是一个比喻,它告诉我们将软件测试分组到不同粒度的桶中。它还告诉我们每一组应该进行多少次测试。尽管测试金字塔的概念已经存在了一段时间,但是团队仍然在努力将其正确地付诸实践。本文回顾了测试金字塔的最初概念,并向您展示了如何将其付诸实践。它展示了您应该在金字塔的不同层次中寻找哪种类型的测试,并给出了如何实现这些测试的实际示例。
微服务体系结构中的测试策略华体会体育网页版入口
在过去几年里,基于服务的体系结构已经向更小、更专注的“微”服务转变。华体会体育网页版入口这种方法有很多好处,比如能够独立部署、扩展和维护每个组件,以及跨多个团队并行化开发。然而,一旦引入了这些附加的网络分区,应用于流程内单片应用程序的测试策略就需要重新考虑了。在这里,我们计划讨论一些管理多个独立可部署组件的额外测试复杂性的方法,以及如何在多个团队各自充当不同服务的监护人的情况下保持测试和应用程序的正确性。
论测试的多样化和幻想形态
关于测试组合应该是金字塔型还是更像蜂巢型存在争论。关于这个论点,我的第二大问题是,由于人们不清楚单元测试和集成测试之间的区别,它变得不透明。
分类测试
许多人根据测试的目的和范围将测试分为不同的类别,但遗憾的是,很少有人使用相同的分类来表示相同的事情。这是我如何分类的,我试着让这个网站上的材料与这些分类保持一致。
单元测试
单元测试在软件开发中经常被提及,这是我在编写程序的整个过程中所熟悉的一个术语华体会登录网址。然而,就像大多数软件华体会登录网址开发术语一样,它的定义非常不明确,当人们认为它的定义比实际更严格时,我发现混淆经常发生。
集成测试
集成测试确定独立开发的软件单元在相互连接时是否正常工作。即使按照软件行业的标准,这个术语也变得模糊了,所以我在写作中使用它时一直很谨慎。特别是,许多人认为集成测试的范围必须很广,而它们可以在较窄的范围内更有效地完成。
故事的测试
故事测试BusinessFacingTests用于描述和验证作为项目一部分交付的软件UserStory.当一个故事被阐述时,团队创建几个故事测试,作为故事的接受标准。故事测试可以被组合到软件的回归套件中,并提供从需求(用户故事)到测试以及(通过执行)到系统行为的可追溯性。故事测试通常BroadStackTests.
合同的测试
一个最常见的使用TestDouble是当您与外部服务通信时。通常,这样的服务由不同的团队维护,它们可能会受到速度慢、网络不可靠的影响,甚至可能自身也不可靠。这就是为什么测试替身很方便,它可以防止您自己的测试变慢和不可靠。但是对double类型的测试总是会产生这样的问题:double类型是否确实是外部服务的准确表示,如果外部服务更改了它的契约会发生什么情况?
组件测试
组件测试是将被测试软件的范围限制到被测试系统的一部分的一种测试。它与a相反BroadStackTest这是为了在合理的情况下尽可能多地使用系统。
业务面临的测试
面向业务的测试是一种旨在帮助与开发团队的非编程成员(如客户、用户、业务分析师等)进行沟通的测试。当自动化时,它们用面向领域的术语描述系统,忽略了系统本身的组件体系结构。华体会体育网页版入口面向业务的测试通常用作验收标准,通过此类测试表明系统提供了客户所期望的功能。
皮下测试
我使用皮下测试指的是在应用程序的UI下运行的测试。这在进行应用程序的功能测试时尤其有价值:当您想测试端到端行为,但很难通过UI本身进行测试时。
阈值测试
阈值测试是插入到DeploymentPipeline它通过将当前构建中的值与阈值进行比较来监视一些可测量的现象。如果当前构建的值超过阈值,则测试失败,使构建失败。
实施测试
一个好的测试文化的很大一部分是设计测试基础设施,使其易于编写和高效的测试变得容易。
模拟没有存根
术语“模拟对象”已经成为一个流行的术语,用来描述模拟真实对象进行测试的特殊情况对象。大多数语言环境现在都有框架,可以很容易地创建模拟对象。然而,通常没有意识到的是,模拟对象只是特殊情况测试对象的一种形式,它支持不同风格的测试。在本文中,我将解释模拟对象是如何工作的,它们如何鼓励基于行为验证的测试,以及周围的社区如何使用它们开发不同风格的测试。
xUnit测试模式
本世纪程序员测试有了显著的发展,程序员负责编写他们自己的代码的测试。我们发现这有助于减少bug,使API设计更容易思考,并支持重构。华体会app下载二维码实现这一点的主要原因是xUnit家族的简单测试框架,它起源于Kent Beck和Erich Gamma的工作。但是,尽管xUnit是一个简单的工具,有效地使用它需要经验和技能。Gerard Meszaros是这些工具和使用模式帮助人们学习软件设计技术的想法的早期采用者。它提供了一个词汇表来帮助我们交流如何使用测试,并为有经验的从业者将他们的知识传递给新一代提供了基础。
Goto Fail, Heartbleed,和单元测试文化
2014年初,两个计算机安全漏洞被发现:苹果的“goto fail”漏洞和OpenSSL的“Heartbleed”漏洞。两者都有可能出现广泛而严重的安全故障,我们可能永远无法知道其全面程度。考虑到它们的严重性,对软件开发专业人员来说,反思它们是如何被发现的是很重要的,这样我们就可以华体会登录网址提高我们在未来防止这些类型缺陷的能力。本文考虑了单元测试可能扮演的角色,展示了单元测试(更重要的是单元测试文化)如何识别这些特定的错误。它继续研究了这种文化的成本和收益,并描述了这种文化是如何在谷歌灌输的。
消除测试中的不确定性
自动化回归套件可以在软件项目中扮演重要的角色,对于减少生产中的缺陷和进化设计都很有价值。在与开发团队的交谈中,我经常听到关于非确定性测试的问题——测试有时通过,有时失败。不受控制的、不确定的测试会完全破坏自动化回归套件的价值。在本文中,我将概述如何处理非确定性测试。最初隔离有助于减少它们对其他测试的损害,但您仍然必须尽快修复它们。因此,我将讨论不确定性的常见原因的处理方法:缺乏隔离、异步行为、远程服务、时间和资源泄漏。
测试癌症
当我的职业变成全职作者时,我经常担心自己会远离日常软件开发的现实。华体会登录网址我见过其他知名人物与现实失去联系,我担心同样的命运。我最大的阻力来自Thoughtworks,它就像现实的常规剂量,让我脚踏实地。
Thoughtworks还充当了该领域想法的来源,我喜欢写同事们发现和开发的有用的东西。通常这些都是有帮助的想法,我希望我的一些读者能够使用。我今天的主题不是一个令人愉快的话题。这是一个问题,一个我们没有答案的问题。
测试覆盖率
我不时听到人们询问他们应该以测试覆盖率(也称为代码覆盖率)的价值为目标,或者自豪地陈述他们的覆盖率级别。这样的说法没有抓住重点。测试覆盖率是查找代码库中未测试部分的有用工具。测试覆盖率作为测试有多好的一种数字声明几乎没有什么用处。
测试影响分析的兴起
测试影响分析(TIA)是加快构建的测试自动化阶段的一种现代方法。它通过分析源代码的调用图来确定在对生产代码进行更改后应该运行哪些测试。微软已经在这种方法上做了大量的工作,但是开发团队也有可能以相当低的成本实现一些有用的东西。
TDD死了吗?
Ruby on Rails的创始人David Heinemeier Hansson在RailsConf上发表了一个主题演讲,他宣称TDD已经死了。可想而知,这在Rails和更广泛的软件开发社区中引发了大量的争议。华体会登录网址这也引发了我和大卫、肯特之间一些有趣的对话。我们认为这些对话足够有趣,其他人可能也想看,所以录制了一系列视频,在其中我们讨论了TDD在软件开发中的作用。华体会登录网址
页面对象
当您针对一个网页编写测试时,您需要引用该网页中的元素,以便单击链接并确定显示的内容。但是,如果您编写的测试直接操作HTML元素,那么您的测试将容易受到UI更改的影响。页面对象使用特定于应用程序的API包装HTML页面或片段,允许您操作页面元素,而无需在HTML中深入研究。
自动初始化假
使用a的经典案例之一TestDouble就是调用远程服务时。远程服务通常很慢,而且常常不可靠,因此使用double是使测试更快、更稳定的好方法。
卑微的对象
有些程序元素本身就很困难,甚至不可能进行测试。因此,这些元素中的任何逻辑都容易出现错误,难以发展。为了缓解这个问题,将尽可能多的逻辑移出难以测试的元素,移到代码库中其他更友好的部分。通过让不可测试的对象变得谦逊,我们减少了它们藏匿邪恶虫子的机会。
现代嘲笑工具和黑魔法
现代模拟工具对我们处理遗留代码的能力产生的积极影响,以及使用这些工具可能产生的负面影响。
钟包装
如果需要在代码中获取当前日期或时间,请不要直接访问这些数据的系统例程。在它周围放置某种形式的包装器,允许您通过将“当前日期/时间”设置为特定值来覆盖它。这对于简化测试非常重要。
对象的母亲
对象母类是一种在测试中用于帮助创建用于测试的示例对象的类。
测试资源池
我在翻一些旧笔记的时候,发现了里奇·加扎尼提给我的一个简单但有用的建议。
自动化测试是不够的
尽管我提倡将自动自检作为有效开发工作的核心部分,但这样的测试不能完成测试或质量保证中需要完成的所有工作。自动化测试提供了一个很好的漏洞捕捉网,但是您需要探索性测试来确定这个网是否真的覆盖了您需要的所有内容。虽然测试过去是在代码投入生产之前应该完成的事情,但我们现在将监视和可观察性视为确定运行软件健康状况的重要工具。
QA在生产
传统上,QA专注于在发布到生产环境之前测试软件,看它是否已经为发布做好了准备。但是,越来越多的现代QA组织也开始关注在生产环境中运行的软件。通过分析日志和其他监视工具,他们发现质量问题并向开发组织强调。这种方法特别适用于那些使用持续交付快速可靠地将软件的新版本投入生产的组织。
探索性测试
探索性测试是一种测试风格,它强调学习、测试设计和测试执行的快速循环。探索性测试不是试图验证软件是否符合预先编写的测试脚本,而是探索软件的特征,提出发现,然后将其归类为合理的行为或失败。
面向领域的可观测性
在我们的软件系统中,可观察性一直是有价值的,在这个云计算和微服务的时代更是如此。然而,我们添加到系统中的可观察性在本质上往往是相当低级别和技术性的,而且往往需要用各种日志记录、检测和分析框架的繁琐、冗长的调用来丢弃我们的代码库。本文描述了一种模式,它可以清理这些混乱,并允许我们以一种干净、可测试的方式添加与业务相关的可观察性。
综合监测
合成监视(也称为语义监视)定期针对实时生产系统运行应用程序的自动化测试的一个子集。结果被推送到监视服务中,在发生故障时触发警报。该技术将自动化测试与监视相结合,以检测生产中失败的业务需求。