当AI编写应用程序,是质量的福音还是挑战?
随着 AI 模型的能力越来越强,以Copilot、Cursor、Claude Code、Gemini Cli等为代表的AI编程工具开始逐渐进入软件开发的日常使用,“vibe coding”越来越成为应用开发的趋势。
那么当AI越来越多地参与进实际应用程序的开发,对于基于这种方式完成的应用程序质量来说,到底是好是坏呢?
本篇就结合笔者近期使用多款氛围编程工具的体会,谈谈看法。
AI编程,看上去很美好
从接触AI编程开始,很多人都会惊叹于它极速、高效的强大能力,而且通常结合良好的提示词工程,能在极短时间内完成原型设计,得到的成品也往往能超出预期地功能完备。
只要我们对软件应用开发有所了解,结合提示词工程,从前端、后端到数据库,AI 都能帮我们完成从设计到代码的全部工作。工程师需要做的,似乎就是不断地和AI完成沟通,对输出的结果进行不断地优化和调整。
可以说,AI编程工具的出现,让很多非程序员也能完成很多创意应用的开发,大大降低了软件开发的门槛。
在各大软件开发企业中,开发工程师借助AI工具辅助完成越来越多的代码,也逐渐成为常态。
AI编程的未来,这么近,那么美~
但是,如果不是验证原型目的,要按一个生产级应用的标准来要求AI开发的应用程序,那么复杂、痛苦的调试过程却必然不会缺席。
“开发十分钟,调试两整天” 其实更是结合AI编程的常态。
让人无语的 AI 脑补
虽然“提示词工程”总结和强调了和AI合作的一些最佳方式,但实际工作中,很多时候,工程师还是会倾向用简洁的指令和AI交流。
而在这种指令信息不充分和精确的时候,AI 自然会脑补出很多它认为必要、但实际却似是而非的代码。这时,工程师必然需要花费大量的时间去检查和调整AI的行为。
通过AI来进行编码实现的同学,应该都有因为部分基本的逻辑或前端界面调整,结果耗费了大量时间的经验。
比如笔者就遇到过,仅仅是希望在页面表单中增加一个字段,同时后端数据库也同步进行调整的改动,AI却总是会错义,不是没同步就是去改动不相干的其他表单,反复拉锯,耗费大量时间。
本来就是两行代码的事,却因为自己不熟悉AI生成的代码结构,依赖AI反复修改,虽然最后也达到了效果,却又无谓插入了大量的“屎山”代码。
集成和解耦性上的不足
AI生成代码,一般会首先根据初始需求确定好项目代码结构,然后再根据具体的拆分任务完成代码的填充。
但随着项目进行和需求的不断优化,通常会将主要逻辑集中在部分主文件之中,很容易导致一些主文件过于臃肿。而AI依赖大模型的能力,通常又存在上下文窗口的限制,臃肿的文件对于代码的生成效率和成果又有很大制约。
所有随着需求的不断细化和调整,代码越来越臃肿,也越来越混乱。很少会像实际工程中那样进行适当的解耦和重构,AI本身对代码的理解往往变得越来越困难,很难再有初始时的惊艳感。
这时,工程师的干预就必不可少,否则,AI编码更像是在“屎上雕花”。
所见未必所得
AI生成的代码,为了及时呈现成果,有时还会“作弊”,对一些数据效果的呈现进行硬编码。
也许初期为了展示成果,必要的模拟数据必不可少。但区分硬编码和正确处理逻辑却并不能完全相信AI。
笔者曾在一个AI辅助编写的工具中,向它指出当我录入某条特定数据后,实际效果和预期不符。结果AI在假模假式分析半天以后,告诉我找到原因。但我实际检查代码,竟发现它在这部分的处理,居然是针对这条特定数据做了个if判断,强制特殊处理拉倒。
对质量的挑战
所以通过以上的说明(吐槽),虽然AI在辅助编码上成效惊人,而且不乏和工程师配合良好的案例。但很多基于AI辅助生成的应用,并不能消除质量堪忧的疑虑。
或许AI本身还会帮你生成单元测试,但就像智能驾驶依然不能代替人类决策,在质量这个领域,人类测试工程师的作用,依然不可替代,甚至在AI应用越来越多的情况下,人工测试的重要性还越来越凸显。
- 代码本身的质量
- 复杂应用的整体规划和大范围上下文理解
- 可扩展性、性能、安全性等方面的不足
- 模拟数据、硬编码
测试工程师如何应对
那么针对AI生成应用的质量挑战,测试工程师也应该针对性地进行对它的输出进行测试和验证
可以从如下几方面重点考虑:
传统标准的系统验证
作为一个产品,测试首先自然还是应该从需求和产品目标、用户使用角度去测试AI应用的成品,确保符合产品需求和质量标准
产品集成度、可扩展性、性能、安全
针对AI代码的薄弱环节,从产品集成度、可扩展性、性能、安全等场景重点考虑,针对性测试
从黑盒到白盒
AI错觉的存在,要求测试工程师,不仅从黑盒角度去验证应用,也应该关心AI生成应用的过程,特别是工程师开发过程中,相关的提示词、上下文以及AI的响应记录,都是了解潜在质量问题的来源。很多如硬编码问题,可能就隐藏在一些误导的交互中。
拥抱AI,用魔法打败魔法
AI虽然还存在很多问题,错误的使用可能得到糟糕质量的产品。但使用AI得当,却也能切实提供很好的帮助。
利用AI,我们可以分析产品代码、梳理项目架构,帮助我们更好去理解项目的实现,包括基于AI去辅助完成包括自动化测试在内的很多测试工作。
总结
总而言之,良好质量的产品,离不开成熟的团队和规范的流程。对于测试人员来说,AI时代也在重新定义我们角色的机会。拥抱AI驱动开发的挑战,测试人员也会是不可或缺的参与者和合作者,拥抱AI,也拥抱未来!