你不爱写测试?chatGPT却用 TDD 将自然语言“编译”为软件

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

摘要
测试驱动开发的现状与挑战
测试驱动开发(Test-Driven Development,TDD)是一种内建质量的渐进式开发方法。然而,由于工期紧迫、编写测试繁琐以及需求变化快等原因,TDD在工程师圈子中并未广泛流行,甚至有人提出“TDD已死”的观点。随着通用人工智能技术的发展,像ChatGPT这样的模型可能会解决TDD在人工操作中的诸多问题,从而重新焕发其生命力。
生成式AI对软件工程的影响
生成式AI技术(如ChatGPT、GitHub Copilot)让人们看到了未来软件生产方式的可能性。虽然通过自然语言直接生成程序仍面临记忆缺失和复杂设计处理能力不足的问题,但它在函数填充和单一测试生成场景表现较好。前哈佛教授Matt Welsh甚至预测生成式AI可能在三年内终结编程。然而,面对复杂需求的场景,现有技术路径仍需探索更有效的方法。
TDD结合大模型:可能的解决方案
曾被认为不够灵活的TDD可能成为结合生成式AI的有效路径。TDD通过测试确认需求和描述规格,可以将测试作为一种“记忆”,帮助模型处理复杂问题。在设计到实现阶段,TDD的测试功能可验证生成软件的质量,并通过迭代优化代码,确保最终软件符合交付标准。
结合生成式AI的TDD思想能将软件生产过程分为“前端”和“后端”两个阶段。“前端”通过人机交互明确需求并生成测试,“后端”基于测试生成代码并进行验证。在早期阶段,人类工程师仍需充当“测试确认师”,但随着技术成熟,软件生成速度将显著提升,传统开发周期可能被压缩到瞬间。
自然语言编译与未来展望
未来,通过自然语言描述需求并生成测试和代码的技术路线可能让程序语言的重要性逐渐降低。类似编译器的工具或许能够直接将自然语言转化为程序,实现更直观的软件开发方式。MIT教授Lex Fridman也提出,人们或许只需学习如何高效使用自然语言描述需求,而不再需要学习编程语言。
挑战与蓝图
尽管这种结合TDD的技术路线充满潜力,但仍存在诸多问题,包括代码安全性、性能优化以及需求描述片面性等。随着生成技术的成熟,传统软件工程中的部分问题可能失去意义,例如技术债务管理或团队协作研究。同时,生成式AI的广泛应用可能改变软件工程的研究方向。
附加资源
关注本文作者的公众号并输入“chatGPT”,可获取相关研究报告和演讲资料。
想要了解更多内容?

本公众号致力于健康、安全、绿色的软件生态,分享软件质量管理、软件测试的思想、方法、技术与优秀实践,追踪软件质量领域的热点,及时报道软件质量管理的成功案例或质量事故,以及分享深度思考、有温度的技术文章等,努力成为您工作中的朋友。


白皮书上线