AI生成的代码我们是否需要进行更多的测试?

为了评估代码的适用性,我们需要借助一些工具来进行验证和验证。同时,自动化测试工具可以帮助我们检测代码的行为,并提高测试的自信度。

AI在帮我们写代码示意图

越来越多的软件开发中使用了基于人工智能的编码工具,例如GitHub Copilot,百度的文心一言,阿里的通义千问,还有各种人工智能工具。这些工具承诺提高生产力,但也有一些声称通过允许非程序员编写应用程序来实现编程的民主化。

但我们如何确切地知道由AI工具编写的代码是否符合预期目标?

接下来,我们将了解什么是“符合预期目标”,以及可以用来评估代码的工具。我们将看到,基于人工智能的编码工具无法保证其所建议的代码在功能正确性和安全性方面的任何问题。然而,我们还将看到,实际上存在一些可以帮助回答上述问题的AI工具。

回顾历史

值得一提的是,我们先稍微回顾一下历史,因为这个问题并不陌生:我们总是不得不问自己:“我们如何确切地知道由人类编写的代码是否符合预期目标?”几十年来,人们一直在苦苦思索软件工程中的这个根本问题以寻找解决方案。

从可编程计算机系统的早期开始,工程师们就遭遇了当程序无法按照他们的意图运行时的令人讨厌的惊喜。那时,调试和验证程序需要非常昂贵的试错周期。低级别的代码需要手工编写并打孔在卡片上。应对不必要的循环的主要对策是代码审查。代码审查意味着专家阅读并尝试理解代码的功能,并发现错误并提出改进建议。这是一项成功的技术,在今天仍被广泛实践。然而,随着程序规模和复杂性的增加,代码审查的有效性和彻底性显著降低,成本也急剧上升。

不久,问题出现了:如何以更严格的方式去判断程序是否按照预期运行?挑战在于如何表达程序应该做什么。需要以某种方式将用户真正想要的东西传达给机器。这是一个非常具有挑战性的问题,直到今天仍未得到完全解决。

这个问题在所有学科的产品工程中都是普遍存在的,并被分为两个步骤,通常可以表述为以下两个问题:

  • 我们是否构建了正确的产品?

  • 我们是否正确地构建了产品?

验证和验证

评估是否构建了正确的产品称为验证。最终用户会验证产品是否实现了其预期目标。验证从需求规范开始,它作为产品构建者与用户或客户之间的沟通手段。规范应该能被双方理解:用户(领域专家)和工程师(可能不是领域专家)。验证的目标是评估产品的实现是否符合需求规范。验证显然是一个更难的问题。什么是“正确”的产品高度主观,并且很难进行自动化。

好消息是,验证部分可以完全自动化:从计算和复杂性理论的限制来看,可以数学证明实现满足规范。这个学科被称为形式方法或形式验证,它依赖基于逻辑的形式化描述来编写规范,并使用自动推理来执行证明。

尽管听起来很有前途,但主要问题仍然是谁来编写规范。这需要找到一个既是领域专家又是编写形式规范专家的人员,而这类人非常难以找到并且非常昂贵。即使找到了这样的人,并且成功验证了实现,问题仍然存在验证部分,即规范是否实际上从用户的角度描述了正确的产品。

通常观察到规范往往比实现“更错误”,因为编写准确的形式规范极其困难。将自动推理扩展到大型系统仍然是巨大的挑战。在实践中,形式验证已经在嵌入式控制、密码学、操作系统内核和智能合约等小型、复杂且关键(安全、保密、金融)软件的领域找到了应用。

不同的观点

在20世纪70年代,出现了一个从不同角度解决问题的想法,称为N-版本编程。基本思想是由于编写程序甚至规范都非常困难,因此让多个独立团队来实现系统,然后对输出进行投票。其基本假设是不同的团队会犯不同的错误;他们可能对需求规范有不同的解释。因此,整体上结果在验证和可能还包括验证方面将比单个实现“更正确”。然而,事实证明这一假设是错误的:后来的研究表明,即使是独立的团队也会犯相同的错误。

这种方法的遗产是将验证视为2版本编程:需求规范和实现是同一个硬币的两面。它们用不同的形式和观点以不同的方式描述相同的系统。此外,它们通常由不同的人或团队编写。规范与实现在任何意义上都不是“更正确”的。这种思维方式可以引导我们对实际可实现的目标有一个现实的看法。

那么为什么我们要同时需要规范和实现呢?好处来自于2版本编程:比较同一系统的两个描述可以让我们在它们之间达成一致时增加信心,并在它们之间发现错误,从而使我们能够反思两个描述,并最终得到“更正确”的描述。

测试是一种验证技术

现在,一些读者可能会提出疑问:我们没有规范,所以我们无法做到这一点。这与我们有什么关系?您可能没有明确的需求规范,但您确实可以对软件进行测试。没错,我们还没有谈论测试。在我们的讨论背景下,测试实际上是一种验证技术。

测试是一种验证技术,通过检查代码的行为、功能和性能来评估其正确性和质量。它涉及创建测试用例,执行这些测试用例,并分析结果以确定代码是否符合预期。

对于AI生成的代码,测试尤为重要。尽管AI工具可以帮助加快开发过程并提供编码建议,但它们无法保证生成的代码没有错误或缺陷。AI工具基于训练数据和算法,可能会受到训练数据偏差、算法局限性和模型不完善等因素的影响。因此,我们需要进行更多的测试来验证代码的正确性、可靠性和安全性。

以下是一些在测试AI生成的代码时应考虑的方面:

  1. 功能正确性测试:测试代码是否按照预期执行,并产生正确的输出。这包括单元测试、集成测试和系统测试。

  2. 安全性测试:测试代码是否容易受到恶意攻击或滥用。这可能涉及对输入进行边界值测试、安全漏洞扫描和安全审计等。

  3. 性能测试:测试代码在各种负载条件下的性能表现。这可以包括压力测试、负载测试和性能剖析。

  4. 兼容性测试:测试代码在不同平台、操作系统和浏览器上的兼容性。这可以帮助确保代码在各种环境中正常工作。

  5. 用户体验测试:测试代码的用户界面和交互是否符合用户期望,并提供良好的用户体验。

除了传统的手动测试方法,还可以使用自动化测试工具来帮助加快测试过程并提高测试覆盖率。这些工具可以执行重复的测试任务,并捕获潜在的错误和异常。

尽管AI生成的代码可能需要更多的测试,但它们仍然可以提供很大的价值。通过结合人工编写的代码和自动生成的代码,我们可以增加开发速度、减少重复劳动,并发现一些隐藏的错误。然而,为了确保代码的质量和稳定性,我们仍然需要进行充分的测试。

总结

AI生成的代码需要进行更多的测试以验证其正确性和可靠性。这包括功能正确性测试、安全性测试、性能测试、兼容性测试和用户体验测试等。自动化测试工具可以帮助加快测试过程并提高测试覆盖率。通过综合使用人工编写的代码和AI生成的代码,我们可以提高开发效率并发现潜在的问题。


文章来源地址https://www.toymoban.com/diary/system/557.html

到此这篇关于AI生成的代码我们是否需要进行更多的测试?的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/system/557.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
C++函数指针和Lambda匿名函数:用法和捕获示例
上一篇 2023年11月25日 10:49
什么是 JSON Web 密钥 (JWKS)?
下一篇 2023年11月25日 11:17

相关文章

  • 我们是否真的需要k8s?

          这篇文章来源于一次内部讨论,大家突然聊到为什么要用k8s部署,是否还有其他的部署方案呢?大家现在好像都默认k8s部署服务,那么凭什么呢,k8s的核心优势有用到吗?私有化部署场景下需要k8s吗?甚至拆分这么多微服务是否合适,合并成大的单体应用是否可行?

    2024年02月06日
    浏览(43)
  • Comate代码助手推出,现场生成了贪吃蛇游戏,我们距离AI自动编程还有多远?

    Comate代码助手推出,现场生成了贪吃蛇游戏,我们距离AI自动编程还有多远? 百度智能云推出“Comate”代码助手,并正式开放邀测, 不算很意外。 毕竟让AI写代码,跑一跑贪吃蛇,算是传统艺能。 不过你别看我说得轻巧,要让这条蛇跑起来,跑得流畅丝滑,那还确实不是一

    2024年02月08日
    浏览(46)
  • 为什么kafka 需要 subscribe 的 group.id?我们是否需要使用 commitSync 手动提交偏移量?

    消费概念: Kafka 使用消费者组的概念来实现主题的并行消费 - 每条消息都将在每个消费者组中传递一次,无论该组中实际有多少个消费者。所以 group 参数是强制性的,如果没有组,Kafka 将不知道如何对待订阅同一主题的其他消费者。 偏移量 : 每当我们启动一个消费者时,

    2024年02月12日
    浏览(57)
  • python代码实现判断三角形类型,使用pytest进行代码测试,生成allure测试报告

    一、python代码判断三角形类型 写代码之前首先我们要知道满足三角形的条件: 前提条件:三角形边长都为大于0的数字 构成三角形:两边之和大于第三边 即 a+b c  and a+cb and  b+ca   (此三个条件需要同时满足) 满足构成三角形之后,要考虑构成三角形的类型: 三角形分为:

    2024年02月05日
    浏览(49)
  • ES 写入瓶颈需要进行压测,才能确定实际是否达到瓶颈

    筛查分析 普及:JMQ 默认生产者发送消息 QPS 受到主题的 broker 数量影响,(8w/s)/broker 3.2.1 MQ 积压分析 1)分析原因一、ES 写入量大,导致 ES 写入 QPS 瓶颈 ES 写入瓶颈需要进行压测,才能确定实际是否达到瓶颈; 通过查询集群负载,写入队列有无积压,cpu 高不高,来定位 以下

    2023年04月11日
    浏览(48)
  • idea插件 Bito – GPT-4 & ChatGPT AI写代码 分析代码 生成测试用例

    Bito官网 https://bito.ai/ Bito AI是一款通用的人工智能辅助工具,基于最新的ChatGPT实现,开发者可以提出任何技术问题,根据自然语言提示生成代码。 Bito AI可以用于编写代码、理解语法、编写测试用例、分析解释代码、注释代码、检查安全性,甚至解释高级概念。 首先安装Bit

    2024年02月11日
    浏览(53)
  • AI日报:戴尔首席执行官:我们可能在10年内需要100倍以上的数据中心

    戴尔创始人兼首席执行官迈克尔·戴尔表示,随着对人工智能服务需求的增加,数据中心的容量可能必须在10年内从目前的水平增加100倍。 戴尔在SXSW 2024的炉边谈话中表示:“肯定需要对数据中心容量进行大规模扩建。”。“这个国家和世界各地已经有很多项目来建设这种能

    2024年04月14日
    浏览(44)
  • 【MyBatis学习】Spring Boot(SSM)单元测试,不用打包就可以测试我们的项目了,判断程序是否满足需求变得如此简单 ? ? ?

    前言: 大家好,我是 良辰丫 ,在上一篇文章中我们学习了MyBatis简单的查询操作,今天来介绍一下 Spring Boot(SSM)的一种单元测试 ,有人可能会感到疑惑,框架里面还有这玩意?什么东东呀,框架里面是没有这的,但是我们简单的学习一下单元测试,可以帮助我们自己测试代码,学习单元测试

    2024年02月09日
    浏览(92)
  • 考试查分场景重保背后,我们如何进行可用性测试

    作者:暮角 随着通过互联网音视频与知识建立连接的新学习方式在全国范围内迅速普及,在线教育/认证考试的用户规模呈井喷式增长。但教育容不得半点马虎与妥协,伴随用户规模不断增长,保证系统稳定性、有效避免千万考生考试时遭遇故障风险,成为行业认证机构/部门

    2024年01月23日
    浏览(41)
  • AI 图像生成工具可以取代摄影师吗?让我们从原理开始聊聊

    AI 的风已经吹向了每一个人,在这篇文章中我们一起来聊一聊 AI 图像生成的原理以及未来。 作为一个非职业的摄影爱好者,我通常会在 Instagram 上面搜罗各种各样的优质图片并将其放进我的收藏夹。其中,有一位我关注了很久的德国摄影师,他的作品有很多值得我学习的地方

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包