乐于分享
好东西不私藏

ChatGPT赋能软件开发︱ChatGPT软件开发

ChatGPT赋能软件开发︱ChatGPT软件开发

会议推荐

2026第二届中国AI项目管理大会

2026第十五届中国PMO大会

2026首届中国汽车企业项目管理大会

2026第五届中国项目经理大会

2026第三届中国医药企业项目管理大会

本文目录

#ChatGPT成为程序员新朋友?10个使用场景助力软件开发

#ChatGPT研究揭示:7分钟内开发软件,成本低于7元

用Chat GPT来开发软件简直太爽了

借助GPT从零开发一个软件的功能模块

浅评ChatGPT在软件开发上的辅助能力(附GPT-4对比)

一、ChatGPT成为程序员新朋友?10个使用场景助力软件开发

(数智谈)

前     言

抛开Stack Overflow不谈,开发人员有了一个新的好朋友,它就是ChatGPT。ChatGPT是由人工智能驱动的语言模型,可以理解代码,还可以用自然语言回答问题。有了它,程序员再也不用在无尽的Stack Overflow页面和评论中搜索答案,ChatGPT让“找到解决方案”变得更简单。有了ChatGPT,你可以问它报错信息到底是什么意思,马上就能得到答案,不用点击链接和整理评论。这种尖端的人工智能技术正在改变软件开发人员的游戏规则,使他们能够更快、更好、更轻松地编写代码。

本文中列举了ChatGPT在软件开发中的10个实际用例,以及如何使用ChatGPT来调试、编写代码。

01

解释代码

全世界的开发者都非常认可ChatGPT理解代码的能力。无论是弄懂自己的代码还是别人的代码,ChatGPT都能对代码的工作原理提供清晰简明的解释。 

ChatGPT可以对代码进行分析,分解出代码的作用,结构,以及可能存在的任何问题或错误。使用ChatGPT,你可以解释用不同编程语言编写的代码,即使你对它们并不熟悉。值得注意的是,ChatGPT使用的技术与GitHub的Co-Pilot相同。这意味着你可以期待高质量、准确的解释,这些解释是可以针对特定代码的。 

02

解释错误信息 

错误信息对开发者来说通常是巨大的痛苦,当没有给出明确的文档时,会造成极大的挫败感。然而,使用ChatGPT可以迅速得到自然语言的错误信息的解释。只需将错误信息复制并粘贴到ChatGPT界面,它就会为你提供一个清晰简洁的解释,说明错误的含义以及如何修复它。这可以节省在Stack Overflow或文档中查找解决方案的时间和精力。 

03

编写测试脚本

测试是软件开发的关键环节,而编写有效的测试脚本可能很耗时且具有挑战性。ChatGPT可以简化这一过程,帮助你创建高质量的测试脚本。

你可以简单地用自然语言描述你想创建的测试场景,ChatGPT会生成代码来实现测试。你可以指定测试数据、断言和其他细节,ChatGPT将生成测试脚本,可以使用流行的测试框架如JUnit或PyTest运行。这样做可以帮助你节省时间,同时还可以提高代码质量和覆盖率。使用ChatGPT还可以使你保持与最新的测试最佳实践的联系。 

04

理解遗留代码

处理遗留代码可能是令人生畏的,特别是如果它的文档不全或缺乏清晰的结构。现在,无论你是在修补遗留代码,还是只想了解它的结构,以便使用新的代码替代遗留代码,ChatGPT都会助你一臂之力。

如前所述,ChatGPT可以用自然语言分析和解释代码,这对于遗留代码库而言尤其理想。可以通过在ChatGPT中输入遗留代码的部分,得到ChatGPT的解释,解释这段代码是如何工作的和做了些什么。ChatGPT可以帮助识别代码中的模式和结构,以及解释个别功能或代码块背后的逻辑。这对于处理遗留的代码是非常有用的,因为它可以帮助你识别潜在的问题或需要改进的地方。 

如前所述,ChatGPT可以用自然语言分析和解释代码,这对于遗留代码库而言尤其理想。可以通过在ChatGPT中输入遗留代码的部分,得到ChatGPT的解释,解释这段代码是如何工作的和做了些什么。ChatGPT可以帮助识别代码中的模式和结构,以及解释个别功能或代码块背后的逻辑。这对于处理遗留的代码是非常有用的,因为它可以帮助你识别潜在的问题或需要改进的地方。 

05

提供提示和最佳实践

ChatGPT的另一个超级能力就是提供编写代码时的提示和最佳实践,这对于刚开始工作或不熟悉某些编程语言或框架的开发人员来说特别有用。 

通过提供代码片段或询问关于特定编程概念的提示,ChatGPT可以提供关于如何改进代码和最佳实践的建议。例如,对于如何正确使用Python的列表,ChatGPT就可以提供相关例子和解,还提供关于命名规则、代码组织和调试技术等方面的建议,这可以帮助开发者写出更可读、更可维护、更高效的代码。

06

代码生成/完成

ChatGPT生成代码的能力为开发人员提供了强大工具,特别是在完成重复性任务或模板代码时,凭借对各种编程语言的深刻理解,ChatGPT可以根据您的输入快速、准确地生成代码片断。 

例如,需要写一个Python脚本对一个数据集进行计算。明确数据和输出,但是不知道如何编写代码,将输入转化为所需的输出,ChatGPT可以帮助写出这方面的代码。 

使用ChatGPT,你可以通过描述任务的方式,或者通过代码来生成代码。例如,你可以问:”我有一个客户交易的数据集,我需要计算每个客户的总收入。你能编写Python代码来完成这个任务吗?” 然后,ChatGPT就会生成必要的代码来进行计算并输出。这将节省大量的时间和精力,使你能够将注意力转移到项目的其他方面。 

07

预测性分析

ChatGPT可用于预测性分析,允许开发人员预测其代码的潜在结果,而不必先运行它。这可以帮助及早发现错误,提高代码质量。 

此外,ChatGPT还可以帮助识别代码中的潜在安全漏洞。如今网络威胁越来越多,ChatGPT的预测分析功能可以帮助预知潜在风险。ChatGPT的另一个有用的功能是,模拟代码输出,而不需要真正地运行。这能帮识别潜在的问题,而不必每次都执行代码。 

08

重构建议

当在一个复杂的代码库工作时,有可能会遇到难以理解或修改的代码。重构可以在不改变其外部行为的情况下改进代码的设计。ChatGPT就是一个提供重构建议的优秀工具,它可以帮助写出更多可维护和可理解的代码。

使用ChatGPT可以提供重构一段特定代码的建议。例如,可以向ChatGPT咨询如何提高一个特定函数的性能。ChatGPT可以分析代码并提出修改建议,比如用更有效的算法替换一个循环,或者删除多余的代码。ChatGPT还可以建议设计模式,可以用它来改善代码的结构,使其更容易理解和维护。 

此外,可以用它来检测不良的代码异味或反模式,这些常见的错误会导致代码的可维护性、可读性和可扩展性方面的问题。

09

识别内存泄漏

内存泄漏是开发人员常见的头痛问题,而且特别难以捕捉和调试。当程序不再需要内存时,就会发生内存泄漏,这导致未使用的内存逐渐积累,最终导致性能问题甚至崩溃。

ChatGPT可以帮助识别内存泄漏,以免演变成更大的问题。通过执行静态分析,ChatGPT可以检测潜在内存泄漏的模式,它还可以建议修复方法,在不需要时取消对动态内存的分配。 

通过扫描代码的潜在攻击,如缓冲区溢出或基于堆的缓冲区溢出,ChatGPT还可以帮助识别安全缺陷。这可以协助确保代码免受潜在的威胁。通过使用ChatGPT,可能会主动发现并修复内存泄漏,从而使代码更稳定、更有性能。

10

橡皮鸭调试

你听说过橡皮鸭调试吗?它就是向一只橡皮鸭(或任何无生命的物体)解释你的代码,以帮助你发现代码中的错误或瑕疵。大声解释代码的过程可以帮助你发现你可能会错过的问题。
但如果你手头没有橡皮鸭子怎么办?那就使用ChatGPT作为虚拟橡皮鸭,可以用自然语言打出对代码的理解,并收到反馈和建议。即使ChatGPT未能提供解决方案,键入问题并详细解释也能帮助你更快地识别和解决问题。通过将问题细化拆分可以进一步了解问题的所在,同时可以提高编码效率和准确性。 

结     语

总之,ChatGPT是一个强大的工具,可以帮助你更快更好地完成代码的编写。无论是解释错误信息理解遗留代码,还是编写测试脚本,ChatGPT都是你的好帮手。利用自然语言界面和先进的人工智能能力,ChatGPT就好像你指尖上的编码专家。 

如果还没有使用过ChatGPT,那一定要把ChatGPT纳入你的开发工作。它能轻松地理解代码并提供解决方案,提高编码效率和准确性。

原文:ChatGPT for Debugging: 10 Practical Use Cases 

二、ChatGPT研究揭示:7分钟内开发软件,成本低于7元

(国际AI行业)

最新研究发现,像OpenAI的ChatGPT这样的人工智能聊天机器人不仅可以高效地运营一家软件公司,还能将人工干预降至最低,而且成本极为经济。
在最近的研究中,来自布朗大学和多所中国大学的研究团队进行了一项实验,探究了使用ChatGPT 3.5版本语言模型来驱动人工智能机器人是否可以在没有事先训练的情况下完成软件开发过程。
为了测试这个假设,研究者创建了一个虚构的软件开发公司,名为ChatDev。他们采用了瀑布模型,一种按照顺序进行软件开发的方法,将开发过程分为四个阶段:设计、编码、测试和文档。
然后,研究者通过提供“关键细节”来为每个人工智能机器人分配特定的角色。这些“关键细节”包括“指定的任务和角色、通信协议、终止标准和约束”。一旦机器人获得了这些关键细节,它们就被分配到各自的开发阶段。例如,ChatDev的“CEO”和“CTO”在“设计”阶段工作,“程序员”和“美术设计师”在“编码”阶段工作。在每个阶段,人工智能工作者通过最少的人工输入相互协作,完成了软件开发过程的特定部分,从决定使用哪种编程语言到识别代码中的错误,一直到软件完成。
研究人员进行了一系列实验,测试ChatDev在不同软件场景下的表现,并进行了详细的分析,以了解ChatDev完成各种类型软件所需的时间以及每个软件的成本。
举例来说,研究人员要求ChatDev“设计一个基本的五子棋游戏”,这是一种抽象的策略棋盘游戏。在设计阶段,CEO要求CTO“提出一种具体的编程语言”,以“满足新用户的需求”,而CTO选择了Python。CEO随即表示:“太棒了!”并解释说,Python的“简单性和可读性使其成为初学者和经验丰富的开发人员的首选”。
随着CTO的回应“让我们开始吧”,ChatDev进入了编码阶段,CTO要求程序员编写一个文件,然后程序员要求设计师为软件提供一个“漂亮的图形用户界面”。这样的对话链在每个开发阶段都会重复,直到软件开发完成。
在完成了70个任务后,研究发现,这家由人工智能驱动的公司平均只需要不到七分钟,成本不到一美元就能完成整个软件开发过程,并且通过其“记忆”和“自我反思”能力,能够识别和解决“潜在漏洞”。论文指出,大约有86.66%的生成软件系统表现为“完美执行”。
研究人员在论文中写道:“我们的实验结果证明了CHATDEV驱动的自动化软件开发过程的效率和成本效益。”
这项研究的结果表明,像ChatGPT这样的强大生成式人工智能技术可以在多种任务领域发挥作用。然而,研究人员也发现了一些局限性,比如语言模型中的错误和偏见,这可能会在软件开发过程中引发问题。尽管如此,研究人员表示,这些发现“可能会对现实世界中的初级程序员或工程师有所帮助”。

三、用Chat GPT来开发软件简直太爽了

(原创 义轩 轩哥谈芯)

最近想用微信小程序的蓝牙功能来实现在硬件的串口调试功能,但是本人的JavaScript经验是在10年前写过一个不大不小的无人机地面站项目。

如今在小程序中不知道多了多少特性,同时还有未知的XML和CSS等UI相关的语法需要了解,实际是一直驻足不敢往前迈步的,终于让我想到了chatGPT,这下可以大步往前迈进了。

一 简单的编程问题

最早我的调试软件都是使用C#进行开发的,开发的很多思维还都是使用的单片机的 C 语言的开发思维,比如从一个缓冲区中取出一段数据作为一个完整的数据包,即便我用 C#,写法依然是 C语言的样子:

// 从数组 buff 中截取一部分形成一个新的数组voidextractSubarray(int* buff, int startIdx, int lengthint* frame){for (int i = 0; i < length; ++i)     {        frame[i] = buff[startIdx + i];    }}
chatGPT 会提供给我们两种方法,并用示例的方式给出调用,最后还会附上解释,相当的专业。
面对高级语言中的千变万化的新特性,我再也不需要去啃 API 文档,也不需要去什么 MSDN 上去查资料了, 这是 chatGPT 给我的第一个助力,他让我不再畏惧任何新语言的基础学习。
再比如,我开发小程序的时候,界面的搭建非常苦恼,百度或者谷歌搜起来其实挺费精力的,往往一篇文章还需要看完后在进行分析哪些是自己要用的,哪些是对当前问题没有意义的干扰信息,而有了 chatGPT,这些问题都迎刃而解。
我对于 XML 语言是没有基础的,我的初始页面是这样子:
我想在这个下面增加一个按键和进度条,以及一个 log 输出的窗口用于做一下数据 download 功能,于是我直接问 chat GPT:
最后我根据 ChatGPT 的代码实现了如下图的效果,ChatGPT 简直就像一个老师一样,为我们考虑的很周全,每一个问题他都会给出示例,并且解释原理,这样在一个项目的开发过程中就可以现学一门语言,虽说到不了精通,至少解决问题是绝对能够胜任的。

二 算法实现

上面讲的都是问ChatGPT 的一些编程的基础问题,或者说这些都是可以从资料中可以查询到的,接下来我们就迈入了 ChatGPT 智能的领域了。
首先我想实现一个串口的数据包解析。

三 语言的转换

下面我们来看看更好的用法,这就类似于 AI绘画中的垫图的思想,我虽然 JavaScript 语法忘记了,能力很菜,但是我C语言很熟练,我可以先把 C语言的程序写好,然后让 ChatGPT 给我翻译成 JavaScript,最后我只需要复制粘贴就大功告成了。
我用 C语言实现了一个 CRC16 的校验和计算程序,我需要移植到 JavaScript 上面:
uint16_tcalculateCRC16(constuint8_t* data, size_t length){uint16_t crc = 0xFFFF;for (size_t i = 0; i < length; ++i)     {        crc ^= (uint16_t)data[i] << 8;for (int j = 0; j < 8; ++j)         {if (crc & 0x8000            {                crc = (crc << 1) ^ CRC16_POLYNOMIAL;            } else            {                crc <<= 1;            }        }    }return crc;}
现在我就给 ChatGPT 发命令了:
用这种“垫”程序的方法,我们只需要精通一门语言,就可以通过 ChatGPT 在瞬间触类旁通了,以后再也不会因为多学一门语言而犯愁了。

四、借助GPT从零开发一个软件的功能模块

(原创 AI日课 AI日课)

本文主要讲如何借助GPT从零开发一个软件的功能模块,适合做开发的同仁看看,主要从需求分析、数据库建模、接口文档撰写、后端代码实现、单元测试这五个方面进行讲述,其实每个部分如果拿出来都可以单独写篇文章,这里主要还是提供一个思路,具体大家有需求的可以自行扩展。

一.前言

首先,我们问一下GPT,软件开发的整体流程

然后,我们找出其中核心的几步,借助GPT来辅助我们设计开发。这里我们以登录模块为例,因为大家都知道,一个软件或者系统也是由一个个的功能模块实现的,把一个功能模块实现了,其他的模块只是实现的功能不同,实现思路也是大同小异,如果一次性实现一个大的系统,由于涉及的内容过多,反而会没有重点,不利于大家的理解。

这里我直接问GPT:

我现在要做一个登录模块,希望你从需求分析、数据库建模、接口文档、代码实现、单元测试这五个方面分别描述一个登录模块需要实现的内容

然后,针对每一部分单独提问,生成我们需要的内容

二.需求分析

针对以上内容中的需求分析部分,帮我生成一个登录模块的PRD,包括概述、用户使用流程、相关页面、功能详细描述、流程图、类图等。

三.数据库建模

针对上述内容中的数据库建模部分,我希望你针对登录模块的功能,按照业内数据库建模规范和最佳实践给我写一份数据库建模表格文档,包含表名、列名、数据类型、约束条件、描述、枚举值(用数字代替),ID不是自增,使用雪花ID算法生成,标准字段:create_time、update_time、deleted,我的数据库是MySQL8,相关的字段comment注释、表comment注释、需要建立索引的也需要加上,建表语句和索引语句也请告诉我。

四.生成接口文档

接口文档记录了API的用法和限制,确保客户端和服务器端正确地交互,提高代码重用性和可维护性。

按照前面生成的表结构来分析,如果需要你设计一份标准的登录模块的基于RESTful接口文档,每一个接口都需要

进行分析和论证必要性和设计合理性,请列出所需的接口。要求:返回OpenAPI规范JSON格式,描述信息需要中文

以下是这些接口的OpenAPI规范JSON格式的一个示例概要:{"openapi""3.0.0","info": {"title""登录模块API","description""为登录模块提供的RESTful API接口。","version""1.0.0"        },"paths": {"/login": {"post": {"summary""用户登录","description""用户使用用户名和密码进行登录。","requestBody": {"required"true,                  "content": {"application/json": {"schema": {"type""object","properties": {"username": {"type""string"                               },"password": {                                "type""string"                              }                            }                       }                   }                }            },"responses": {"200": {"description""登录成功"               },"401": {"description""认证失败"               }          }      }    },"/register": {"post": {"summary""用户注册","description""新用户注册。","requestBody": {"required"true,"content": {"application/json": {"schema": {"type""object","properties": {"username": {"type""string"                  },"password": {"type""string"                  },"email": {"type""string"                  }                }              }            }          }        },"responses": {"200": {"description""注册成功"          },"400": {"description""请求参数错误"          }        }      }    },// 其他接口的定义类似  }}

五.完成后端服务

接下来我们就进入开发环节,我希望的技术栈是使用PHP的laravel框架进行开发,你可以一步一步教我如何搭建一个项目吗?请帮我实现上述中的用户登录接口

六.单元测试

做过开发的朋友都知道,其实单元测试是非常耗费时间的一个环节。有时候开发一个功能可能1小时就能完成,但写单元测试可能会远超开发时间,现在有了GPT,单元测试就so easy了!

针对上述的login方法,帮我写一个单元测试用例,要求:核心代码需要加上适当的中文注释。

五、浅评ChatGPT在软件开发上的辅助能力(附GPT-4对比)

(书圈)

01

背景

ChatGPT于去年正式公测后,凭借其强大的自然语言处理能力迅速获得业内广泛关注,特别是辅助软件开发上,初步表现出了令人满意的能力,然而正当业内积极探索引入ChatGPT后的新工作模式之时,OpenAI又发布了基于GPT-4架构的升级版本,在语言理解、逻辑推理、情感分析等方面赋予了ChatGPT更优的表现,甚至引入了多模态的能力。这一升级让人印象深刻的同时,也让人对ChatGPT的能力有了更多的不确定:

– ChatGPT 在软件开发上究竟能提供多大的辅助?

– 在GPT-4的加持之下,ChatGPT在软件开发辅助上的表现是否真的更加优秀?

– 传统软件开发究竟又会因此发生怎样的变化?

    带着这些疑问,我们以两个前后端分离的本科课程项目为素材,以具体的项目场景为背景,对ChatGPT在软件开发上的辅助能力进行了简要的测评。

    (注:为方便行文,后文提及的GPT-3.5指“基于GPT-3.5的ChatGPT”,GPT-4则指“基于GPT-4的ChatGPT”。)

02

需求生成

    第一部分,我们模拟一个从零开始的开发场景,开发者只有一个关于目标系统的基础概念,将需求分析和细化工作全部交给ChatGPT生成。为了结果尽可能细致,我们在prompt时加入了功能和非功能性需求的拆分。

▲ 对目标系统的概念描述

▲ GPT-3.5生成的功能性需求

▲ GPT-4生成的功能性需求

    仅从功能性需求上看,双方的答复整体没有太大偏差,GPT-3.5的结果更加详细,GPT-4的结果相对比较“概括”,与我们问题中的“尽可能完善”有一定出入。

▲ GPT-3.5生成的非功能性需求

▲ GPT-4生成的非功能性需求

    在非功能性需求上看,GPT-4的结果涉及的内容更加丰富,但缺点是内容与教务系统场景结合并不紧密,反而是GPT-3.5考虑到了实际的业务场景。例如关于高并发,GPT-3.5提到“能够在繁忙的选课期间保持稳定的性能”,而GPT-4只是笼统地说“系统应能在高并发场景下正常运行”。

03

需求细化

    第二部分,我们模拟实际开发过程中收到初步需求描述,需要进一步细化进行开发和验收的场景。

我们给定一个较为具体的需求描述,要求chatgpt根据该描述进行需求的条目化,同时还要求其识别出尽可能多的用户故事,并写出相应的验收标准。

3.1 基于简单需求描述进行细化

     我们提前告知ChatGPT对后一段文字进行需求的识别和条目化,然后将项目的初步需求描述分别喂给GPT-3.5和GPT-4,获得以下结果:

▲ 项目初步需求描述

▲ GPT-3.5的需求分解

▲ GPT-4的需求分解

    从结果观察,GPT-4生成的条目更多,对有些需求进行了更细粒度地拆分,对于相同需求的描述也显得更为简单。例如GPT-3.5回复的第二条座位签到功能,在GPT-4生成的结果中被细分为了4、5、6三条。

    但是需要注意的是,GPT-3.5和GPT-4都存在需求遗漏的情况。例如GPT-3.5的结果中缺少关于“靠近插座的座位应该有特殊标记”的需求,GPT-4的的条目化结果中忽略了“预约必须以整点为单位”这个较为重要的约束。

3.2 基于需求识别用户故事

   做完初步需求分析后,我们尝试让ChatGPT生成用户故事,进一步分解任务的细节:

▲ GPT-3.5生成的用户故事

▲ GPT-4生成的用户故事

    从结果上看,GPT-4表现得要比GPT-3.5要丰富和细致,值得注意的是GPT-4在用户故事中使用了第一人称“我”而不是第三人称来进行讲述,或许正是基于这一点,它能够更加“体会”需求中的一些人性化成分,比如第11条的故事中讲述道:“我希望能够清楚地看到靠近插座的座位”,这十分贴合我们日常学习生活中的想法和感受。

    此外,前一轮分析中的遗漏在这里的影响也进一步扩大,ChatGPT构建的系统中似乎彻底遗忘了原始需求中的一部分要求,如果缺少人为检验,这部分的缺失会引起较多后续问题。

3.3 基于需求制定验收标准

   在需求上的最后一步尝试时让ChatGPT为我们生成对应需求的验收标准。

▲ GPT-3.5生成的验收标准

▲ GPT-4生成的验收标准

   从验收标准来看,GPT-3.5是以模块为最小单位,而GPT-4的结果粒度更细,更易直接实施。

04

编码辅助

  第三部分,我们模拟项目的迭代场景,在项目出现新的需求或挑战时,考察ChatGPT能否在现有的项目代码基础之上直接为我们生成可用代码及必要的辅助提示。

    我们主要考虑以下三个问题:1.给定一段较长的功能性需求的文本,让其进行代码生成以满足需求。2.向其询问非功能性需求的具体实现方式。3.给定部分已经实现的功能性代码,要求其添加非功能性优化代码。

4.1 根据功能性需求生成代码

▲ 项目功能需求描述

     我们给定了上方这段很长的功能性需求描述,要求ChatGPT直接为我们生成代码,尝试它是否具备跨文件设计系统的能力。

▲ GPT-3.5的答复

      GPT-3.5在这个问题上打了太极,回避了直接生成代码,只用自然语言进行了一部分步骤描述,这自然不是我们所期待的,于是我们尝试针对某一需求进行更加细致的提问:

▲ GPT-3.5生成的代码

任务细化后,GPT-3.5就用户模块的内容生成了具体代码,并且按照文件和架构拆分为了controller、service、dao三部分,符合Spring框架的开发习惯,几乎是拿来即用的。

    而在GPT-4上进行相同的尝试,我们发现GPT-4在面对最初的长篇需求时,就直接按照要求进行了代码的生成。

GPT-4不仅进行了完成了从需求分析、设计、实体抽取到代码框架的编写,而且以用户模块为例,展示了controller层和service层的具体写法,相较于GPT-3.5,还考虑到了service层的接口和实现,内容非常细致。以它呈现的大体框架为出发点,还可以针对相应的部分进行进一步的代码生成,逐渐形成系统级别的代码。

▲ 要求生成其他模块的代码

    这里值得注意的是,在进行进一步提问以获取更加详细的功能代码时,需求描述应尽量清晰。例如即便第一轮提问已经涉及了全部功能,但要求ChatGPT实现具体功能代码时,列出需要实现的具体功能名称(例如提问”能否给出个人信息维护、学院/专业信息维护的具体实现代码“)比简单使用代词(例如提问”能否给出上述功能的具体实现代码“)的效果要更好。

    现在我们已经得到了ChatGPT为教务管理系统生成的一个大体的代码框架,接下来我们将在IDEA中新建一个Maven项目,并把这些代码放入相应的java文件中观察代码是否存在错误,并且根据代码来让ChatGPT回答、解决相关的问题。

▲ 项目目录

    首先观察Controller中的代码,在此过程中,我误将其中的ResponseEntity认为是一个自定义的实体类,故而在此我要求其生成一个ResponseEntity实体类。但ChatGPT没有受到我的“误导”,而是纠正了我的错误,同时解释了该实体类该如何使用。

▲ ChatGPT并没有受到“误导”

    在按照它的建议导入完包之后,各个Controller类本身便不存在问题了,现在需要将目光投向Service类。在之前的过程中ChatGPT只为我们生成了UserService及UserServiceImpl,所以还需要生成Major与College的Service接口及其实现类:

▲ GPT-4生成的回复

    这里生成的代码出了一些问题,在CollegeController中存在一个if判断:

▲ CollegeController中的if判断

    所以deleteCollege方法应当返回一个布尔值,但其生成的代码却不返回值,看起来就像ChatGPT“不记得”之前写过的代码,没有做到前后对应:

▲ 生成的错误返回值代码

    我们对ChatGPT的错误进行了纠正,并让它重新生成了回复,这次生成了正确的代码:

▲ GPT-4纠正后的回复

    就生成的代码,我们提问了依赖相关的问题,ChatGPT为我们生成了导入依赖的代码:

▲ GPT-4关于依赖的回复

    但是ChatGPT生成的测试代码中使用的是像@RunWith这样的JUnit4中的注解,而它却让我们添加的却是JUnit5的依赖,经过提醒后它对结果进行了修正:

▲ GPT-4纠正后的回复

    总体来看,当ChatGPT收到一个较为宏观、复杂度较大的需求时,它通常可以从整体上对其作出分析,并能够在框架上生成出代码,但是这些代码可能不够完整、正确、缺少必要的依赖,不能直接拿来运行,而是需要根据开发者进一步的询问来逐渐引导其生成粒度更小的代码片段或代码文件、或是询问其所需要的依赖。但是在这个诱导的过程中,ChatGPT可能会“遗忘”之前生成过的代码,造成如方法名、方法返回值前后不一这样的问题,譬如在上面的过程中另外还发现CollegeController 中调用了collegeService的createCollege方法,但ChatGPT却在此次生成时把createCollege方法替换(更名)成了saveCollege方法;也会有依赖版本不对应这样的问题,但如果开发者注意到了问题并提醒ChatGPT,那么它就能意识到并尝试纠正这些问题。

4.2 在现有代码上迭代新需求

我们尝试在一个现有系统上添加一些非功能性优化,首先询问ChatGPT关于优化的措施与具体代码,再让它将这些代码直接嵌入我们现有的系统中。

▲ GPT-3.5的优化建议

▲ GPT-4的优化建议

     在理论性的知识上,双方都可以出了很多可行的措施,相较之下,GPT-4给出的建议更丰富、更具统领性。针对双方建议中都提及的缓存,我们要求给出具体的代码:

▲ GPT-3.5的回复

▲ GPT-4的回复

     尽管GPT-3.5给出的结果已经让人很满意,但是GPT-4依然胜在给出了详细的配置缓存的步骤,说明其考虑到了实际开发中代码以外的因素。

4.3 基于现有代码直接修改

   最后一步,我们给出了一段实际的代码,要求chatgpt在原来代码的基础上添加缓存功能。

▲ 给定现有代码要求加入缓存

▲ GPT-3.5的答复(代码有省略)

▲ GPT-4的答复(代码有省略)

GPT-3.5和GPT-4都能以不同的方式为代码添加缓存机制,但是GPT-4考虑得情况更加多变,几乎生成了一篇关于缓存机制的示例博文。例如它考虑移除过多的缓存条目可能会对性能有较大影响,因此给用户提供了另一个选择。

05

总结

    总体上说,在我们结合实际项目的上手体验后,认为GPT-4和GPT-3.5在通用知识上的能力是比较一致的,都可以生成可解释性很强的回答,准确性也非常高,相较于传统的大模型而言,ChatGPT的能力是遥遥领先的。而GPT-4相较于GPT-3.5的主要优点可能在于它在保留了通用知识的高准确性的同时,能够考虑更多任务中的细节,并更适配具体的场景。对于开发人员来说,这种能力可以帮助他们快速地将ChatGPT接入自己项目的特定上下文中,并且生成更可靠的代码。

    此外,我们也总结出了一些其他实践经验和感受。

5.1 提示质量对于ChatGPT性能的影响

    ChatGPT可以为程序员编写代码提供强有力的帮助和支持已经是软工领域的共识。然而,我们发现,ChatGPT能够提供多大的帮助,很大程度取决于提问的方式和提示的质量。

1. 精准的需求描述

   在提出问题之前,提问者需要仔细地考虑问题的范围和具体需求。无论是期望使用的语言,框架,还是期望实现的功能或非功能代码,都应尽可能详细地进行描述,避免使用较为笼统的词汇和指代不明的代词,以便ChatGPT能够根据这些提示产生更加准确的回答。

2. 划分子任务,提问由浅入深

   提问者需要擅长拆解问题,将一个庞大的项目拆解成为一个个需求明确的小任务,提问时问题需要由浅入深,由粗到细,才能一步步引导ChatGPT给出更加具体切实的回答。

   从4.1的尝试结果中我们可以看出,如果一开始将一个完整的大项目直接让ChatGPT完成,ChatGPT只能给出较为通用笼统的答案,GPT-4的表现好于GPT-3.5,但依然无法一次性生成项目所需的全部代码。因此,提问时应该先将背景信息提供给ChatGPT,再在此基础上让ChatGPT依次实现拆解后代码量不大的的子任务,以此引导ChatGPT提供最大限度的帮助。

3. 提问“刨根问底”

提问者想要得到尽可能详细和准确的答案,还需要发挥”刨根问底“的精神。一方面,从我们的尝试中可以看出,很多代码细节ChatGPT并不会在一开始就给出,但通过不断追问细节,ChatGPT其实有能力给出非常具体的回答。此外,ChatGPT生成的内容不一定总是正确的,如果对生成的内容有质疑,可以直接向ChatGPT提出,让其进行解释或引导它更正回答,而不要盲目轻信。

因此,为了最大限度发挥ChatGPT的优势,未来程序员需要具备精准详细提问、拆解问题以及逐步深入引导ChatGPT生成具体代码的能力。只有这样才能与ChatGPT高效合作,共同完成软件开发任务。

5.2 ChatGPT的不足

1.无法支持复杂软件的端到端开发

    从4.1的尝试中可以看出,从自然语言的需求描述到最终可以编译运行的代码中间,需要不断的细化提问。ChatGPT更偏向于给出一个代码实现框架,内部很多具体的方法和所需依赖都难以一次性生成,而需要提问者在实际编译运行中不断发现问题,进一步细粒度提问。但在进一步诱导生成更细粒度代码的过程中,ChatGPT可能会“遗忘”之前生成的代码(例如随着轮次的增加,ChatGPT新生成的代码变得不符合之前轮次中所生成的代码上下文)。因此,目前ChatGPT对于软件开发的辅助仍然难以达到完全端到端的程度,软件开发的”最后一公里“仍然需要程序员自身不断进行调试修改与完善。

2. 具有较大随机性。

相同的问题,多次提问ChatGPT后产生的回答可能截然不同,总体来说生成结果具有较大随机性,这对于一些想要利用ChatGPT进行的科学研究可能存在一定程度的影响。例如,如果想要研究不同提示模板对于生成内容的影响,可能无法确定是提示模板更换带来的生成效果改善,还是单纯随机生成的结果。

3.无法保证正确性。

    “一本正经地胡说八道”是很多人诟病ChatGPT存在的问题,这一问题目前仍然没有得到很好的解决,即使是GPT-4生成的内容也依然无法保证正确性。这就要求利用ChatGPT辅助软件开发的程序员自身拥有一定的背景知识和项目理解,仔细评估ChatGPT的回答,并进行必要的修改和调整,以确保生成的代码符合实际需求。

复旦大学 CodeWisdom团队

作者丨杜雪盈 字千成 刘俊伟

排版丨刘俊伟

审核丨彭鑫 娄一翎 刘名威


本公众号声明:

1、如您转载本公众号原创内容必须注明出处。

2、本公众号转载的内容是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请作者或发布单位与我们联系,我们将及时进行修改或删除处理。

3、本公众号文中部分图片来源于网络,版权归原作者所有,如果侵犯到您的权益,请联系我们删除。

4、本公众号发布的所有内容,并不意味着本公众号赞同其观点或证实其描述。其原创性以及文中陈述文字和内容未经本公众号证实,对本文全部或者部分内容的真实性、完整性、及时性我们不作任何保证或承诺,请浏览者仅作参考,并请自行核实。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » ChatGPT赋能软件开发︱ChatGPT软件开发

评论 抢沙发

3 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮