被炒上天了的AI,嗨得太离谱!
去年年底,仿佛一夜之间,人工智能又嗨起来了,先是DALL-E2的生成图像惟妙惟肖,那副“骑马的宇航员”让人过目难忘,紧接着是StableDiffusion这个文本生成图像的公开版权的作图AI,最后的“王炸”:出道即巅峰的ChatGPT,给OpenAI赚足了面子。甚至春节期间,很多互联网人都在感叹“岌岌可危”,生怕这波人工智能的高潮,真要抢走饭碗了。然而,现实真的会这样吗?AI会让计算机应用软件迎来复兴时刻吗?本文以一个具体的领域应用为例,阐述AI被工具化的三个阶段,并说明AI不应该,也不可能发展成完全自主的几点理由。此外,笔者还分享了真正的AI角色应该是怎样的。我们需要警惕,但无须惊慌。
“有了人工智能,交付时间将从几分钟减少到几秒钟!”“供应商和客户将重回到廉价和用户友好的体验的时代,计算机应用软件将迎来复兴时刻!”
可打脸的是,廉价的存储空间、高速的处理速度、随时可用的AI训练设备以及互联网已经将这一承诺变成了夸大其词的炒作。
以软件测试为例,搜索“人工智能在软件测试中的应用”,系统会返回一系列向潜在买家承诺的“神奇”的解决方案。许多解决方案提供了减少手工劳动、提高质量和降低成本的方法。有些奇葩的是,有些厂商承诺他们的AI方案能完美解决软件测试问题,用词更是惊掉下巴——软件测试的“圣杯”ーー想法是这样说的ーー就是把人们从伴有困难和烦恼的软件开发循环中解脱出来,使测试周期更短、更有效、更简单。
AI真可以化身成万能的“圣杯”吗?而且,我们也该让AI全替代人类吗?这些近乎荒诞的炒作,实在是该歇歇了。
1、现实的真相
在现实世界中,将人类排除在软件开发过程之外要复杂得多,也令人望而生畏。不管使用瀑布、快速应用开发、DevOps、敏捷和其他方法,人们仍然是软件开发的中心,因为他们定义了他们创建的软件的边界和潜力。在软件测试中,由于业务需求通常不明确且不断变化,所以“目标”总是在变化。用户要求改变可用性,甚至开发人员对软件可能性的期望也会发生变化。
软件测试的最初标准和方法(包括术语质量保证)来自制造产品测试领域。在这种情况下,产品是定义良好的,二者相比,测试更加机械化,但软件的特性是可塑的,并且经常变化。软件测试不适用于这种保证质量的统一的机器方法。
在现代软件开发中,许多事情是开发人员无法预料和知悉的。例如,用户体验(UX)期望可能在软件的第一次迭代之后就已经改变了。具体的比如:人们对更快的屏幕加载时间或者更快的滚动需求有更高的期望、用户不再想要冗长的向下滚动屏幕,因为它不再流行。
种种原因表明,人工智能永远无法独自预测或测试,连它的创造者都无法预测的东西。所以在软件测试领域,不可能有真正自主的人工智能。创建软件测试“终结者”可能会激起吃瓜者和潜在买家的兴趣,但这种部署注定是海市蜃楼。相反,在人工智能与人类协同工作的背景下,软件测试自主性更有意义。
2、AI需要经历三个成熟阶段
软件测试AI开发,基本上分为三个成熟的阶段:
操作性阶段(Operatinal)
过程性阶段(Process)
系统性阶段(Systemic)
目前绝大多数基于人工智能的软件测试都处于操作性阶段。最基本的操作测试包括创建模仿测试人员执行数百次的例程的脚本。这个例子中的“AI”远远不够智能,它可以帮助缩短脚本创建、重复执行和存储结果。
过程性AI是操作性AI的一个更成熟的版本,测试人员使用过程AI进行测试生成。其他用途可能包括测试覆盖范围分析和建议、缺陷根本原因分析和工作量估计,以及测试环境优化。过程AI还可以促进基于模式和用法的合成数据创建。
过程性AI的好处显然易见,它提供了一双额外的“眼睛”,以抵消和对冲掉测试人员在设置测试执行策略时所承担的一些风险。在实际应用中,过程性AI可以让修改代码后的测试变得更容易。
手动测试,经常会看到测试人员重新测试整个应用程序,查找代码更改时的意外后果。
另一方面,过程性AI可以建议对单个单元(或有限影响区域)进行测试,而不是对整个应用程序进行大规模重新测试。
在这个级别的人工智能,我们发现在开发时间和成本方面有明显的优势。
然而,目光切换到第三阶段——系统性AI时,画风就会朦胧起来,因为,未来可能会成为一个滑坡的、无回报的承诺而已。
3、不靠谱的系统性AI
系统性(或者说完全自主的)AI测试,之所以不可能(至少目前不可能),原因之一是AI将需要大量的培训。测试人员可以确信过程AI将建议一个单元测试来充分保证软件质量。然而,对于系统AI,测试人员无法高度自信地知道该软件将满足所有需求。
如果这个级别的人工智能真的是自主的,它将不得不测试所有可以想象到的要求——甚至是那些人类没有想象到的要求。然后,他们需要审查自主AI的假设和结论。要证实这些假设是正确的,需要花费大量的时间和精力,才能提供高度可信的证据。
自主软件测试永远不可能完全实现。因为人们不会信任它,而这就相当于失去了实现完全自主的目标与前提。
4、人工智能需要调教
尽管完全自主的人工智能是一个神话,但支持和扩展人类在软件质量方面的努力的人工智能是一个值得追求的目标。在这种情况下,人类可以支持人工智能:测试人员依旧需要保持耐心地监督、纠正和教导人工智能以及其依赖的不断进化的训练集。挑战在于如何训练人工智能,同时为测试软件中的各种bug分配风险。这种训练必须是持续的,不仅限于测试领域。自动驾驶汽车制造商训练人工智能,以区分一个人究竟是在过马路还是在骑自行车。
测试人员必须用过去的数据训练和测试人工智能的软件,以建立他们对人工智能能力的信心。同时,真正自主的人工智能在测试中需要预测未来的条件ーー开发人员引导和用户引导ーー这是它无法根据历史数据做到的。相反,训练者往往会根据自身的偏见,基于数据集训练人工智能。这些偏见限制了人工智能探索的可能性,就好比盲人为了确定性,会阻止马匹偏离既定路径一般。人工智能表现的越有偏见,可信度就会越糟糕。人工智能所能接受的最好训练,就是处理风险概率,并得出最终由人类评估的风险缓解策略。
5、风险缓解措施
说到底,软件测试关乎测试人员的成就感和自信心。它们衡量和评估,初始实现的可能结果以及可能给开发人员和用户带来问题的代码更改。但不可否认的是,即便软件测试已经充分探索了应用程序崩溃的每一种可能性,可信度都不可能是100%的。无论是人工执行还是自动执行,在所有软件测试中都存在风险因素。
测试人员必须根据代码引起问题的可能性来决定测试覆盖率。他们还必须使用风险分析来决定哪些领域应该集中在覆盖范围之外。即使人工智能确定并显示了软件在用户活动链中任何一点发生故障的相对概率,但测试人员仍然需要手动确认计算结果。
人工智能为受历史偏差影响的软件连续性提供了可能性。然而,人们对人工智能的风险评估和降低风险的秘方,仍然没有很高的信心。
支持AI的软件测试工具应该是实用和有效的,以便帮助测试人员产生真实的结果,同时减轻测试人员的手工劳动。
人工智能在软件测试中最令人兴奋(也可能具有破坏性)的部署,是处于人工智能开发成熟度的第二级:过程性AI。正如Katalon的一位研究人员指出的那样,“应用于软件测试的AI最大的实际用途是在过程级别,即自主测试创建的第一阶段。这将是我能够创建自动化测试的时候,这些测试可以由我创建,也可以服务于我。”
自主和自我导向的人工智能,取代所有人类参与软件测试过程等云云的话,皆是炒作。期望人工智能能够扩大和补充人类的努力并缩短测试时间,这是更为现实和可取的。
来源:51CTO技术栈