“质量绝非偶然;它始终是智能努力的结果。” — 约翰·拉斯金
注:在开始之前,我想说明一下,我将在本文中使用人工智能(AI)的简写版本。
如今,您无法在 LinkedIn 或 Reddit 上滚动,或打开一份技术通讯,而不看到另一篇关于人工智能的头条新闻。尽管媒体的炒作列车全速前进,但事实是,人工智能正在成为帮助我们更聪明、而不是更努力工作的强大工具。
在我之前探索三种质量叙事的基础上,我现在看到了一种由人工智能驱动的第四种新兴质量叙事。这种新的质量叙事超越了单纯的测试自动化和寻找合适的测试工具。它关乎在整个开发周期中重新定义我们对质量的方法。它代表了一种更智能的质量方法。我向您介绍人工智能叙事。
人工智能叙事
人工智能叙事代表了我们对软件质量思考方式的转变,即我们在开发的每个阶段都纳入人工智能。与其将人工智能视为取代人类判断的东西,不如将其视为一个智能伙伴,与我们并肩工作,从始至终地融入质量。以下是它的样子:
- 规划和需求:当产品经理敲定需求时,人工智能会介入,帮助发现模糊的语言、矛盾和空白。这就像在开发人员甚至开始编码之前,又多了一双眼睛。
- 实时编码协助:当开发人员编写代码时,人工智能与他们并肩工作,标记潜在的错误并提出改进建议。它甚至可以帮助编写大家都知道很重要但没人愿意写的文档。
- 测试支持:人工智能帮助生成覆盖正常路径和棘手边缘情况的测试用例。它还可以根据代码更改运行测试,节省时间和资源。
- 生产监控:一旦产品上线,人工智能会筛选用户反馈、支持工单和日志,以在问题变得普遍并影响更多用户之前发现它们。它连接了可能需要人类花费数天或数周才能注意到的点。
沟通不畅和不一致会拖慢团队的速度,并在开发的不同阶段损害产品质量。我们都见过这种模式:不清楚的需求导致假设,假设导致错误,错误导致客户不满。本应在早期识别为问题的内容可能会在后期被误标(在某些情况下,作为功能而非错误),导致客户不满。当人工智能成为流程的一部分时,质量不是我们追求的东西;它是从一开始就融入的东西。
人工智能的一些用例
下面提到的用例可能会随着人工智能的发展而变化,变得更加复杂或过时。话虽如此,以下是开发周期不同阶段的一些用例。
在规划和需求阶段
我们生活在一个数据是新黄金的时代,但筛选大量数据需要大量的资源和人力。根据麻省理工学院斯隆管理评论的报道,大多数数据(根据多位分析师的估计,占 80% 到 90%)是未结构化的信息,如文本、视频、音频、网络服务器日志、社交媒体等。这是一个巨大的未开发资源,可能为能够利用它的公司创造竞争优势。
产品经理传统上根据可用的产品指标和市场研究做出决策。分析大量未结构化数据的挑战正是人工智能带来价值的地方。想象一下数据中的市场趋势。人工智能可以分析这些趋势,识别未开发的机会,并在竞争之前发现利基市场。
此外,考虑一下跨多个渠道(如社交媒体平台、应用商店评论和支持工单)的大量有价值用户反馈数据。人工智能可以从这些来源提取模式,使团队能够通过直接解决客户痛点来战略性地规划质量改进。人工智能穿透噪音,将那座杂乱的数据山转化为产品团队在规划期间可以使用的确切想法。
但人工智能的作用不止于规划。它还可以完善和澄清用户故事。有时,需求可能是主观和不清楚的,导致歧义和误解。产品经理可以使用人工智能消除歧义,确保需求定义明确。明确定义的需求在产品和工程团队之间创造了更好的沟通,使工程师能够以对预期功能的清晰理解来构建功能。
在开发阶段
编码是一种艺术形式,每个按键的笔画都像是画布上的笔触。在当今不断发展的技术环境中,工程师面临着快速交付代码的压力,迫使速度和质量之间做出权衡。但好消息是,随着人工智能的加入,我们正在重塑工程的完成方式。团队不再需要在快速交付和高质量代码之间做出选择。
人工智能可以被视为工程助理;它帮助更快地编写代码,捕捉语法错误和逻辑问题,并在您甚至进入测试阶段之前指出安全漏洞。GitHub 的 Copilot 是一个完美的例子。根据 GitHub 的开发者调查,使用 GitHub Copilot 的开发者完成任务的速度显著更快——比不使用 GitHub Copilot 的开发者快 55%。
人工智能处理繁琐的编码部分,使团队能够解决需要人类创造力的具有挑战性的问题。团队两全其美:更快的开发和更好的代码。
在测试阶段
质量传统上仅限于测试阶段。作为一名质量工程师,我对用来避免修复错误的委婉语非常熟悉:“超出范围”,“v1 不会修复”,或者我个人最喜欢的,“按设计工作”。老实说,团队通常将测试视为一个制衡阶段,任何看起来像边缘情况的报告错误都会被排除。
问题不仅仅在于错误(特别是边缘情况)被报告;而是质量团队报告这些错误的时间。它们在最糟糕的时候被发现,比如在发布截止日期或期间,留给工程师处理它们的空间很小。在压力下,团队可能会降低这些错误的优先级或驳回它们,不是因为它们不有效,而是因为修复它们可能会打乱计划的时间表。
人工智能可以帮助将测试左移,在开发周期的早期捕获这些错误。在创建用户故事时,人工智能工具可以自动生成全面的测试用例,覆盖关键和核心流程以及潜在的边缘情况。除此之外,人工智能还可以分析代码更改并推荐针对受影响区域的测试,消除了每次代码更改都需要运行整个测试套件的需求。
事实上,根据 IBM 进行的一项案例研究,将人工智能纳入他们的测试工作流程中,已经导致更快地发现错误,从而实现更快的发布和更新。此外,人工智能工具的自我修复能力确保了即使应用程序经常发生变化,测试仍然全面。结果不言而喻:在发布阶段报告的错误更少,测试周期更短,上市时间更快。
在生产监控阶段
老实说,筛选生产数据、监控日志和寻找支持问题是繁琐的。虽然自动化报告有助于集中数据,但它仍然需要人类的注意力来解释和根据发现采取行动。通常,我们只有在客户报告问题后才能识别问题,这对所有相关人员来说都是一种令人沮丧的体验。
人工智能在这里增加了巨大的价值。人工智能系统可以持续监控生产日志并识别人类可能错过的微妙模式。人工智能可以分析历史数据和实时指标,以在问题变得普遍之前识别它们。然后可以提醒工程团队这些问题,在它们到达客户支持之前。最好的支持工单是永远不需要创建的。
很容易陷入炒作之中,但人工智能并不完美。了解它的局限性是关键。
人工智能的局限性
看,人工智能很棒,但我们需要明智地使用它。你有没有听过“一件事过多对你不好”这句话?它也适用于这里,我们不应该过度依赖人工智能来完成我们的日常任务。
以产品经理为例,他提示人工智能代理根据功能描述编写用户故事。人工智能代理立即生成内容,产品经理似乎很满意。表面上,生成的内容足够好。问题是人工智能不理解上下文。它可以创建文本,但无法掌握使产品成为产品细腻之处。因此,产品经理可能会花同样多的时间,如果不是更多的话,为人工智能代理创建和迭代详细的提示,就像他们自己编写故事一样。
工程师也面临同样的困境。人工智能可以快速生成代码和测试,但过度依赖会削弱核心编程技能。在没有彻底理解的情况下使用人工智能生成的代码可能会产生严重后果。例如,人工智能可能会生成看似“工作”的代码,但引入了错误。突然间,工程师们花了几个小时寻找那些错误。工程师们最好花这个时间从头开始编码,或者一开始就要进行传统的代码审查。
在测试方面,人工智能可以生成测试代码,但它通常缺乏人类测试者的创造力,因此关键场景很容易被遗漏。
为了澄清,我不是反人工智能。当使用得当时,人工智能工具可以非常强大。这都是关于平衡。我们需要知道何时依靠人工智能,何时信任我们的专业知识。
软件开发不仅仅是编写代码;它是赋予代码生命的创意和驱动它的目的。
在我的职业生涯中,我见过质量实践从手动测试到自动化测试再到左移测试的演变。这种人工智能叙事感觉不同。
质量工作的核心保持不变:为客户交付可靠工作的有价值软件。人工智能只是帮助我们以更少的麻烦到达那里。
要点:
无论我们是否喜欢,人工智能正在改变我们对工作的看法。 人工智能可以在开发周期的不同阶段提高质量。 团队应该将人工智能用作助手,而不是替代品。 人工智能不应该削弱人类的创造力。毕竟,我们的创造力才是我们作为人类的本质。 平衡至关重要。深思熟虑地整合人工智能的团队会看到好处,而那些过度依赖它的团队往往会为自己创造更多的工作。