AI辅助编程9调试、测试和部署

pythontesting 2024-06-26 08:13:00 阅读 62

9调试、测试和部署

调试、测试和部署是软件开发中经常被忽略的部分。从发现不同的错误,到编写人们可以真正理解的文档,再到确保你的代码发挥了它应有的作用,这都是一本指南。我们还将深入探讨如何顺利合并更改,如何使软件运行平稳安全,如何听取用户的意见,甚至如何在发布时引起轰动。

9.1 调试

在创建代码时,开发人员会将大约 35% 到 50% 的时间花在调试上。这不仅浪费时间。它还会占用软件项目的一大笔预算。

错误主要有两种类型。首先是语法错误。当你的代码不遵守语言结构规则时,这些错误就会出现。它可以简单到忘记在 for 循环末尾添加冒号。像 VS Code 这样的现代集成开发环境可以检测并修复许多此类错误。

其次是逻辑错误。这类错误比较棘手,因为它们会在逻辑出现偏差时发生。例如,假设您创建了一个程序,根据年龄从列表中筛选出成年用户。唯一的问题是,你的代码并没有排除所有 18 岁及以上的用户,而是错误地排除了 18 岁以下的用户。因此,你最终得到的是一个满是成年人而不是青少年的列表。这种混淆是逻辑错误的典型例子。你的代码正在做与你的初衷完全相反的事情。要找出代码为何标记 18 岁以下人群,而不是 18 岁及以上人群,是一个相当棘手的问题。解决方法可能是快速调整年龄条件,也可能是重新思考整个逻辑。

无论如何,使用人工智能辅助编程工具并不是一开始就应该调试的。通常情况下,使用传统方法就可以了。VS Code 提供了强大的调试功能,可以检测并解决问题。毕竟,你可以轻松设置断点来检查变量值,逐行查看代码,了解到底发生了什么。特别是在大型程序中,这些功能简直就是救星。

当然,有些错误也会让人大跌眼镜。现代软件通常是一个复杂的拼图,有许多层次和部分必须协同工作。有时,错误的出现是因为这些部分以意想不到的方式相互作用,而找出问题的真正症结则是一项真正的挑战。还有文档问题,或者说缺乏文档的问题。如果软件没有附带清晰的说明或解释,就很难理解它应该如何工作,这使得查找和修复错误变得更加困难。您的软件通常依赖于外部库或服务,如果这些库或服务出了问题,软件中的错误就会令人抓狂。

因此,这时您可以求助于人工智能。例如,一种情况是破译隐晦或冗长的错误信息。例如,这些信息可能是堆栈跟踪,也就是当一切都出错时程序在做什么的快照。你还可能获得各种框架和库之间交互的详细信息。

你可以将错误信息复制并粘贴到提示符中,并包含类似以下的简单内容:

  • 提示: 这是什么意思?{错误信息}

或者,假设你的代码出现了逻辑错误。程序根本做不了你想让它做的事情。在这种情况下,您可以将代码复制并粘贴到提示符中。然后加入以下内容

  • 提示: 该程序本应允许用户上传照片并将其显示在图库中。然而,当执行该程序时,照片却没有出现。这个程序有什么问题?

如果 ChatGPT 发现了问题,通常会提出解决方案。但如果没有,您可以在提示中添加此指令。

9.2 文档

文档是防止一切分崩离析的粘合剂,但遗憾的是,它通常被推到了次要位置。我们都见过这样的情况--在没有指导的情况下使用代码,就像在迷宫中徘徊一样,非常痛苦,尤其是对于新手或任何试图弄明白事情的人来说。

良好的文档有助于避免猜谜游戏,让每个人都站在同一起跑线上。Stack Overflow 的一项调查显示,68% 的开发人员每周都会遇到这些知识障碍。此外,GitHub 2021 年的报告显示,在文档中共享信息可使团队的工作效率提高 55%。

但这不仅仅是为了让开发人员的生活更轻松。良好的文档是开发过程顺利进行的支柱。它就像一张地图,告诉你该去哪里,该注意什么。如果没有文档,您往往会盲目行事,从而导致代价高昂的错误发生。

使用 ChatGPT,您可以创建任何类型的文档,例如

  • 用户手册
  • README 文件
  • API 文档
  • 常见问题
  • 故障排除指南

在为创建有效的文档编写提示时,需要注意以下一些因素:

  • 了解受众

想想谁会使用你的文档。他们是寻找快速入门指南的新手,还是需要 API 文档和代码片段等细节的技术奇才?了解读者的需求是您的内容达到目标的关键。

  • 保持简洁

没有人喜欢阅读需要解码环的专业术语或技术术语。请保持言简意赅。如果你的祖父母都不明白,你可能还没明白。

  • 坚持计划

保持文档的熟悉感。使用相同的风格、标题、字体......你说得出来的。一致性是你的朋友。这就像一首歌要有好的节奏。这样会更流畅。

  • 展示,而不仅仅是讲述

当人们看到实际行动时,他们会更快地理解事物。因此,请举出现实生活中的例子或场景。如果你的对象是程序员,一些代码示例就是金子。对于其他人来说,截图或分步演示可能会有所帮助。

  • 一张图片胜过千言万语

有时,文字并不能解决问题。使用图表、截图甚至视频来表达你的观点,尤其是在处理复杂的问题时。

  • 为什么和怎么做同样重要

不要只列出步骤。告诉您的读者为什么要这样做。

考虑到这一点,你可以使用类似下面的提示:

  • 提示: 您能建议我如何向非技术读者解释 Git 版本控制的概念吗?我需要简单明了,避免使用专业术语。另外,请解释版本控制的重要性,并建议使用任何直观图或图表。

ChatGPT 拥有强大的语言翻译功能。您当然可以在文档或任何其他内容中利用这一点。

微软正在为企业版文档开发一个名为 GitHub Copilot 的系统。它不是一般的、普通的文档挖掘工具。例如,搜索结果和回复是基于用户的编码背景和经验。它还会根据 GitHub 仓库的最新情况进行更新。它甚至还能添加私人文档。从本质上讲,这是一个高度复杂的知识库,可以极大地促进你的编码工作。

9.3 代码审查

把代码审查看作是代码在提交代码库拉取请求之前的试运行。你要确保一切运行顺畅,恰到好处,并且不会出错。

但这一过程不仅仅是为了寻找笨拙的部分或小毛病。大家围在一起,互相交流想法,互相学习,这对工作很有帮助。你会发现解决问题的不同方法,并更好地把握整个项目。

同时,代码审查可以帮助执行组织的编码风格和准则。然后是安全检查。要知道,自动化工具并不总能捕捉到一切。有时,需要人眼来发现那些狡猾的安全风险。

至于 ChatGPT,它可以成为这一过程的关键部分。下面是一个提示示例:

  • 提示: 为下面的代码写一份代码审查报告。重点关注代码的可维护性、潜在的安全问题和性能缺陷。代码

我故意给 ChatGPT 写了一个很差的函数,但 ChatGPT 的审查却做得很好。它提出了许多需要改进的地方,比如该函数最好不要使用硬编码的数据库连接。ChatGPT 还检测到了 SQL 注入的可能性,因为在 SQL 查询中直接连接了用户 ID,而且缺乏用户输入验证。然后,它还发现了 SQL 结构的性能问题。

9.3.1 单元测试

从某种程度上说,单元测试是对部分代码(例如几个函数或方法)的小型评估。开发人员通常会使用一些很酷的工具自行进行测试,如 Java 的 JUnit、.NET 的 NUnit 或 Python 的 pytest。这些工具可以帮助编写和运行测试,并告诉你测试结果。它们通常还能与你正在使用的其他软件工具配合使用。

进行单元测试很有帮助,因为它能使你的软件变得更好,减少讨厌的错误,并使以后调整和修复问题变得更容易。每个测试都只关注一件事,所以如果出了问题,你可以清楚地知道该去哪里查找。这些测试通常是自动化的,这意味着它们可以快速、频繁地运行。这对于保持一切顺利和最新非常重要。

单元测试通常很容易编写。因为它们只关注代码的一小部分,所以不会太复杂。此外,单元测试就像是软件的指南。通过查看单元测试,其他开发人员可以了解某些部分应该如何工作。如果您修改了代码,单元测试可以确保您没有弄乱之前运行正常的部分。

让我们来看一个例子。假设你创建了一个类似下面这样的小费计算器程序:

该程序有一个计算账单总额(包括小费)的函数,需要两个参数:账单金额和小费百分比。该函数将找出 total_amount 的值。

对于这样的代码,单元测试可以检查各种情况。例如,单元测试可以帮助验证函数是否能在一定范围内正确计算包括小费在内的总金额。这一点很重要,因为即使是很小的错误也会导致很大的差异。单元测试可涵盖典型情况,如标准账单金额和小费百分比,以及边缘情况,如账单金额为零或负或小费百分比异常高。单元测试还有助于确保函数能从容应对非数字或空值等异常输入。

下面是一个示例提示:

  • 提示: 针对此程序,建议进行单元测试,以正确计算总金额、检查典型情况和边缘情况,如账单金额为零、负值和高小费值。还要检查无效输入。对于单元测试,可以使用控制台日志。

如果你想使用一个测试框架,以实现更结构化和更全面的方法,你可以向 ChatGPT 询问:

提示: 使用测试框架创建单元测试。

ChatGPT 建议使用 unittest。它展示了如何设置、开发测试,并演示了如何运行单元测试。

或者,如果你已经有一个包含单元测试的文件,也可以对其进行评估。下面是一个提示

  • 提示: 下面是一个程序的单元测试文件,该程序<解释其作用或指向代码>。还有其他测试吗?这里还缺少什么?

虽然 ChatGPT 或人工智能辅助编程工具可以帮助创建这些测试,但这些工具远非万无一失。对于更高级的用例或更大的代码库,结果可能会有偏差。

David Lee 是公司创始人、高级工程师和 AWS 认证的解决方案架构师,他给出了以下建议:

然而,在处理涉及真实数据库交互和 Docker 的测试时,情况会发生显著变化。这将成为 ChatGPT 4.0 在一定程度上可能无法理解的另一个复杂级别,你可能需要先手动编写一些测试,尤其是数据库连接部分,这样它才能学会如何编写其他测试。

参考资料

  • 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
  • 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
  • python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
  • Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html

9.3.2 PULL

拉取请求,简称 PR,就像编码世界中的一张金奖券,尤其是当你与他人合作时。你将代码打包,推送到 GitHub 或 GitLab 等地方,然后发送 PR。这不仅仅是一个 "请添加我的代码 "的请求。这也是对你的队友的一种鼓励,让他们看看你做了什么,竖起大拇指,或者提出一些建议,让你的代码变得更好。这都是为了确保当你的代码加入到项目的其他部分时,它是最好的。此外,PR 也是跟踪谁在何时做了什么的一种有效方式,这对大项目肯定很有帮助。

毫无疑问,撰写一份可靠的公关描述确实能起到事半功倍的作用。你要说明你所做改动的内容、原因和方式。首先要快速概述你要解决的问题。然后深入说明你的改变是如何解决这个问题的。不要忘记加入一些细节,比如哪些文件进行了改造,或者你进行了哪些测试。如果你对某些具体问题不确定或需要其他意见,也可以提及。

有效的公关描述是审稿人的救星。它能加快整个流程,让每个人都站在同一起跑线上。此外,详细的公关描述就像是未来的信息宝库。

是的,ChatGPT 可以帮你完成这些公关描述。需要启动草稿?告诉 ChatGPT 你做了什么,它就会帮你理清思路,切中要害。如果你已经写好了描述,ChatGPT 可以检查它的清晰度和语法,并提出更好的建议。ChatGPT 还能帮你找出撰写公关稿的最佳方式,比如从摘要开始,然后再进入细枝末节。如果有技术细节需要简化,它还能帮助您让团队中的每个人都更容易理解公关内容。

让我们来看看一些有用的提示:

  • 提示: 我在应用程序中添加了一项新的搜索功能,可以根据用户输入过滤结果。你能帮我为此写一份公关描述吗?
  • 提示: 我修复了一个错误,当用户在文本字段中输入特殊字符时,应用程序会崩溃。我该如何在 PR 中对此进行描述?
  • 提示: 我重构了身份验证模块,以提高性能和可读性。在 PR 描述中应包含哪些内容?
  • 提示: 我更新了用户界面,使导航更直观,并添加了新图标。您能帮我起草一份 PR 说明吗?
  • 提示: 在公关描述中如何措辞比较好?
  • 提示: 我为付款处理模块添加了新的单元测试。您能否协助我撰写一份 PR 说明,重点介绍这些变更?
  • 提示: 我解决了因主分支最近的更改而产生的合并冲突。我应该在 PR 说明中提及哪些内容?

请记住,微软已经在 Copilot 中添加了一项创建 PR 描述的功能。它叫做 "生成的提交信息"(Generated Commit Message)。要使用该功能,你需要确保与 GitHub 上的仓库建立了连接。然后只需单击闪耀按钮,如图 。

然后,Copilot 就会写出有用的 PR 描述。

最后,还有许多初创公司正在基于 LLM 技术创建自己的系统。其中一家名为 What The Diff。据该公司的联合创始人兼首席执行官塞巴斯蒂安-施莱因(Sebastian Schlein)介绍,"What The Diff "有两个主要特点:

What The Diff 有两个主要功能:1)将拉取请求总结为通俗易懂的英语,让审核人员更容易理解 PR 中的变更概况,从而使审核工作更轻松。2)WTD 还能编写完全非技术性的摘要,并发送给其他利益相关者,如没有 GitHub 访问权限的产品经理。这样,他们就能轻松了解拉取请求中的变更是否符合他们的要求。

9.4 部署

您一直在努力开发您的软件,现在到了正式发布的时候了。这是一个激动人心的时刻。你即将看到真正的用户在使用你的软件,告诉你哪些地方很棒,哪些地方需要调整,甚至更多。这种反馈?对开发人员来说是无价之宝。

如果你从事的是软件销售业务,这就是你期待已久的时刻--现金开始滚滚而来。成功发布软件可以真正改变你的银行存款。

但实事求是地说:部署软件就像屏住呼吸,期待最好的结果。总有一种偷偷摸摸的感觉,总觉得有些事情可能不会按计划进行。

你知道在你的测试设置中,一切看起来都很完美,但在现实世界中,它们会变得有点摇摆不定吗?这可能是硬件不同、网络系统不稳定,也可能是奇怪的设置把事情搞砸了。

安全也是一个大问题。一旦开始运行,就必须提高警惕,防止坏人入侵,并遵守隐私保护规则。

此外,你的软件还必须足够强大,能够应对人群。无论有多少人加入,无论您的业务规模有多大,它都必须保持快速流畅。

还有整个CI/CD过程。这就是让部署变得流畅和自动,以避免错误。听起来不错,但要让它运行起来,并保持这种状态,还真有点费劲。

那该怎么办呢?你一定可以试试 ChatGPT。以下是一些可供参考的提示

  • 提示: 您能指导我创建一份部署清单供我的团队遵循吗?
  • 提示: 有哪些好的学习资源可以让你开始使用 Docker 进行部署?
  • 提示 能否提供网络应用程序零停机部署的最佳实践?
  • 提示: 我在部署过程中遇到了 "服务器超时 "错误。有哪些常见原因和解决方案?
  • 提示: 您能帮我编写一个 bash 脚本来自动部署我的 Python 网络应用程序吗?
  • 提示: 在生产环境中部署应用程序之前,我应该检查哪些基本配置设置?
  • 提示:如何规划回滚策略?如何规划云环境中部署失败的回滚策略?
  • 提示 部署金融应用程序时应考虑哪些安全措施?
  • 提示:如何优化金融应用程序的性能?如何优化已部署 Node.js 应用程序的性能?

虽然 ChatGPT 并不完美,但它可以帮助复杂的 DevOps。以下是 Private Market Labs 联合创始人兼首席产品官 Titus Capilnean 的一些想法:

云日志不是最容易处理的东西,尤其是我不是开发工程师,但我们必须处理它们,因为我们经常在 AWS 和 Google Cloud 上运行进程。

有一次,我不得不根据大规模函数部署的输出为 SQS + Lambda 进程设置跟踪。我的函数基本上是在日志中打印一个状态,我计划使用该状态生成该流程的报告--在我们的案例中,就是交易的活跃性。我要求 ChatGPT 提供一个 AWS CloudWatch 查询脚本,并将其调整到只需在每个流程结束时运行即可获得结果的程度。如果详细阅读文档来完成这项任务,可能需要花费 5-6 个小时,因此我选择了 GPT 路线,节省了大量时间。

同样,我必须在谷歌云中设置一些警报,我与 ChatGPT 合作创建了一个查询,排除了一些我们实际上并不负责、也不面向用户的系统级错误。这节省了我几个小时的阅读和工作时间,并为我提供了为我们团队建立有用的警报系统所需的自定义指标。

9.4.1 用户反馈

用户反馈是软件成功的关键。当你的用户看到你在关注他们的想法并根据他们的想法做出改变时,他们就更有可能继续使用你的软件,并对你笑脸相迎。更明智的做法是,在他们的帮助下尽早解决各种问题,而不是在大量用户(越来越不满意)使用您的应用程序时再去收拾烂摊子。

即使进行了所有的测试,有些错误还是会偷偷摸摸地出现,只有当软件进入现实世界时才会露出马脚。您的用户就像您的私人侦探,他们会发现那些可能被您忽略的问题。

有时,用户在使用软件时会别出心裁,以你做梦也想不到的方式使用软件。他们天马行空的想法可以点燃新功能甚至全新产品的火花。

当然,有一整套工具箱可以提升客户服务。这些工具包括 Zendesk、Freshdesk、Drift 和 Salesforce。从可让您与客户实时交谈的即时聊天工具,到可收集用户想法的反馈表单,这些工具无所不能。自动票务系统可跟踪客户问题,确保万无一失。此外,不要忘记客户关系管理(CRM)系统,它可以将所有客户互动集中在一个地方。这些工具在提供高效、快速响应的客户服务方面确实大有作为。

在此基础上,生成式人工智能无疑能带来更多价值。它尤其擅长处理用户反馈等大量非结构化数据。

例如,假设您有一个包含大量用户电子邮件、即时消息和联系表单信息的文件。然后,您可以进入 ChatGPT 并使用以下提示:

  • 提示: 确定常见主题和类别,如可用性、性能、功能、错误和客户服务。同时,对该文件进行情感分析。根据所提问题的频率和严重程度,帮助确定首先要修复哪些错误或考虑添加哪些功能的优先级。根据所有这些,创建一份包含图表的报告。

ChatGPT 的另一种帮助方式是起草回复。如果您正在处理客户反馈,它可以帮助您撰写更好的回复,例如创建常见问题的回复模板。这样,您在与用户或客户聊天时就能始终保持准确和专业。

或者,您也可以使用 ChatGPT 进行更个性化的回复。您可以剪切并粘贴用户电子邮件,然后使用这样的提示:

  • 提示: 给用户邮件写一封回复,语气要平和、善解人意。确保回复友好,并在不使情况升级的前提下缓解任何担忧。{电子邮件}

在某些情况下,你可以创建自己的基于 LLM 的应用程序来处理用户反馈。Warp 就是这样做的。该公司让开发人员花了不到一周的时间--半工半读--创建了这款应用。它是使用 OpenAI API 构建的。

"Warp 的产品经理 Noah Zweben 说:"这款应用带来了巨大的改变。"以前,很难对收到的反馈进行分类和优先排序。但生成式人工智能能够非常好地做到这一点。"

9.4.2 启动

在 ChatGPT 成为大事件的几年前,生成式人工智能已经对销售和营销等重要活动产生了影响。Jasper就是其中的开拓者。该公司的发展速度惊人。话又说回来,生成式人工智能非常适合快速生成朗朗上口的创意内容。

但是,您的软件发布并不需要 Jasper。ChatGPT 就可以。首先,你可以用它来制定一个杀手级营销计划。下面是一个提示示例:

  • 提示: 您创建了一款帮助人们计划健康膳食的应用程序。它可以根据饮食偏好、健康目标和营养需求创建定制的膳食计划。它还可以生成购物清单、提供食谱建议并跟踪营养摄入情况。为这款应用程序制定营销计划。该公司是一家处于早期阶段的创业公司,没有太多的营销预算资源。

ChatGPT 首先建议您确定目标受众。它建议主要用户是 "注重健康的个人、健身爱好者、有特殊饮食需求的人(如无麸质、素食者)、繁忙的专业人士等"。然后,它介绍了各种策略,如利用社交媒体、内容营销、社区参与、电子邮件营销和合作伙伴关系。

以下是其他一些有用的 ChatGPT 提示:

  • 提示: 为一篇宣布推出新的健康计划应用程序的博文写一篇引人入胜的介绍,突出其独特的功能和优点。
  • 提示: 撰写一系列社交媒体帖子,宣布我们的新健康计划应用程序,重点介绍其友好的用户界面以及如何帮助管理健康目标。
  • 提示: 为我们的健康计划应用程序撰写一封产品公告电子邮件,强调其跟踪和改善用户健康常规的能力。
  • 提示: 针对健身教练和健康指导员撰写一封有说服力的销售电子邮件,将我们的健康计划应用程序作为其客户的工具进行推广。
  • 提示: 为一款新的健康计划应用程序创建一个朗朗上口的相关名称列表,以传达一种健康和组织感。
  • 提示: 为 Facebook 和 Instagram 广告编写广告文案,推广我们的健康计划应用程序,突出其易用性和个性化选项。
  • 提示: 制定一个模板,要求我们的健康计划应用程序的早期用户提供推荐信,以便在营销材料中使用。
  • 提示: 为我们的健康规划应用程序的虚拟发布活动制作邀请函,详细说明议程和特邀嘉宾。

9.5 小结

本章就像一个幕后故事,讲述了软件开发中那些并不总是引人注目的事情。当然,创建新软件固然令人兴奋,但调试、测试和文档等不那么引人注目的工作才真正决定了应用程序的成败。我们已经讨论过 ChatGPT 等人工智能工具如何让这些工作变得更加顺利。这些人工智能小伙伴并不是万能的,但它们在筛选大量数据、提供建议、编写内容、发现问题和加快整个过程方面非常出色。这意味着开发人员可以专注于真正棘手的问题。通过将生成式人工智能和一些智能策略引入从解决错误到发布的每一个步骤,开发人员可以开发出更好的软件,真正满足用户的需求,而且开发速度更快。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。