购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 软件工程3.0

在技术突破和创新方法的推动下,软件工程发展得越来越快,而最近的突破就是GPT-4等人工智能(AI)语言大模型的出现。GPT-4的诞生,大家都很震惊,尤其惊讶于从GPT-3到GPT-4的进化速度。GPT-4是一种基于RLHF(Reinforcement Learning from Human Feedback,人类反馈的强化学习)和多模态的语言大模型,比其前身 GPT-3.5 有显著的改进。GPT-4 具有强大的识图能力,文字输入限制提升至2.5万字,问题回答的准确性显著提高。因此,GPT-4能够执行一系列复杂的任务,如代码生成、错误检测、软件设计等。正如,谷歌工程主管在文章《程序员的职业生涯将在3年内被AIGC终结》中的观点:“ChatGPT和GitHub Copilot预示着编程终结的开始”“这个领域将发生根本性的变化”“当程序员开始被淘汰时,只有两个角色可以保留:产品经理和代码评审人员”,这篇文章是在GPT-4发布前写的,而真正的GPT-4要强大很多,对软件开发的影响会更为显著。

考虑到软件工程的发展速度,在不久的将来,甚至从今天开始,AI就开始逐渐接手一些软件开发的工作。随着将GPT-4+(指GPT-4及其未来升级的版本)融入软件开发生命周期中,开发人员的使命将会发生变化,因为GPT-4+重新定义了开发人员构建、维护和改进软件应用程序的方式。之后的软件开发会依赖这种全新的语言交流方式(类似于ChatGPT),让这类工具理解开发人员交代的任务,自主完成软件开发,如理解需求、自动生成UI、自动生成产品代码、自动生成测试脚本等。此后,开发团队的主要任务不再是写代码、执行测试,而是训练模型、参数调优、围绕业务主题提问或给出提示。因此,我们说GPT-4将开启“软件工程3.0”新时代,2023年是软件工程3.0的元年,软件工程3个时代的划分如图2-3所示。

图2-3 软件工程3个时代的划分

先看看GPT-4自己是如何说的,如图2-4所示。但笔者经过简单的实验,认为它能做的事比它说的要多。

下面展示目前GPT-4在软件开发领域所能做的一些工作,顺着这条思路我们想象一下软件工程3.0是怎样的一番景象:一些大厂之前有好几万名开发人员,未来可能只有几千人;借助其强大的私有云平台,软件开发效能可以真正实现十倍增长,降本增效不再是公司的核心问题(因为已经得到了彻底解决)。

图2-4 GPT-4在软件工程上的能力

1)软件需求获取、分析与定义

GPT-4 在需求获取、需求挖掘、需求分析和需求定义的各个环节,都能扮演比较重要的角色,可以基于用户评论数据挖掘软件需求和应用场景,帮助我们完成需求建模或做出决策,最终生成需求文档,如图2-5所示。虽然GPT-4不能完全解决需求工程中所有的问题,但能帮助我们节省60%以上的工作量。

图2-5 GPT-4在需求分析上的能力

GPT-4可以基于简单的描述帮我们完成基本功能分析,如图2-6所示。

图2-6 GPT-4基于描述进行基本功能分析

进一步,GPT-4也可以基于需求生成验收标准,如图2-7所示。

图2-7 GPT-4基于需求生成验收标准

还能根据需求验收标准生成 BDD(Behavior-Driven Development,行为驱动开发)标准的GWT(Given-When-Then)格式的需求,如图2-8所示。

图2-8 基于需求验收标准生成BDD标准的GWT格式的需求

2)软件设计与体系结构

GPT-4 通过提供建议、识别设计模式、分析和优化软件体系结构,以及分享最佳实践和框架方面的知识,为软件开发人员(如架构师)提供有价值的帮助,从而帮助他们做出明智的决策、选择最佳的体系结构并制定健壮的解决方案,即创建可伸缩、可维护和高效的软件解决方案,以满足软件的特定需求。此外,GPT-4 可以促进不同设计选项的评估和比较,确保开发人员选择最合适的演化路径。具体地说,GPT-4在软件架构设计上可以通过以下几种方式帮助软件开发人员。

(1)提供建议:根据需求和约束等自然语言输入对软件架构提供建议,这些建议可以帮助开发人员针对待开发软件架构做出明智的决策。

(2)识别设计模式:根据自然语言输入识别软件架构中的常见设计模式,帮助开发人员识别潜在的问题并改进软件的整体设计。

(3)分析和优化软件架构:通过分析软件架构并根据自然语言输入提出优化建议,帮助开发人员改进其软件的性能、可伸缩性和可维护性等。

(4)知识共享:提供有关软件体系结构的最佳实践、模式和框架的信息,帮助开发人员跟上软件体系结构的最新趋势,提高在该领域的整体水平。

随着多模态技术的发展,大模型GPT-4可以直接读入设计草图,或帮助我们理解图形用户界面、解答关于UI设计的问题,并提供设计建议,帮助我们做出更好的设计。

3)代码生成和优化

在编程上,大模型更擅长代码生成、代码补全、代码评审、代码优化等工作。由于开源代码的数据量大、质量高(毕竟要符合代码语法和代码规范),因此模型生成内容的质量自然很高,符合“高质量输入、高质量输出”的标准。

GPT-4 能根据自然语言输入的需求及其上下文生成代码,而且可以用不同的编程语言生成相应的代码段、API(Application Programming Interface,应用程序接口),甚至整个软件模块。它可以帮助开发人员轻松创建复杂的应用程序,甚至还可以帮助他们按敏捷开发模式推崇的 TDD(Test-Driven Development,测试驱动开发)方式完成代码的实现,并支持快速原型化和概念验证开发。这样可以极大地减少人工编码所花费的时间和精力。

4)测试用例和测试代码等生成

作为一种人工智能语言模型,GPT可以基于自然语言输入生成测试用例,这些测试用例涵盖了基于所接收到的自然语言输入的广泛场景,甚至可以帮助识别需要测试的边缘情况和潜在的边界条件,以确保软件能充分地满足需求。虽然它不能保证能生成所有可能的测试用例,但大量的实验表明这方面的效果不错,可以详见在“软件质量报道”公众号上发表的文章《又一次被震惊:从生成和细化需求到应用各种方法设计测试用例》,文章中展示了GPT-4可以基于需求生成测试用例,并通过提示让GPT-4不断补充或完善测试用例,而且还可以让GPT-4基于不同的设计方法(如等价类划分、边界值分析、决策表、因果图、正交试验法等)生成测试用例。例如,利用正交试验法,列出因子、水平数,选择一个L9(3 2 )正交表,生成8条测试用例。虽然GPT-4不能画因果图,但能正确地运用这种方法生成有效的测试用例,如下所示。

因果图方法是一种测试设计技术,通过分析输入条件和输出结果之间的因果关系来设计测试用例。以下是使用因果图方法为文章发布功能设计的测试用例。

1.确定输入条件(因子):

1)标题:有效/无效(超过长度限制)

2)摘要:有效/无效(超过长度限制)

3)正文:有效/无效(超过长度限制)

4)标签:有效/无效(超过长度限制)

5)封面图片:有效/无效(非图片格式或超过大小限制)

2.确定输出结果:

1)发布成功提示信息

2)发布失败提示信息

3)生成的文章详情

3.分析输入条件与输出结果之间的因果关系,并设计测试用例如下。

测试用例1:正确的标题和正文

● 输入:有效标题,有效正文

● 输出:发布成功提示信息,生成的文章详情

测试用例2:标题超过长度限制

● 输入:无效标题(超过长度限制),有效正文

● 输出:发布失败提示信息

测试用例3:正文超过长度限制

● 输入:有效标题,无效正文(超过长度限制)

● 输出:发布失败提示信息

测试用例4:有效摘要

● 输入:有效标题,有效正文,有效摘要

● 输出:发布成功提示信息,生成的文章详情包含摘要

测试用例5:摘要超过长度限制

● 输入:有效标题,有效正文,无效摘要(超过长度限制)

● 输出:发布失败提示信息

测试用例6:有效标签

● 输入:有效标题,有效正文,有效标签

● 输出:发布成功提示信息,生成的文章详情包含标签

测试用例7:标签超过长度限制

● 输入:有效标题,有效正文,无效标签(超过长度限制)

● 输出:发布失败提示信息

测试用例8:有效封面图片

● 输入:有效标题,有效正文,有效封面图片

● 输出:发布成功提示信息,生成的文章详情包含封面图片

测试用例9:无效封面图片

● 输入:有效标题,有效正文,无效封面图片(非图片格式或超过大小限制)

● 输出:发布失败提示信息

通过基于因果图方法设计的这些测试用例,我们可以全面地测试文章发布功能。如果您还有其他需求,请随时告诉我。

生成测试脚本也是GPT-4的强项,在SauceLabs的文章“ChatGPT for Automated Testing:From Conversation to Code”(《自动化测试使用ChatGPT:从对话到代码》)所介绍的实验中,可以让GPT-4生成谷歌站点测试的脚本。虽然提示中没有明确说明要在网站上测试什么,但ChatGPT仍然生成了一个脚本来测试谷歌网站的主要功能之一——“搜索功能”,甚至正确识别出谷歌搜索栏的名称“q”。进一步,这个实验指示ChatGPT可以为元素定位器使用页面对象模型和类变量,还可以生成与某工具平台(如Sauce Labs)兼容的测试脚本。最后,ChatGPT可以消除测试脚本中的硬编码(如 URL、用户名“username”和密码“password”),从场景特性文件中获取变量,即参数化脚本(数据驱动脚本),使脚本更容易被维护,如图2-9所示。

将测试脚本从一个平台迁移到另一个平台也是大模型的强项,如同翻译,例如GPT-4比较轻松地完成测试脚本从Cypress 迁移到 Playwright。

图2-9 ChatGPT写出参数化(数据驱动)的测试脚本

5)错误检测和解决

GPT-4 在代码分析和理解方面的能力使其成为检测和解决软件应用程序错误非常有价值的工具。通过仔细检查代码片段和理解上下文,GPT-4 可以识别错误并给出最佳解决方案,甚至可以为现有问题生成补丁。这种功能极大地加快了调试过程,并确保软件产品更加可靠和安全。此外,GPT-4可以与持续集成和持续部署(CI/CD)流水线集成,以增强自动化测试并促进持续地交付软件,如图2-10所示。

图2-10 CI/CD集成GPT-4能力的截图

6)协作和知识共享

在当今快节奏和相互关联的开发环境中,协作和知识共享比以往任何时候都更加重要。GPT-4 通过在团队讨论、头脑风暴会议和代码审查期间提供实时帮助,能形成会议纪要和总结,能理清楚逻辑和发现问题,并提供有价值的见解和建议的替代方法,甚至能从其庞大的知识库中提供相关示例。这种人工智能驱动的协作提高了团队生产力,培养了团队持续学习的文化,并为创新铺平了道路。 q6E7a0cXE6xMBN4gmBuIDinVa9LasnYOjYRXgTcQ1+9Iei5Ab/yjEKf2RudU6aTA

点击中间区域
呼出菜单
上一章
目录
下一章
×