最实用测试方法——TIA

简介: 最实用测试方法——TIA

大家好,我是阿萨。测试方法越来越多,但是阿萨觉得最经济实惠的测试方法其实是精准测试。但是今天不谈精准测试,聊一个和精准测试接近的内容,阿萨分享下代码改动影响面测试以及如何减少测试数量。


现在软件开发速度越来越快,质量要求越来越高。更快上市时间,更多实用功能,更多服务提供,这些慢慢成为一种趋势。产品交付周期越来越短。


为了满足客户的越来越快的交付诉求以及越来越快的市场变化,大部分公司已经转向敏捷开发。更迅速的交付时间,更小团队,更精细化的职能。


现在都是小团队,每个团队处理的业务更细小。一个小服务可能多个团队工作在上面。服务时间是如何影响的,那个服务调用了修改后的代码,如何正确测试修改后的服务,同时要保证交付的高质量。

因此,我们在各个层面上写了越来越多的测试。我们写单元测试,来测试代码的每个不同部分。我们还写端到端测试,以检查应用程序的行为是否符合预期,以及UI测试,以检查用户是否可以正确使用应用程序。这些都是昂贵的测试,需要资源来编写和运行它们。

这意味着,我们很快就会达到一个瓶颈,我们不能再快了。测试的数量不断增加,运行它们所需的时间也在增加。这阻碍了开发周期,而开发周期正在等待反馈结果,以了解哪些地方不工作,需要修复。

唯一的选择是开始删除测试,但由于团队并不真正了解测试的实际情况,他们担心如果他们删除任何一个测试,那么就会错过一些东西,他们会得到更多的生产问题。

继续走这条路而不做任何事情,意味着我们会遇到这个障碍,这反过来会影响我们的产品质量。典型的情况是,尽管他们不愿意这样做,但团队开始根据猜测来削减测试,或者只做单元测试,因为他们被要求或者不能全部运行。


一些经理或团队说服自己,认为单元和组件测试已经很好了,他们得到了太多的关注,因为他们的速度更快,但他们正在失去质量,因为他们正在运行低质量的测试。

软件需要被正确地测试。盲目地添加测试,而不真正了解你在哪里添加测试,并运行你所有的测试,这不是答案。它不符合我们必须尽可能快地推出一切的要求。我们需要大幅减少所需的测试数量,使用智能测试选择只执行所需的测试,并通过识别和阻止未经测试的代码变化进入生产,实现高质量。

那么,我们怎样才能做到这一点呢?我们需要一个聪明的方法来识别哪些测试是真正需要执行的,从而减少测试的数量,并在哪里增加针对高风险领域的最小数量的新测试。

在这里集中讨论一下如何减少测试的数量。

早在2017年,ThoughtWorks的首席科学家Martin Fowler写道。

"分析影响面并测试(TIA)是一种加快构建的测试自动化阶段的现代方法。它的工作原理是分析源代码的调用图,以确定在对生产代码进行修改后应该运行哪些测试。微软已经在这个方法上做了一些广泛的工作,但对于开发团队来说,也有可能以相当便宜的价格实现一些有用的东西"


因此,分析影响面并测试(TIA)是有一种方法来了解开发实际上是在哪里碰到了代码。然后利用这些知识来决定哪些测试应该根据代码的变化来运行/跳过。

以下是TIA帮助我们处理的一些挑战,即减少运行的测试数量。

当开发人员进行代码修改时,启动了CI/CD流程,他们的代码被构建、部署和测试的时间会很长,在此期间他们会转向其他事情。当他们最终得到反馈时,他们需要切换回来,所有这些上下文的来回切换都会浪费时间,造成挫败感,并最终导致低质量的代码。


因此,通过运行最小数量的测试,我们减少了这些上下文切换,并在一个允许他们更有效地处理问题的时间框架内给予开发人员反馈。


由于回归测试需要很长的时间,它们通常不是标准CI/CD流程的一部分,通常会每晚运行一次,甚至更少。测试影响分析允许你作为CI/CD过程的一部分运行部分回归周期,并在上下文切换到另一个主题之前再次向你的开发团队提供这种反馈。当然,你仍然可以每晚运行一次完整的回归,或者当你需要获得回归周期的全貌时。


对于热补丁来说,时间是最重要的。你需要尽可能快地把它们推出来。但你怎么知道要运行哪些回归测试?要么就是根本不运行,要么就是猜测,试图希望你测试本应运行的东西。


通过测试影响分析,你知道你需要运行哪些测试来最大化测试覆盖率,并更有把握地发布热点。下一个挑战是与成本有关。运行这么多测试需要大量的资源和复杂的CI来协调这一切。你要在多台机器上运行所有这些测试,在多个测试环境中尝试并行运行这些测试。


所有这些硬件都要花很多钱来维持运行。你还投入时间来编写和维护复杂的CI,这需要资源来完成,这也有很高的成本。当然,也有自动化服务可以为你做很多事情,但它们也不便宜。所以,测试影响分析允许你减少CPU时间,旋转更少的机器,既削减了开支,又减少了花费的时间。


最大的成本因素之一是手动测试。很多公司仍然有某种形式的手动测试,要么是因为他们的自动化测试不够成熟,要么是因为某些领域的自动化不值得花费。手动测试某些东西可能需要几个小时或几天的时间,所以为了减少这个时间,雇佣了很多手动测试人员来并行工作,你需要为他们提供测试环境。这可以使你的成本急剧增加。

测试影响分析使用人工智能来评估以前执行过的测试,这样手动测试人员就能准确地知道他们需要根据代码变化来运行哪些测试,从而节省大量的时间和资源。

那么一些成熟公司是如何使用TIA的呢?

一些公司的系统使用机器学习来了解每个测试所测试的代码的哪些部分。这是在任何测试阶段进行的,如部署后的回归测试,甚至包括手动测试。

每次构建开始时,会识别哪些代码被修改了,基于对哪些测试之前经历了代码修改的了解,会自动向测试框架提供反馈,指示它跳过哪些测试,而不需要修改你的测试或代码。


对于手动测试,向手动测试人员提供反馈,告诉他们需要执行哪些测试。

这就是TIA 测试, Test Impact Analysis.


相关文章
|
1月前
|
安全 测试技术
BOSHIDA DC电源模块的安全性能评估与测试方法
BOSHIDA DC电源模块的安全性能评估与测试方法
 BOSHIDA DC电源模块的安全性能评估与测试方法
|
1月前
|
安全
DC电源模块的安全性能评估与测试方法
DC电源模块的安全性能评估与测试方法 DC电源模块的安全性能评估与测试方法应包括以下几个方面: 1. 输入安全性测试:包括输入电压范围、输入电压稳定性、输入电流范围、输入电流保护等方面的测试。测试方法可以是逐步增加输入电压或输入电流,观察模块的工作状态和保护功能。
DC电源模块的安全性能评估与测试方法
|
1月前
|
监控 JavaScript 前端开发
在生产环境中测试和监控Vue项目的方法有哪些?
在生产环境中测试和监控Vue项目的方法有哪些?
28 4
|
1月前
|
芯片
电容在ESD测试中的选用方法
电容在ESD测试中的选用方法
28 2
|
1月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
9 0
|
3月前
|
敏捷开发 存储 安全
敏捷方法:什么是软件测试中的敏捷模式?
敏捷方法:什么是软件测试中的敏捷模式?
|
2天前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
8 1
|
3天前
|
API 开发者
免费邮箱API发送邮件测试调试的方法和步骤
本文介绍了使用免费邮箱API如aoksend、Mailgun、SMTP2GO发送邮件的测试调试步骤:选择合适的API,获取访问密钥,配置邮件参数,编写测试代码,调试和测试,查看发送日志,以及优化改进邮件发送功能,确保其稳定运行。
|
18天前
|
自然语言处理 测试技术 持续交付
现代软件测试方法与挑战
传统软件测试方法在当前快速发展的软件开发环境下面临着诸多挑战,因此,现代软件测试方法的探索与应用显得尤为重要。本文将介绍几种现代软件测试方法,并探讨其在应对软件开发挑战方面的作用。
10 0
|
20天前
|
安全 测试技术
深入理解白盒测试:方法、工具与实践
【4月更文挑战第7天】 在软件开发的质量控制过程中,白盒测试是确保代码逻辑正确性的关键步骤。不同于黑盒测试关注于功能和系统的外部行为,白盒测试深入到程序内部,检验程序结构和内部逻辑的正确性。本文将探讨白盒测试的核心技术,包括控制流测试、数据流测试以及静态分析等方法,同时介绍当前流行的白盒测试工具,并讨论如何在实际项目中有效实施白盒测试。文章的目标是为软件测试工程师提供一份综合性指南,帮助他们更好地理解和应用白盒测试技术。

热门文章

最新文章