AI 辅助编程工具引入了全新的错误类型

AI 辅助编程工具引入了全新的错误类型。

AI 辅助编程工具引入了全新的错误类型

原标题:AI 辅助编程工具引入了全新的错误类型
文章来源:AI前线
内容字数:5883字

Copilot 引发的“坠机事故”:一个由AI辅助编程工具引入的棘手错误

本文讲述了作者Klaas van Schelven在使用微软Copilot辅助编程时,因一个看似简单的导入语句错误而耗费两个小时调试的经历。这个错误并非程序崩溃,而是由Copilot引入的微妙的语义错误,最终导致测试失败。

1. 错误的导入语句

Copilot生成的错误导入语句为:from django.test import TestCase as TransactionTestCase。Python的import as语句允许为导入的实体赋予不同的名称,但此处Copilot将TestCase 导入并赋予了TransactionTestCase 的名称。TestCaseTransactionTestCase 在数据库事务处理方面存在细微差别,前者自动回滚事务,后者则没有。这种错误的导入导致程序实际运行的是TestCase,而非预期中的TransactionTestCase,从而导致依赖事务管理的测试失败。

2. 调试过程与误导

作者花了两个小时才找到这个错误。起初,他怀疑问题出在自身代码或Django框架本身,因为测试结果与TransactionTestCase 的预期行为不符。详细的代码注释进一步误导了他,让他相信TransactionTestCase 的使用是正确的。注释中解释了TransactionTestCase 的用途以及TestCase 的局限性,但这反而让他忽略了错误的导入语句。

3. 错误难以发现的原因

这个错误难以发现的原因在于其隐蔽性和反直觉性。首先,作者并非在Copilot生成代码后立即运行测试,导致错误被延迟发现。其次,错误发生在通常被认为最不可能出错的导入语句中。最后,错误本身非常奇怪,一个经验丰富的程序员很难想象有人会故意写出这样的代码,这使得它很难被及时发现。

4. Copilot 的“合理性”与人类的直觉

作者认为Copilot之所以会生成这样的代码,是因为它根据上下文(代码中使用了TransactionTestCase,但没有使用TestCase)进行预测,并试图“补全”代码。对于一个基于统计模型的AI来说,这可能是“合理的”,但对于人类程序员来说,这是完全不符合编程规范和直觉的。

5. AI辅助编程引入的新错误类型

作者总结道,AI辅助编程工具引入了全新的错误类型。这些错误并非人类程序员的常见错误,而是反映了AI自身的某些“怪癖”,增加了编程过程的不可预测性。虽然AI辅助编程工具总体上利大于弊,但程序员需要意识到并警惕AI可能引入的新类型错误。

总而言之,这个案例生动地说明了AI辅助编程工具虽然能提高效率,但也可能引入一些意想不到的、难以察觉的错误,需要程序员提高警惕,并结合自身经验进行代码审查。


联系作者

文章来源:AI前线
作者微信:
作者简介:面向AI爱好者、开发者和科学家,提供大模型最新资讯、AI技术分享干货、一线业界实践案例,助你全面拥抱AIGC。

阅读原文
© 版权声明

相关文章

暂无评论

暂无评论...
第五届
全国人工智能大赛

总奖金超 233 万!

报名即将截止