跳到内容
本文已通过AI从日语翻译
阅读日语原文
本文属于公共领域(CC0)。请随意自由使用。 CC0 1.0 Universal

开发型开发与重构驱动测试

开发是指反复创造出有用的新事物。

提到“开发”,人们常常会想到新产品开发。这不同于生产单个产品;它意味着,打个比方,创造产品的蓝图或模具。

因此,通过新产品开发所创造的设计图和模具,可以在工厂中反复使用,从而批量生产相同的产品。

此外,“开发”一词还有其他用法,例如开发个人能力,或开发社会和国家。这些用法不仅仅意味着拥有物的增加,更意味着能够反复利用和受益于所开发的能力。

尽管个人和社会的经济实力可能会随着经济状况而波动,但所开发的能力通常是永久性的。

即使它们有所减少,那也被视为衰退,而非经济繁荣那样的上下波动。

此外,还有技术和知识的开发。与个人或特定社会的能力不同,这些具有易于共享的特点。

而在这些开发成果——产品、能力、知识和技术中,有些可以为后续的开发提供帮助。

通过开发这些有用的成果,开发的范围得以扩展,效率和质量也随之提高。

AI驱动软件开发

通常,开发需要大量的时间和精力。特别是随着社会进步和各种事物变得更加复杂,创造新事物变得愈发困难。

然而,随着生成式AI的出现,这一局面正在改变。当前,得益于生成式AI强大的编程能力,软件开发正经历着一场巨变。

一个未来愿景——基于生成式AI的自主代理作为软件工程师,成为软件开发的核心——已经逐渐变为现实。

我们目前正处于一个过渡时期。虽然我们尚不能完全将开发委托给生成式AI,但巧妙地利用它,可以有力地推动软件开发。

这被称为AI驱动软件开发。

开发型开发

当生成式AI简化软件开发时,它不仅能提高最终目标软件的开发效率,也能提高辅助开发本身的软件的开发效率。

如前所述,辅助开发的成果物能够扩展开发范围,并有助于提高效率和质量。此外,如果创建得当,它们还可以在其他开发项目中重复使用。

因此,在软件开发过程中开发有用的辅助软件,最终可以提高整体效率,并且这些资产也可以用于未来的开发。

传统上,开发这类辅助开发软件在现场很常见,但它本身也需要开发时间和精力,因此需要仔细评估并有针对性地实施。

利用生成式AI,可以快速创建简单的软件来自动化小型、即兴的任务。对于流程明确的任务,生成式AI几乎可以零错误地生成准确的程序。

这使得在软件开发过程中开发辅助开发的软件比以往任何时候都更加容易。

深入思考后,一种开发风格浮现出来:在开发过程中不断开发有用的工具,从而改变开发方法本身。

我们将此称为开发型开发

要实践开发型开发,需要养成客观审视自身软件开发的习惯,思考哪些部分可以委托给软件,哪些部分只有人类能做,同时还需要具备开发这类辅助开发软件的技能。

此外,生成式AI也可以集成到这些软件工具中。通过将其嵌入软件内部,与独立的生成式AI代理不同,处理范围可以得到一定程度的缩小,并能定义清晰的路径。

虽然AI代理也能通过提示词实现类似结果,但集成生成式AI的软件通过结合程序和提示词,可以更容易地提高准确性。

如果能够实践开发型开发,那么与第一个项目相比,第二个项目在质量和成本上都会有所改善。此外,随着项目次数的增加——第三个、第四个等等——改进将持续累积。

这与仅仅使用生成式AI开发软件的方式完全不同。仅仅掌握生成式AI工具的团队与实践开发型开发的团队之间,随着时间的推移将出现巨大的差距。

重构驱动测试

有一种叫做测试驱动开发(TDD)的理念,它涉及先根据规范设计测试,然后开发软件以通过这些测试。

最初,我也曾认为,由于生成式AI使得开发自动化测试程序变得容易,测试驱动开发或许是可行的。

然而,随着我开始实践开发型开发,我逐渐认为在实现之前设计测试的方法并非总是适用。

特别是对于像Web应用程序这样的软件,它涉及用户通过交互可以体验到的主观方面,例如易用性和视觉设计,我意识到实际运行和交互软件比详细测试更重要。

这是因为如果在交互时UI/UX层面存在严重不满,则可能需要更改框架、基本架构、数据模型或用例等基础部分。

在我目前正在进行的个人软件开发项目中,我也发现功能灵活性和性能方面的问题,导致我将两个框架替换为不同的框架。

还有一个内存使用效率低下的部分,这需要对处理过程进行彻底的修改。

正是在这些重构的关键时刻,测试才首次成为一个有意识的考量。

如果这发生在开发的早期阶段,或者功能和规范无论如何都会发生重大变化,那么测试可能就没有必要。

然而,如果开发已经进展顺利,并且有许多项目需要检查,那么在重构过程中可能需要测试,以确保没有功能缺陷或遗漏。

因此,在开发进展到一定程度并需要重构时创建测试程序的想法也不错。

此时,关键在于不要为所有代码创建测试,而是将测试重点放在未来不太可能发生变化的成熟部分,而将仍然流动的、变化较多的部分不进行自动化测试。

这可以称之为重构驱动测试。

结论

生成式AI正在深刻地改变软件开发。

在之前的文章中,我曾探讨成为全栈工程师的重要性。全栈工程师不仅要超越传统全栈工程师的角色,还要能够开发结合各种领域、基础设施和执行环境的全栈系统。

我还撰文指出,我们正进入一个“体验与行为驱动开发”的时代,它侧重于通过软件行为提升用户体验,而非传统上以规范与实现对齐为核心的软件开发方法。

开发型开发和重构驱动测试正是将我们引向软件开发这些新境界的方法。