测试 AI 编码的应用程序:挑战与建议

14 小时前   出处: azevedorafaela.com  作/译者:Camille/小窝

像Lovable.dev这样的AI工具正在改变应用开发模式,它们能通过自然语言提示快速生成原型,让每个人都能轻松创建功能性应用。

这些工具的编码速度比传统开发人员快 20 倍,但也带来了在测试、调试和维护生成代码方面的独特挑战。当团队引入AI时,必须保持警惕。

我们下面将探讨一些挑战,以及在测试和识别问题时可能遇到的常见场景。

如果你希望将这些代码作为项目的基础模板,并在未来扩展产品,请不要在测试之前就添加过多功能!
AI 会生成上百行代码,使得代码审查、维护和测试变得越来越困难,应尽早进行检查和测试。

还需要注意的是,AI 工具会选择它们认为最合适,或者与其有合作关系的库(例如:Lovable.dev 会推荐使用 Supabase)。但这些库或工具可能并不是最适合你的产品,也可能价格昂贵(建议查看订阅价格)。此外,一些库可能已经弃用,与其他依赖项发生冲突,从而引入新 bug。

当然,如果你只是为了验证市场、做一个原型,并且可以接受将 MVP 从头重写,那么就无需太担心这些问题。

测试 AI 编写应用的常见挑战

1. 代码质量与优化问题

场景: 某电商初创公司用Lovable.dev搭建购物平台,生成的商品列表功能因冗余数据库查询导致性能下降。

示例代码:

// 由 AI 生成
let products = [];
for (let productId of productIds) {
    let product = db.query(`SELECT * FROM products WHERE id = ${productId}`);
    products.push(product);
}

问题: 在循环中对数据库进行查询,导致单个操作进行了多次数据库访问。

如果只做“正常流程”测试,很可能不会发现这个问题。因此,需要主动检查数据库及其性能。

2. 自定义与灵活性不足

场景: 一家非营利组织创建了一个活动管理应用,但 AI 生成的代码缺乏计算活动碳足迹的功能。

示例代码:

// 由 AI 生成
events.forEach(event => {
    console.log(`Event: ${event.name}`);
});

问题: AI 没有包含碳排放的计算逻辑。

这是典型问题,有时 AI 只生成前端代码和简单组件交互,甚至使用硬编码数据。如果没有明确地说明公式或逻辑,它通常无法生成后端逻辑。可以通过不同输入做简单测试来发现这一点。

3. 调试复杂性

场景: 一家小企业使用 AI 工具生成了 CRM 应用,通知系统出错,导致重复发送通知。

示例代码:

// 由 AI 生成
reminders.forEach(reminder => {
    if (reminder.date === today) {
        sendNotification(reminder.userId, reminder.message);
        sendNotification(reminder.userId, reminder.message);
    }
});

问题: 重复的函数调用导致通知重复发送。

有时 AI 会建议你重构代码,这类问题在“正常流程”测试中很容易发现,只需验证是否只收到了一个通知。

4. 可扩展性问题

场景: 一家社交媒体初创公司使用 AI 生成平台。用户登录时,代码低效地提取用户数据,随着用户数量增加导致延迟。

示例代码:

// 由 AI 生成
let userData = {};
userIds.forEach(userId => {
    userData[userId] = db.query(`SELECT * FROM users WHERE id = ${userId}`);
});

问题: 循环式查询结构在用户量大时拖慢了登录速度。

如果你在早期没有做性能测试,这个问题可能会在后期才暴露。虽然易于修复,但如果早点发现会避免更多麻烦。

5. 安全漏洞

场景: 一家医疗初创公司生成了患者门户应用,但 AI 生成的代码未对敏感信息加密。

示例代码:

// 由 AI 生成
db.insert(`INSERT INTO patients (name, dob, medicalRecord) VALUES ('${name}', '${dob}', '${medicalRecord}')`);

问题: 以明文方式存储敏感数据。

这是 AI 编写代码中常见问题之一,通常缺乏对数据安全性的处理。必须格外小心,检查数据的传输、管理和存储方式。

6. 过度依赖 AI

场景: 一位自由职业者创建了预算管理应用,在支出追踪器中出现 bug,但由于缺乏编程知识,难以调试。

示例代码:

// 由 AI 生成
let expenses = [];
expenseItems.forEach(item => {
    expenses.push(item.amount);
});
let total = expenses.reduce((sum, amount) => sum + amount, 0) * discount;

问题: 逻辑错误导致总额计算不正确。

这是一个 AI 自己可能也能识别的问题。由于 AI 有时会混合前后端逻辑,即使是有经验的开发者也可能难以调试。对于不会编程的人来说更是挑战。不过,在正常流程测试中就可能发现这个 bug。

其他注意事项

并非所有 AI 编码平台都会为生成的代码自动编写测试,除非你明确要求。例如:Lovable.dev 默认不创建测试代码,这点需要特别注意。

另外,AI 并不擅长跟上所有最新技术的步伐。例如区块链相关开发目前 AI 仍然支持有限(虽然未来可能改善)。这些技术每一秒都在变化,AI 和人类都还追不上 😂

维护 AI 编写应用的一些建议

  • 定期进行全面的代码审查
  • 实施测试协议
  • 训练 AI 遵循代码最佳实践
  • 提前规划扩展策略
  • 优先考虑安全性
  • 培养开发人员的专业技能

如需我帮你将这篇文章做成总结或用于演讲稿,请随时告诉我。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
/24 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章