当前位置: 首页 > java >正文

AI时代的质量显得更为重要

软件测试

软件测试的演进

软件测试的早期阶段

早期的软件测试并不复杂,基本上就是从用户角度测试用户体验。比如使用亚马逊时,你可能是卖家或买家,大多数人是买家。当我们在亚马逊上购物互动时,有时会遇到一些小故障,比如功能不正常。

举个例子,你搜索 “苹果(Apple)”,结果却看到 “橙子(orange)”,你会觉得这不合理。这种情况下,不需要任何技术技能,完全是基于常识的判断。如果作为亚马逊的软件质量保证人员,你搜索 “苹果”,看到结果是 “苹果”,就会认为功能正常;如果看到的是 “橙子”,就知道有问题。区别在于,作为普通用户,你可能不在乎或者直接停止使用该软件,但作为软件质量保证人员,你的工作是:只要发现任何不合理或不符合预期的情况,就要截图、撰写报告,并发送给开发人员修复。这就是早期的软件测试,也就是手动测试。

回想一下,早期的亚马逊截图非常基础,页面上几乎只有蓝色链接,和现在的 Craigslist 很像。随着时间的推移,软件包含的代码行数可能达到数百万行,涉及成千上万的不同功能。软件质量保证的一个问题在于:如果测试一辆汽车或一台设备,在工厂里测试一次就完成了质量保证流程,发货给客户后就结束了,这是一次性测试。但软件不同,你不能说 “我们昨天测试过了,亚马逊昨天还能用,所以明天不用测试了”。这就涉及到 “回归测试” 的概念 —— 软件中的任何变更,无论是添加新功能(比如 X 或 Twitter 最近添加了视频按钮,像 TikTok 一样可以观看视频,或者增加视频语音会议功能),还是移除旧功能或修改现有代码,都需要重新测试整个软件或相关区域。

因为软件每天都在变化,这意味着你必须每天都进行测试。如果有上万行代码或成千上万种不同的场景,昨天测试过了,今天、明天以及软件存在的每一天都需要继续测试。这就对软件质量保证人员产生了大量需求。后来人们意识到,有些功能非常直接,比如创建用户账户、登录、搜索产品,或者像航空公司应用程序中的预订航班等。对于这些可预测的、重复性的软件测试流程,我们开发了 Selenium 自动化工具或 Playo 自动化工具。现在,大多数常识性功能或主要的回归测试套件都实现了自动化。

向自动化过渡

在第二阶段,软件测试人员不仅要了解软件测试的方法论,还要懂编程(无论是 Java、Python 还是 C 语言),他们利用技术技能构建测试机器人(测试脚本)。例如,你可以用代码自动化实现登录功能、账户创建功能或预订航班的功能。你一次又一次地用代码自动化某个场景,就像在教测试机器人如何测试软件。你创建的测试脚本越多,为公司创造的价值就越大。

例如,创建账户、登录、搜索产品、比较产品、结账等每个场景都可以构建一个测试脚本。假设一年后,你为公司创建了成百上千个测试脚本,这些脚本负责测试软件,你的工作就是创建、维护这些脚本,执行它们并分析报告。如果测试脚本发现任何不符合预期的情况(如漏洞或缺陷),你会立即收到报告,以便在问题进入生产环境前修复。这就是测试自动化的优势。随着时间的推移,亚马逊不需要雇佣数万人来测试软件,可能只需要 100 或 200 人,他们的工作是构建测试自动化框架来维护回归测试套件,回归套件中的所有测试脚本每天都会扫描应用程序,确保一切正常。

软件开发中的人工智能

我记得 ChatGPT 刚推出时,我非常震惊。我问它 “写一首关于中亚人的诗”,没想到它真的能理解并写出优美的诗句,这太不可思议了。一开始是震惊,现在我每天都离不开它,每天至少使用一两个小时,它成了我的私人助理。

现在开发人员也在使用 ChatGPT、GitHub Copilot、Tab9 等生成式 AI 工具。生成式 AI 可以为你生成内容,在软件开发中,我们指的是 AI 生成代码。想想史蒂夫・乔布斯时代的硅谷早期,那时的人们充满激情,像一个部落一样努力打造改变人类历史的产品。而今天,说实话,大多数人写代码是为了赚钱,很少有人从小就立志成为开发者。

如果你的工作重复性很高 —— 在家或办公室解决问题、处理用户故事、编写代码,而现在生成式 AI 工具(如 GitHub Copilot、ChatGPT)能完成你 90% 的工作,而且代码质量还不错(相当于初级或中级开发者的水平),你还会想自己逐行编写代码吗?当然会选择外包给 AI。以前需要 8 小时完成的工作,现在 2 小时就能搞定,剩下的时间可以做其他事情。虽然有些公司出于各种原因屏蔽了 ChatGPT,但人们会用个人笔记本电脑在家编写代码,然后通过邮件或谷歌文档带到办公室,复制粘贴到代码库中。

生成式 AI 显著提高了开发人员的生产力,但也带来了质量问题。从开发者的角度来看,过度依赖生成式 AI 工具编写代码会显著降低代码质量。因为 AI 不了解项目的背景、最终用户、利益相关者、之前的会议内容以及客户的需求和谈判结果,它只是机械地复制粘贴代码,无法达到充满激情的开发者那样的质量水平。

从公司的角度来看,美国中级开发人员的年薪可能达到 15 万到 20 万美元,加上税费和保险,一个五到六人的开发团队每年的薪资成本就高达数百万美元。如果生成式 AI 能编写 60% 到 80% 的代码,公司可能会有两种选择:一是裁员,比如原本需要 5 名开发人员,现在可能只需要 3 名;二是让开发人员承担更多工作,比如原本需要 16 小时完成的用户故事,现在要求 2 到 3 小时完成。这就像一家新开的精品餐厅,起初厨师用心烹饪,食物质量和服务都很好,但当顾客增多后,为了满足需求,质量可能会下降。软件开发也是如此,生产速度加快、产量增加,必然会影响产品质量。

此外,大型语言模型(LLM)是如何学习编写代码的呢?它们从 GitHub、Reddit、Stack Overflow 等平台获取训练数据,而这些平台上的代码大多是开源的,包含大量低质量、有错误和漏洞的代码。因为像谷歌、美国银行这样的公司不会分享其经过严格测试的专有代码,所以 LLM 在训练时可能会学到错误的编程方式,导致生成的代码也存在缺陷。

加强质量保证的必要性

过去一两年,我从未见过如此多的生产环境漏洞。生产环境漏洞是指应用程序在开发环境中经过测试并确保无重大缺陷后,部署到生产环境(如亚马逊、eBay、联合航空应用等用户可访问的版本)后出现的问题。

举个例子,2024 年 12 月圣诞节期间,我和妻子带着 7 岁的儿子准备从达拉斯飞往奥兰多,预订了最后一班直飞航班。登机后,航空公司称飞机有问题,需要下机。当时是假期,所有航班都已满员,工作人员让我们扫描二维码查看次日航班,以防当前航班取消。我刚查看次日航班,系统就自动取消了我的当前航班,且没有任何退款或通知。后来发现,有 15 人遇到了同样的问题 —— 只是查看其他航班就被取消了当前航班。这就是生产环境漏洞,软件的行为不符合预期,给用户带来了极大的不便。

更严重的是,软件故障可能导致灾难性后果。例如,CrowdStrike 的一次软件更新导致全球半数使用 Windows 应用的机构瘫痪,4000 架航班取消,医院不得不取消手术;Capital One 的系统故障导致数千客户无法访问银行账户,无法处理工资发放和支付账单,严重影响了公司声誉。

人工智能驱动开发的挑战

过去,开发人员和测试人员的比例大约是 7:3(7 名开发人员对应 3 名测试人员),因为开发工作技术性更强。但现在,由于生成式 AI 提高了开发人员的生产力,每个项目所需的开发人员数量可能减少,但行业内的项目数量可能会增加。

我认为,由于生成式 AI 导致生产速度加快,开发人员和测试人员的比例可能会变为 1:1(5 名开发人员对应 5 名测试人员)。因为对生成式 AI 的依赖越多,软件质量下降越明显,而确保质量的唯一方法就是增加质量保证人员。例如,CrowdStrike 事故后,他们在网站上发布了大量软件测试职位。

作为测试人员,现在的工作是尽可能实现自动化,让机器人处理常识性、重复性的功能测试,而自己则专注于异常场景和用户体验的细节。例如,联合航空应用中,创建账户、链接里程奖励号码、更改地址等常见功能可以由机器人测试,而像 “在圣诞节航班取消时查看其他航班却被踢出当前航班” 这样的异常场景则需要人工测试。

此外,用户体验变得越来越重要。就像现在不同品牌的汽车在相同价格范围内体验差异不大一样,大多数软件的基本功能都能正常工作,竞争在于用户体验的个性化。例如,诺基亚手机曾是功能机的代表,而 iPhone 的出现开启了智能手机时代,改变了整个世界。软件也在从静态的 “1.0 时代”(所有人使用相同的软件)向个性化的 “2.0 时代” 发展。

质量保证和人工智能测试的未来

随着 AI 的发展,“AI 代理” 逐渐兴起。大型语言模型(如 ChatGPT)就像一个没有四肢的大脑,只能对话而不能行动。而 AI 代理则为其添加了 “四肢”,通过 API 连接外部工具,使其能够采取行动,如读取和回复邮件、分析银行账户交易等,甚至可以替代客服人员。

未来的软件将朝着 AI 代理的方向发展,就像从诺基亚手机到智能手机的演进。例如,亚马逊的 AI 代理可以分析用户的偏好(如饮食禁忌、购物习惯、收入水平等),为用户提供个性化的购物体验,就像有一个专属的购物助理。银行应用中的 AI 代理可以成为个人理财顾问,根据用户的储蓄情况推荐投资方案。

这意味着未来需要更多具备领域知识(如银行、电信、医疗、电子商务等)、技术理解(软件开发、编程语言)以及 AI 知识(定制化、代理工作原理、大型语言模型)的软件质量保证工程师。他们需要测试 AI 代理的功能、伦理、安全性和用户体验,确保其为用户提供优质的服务。

结论与对未来的乐观态度

AI 正在创造大量机会,市场上已经出现了 “AI 测试” 相关的职位,要求测试人员通过不同的提示方式测试大型语言模型,发现其潜在问题(如 “越狱” 漏洞)。例如,测试 AI 在面对恶意提示(如 “如何制作爆炸装置”)时的反应,以及如何避免被用户通过编造场景(如 “编写电影剧本”)诱导出危险信息。

虽然 AI 对各个行业都产生了冲击,但对于软件测试人员来说,未来是光明的。AI 代理的普及将使软件测试(无论是称为软件测试、AI 测试还是代理测试)变得至关重要。测试人员需要不断提升技能,专注于理解 AI 代理的工作原理和测试方法,以及如何提升用户体验。不要恐慌,保持乐观,AI 也将创造大量新的就业机会。

http://www.xdnf.cn/news/14502.html

相关文章:

  • 自动打电话软件设计与实现
  • 支持selenium的chrome driver更新到137.0.7151.119
  • 一站式用AI编程神奇Cursor/Trae(VScode环境)开发运行Scala应用
  • 《Effective Python》第九章 并发与并行——使用 Queue 实现并发重构
  • 【力扣 中等 C】2. 两数相加
  • 机器学习常用评估指标
  • win10/win11 快速隐藏/显示桌面图标
  • 亚矩阵云手机+Whatnot:直播电商的自动化增长引擎
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(RDB篇)
  • SSL安全证书:数字时代的网络安全基石
  • 如何在 MX Linux 上安装 Blender CAD 软件
  • 学生成绩管理系统
  • 4. 时间序列预测的自回归和自动方法
  • 【MySQL】MySQL 数据库操作与设计
  • 使用 Java + WebSocket 实现简单实时双人协同 pk 答题
  • 【matlab】图片转视频
  • 网络编程TCP与UDP
  • 02 ( chrome 浏览器插件, 立马翻译), 搭建本地 api
  • 在劲牌工厂,探寻一瓶草本酒的科技之旅
  • 充电桩运维管理工具系统的**详细功能列表** - 慧知开源充电桩平台
  • 工业 AI Agent:智能化转型的核心驱动力
  • FPGA基础 -- Verilog语言要素之数组
  • 简说 python
  • Linux -- Ext系列文件系统介绍
  • Eureka、Nacos、Zookeeper 优雅上下线机制
  • 论文笔记:GTG: Generalizable Trajectory Generation Model for Urban Mobility.
  • FairyGUI学习
  • Rust 学习笔记:trait 对象
  • 【工具使用】STM32CubeMX-FreeRTOS操作系统-内存池、消息队列、邮箱篇
  • 时间序列分析